diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 45c10d7b..00000000
--- a/.gitattributes
+++ /dev/null
@@ -1,8 +0,0 @@
-.gitignore export-ignore
-.gitattributes export-ignore
-.gitkeep export-ignore
-docs/speeches export-ignore
-docs/video export-ignore
-docs/src/man7 export-ignore
-bin/build-helper export-ignore
-README-maintainers export-ignore
diff --git a/.gitignore b/.gitignore
index 85a8ccc7..4258c2eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,22 +1,5 @@
# -vim
-# Swap
-[._]*.s[a-v][a-z]
-[._]*.sw[a-p]
-[._]s[a-rt-v][a-z]
-[._]ss[a-gi-z]
-[._]sw[a-p]
-
-# Session
-Session.vim
-
-# Temporary
-.netrwhist
-*~
-*.tmp
-# Auto-generated tag files
-tags
-# Persistent undo
-[._]*.un~
+.*.swp
# Ignore generated manpages
docs/src/.marker
@@ -24,29 +7,22 @@ docs/src/man1/*.1
docs/src/man7/*.7
docs/src/man7/cdist-type__*.rst
docs/src/cdist-reference.rst
-docs/src/cdist-types.rst
-docs/src/cdist.cfg.skeleton
# Ignore cdist cache for version control
/cache/
-# Ignore inventory basedir
-cdist/inventory/
-
# Python: cache, distutils, distribution in general
__pycache__/
*.pyc
-/MANIFEST
+MANIFEST
dist/
cdist/version.py
-cdist.egg-info/
# sphinx build dirs, cache
_build/
docs/dist
# Ignore temp files used for signing
-cdist-*.tar
cdist-*.tar.gz
cdist-*.tar.gz.asc
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
deleted file mode 100644
index e215652c..00000000
--- a/.gitlab-ci.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-stages:
- - test
-
-image: code.ungleich.ch:5050/ungleich-public/cdist/cdist-ci:latest
-
-unit_tests:
- stage: test
- script:
- - ./bin/build-helper version
- - ./bin/build-helper test
-
-pycodestyle:
- stage: test
- script:
- - ./bin/build-helper pycodestyle
-
-shellcheck:
- stage: test
- script:
- - ./bin/build-helper shellcheck
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 14682ad6..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
- 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.
-
- cdist
- Copyright (C) 2019 ungleich-public
-
- 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:
-
- cdist Copyright (C) 2019 ungleich-public
- 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
-.
diff --git a/Makefile b/Makefile
index f89ac1e7..417140c5 100644
--- a/Makefile
+++ b/Makefile
@@ -18,30 +18,31 @@
#
#
-.PHONY: help
-help:
- @echo "Please use \`make ' where is one of"
- @echo "man build only man user documentation"
- @echo "html build only html user documentation"
- @echo "docs build both man and html user documentation"
- @echo "dotman build man pages for types in your ~/.cdist directory"
- @echo "speeches build speeches pdf files"
- @echo "install install in the system site-packages directory"
- @echo "install-user install in the user site-packages directory"
- @echo "docs-clean clean documentation"
- @echo "clean clean"
+helper=./bin/build-helper
-DOCS_SRC_DIR=./docs/src
-SPEECHDIR=./docs/speeches
-TYPEDIR=./cdist/conf/type
+DOCS_SRC_DIR=docs/src
+SPEECHDIR=docs/speeches
+TYPEDIR=cdist/conf/type
+
+WEBSRCDIR=docs/web
+
+WEBDIR=$$HOME/vcs/www.nico.schottelius.org
+WEBBLOG=$(WEBDIR)/blog
+WEBBASE=$(WEBDIR)/software/cdist
+WEBPAGE=$(WEBBASE).mdwn
+
+CHANGELOG_VERSION=$(shell $(helper) changelog-version)
+CHANGELOG_FILE=docs/changelog
+
+PYTHON_VERSION=cdist/version.py
SPHINXM=make -C $(DOCS_SRC_DIR) man
SPHINXH=make -C $(DOCS_SRC_DIR) html
SPHINXC=make -C $(DOCS_SRC_DIR) clean
-
################################################################################
# Manpages
#
+MAN1DSTDIR=$(DOCS_SRC_DIR)/man1
MAN7DSTDIR=$(DOCS_SRC_DIR)/man7
# Manpages #1: Types
@@ -53,7 +54,6 @@ MANTYPES=$(subst /man.rst,.rst,$(MANTYPEPREFIX))
# Link manpage: do not create man.html but correct named file
$(MAN7DSTDIR)/cdist-type%.rst: $(TYPEDIR)/%/man.rst
- mkdir -p $(MAN7DSTDIR)
ln -sf "../../../$^" $@
# Manpages #2: reference
@@ -63,28 +63,11 @@ DOCSREFSH=$(DOCS_SRC_DIR)/cdist-reference.rst.sh
$(DOCSREF): $(DOCSREFSH)
$(DOCSREFSH)
-# Html types list with references
-DOCSTYPESREF=$(MAN7DSTDIR)/cdist-types.rst
-DOCSTYPESREFSH=$(DOCS_SRC_DIR)/cdist-types.rst.sh
-
-$(DOCSTYPESREF): $(DOCSTYPESREFSH)
- $(DOCSTYPESREFSH)
-
-DOCSCFGSKEL=./configuration/cdist.cfg.skeleton
-
-configskel: $(DOCSCFGSKEL)
- cp -f "$(DOCSCFGSKEL)" "$(DOCS_SRC_DIR)/"
-
-version:
- @[ -f "cdist/version.py" ] || { \
- printf "Missing 'cdist/version.py', please generate it first.\n" && exit 1; \
- }
-
# Manpages #3: generic part
-man: version $(MANTYPES) $(DOCSREF)
+man: $(MANTYPES) $(DOCSREF) $(PYTHON_VERSION)
$(SPHINXM)
-html: version configskel $(MANTYPES) $(DOCSREF) $(DOCSTYPESREF)
+html: $(MANTYPES) $(DOCSREF) $(PYTHON_VERSION)
$(SPHINXH)
docs: man html
@@ -92,6 +75,24 @@ docs: man html
docs-clean:
$(SPHINXC)
+# Manpages #5: release part
+MANWEBDIR=$(WEBBASE)/man/$(CHANGELOG_VERSION)
+HTMLBUILDDIR=docs/dist/html
+
+docs-dist: html
+ rm -rf "${MANWEBDIR}"
+ mkdir -p "${MANWEBDIR}"
+ # mkdir -p "${MANWEBDIR}/man1" "${MANWEBDIR}/man7"
+ # cp ${MAN1DSTDIR}/*.html ${MAN1DSTDIR}/*.css ${MANWEBDIR}/man1
+ # cp ${MAN7DSTDIR}/*.html ${MAN7DSTDIR}/*.css ${MANWEBDIR}/man7
+ cp -R ${HTMLBUILDDIR}/* ${MANWEBDIR}
+ cd ${MANWEBDIR} && git add . && git commit -m "cdist manpages update: $(CHANGELOG_VERSION)" || true
+
+man-latest-link: web-pub
+ # Fix ikiwiki, which does not like symlinks for pseudo security
+ ssh staticweb.ungleich.ch \
+ "cd /home/services/www/nico/nico.schottelius.org/www/software/cdist/man/ && rm -f latest && ln -sf "$(CHANGELOG_VERSION)" latest"
+
# Manpages: .cdist Types
DOT_CDIST_PATH=${HOME}/.cdist
DOTMAN7DSTDIR=$(MAN7DSTDIR)
@@ -104,7 +105,8 @@ DOTMANTYPES=$(subst /man.rst,.rst,$(DOTMANTYPEPREFIX))
$(DOTMAN7DSTDIR)/cdist-type%.rst: $(DOTTYPEDIR)/%/man.rst
ln -sf "$^" $@
-dotman: version $(DOTMANTYPES)
+# Manpages #3: generic part
+dotman: $(DOTMANTYPES)
$(SPHINXM)
################################################################################
@@ -112,6 +114,7 @@ dotman: version $(DOTMANTYPES)
#
SPEECHESOURCES=$(SPEECHDIR)/*.tex
SPEECHES=$(SPEECHESOURCES:.tex=.pdf)
+SPEECHESWEBDIR=$(WEBBASE)/speeches
# Create speeches and ensure Toc is up-to-date
$(SPEECHDIR)/%.pdf: $(SPEECHDIR)/%.tex
@@ -121,28 +124,128 @@ $(SPEECHDIR)/%.pdf: $(SPEECHDIR)/%.tex
speeches: $(SPEECHES)
+speeches-dist: speeches
+ rm -rf "${SPEECHESWEBDIR}"
+ mkdir -p "${SPEECHESWEBDIR}"
+ cp ${SPEECHES} "${SPEECHESWEBDIR}"
+ cd ${SPEECHESWEBDIR} && git add . && git commit -m "cdist speeches updated" || true
+
################################################################################
-# Misc
+# Website
#
-clean: docs-clean
+
+BLOGFILE=$(WEBBLOG)/cdist-$(CHANGELOG_VERSION)-released.mdwn
+
+$(BLOGFILE): $(CHANGELOG_FILE)
+ $(helper) blog $(CHANGELOG_VERSION) $(BLOGFILE)
+
+web-blog: $(BLOGFILE)
+
+web-doc:
+ # Go to top level, because of cdist.mdwn
+ rsync -av "$(WEBSRCDIR)/" "${WEBBASE}/.."
+ cd "${WEBBASE}/.." && git add cdist* && git commit -m "cdist doc update" cdist* || true
+
+web-dist: web-blog web-doc
+
+web-pub: web-dist docs-dist speeches-dist
+ cd "${WEBDIR}" && make pub
+
+web-release-all: man-latest-link
+web-release-all-no-latest: web-pub
+
+################################################################################
+# Release: Mailinglist
+#
+ML_FILE=.lock-ml
+
+# Only send mail once - lock until new changelog things happened
+$(ML_FILE): $(CHANGELOG_FILE)
+ $(helper) ml-release $(CHANGELOG_VERSION)
+ touch $@
+
+ml-release: $(ML_FILE)
+
+
+################################################################################
+# pypi
+#
+PYPI_FILE=.pypi-release
+$(PYPI_FILE): man $(PYTHON_VERSION)
+ python3 setup.py sdist upload
+ touch $@
+
+pypi-release: $(PYPI_FILE)
+################################################################################
+# archlinux
+#
+ARCHLINUX_FILE=.lock-archlinux
+ARCHLINUXTAR=cdist-$(CHANGELOG_VERSION)-1.src.tar.gz
+
+$(ARCHLINUXTAR): PKGBUILD
+ umask 022; mkaurball
+
+PKGBUILD: PKGBUILD.in $(PYTHON_VERSION)
+ ./PKGBUILD.in $(CHANGELOG_VERSION)
+
+$(ARCHLINUX_FILE): $(ARCHLINUXTAR) $(PYTHON_VERSION)
+ burp -c system $(ARCHLINUXTAR)
+ touch $@
+
+archlinux-release: $(ARCHLINUX_FILE)
+
+################################################################################
+# Release
+#
+
+$(PYTHON_VERSION): .git/refs/heads/master
+ $(helper) version
+
+# Code that is better handled in a shell script
+check-%:
+ $(helper) $@
+
+release:
+ $(helper) $@
+
+################################################################################
+# Cleanup
+#
+
+clean:
rm -f $(DOCS_SRC_DIR)/cdist-reference.rst
- rm -f $(DOCS_SRC_DIR)/cdist-types.rst
- rm -f $(DOCS_SRC_DIR)/cdist.cfg.skeleton
find "$(DOCS_SRC_DIR)" -mindepth 2 -type l \
| xargs rm -f
+ make -C $(DOCS_SRC_DIR) clean
+
find * -name __pycache__ | xargs rm -rf
- # distutils
- rm -rf ./build
+ # Archlinux
+ rm -f cdist-*.pkg.tar.xz cdist-*.tar.gz
+ rm -rf pkg/ src/
+
+ rm -f MANIFEST PKGBUILD
+ rm -rf dist/
+
+ # Signed release
+ rm -f cdist-*.tar.gz
+ rm -f cdist-*.tar.gz.asc
+
+distclean: clean
+ rm -f cdist/version.py
################################################################################
-# install
+# Misc
#
-install:
- python3 setup.py install
+# The pub is Nico's "push to all git remotes" way ("make pub")
+pub:
+ git push --mirror
-install-user:
- python3 setup.py install --user
+test:
+ $(helper) $@
+
+pep8:
+ $(helper) $@
diff --git a/PKGBUILD.in b/PKGBUILD.in
index c0188e68..c967249d 100755
--- a/PKGBUILD.in
+++ b/PKGBUILD.in
@@ -9,7 +9,7 @@ pkgver=$version
pkgrel=1
pkgdesc='A Usable Configuration Management System"'
arch=('any')
-url='https://www.cdi.st/'
+url='http://www.nico.schottelius.org/software/cdist/'
license=('GPL3')
depends=('python>=3.2.0')
source=("http://pypi.python.org/packages/source/c/cdist/cdist-\${pkgver}.tar.gz")
diff --git a/README b/README
index caf2dac8..a67e25e3 100644
--- a/README
+++ b/README
@@ -3,5 +3,4 @@ cdist
cdist is a usable configuration management system.
-For the web documentation have a look at https://www.cdi.st/
-or at docs/src for reStructuredText manual.
+For the web documentation have a look at docs/web/.
diff --git a/README-maintainers b/README-maintainers
deleted file mode 100644
index af57f475..00000000
--- a/README-maintainers
+++ /dev/null
@@ -1,4 +0,0 @@
-Maintainers should use ./bin/build-helper script.
-
-Makefile is intended for end users. It can be used for non-maintaining
-targets that can be run from pure source (without git repository).
diff --git a/bin/build-helper b/bin/build-helper
index ed41e438..46b139d1 100755
--- a/bin/build-helper
+++ b/bin/build-helper
@@ -1,7 +1,6 @@
#!/bin/sh
#
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
-# 2016-2019 Darko Poljak (darko.poljak at gmail.com)
#
# This file is part of cdist.
#
@@ -19,67 +18,17 @@
# along with cdist. If not, see .
#
#
-# This file contains the heavy lifting found usually in the Makefile.
+# This file contains the heavy lifting found usually in the Makefile
#
-usage() {
- printf "usage: %s TARGET [TARGET-ARGS...]
- Available targets:
- changelog-changes
- changelog-version
- check-date
- check-unittest
- ml-release
- archlinux-release
- pypi-release
- release-git-tag
- sign-git-release
- release
- test
- test-remote
- pycodestyle
- pep8
- check-pycodestyle
- shellcheck-global-explorers
- shellcheck-type-explorers
- shellcheck-manifests
- shellcheck-local-gencodes
- shellcheck-remote-gencodes
- shellcheck-scripts
- shellcheck-gencodes
- shellcheck-types
- shellcheck
- shellcheck-type-files
- shellcheck-with-files
- shellcheck-build-helper
- check-shellcheck
- version-branch
- version
- target-version
- clean
- distclean\n" "$1"
-}
+basedir=${0%/*}/../
+# Change to checkout directory
+cd "$basedir"
-basename="${0##*/}"
-
-if [ $# -lt 1 ]
-then
- usage "${basename}"
- exit 1
-fi
+version=$(git describe)
option=$1; shift
-SHELLCHECKCMD="shellcheck -s sh -f gcc -x"
-# Skip SC2154 for variables starting with __ since such variables are cdist
-# environment variables.
-SHELLCHECK_SKIP=': __.*is referenced but not assigned.*\[SC2154\]'
-SHELLCHECKTMP=".shellcheck.tmp"
-
-# Change to checkout directory
-basedir="${0%/*}/../"
-cd "$basedir"
-
case "$option" in
changelog-changes)
if [ "$#" -eq 1 ]; then
@@ -117,8 +66,8 @@ case "$option" in
date_changelog=$(grep '^[[:digit:]]' "$basedir/docs/changelog" | head -n1 | sed 's/.*: //')
if [ "$date_today" != "$date_changelog" ]; then
- printf "Date in changelog is not today\n"
- printf "Changelog date: %s\n" "${date_changelog}"
+ echo "Date in changelog is not today"
+ echo "Changelog: $date_changelog"
exit 1
fi
;;
@@ -127,17 +76,54 @@ case "$option" in
"$0" test
;;
+ blog)
+ version=$1; shift
+ blogfile=$1; shift
+ dir=${blogfile%/*}
+ file=${blogfile##*/}
+
+
+ cat << eof > "$blogfile"
+[[!meta title="Cdist $version released"]]
+
+Here's a short overview about the changes found in version ${version}:
+
+eof
+
+ $0 changelog-changes "$version" >> "$blogfile"
+
+ cat << eof >> "$blogfile"
+For more information visit the [[cdist homepage|software/cdist]].
+
+[[!tag cdist config unix]]
+eof
+ cd "$dir"
+ git add "$file"
+ # Allow git commit to fail if there are no changes
+ git commit -m "cdist blog update: $version" "$blogfile" || true
+ ;;
+
ml-release)
if [ $# -ne 1 ]; then
- printf "%s ml-release version\n" "$0" >&2
+ echo "$0 ml-release version" >&2
exit 1
fi
version=$1; shift
+ to_a=cdist
+ to_d=l.schottelius.org
+ to=${to_a}@${to_d}
+
+ from_a=nico-cdist
+ from_d=schottelius.org
+ from=${from_a}@${from_d}
+
(
cat << eof
-Subject: cdist $version has been released
+From: Nico -telmich- Schottelius <$from>
+To: cdist mailing list <$to>
+Subject: cdist $version released
Hello .*,
@@ -148,41 +134,25 @@ eof
"$0" changelog-changes "$version"
cat << eof
+Cheers,
+
+Nico
+
+--
+Automatisation at its best level. With cdist.
eof
- ) > mailinglist.tmp
+ ) | /usr/sbin/sendmail -f "$from" "$to"
;;
- archlinux-release)
- if [ $# -ne 1 ]; then
- printf "%s archlinux-release version\n" "$0" >&2
- exit 1
- fi
- version=$1; shift
-
- ARCHLINUXTAR="cdist-${version}-1.src.tar.gz"
- ./PKGBUILD.in "${version}"
- umask 022
- mkaurball
- burp -c system "${ARCHLINUXTAR}"
- ;;
-
- pypi-release)
- # Ensure that pypi release has the right version
- "$0" version
-
- make docs-clean
- make docs
- python3 setup.py sdist upload
- ;;
release-git-tag)
target_version=$($0 changelog-version)
- if git rev-parse --verify "refs/tags/${target_version}" 2>/dev/null; then
- printf "Tag for %s exists, aborting\n" "${target_version}"
+ if git rev-parse --verify refs/tags/$target_version 2>/dev/null; then
+ echo "Tag for $target_version exists, aborting"
exit 1
fi
- printf "Enter tag description for %s: " "${target_version}"
- read -r tagmessage
+ printf "Enter tag description for ${target_version}: "
+ read tagmessage
# setup for signed tags:
# gpg --fulL-gen-key
@@ -200,8 +170,7 @@ eof
# gpg --verify
# gpg --no-default-keyring --keyring --verify
# Ensure gpg-agent is running.
- GPG_TTY=$(tty)
- export GPG_TTY
+ export GPG_TTY=$(tty)
gpg-agent
git tag -s "$target_version" -m "$tagmessage"
@@ -211,14 +180,14 @@ eof
sign-git-release)
if [ $# -lt 2 ]
then
- printf "usage: %s sign-git-release TAG TOKEN [ARCHIVE]\n" "$0"
+ printf "usage: $0 sign-git-release TAG TOKEN [ARCHIVE]\n"
printf " if ARCHIVE is not specified then it is created\n"
exit 1
fi
tag="$1"
if ! git rev-parse -q --verify "${tag}" >/dev/null 2>&1
then
- printf "Tag \"%s\" not found.\n" "${tag}"
+ printf "Tag \"${tag}\" not found.\n"
exit 1
fi
token="$2"
@@ -226,53 +195,44 @@ eof
then
archivename="$3"
else
- archivename="cdist-${tag}.tar"
+ archivename="cdist-${tag}.tar.gz"
git archive --prefix="cdist-${tag}/" -o "${archivename}" "${tag}" \
|| exit 1
- # make sure target version is generated
- "$0" target-version
- tar -x -f "${archivename}" || exit 1
- cp cdist/version.py "cdist-${tag}/cdist/version.py" || exit 1
- tar -c -f "${archivename}" "cdist-${tag}/" || exit 1
- rm -r -f "cdist-${tag}/"
- gzip "${archivename}" || exit 1
- archivename="${archivename}.gz"
fi
gpg --armor --detach-sign "${archivename}" || exit 1
- project="ungleich-public%2Fcdist"
- sed_cmd='s/^.*"markdown":"\([^"]*\)".*$/\1/'
+ # make github release
+ curl -H "Authorization: token ${token}" \
+ --request POST \
+ --data "{ \"tag_name\":\"${tag}\", \
+ \"target_commitish\":\"master\", \
+ \"name\": \"${tag}\", \
+ \"body\":\"${tag}\", \
+ \"draft\":false, \
+ \"prerelease\": false}" \
+ "https://api.github.com/repos/ungleich/cdist/releases" || exit 1
- # upload archive
- response_archive=$(curl -f -X POST \
- --http1.1 \
- -H "PRIVATE-TOKEN: ${token}" \
- -F "file=@${archivename}" \
- "https://code.ungleich.ch/api/v4/projects/${project}/uploads" \
- | sed "${sed_cmd}") || exit 1
+ # get release ID
+ repoid=$(curl "https://api.github.com/repos/ungleich/cdist/releases/tags/${tag}" \
+ | python3 -c 'import json; import sys; print(json.loads(sys.stdin.read())["id"])') \
+ || exit 1
- # upload archive signature
- response_archive_sig=$(curl -f -X POST \
- --http1.1 \
- -H "PRIVATE-TOKEN: ${token}" \
- -F "file=@${archivename}.asc" \
- "https://code.ungleich.ch/api/v4/projects/${project}/uploads" \
- | sed "${sed_cmd}") || exit 1
-
- # make release
- changelog=$("$0" changelog-changes "$1" | sed 's/^[[:space:]]*//')
- release_notes=$(
- printf "%s\n\n%s\n\n**Changelog**\n\n%s\n" \
- "${response_archive}" "${response_archive_sig}" "${changelog}"
- )
- curl -f -X POST \
- -H "PRIVATE-TOKEN: ${token}" \
- -F "description=${release_notes}" \
- "https://code.ungleich.ch/api/v4/projects/${project}/repository/tags/${tag}/release" \
+ # upload archive and then signature
+ curl -H "Authorization: token ${token}" \
+ -H "Accept: application/vnd.github.manifold-preview" \
+ -H "Content-Type: application/x-gtar" \
+ --data-binary @${archivename} \
+ "https://uploads.github.com/repos/ungleich/cdist/releases/${repoid}/assets?name=${archivename}" \
+ || exit 1
+ curl -H "Authorization: token ${token}" \
+ -H "Accept: application/vnd.github.manifold-preview" \
+ -H "Content-Type: application/pgp-signature" \
+ --data-binary @${archivename}.asc \
+ "https://uploads.github.com/repos/ungleich/cdist/releases/${repoid}/assets?name=${archivename}.asc" \
|| exit 1
# remove generated files (archive and asc)
- if [ $# -eq 2 ]
+ if [ $# -eq 2]
then
rm -f "${archivename}"
fi
@@ -284,30 +244,29 @@ eof
target_version=$($0 changelog-version)
target_branch=$($0 version-branch)
- printf "Beginning release process for %s\n" "${target_version}"
+ echo "Beginning release process for $target_version"
# First check everything is sane
"$0" check-date
"$0" check-unittest
- "$0" check-pycodestyle
- "$0" check-shellcheck
+ "$0" check-pep8
# Generate version file to be included in packaging
"$0" target-version
# Ensure the git status is clean, else abort
if ! git diff-index --name-only --exit-code HEAD ; then
- printf "Unclean tree, see files above, aborting.\n"
+ echo "Unclean tree, see files above, aborting"
exit 1
fi
# Ensure we are on the master branch
masterbranch=yes
if [ "$(git rev-parse --abbrev-ref HEAD)" != "master" ]; then
- printf "Releases are happening from the master branch, aborting.\n"
+ echo "Releases are happening from the master branch, aborting"
- printf "Enter the magic word to release anyway:"
- read -r magicword
+ echo "Enter the magic word to release anyway"
+ read magicword
if [ "$magicword" = "iknowwhatido" ]; then
masterbranch=no
@@ -318,7 +277,7 @@ eof
if [ "$masterbranch" = yes ]; then
# Ensure version branch exists
- if ! git rev-parse --verify "refs/heads/${target_branch}" 2>/dev/null; then
+ if ! git rev-parse --verify refs/heads/$target_branch 2>/dev/null; then
git branch "$target_branch"
fi
@@ -336,12 +295,20 @@ eof
make docs-clean
make docs
+ # Generate speeches (indirect check if they build)
+ make speeches
+
#############################################################
# Everything green, let's do the release
# Tag the current commit
"$0" release-git-tag
+ # sign git tag
+ printf "Enter github authentication token: "
+ read token
+ "$0" sign-git-release "${target_version}" "${token}"
+
# Also merge back the version branch
if [ "$masterbranch" = yes ]; then
git checkout master
@@ -349,41 +316,41 @@ eof
fi
# Publish git changes
- # if you want to have mirror locally then uncomment this and comment below
- # git push --mirror
- git push
- # push also new branch and set up tracking
- git push -u origin "${target_branch}"
- # fi
+ make pub
+
+ # publish man, speeches, website
+ if [ "$masterbranch" = yes ]; then
+ make web-release-all
+ else
+ make web-release-all-no-latest
+ fi
+
+ # Ensure that pypi release has the right version
+ "$0" version
# Create and publish package for pypi
- "$0" pypi-release
+ make pypi-release
- # sign git tag
- printf "Enter upstream repository authentication token: "
- read -r token
- "$0" sign-git-release "${target_version}" "${token}"
+ # Archlinux release is based on pypi
+ make archlinux-release
# Announce change on ML
- "$0" ml-release "${target_version}"
+ make ml-release
cat << eof
Manual steps post release:
- - cdist-web
- - send generated mailinglist.tmp mail
+
+ - linkedin
+ - hackernews
+ - reddit
- twitter
+
eof
+
;;
test)
- if [ ! -f "cdist/version.py" ]
- then
- printf "cdist/version.py is missing, generate it first.\n"
- exit 1
- fi
-
- PYTHONPATH="$(pwd -P)"
- export PYTHONPATH
+ export PYTHONPATH="$(pwd -P)"
if [ $# -lt 1 ]; then
python3 -m cdist.test
@@ -392,31 +359,18 @@ eof
fi
;;
- test-remote)
- if [ ! -f "cdist/version.py" ]
- then
- printf "cdist/version.py is missing, generate it first.\n"
- exit 1
- fi
-
- PYTHONPATH="$(pwd -P)"
- export PYTHONPATH
-
- python3 -m cdist.test.exec.remote
+ pep8)
+ pep8 "${basedir}" "${basedir}/scripts/cdist" | less
;;
- pycodestyle|pep8)
- pycodestyle "${basedir}" "${basedir}/scripts/cdist"
- ;;
-
- check-pycodestyle)
- "$0" pycodestyle
- printf "\\nPlease review pycodestyle report.\\n"
+ check-pep8)
+ "$0" pep8
+ echo "Please review pep8 report."
while true
do
- printf "Continue (yes/no)?\n"
+ echo "Continue (yes/no)?"
any=
- read -r any
+ read any
case "$any" in
yes)
break
@@ -425,97 +379,7 @@ eof
exit 1
;;
*)
- printf "Please answer with 'yes' or 'no' explicitly.\n"
- ;;
- esac
- done
- ;;
-
- shellcheck-global-explorers)
- # shellcheck disable=SC2086
- find cdist/conf/explorer -type f -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
- test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
- ;;
-
- shellcheck-type-explorers)
- # shellcheck disable=SC2086
- find cdist/conf/type -type f -path "*/explorer/*" -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
- test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
- ;;
-
- shellcheck-manifests)
- # shellcheck disable=SC2086
- find cdist/conf/type -type f -name manifest -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
- test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
- ;;
-
- shellcheck-local-gencodes)
- # shellcheck disable=SC2086
- find cdist/conf/type -type f -name gencode-local -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
- test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
- ;;
-
- shellcheck-remote-gencodes)
- # shellcheck disable=SC2086
- find cdist/conf/type -type f -name gencode-remote -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
- test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
- ;;
-
- shellcheck-scripts)
- # shellcheck disable=SC2086
- ${SHELLCHECKCMD} scripts/cdist-dump scripts/cdist-new-type > "${SHELLCHECKTMP}"
- test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
- ;;
-
- shellcheck-gencodes)
- "$0" shellcheck-local-gencodes || exit 1
- "$0" shellcheck-remote-gencodes || exit 1
- ;;
-
- shellcheck-types)
- "$0" shellcheck-type-explorers || exit 1
- "$0" shellcheck-manifests || exit 1
- "$0" shellcheck-gencodes || exit 1
- ;;
-
- shellcheck)
- "$0" shellcheck-global-explorers || exit 1
- "$0" shellcheck-types || exit 1
- "$0" shellcheck-scripts || exit 1
- ;;
-
- shellcheck-type-files)
- # shellcheck disable=SC2086
- find cdist/conf/type -type f -path "*/files/*" -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
- test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
- ;;
-
- shellcheck-with-files)
- "$0" shellcheck || exit 1
- "$0" shellcheck-type-files || exit 1
- ;;
-
- shellcheck-build-helper)
- ${SHELLCHECKCMD} ./bin/build-helper
- ;;
-
- check-shellcheck)
- "$0" shellcheck
- printf "\\nPlease review shellcheck report.\\n"
- while true
- do
- printf "Continue (yes/no)?\n"
- any=
- read -r any
- case "$any" in
- yes)
- break
- ;;
- no)
- exit 1
- ;;
- *)
- printf "Please answer with 'yes' or 'no' explicitly.\n"
+ echo "Please answer with 'yes' or 'no' explicitly."
;;
esac
done
@@ -526,40 +390,16 @@ eof
;;
version)
- printf "VERSION = \"%s\"\n" "$(git describe)" > cdist/version.py
+ echo "VERSION = \"$(git describe)\"" > cdist/version.py
;;
target-version)
target_version=$($0 changelog-version)
- printf "VERSION = \"%s\"\n" "${target_version}" > cdist/version.py
+ echo "VERSION = \"${target_version}\"" > cdist/version.py
;;
- clean)
- make clean
-
- # Archlinux
- rm -f cdist-*.pkg.tar.xz cdist-*.tar.gz
- rm -rf pkg/ src/
-
- rm -f MANIFEST PKGBUILD
- rm -rf dist/
-
- # Signed release
- rm -f cdist-*.tar.gz
- rm -f cdist-*.tar.gz.asc
-
- # Temp files
- rm -f ./*.tmp
- rm -f ./.*.tmp
- ;;
-
- distclean)
- "$0" clean
- rm -f cdist/version.py
- ;;
*)
- printf "Unknown target: '%s'.\n" "${option}" >&2
- usage "${basename}"
+ echo "Unknown helper target $@ - aborting"
exit 1
;;
diff --git a/bin/build-helper.freebsd b/bin/build-helper.freebsd
new file mode 100755
index 00000000..183129db
--- /dev/null
+++ b/bin/build-helper.freebsd
@@ -0,0 +1,468 @@
+#!/bin/sh
+#
+# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
+# 2016 Darko Poljak (darko.poljak at gmail.com)
+#
+# This file is part of cdist.
+#
+# cdist 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.
+#
+# cdist 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 cdist. If not, see .
+#
+#
+# This file contains the heavy lifting found usually in the Makefile
+#
+
+# vars for make
+helper=$0
+
+basedir=${0%/*}/../
+# run_as is used to check how the script is called (by $0 value)
+# currently supported sufixes for $0 are:
+# .freebsd - run as freebsd
+basename=${0##*/}
+run_as=${basename#*.}
+case "$run_as" in
+ freebsd)
+ to_a=cdist-configuration-management
+ to_d=googlegroups.com
+ from_a=darko.poljak
+ from_d=gmail.com
+ ml_name="Darko Poljak"
+ ml_sig_name="Darko"
+
+ # vars for make
+ WEBDIR=../vcs/www.nico.schottelius.org
+ ;;
+ *)
+ to_a=cdist
+ to_d=l.schottelius.org
+ from_a=nico-cdist
+ from_d=schottelius.org
+ ml_name="Nico -telmich- Schottelius"
+ ml_sig_name="Nico"
+
+ # vars for make
+ WEBDIR=$$HOME/vcs/www.nico.schottelius.org
+ ;;
+esac
+
+# Change to checkout directory
+cd "$basedir"
+
+version=$(git describe)
+
+option=$1; shift
+
+case "$option" in
+ print-make-vars)
+ printf "helper: ${helper}\n"
+ printf "WEBDIR: ${WEBDIR}\n"
+ ;;
+ print-runas)
+ printf "run_as: $run_as\n"
+ ;;
+ changelog-changes)
+ if [ "$#" -eq 1 ]; then
+ start=$1
+ else
+ start="[[:digit:]]"
+ fi
+
+ end="[[:digit:]]"
+
+ awk -F: "BEGIN { start=0 }
+ {
+ if(start == 0) {
+ if (\$0 ~ /^$start/) {
+ start = 1
+ }
+ } else {
+ if (\$0 ~ /^$end/) {
+ exit
+ } else {
+ print \$0
+ }
+ }
+ }" "$basedir/docs/changelog"
+ ;;
+
+ changelog-version)
+ # get version from changelog
+ grep '^[[:digit:]]' "$basedir/docs/changelog" | head -n1 | sed 's/:.*//'
+ ;;
+
+ check-date)
+ # verify date in changelog is today
+ date_today="$(date +%Y-%m-%d)"
+ date_changelog=$(grep '^[[:digit:]]' "$basedir/docs/changelog" | head -n1 | sed 's/.*: //')
+
+ if [ "$date_today" != "$date_changelog" ]; then
+ echo "Date in changelog is not today"
+ echo "Changelog: $date_changelog"
+ exit 1
+ fi
+ ;;
+
+ check-unittest)
+ "$0" test
+ ;;
+
+ blog)
+ version=$1; shift
+ blogfile=$1; shift
+ dir=${blogfile%/*}
+ file=${blogfile##*/}
+
+
+ cat << eof > "$blogfile"
+[[!meta title="Cdist $version released"]]
+
+Here's a short overview about the changes found in version ${version}:
+
+eof
+
+ $0 changelog-changes "$version" >> "$blogfile"
+
+ cat << eof >> "$blogfile"
+For more information visit the [[cdist homepage|software/cdist]].
+
+[[!tag cdist config unix]]
+eof
+ cd "$dir"
+ git add "$file"
+ # Allow git commit to fail if there are no changes
+ git commit -m "cdist blog update: $version" "$blogfile" || true
+ ;;
+
+ ml-release)
+ if [ $# -ne 1 ]; then
+ echo "$0 ml-release version" >&2
+ exit 1
+ fi
+
+ version=$1; shift
+
+ to=${to_a}@${to_d}
+ from=${from_a}@${from_d}
+
+ (
+ cat << eof
+From: ${ml_name} <$from>
+To: cdist mailing list <$to>
+Subject: cdist $version released
+
+Hello .*,
+
+cdist $version has been released with the following changes:
+
+eof
+
+ "$0" changelog-changes "$version"
+ cat << eof
+
+Cheers,
+
+${ml_sig_name}
+
+--
+Automatisation at its best level. With cdist.
+eof
+ ) | /usr/sbin/sendmail -f "$from" "$to"
+ ;;
+
+ release-git-tag)
+ target_version=$($0 changelog-version)
+ if git rev-parse --verify refs/tags/$target_version 2>/dev/null; then
+ echo "Tag for $target_version exists, aborting"
+ exit 1
+ fi
+ printf "Enter tag description for ${target_version}: "
+ read tagmessage
+
+ # setup for signed tags:
+ # gpg --fulL-gen-key
+ # gpg --list-secret-keys --keyid-format LONG
+ # git config --local user.signingkey
+ # for exporting pub key:
+ # gpg --armor --export > pubkey.asc
+ # gpg --output pubkey.gpg --export
+ # show tag with signature
+ # git show
+ # verify tag signature
+ # git tag -v
+ #
+ # gpg verify signature
+ # gpg --verify
+ # gpg --no-default-keyring --keyring --verify
+ # Ensure gpg-agent is running.
+ export GPG_TTY=$(tty)
+ gpg-agent
+
+ git tag -s "$target_version" -m "$tagmessage"
+ git push --tags
+ ;;
+
+ sign-git-release)
+ if [ $# -lt 2 ]
+ then
+ printf "usage: $0 sign-git-release TAG TOKEN [ARCHIVE]\n"
+ printf " if ARCHIVE is not specified then it is created\n"
+ exit 1
+ fi
+ tag="$1"
+ if ! git rev-parse -q --verify "${tag}" >/dev/null 2>&1
+ then
+ printf "Tag \"${tag}\" not found.\n"
+ exit 1
+ fi
+ token="$2"
+ if [ $# -gt 2 ]
+ then
+ archivename="$3"
+ else
+ archivename="cdist-${tag}.tar.gz"
+ git archive --prefix="cdist-${tag}/" -o "${archivename}" "${tag}" \
+ || exit 1
+ fi
+ gpg --armor --detach-sign "${archivename}" || exit 1
+
+ # make github release
+ curl -H "Authorization: token ${token}" \
+ --request POST \
+ --data "{ \"tag_name\":\"${tag}\", \
+ \"target_commitish\":\"master\", \
+ \"name\": \"${tag}\", \
+ \"body\":\"${tag}\", \
+ \"draft\":false, \
+ \"prerelease\": false}" \
+ "https://api.github.com/repos/ungleich/cdist/releases" || exit 1
+
+ # get release ID
+ repoid=$(curl "https://api.github.com/repos/ungleich/cdist/releases/tags/${tag}" \
+ | python3 -c 'import json; import sys; print(json.loads(sys.stdin.read())["id"])') \
+ || exit 1
+
+ # upload archive and then signature
+ curl -H "Authorization: token ${token}" \
+ -H "Accept: application/vnd.github.manifold-preview" \
+ -H "Content-Type: application/x-gtar" \
+ --data-binary @${archivename} \
+ "https://uploads.github.com/repos/ungleich/cdist/releases/${repoid}/assets?name=${archivename}" \
+ || exit 1
+ curl -H "Authorization: token ${token}" \
+ -H "Accept: application/vnd.github.manifold-preview" \
+ -H "Content-Type: application/pgp-signature" \
+ --data-binary @${archivename}.asc \
+ "https://uploads.github.com/repos/ungleich/cdist/releases/${repoid}/assets?name=${archivename}.asc" \
+ || exit 1
+
+ # remove generated files (archive and asc)
+ if [ $# -eq 2]
+ then
+ rm -f "${archivename}"
+ fi
+ rm -f "${archivename}.asc"
+ ;;
+
+ release)
+ set -e
+ target_version=$($0 changelog-version)
+ target_branch=$($0 version-branch)
+
+ echo "Beginning release process for $target_version"
+
+ # First check everything is sane
+ "$0" check-date
+ "$0" check-unittest
+ "$0" check-pep8
+
+ # Generate version file to be included in packaging
+ "$0" target-version
+
+ # Ensure the git status is clean, else abort
+ if ! git diff-index --name-only --exit-code HEAD ; then
+ echo "Unclean tree, see files above, aborting"
+ exit 1
+ fi
+
+ # Ensure we are on the master branch
+ masterbranch=yes
+ if [ "$(git rev-parse --abbrev-ref HEAD)" != "master" ]; then
+ echo "Releases are happening from the master branch, aborting"
+
+ echo "Enter the magic word to release anyway"
+ read magicword
+
+ if [ "$magicword" = "iknowwhatido" ]; then
+ masterbranch=no
+ else
+ exit 1
+ fi
+ fi
+
+ if [ "$masterbranch" = yes ]; then
+ # Ensure version branch exists
+ if ! git rev-parse --verify refs/heads/$target_branch 2>/dev/null; then
+ git branch "$target_branch"
+ fi
+
+ # Merge master branch into version branch
+ git checkout "$target_branch"
+ git merge master
+ fi
+
+ # Verify that after the merge everything works
+ "$0" check-date
+ "$0" check-unittest
+
+ # Generate documentation (man and html)
+ # First, clean old generated docs
+ make helper=${helper} WEBDIR=${WEBDIR} docs-clean
+ make helper=${helper} WEBDIR=${WEBDIR} docs
+
+ # Generate speeches (indirect check if they build)
+ make helper=${helper} WEBDIR=${WEBDIR} speeches
+
+ #############################################################
+ # Everything green, let's do the release
+
+ # Tag the current commit
+ "$0" release-git-tag
+
+ # sign git tag
+ printf "Enter github authentication token: "
+ read token
+ "$0" sign-git-release "${target_version}" "${token}"
+
+ # Also merge back the version branch
+ if [ "$masterbranch" = yes ]; then
+ git checkout master
+ git merge "$target_branch"
+ fi
+
+ # Publish git changes
+ case "$run_as" in
+ freebsd)
+ # if we are not Nico :) then just push, no mirror
+ git push
+ # push also new branch and set up tracking
+ git push -u origin "${target_branch}"
+ ;;
+ *)
+ make helper=${helper} WEBDIR=${WEBDIR} pub
+ ;;
+ esac
+
+ # publish man, speeches, website
+ if [ "$masterbranch" = yes ]; then
+ make helper=${helper} WEBDIR=${WEBDIR} web-release-all
+ else
+ make helper=${helper} WEBDIR=${WEBDIR} web-release-all-no-latest
+ fi
+
+ # Ensure that pypi release has the right version
+ "$0" version
+
+ # Create and publish package for pypi
+ make helper=${helper} WEBDIR=${WEBDIR} pypi-release
+
+ case "$run_as" in
+ freebsd)
+ ;;
+ *)
+ # Archlinux release is based on pypi
+ make archlinux-release
+ ;;
+ esac
+
+ # Announce change on ML
+ make helper=${helper} WEBDIR=${WEBDIR} ml-release
+
+ cat << eof
+Manual steps post release:
+
+ - linkedin
+ - hackernews
+ - reddit
+ - twitter
+
+eof
+
+ case "$run_as" in
+ freebsd)
+ cat < cdist/version.py
+ ;;
+
+ target-version)
+ target_version=$($0 changelog-version)
+ echo "VERSION = \"${target_version}\"" > cdist/version.py
+ ;;
+
+ *)
+ echo "Unknown helper target $@ - aborting"
+ exit 1
+ ;;
+
+esac
diff --git a/cdist/__init__.py b/cdist/__init__.py
index c673b3ba..6ea02d41 100644
--- a/cdist/__init__.py
+++ b/cdist/__init__.py
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
#
# 2010-2015 Nico Schottelius (nico-cdist at schottelius.org)
-# 2012-2017 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@@ -21,9 +20,9 @@
#
import os
+import subprocess
import hashlib
-import cdist.log
import cdist.version
VERSION = cdist.version.VERSION
@@ -43,9 +42,8 @@ BANNER = """
"P' "" ""
"""
-REMOTE_COPY = "scp -o User=root -q"
+REMOTE_COPY = "scp -o User=root"
REMOTE_EXEC = "ssh -o User=root"
-REMOTE_CMDS_CLEANUP_PATTERN = "ssh -o User=root -O exit -S {}"
class Error(Exception):
@@ -81,159 +79,18 @@ class CdistBetaRequired(cdist.Error):
return err_msg.format(*fmt_args)
-class CdistEntityError(Error):
- """Something went wrong while executing cdist entity"""
- def __init__(self, entity_name, entity_params, stdout_paths,
- stderr_paths, subject=''):
- self.entity_name = entity_name
- self.entity_params = entity_params
- self.stderr_paths = stderr_paths
- self.stdout_paths = stdout_paths
- if isinstance(subject, Error):
- self.original_error = subject
- else:
- self.original_error = None
- self.message = str(subject)
+class CdistObjectError(Error):
+ """Something went wrong with an object"""
- def _stdpath(self, stdpaths, header_name):
- result = {}
- for name, path in stdpaths:
- if name not in result:
- result[name] = []
- try:
- if os.path.exists(path) and os.path.getsize(path) > 0:
- output = []
- label_begin = name + ":" + header_name
- output.append(label_begin)
- output.append('\n')
- output.append('-' * len(label_begin))
- output.append('\n')
- with open(path, 'r') as fd:
- output.append(fd.read())
- output.append('\n')
- result[name].append(''.join(output))
- except UnicodeError as ue:
- result[name].append(('Cannot output {}:{} due to: {}.\n'
- 'You can try to read the error file "{}"'
- ' yourself.').format(
- name, header_name, ue, path))
- return result
-
- def _stderr(self):
- return self._stdpath(self.stderr_paths, 'stderr')
-
- def _stdout(self):
- return self._stdpath(self.stdout_paths, 'stdout')
-
- def _update_dict_list(self, target, source):
- for x in source:
- if x not in target:
- target[x] = []
- target[x].extend(source[x])
-
- @property
- def std_streams(self):
- std_dict = {}
- self._update_dict_list(std_dict, self._stdout())
- self._update_dict_list(std_dict, self._stderr())
- return std_dict
+ def __init__(self, cdist_object, message):
+ self.name = cdist_object.name
+ self.source = " ".join(cdist_object.source)
+ self.message = message
def __str__(self):
- output = []
- output.append(self.message)
- output.append('\n\n')
- header = "Error processing " + self.entity_name
- under_header = '=' * len(header)
- output.append(header)
- output.append('\n')
- output.append(under_header)
- output.append('\n')
- for param_name, param_value in self.entity_params:
- output.append(param_name + ': ' + str(param_value))
- output.append('\n')
- output.append('\n')
- for x in self.std_streams:
- output.append(''.join(self.std_streams[x]))
- return ''.join(output)
-
-
-class CdistObjectError(CdistEntityError):
- """Something went wrong while working on a specific cdist object"""
- def __init__(self, cdist_object, subject=''):
- params = [
- ('name', cdist_object.name, ),
- ('path', cdist_object.absolute_path, ),
- ('source', " ".join(cdist_object.source), ),
- ('type', os.path.realpath(
- cdist_object.cdist_type.absolute_path), ),
- ]
- stderr_paths = []
- for stderr_name in os.listdir(cdist_object.stderr_path):
- stderr_path = os.path.join(cdist_object.stderr_path,
- stderr_name)
- stderr_paths.append((stderr_name, stderr_path, ))
- stdout_paths = []
- for stdout_name in os.listdir(cdist_object.stdout_path):
- stdout_path = os.path.join(cdist_object.stdout_path,
- stdout_name)
- stdout_paths.append((stdout_name, stdout_path, ))
- super().__init__("object '{}'".format(cdist_object.name),
- params, stdout_paths, stderr_paths, subject)
-
-
-class CdistObjectExplorerError(CdistEntityError):
- """
- Something went wrong while working on a specific
- cdist object explorer
- """
- def __init__(self, cdist_object, explorer_name, explorer_path,
- stderr_path, subject=''):
- params = [
- ('object name', cdist_object.name, ),
- ('object path', cdist_object.absolute_path, ),
- ('object source', " ".join(cdist_object.source), ),
- ('object type', os.path.realpath(
- cdist_object.cdist_type.absolute_path), ),
- ('explorer name', explorer_name, ),
- ('explorer path', explorer_path, ),
- ]
- stdout_paths = []
- stderr_paths = [
- ('remote', stderr_path, ),
- ]
- super().__init__("explorer '{}' of object '{}'".format(
- explorer_name, cdist_object.name), params, stdout_paths,
- stderr_paths, subject)
-
-
-class InitialManifestError(CdistEntityError):
- """Something went wrong while executing initial manifest"""
- def __init__(self, initial_manifest, stdout_path, stderr_path, subject=''):
- params = [
- ('path', initial_manifest, ),
- ]
- stdout_paths = [
- ('init', stdout_path, ),
- ]
- stderr_paths = [
- ('init', stderr_path, ),
- ]
- super().__init__('initial manifest', params, stdout_paths,
- stderr_paths, subject)
-
-
-class GlobalExplorerError(CdistEntityError):
- """Something went wrong while executing global explorer"""
- def __init__(self, name, path, stderr_path, subject=''):
- params = [
- ('name', name, ),
- ('path', path, ),
- ]
- stderr_paths = [
- ('remote', stderr_path, ),
- ]
- super().__init__("global explorer '{}'".format(name),
- params, [], stderr_paths, subject)
+ return '%s: %s (defined at %s)' % (self.name,
+ self.message,
+ self.source)
def file_to_list(filename):
@@ -257,15 +114,3 @@ def str_hash(s):
return hashlib.md5(s.encode('utf-8')).hexdigest()
else:
raise Error("Param should be string")
-
-
-def home_dir():
- if 'HOME' in os.environ:
- home = os.environ['HOME']
- if home:
- rv = os.path.join(home, ".cdist")
- else:
- rv = None
- else:
- rv = None
- return rv
diff --git a/cdist/argparse.py b/cdist/argparse.py
index 611c484a..045c12bc 100644
--- a/cdist/argparse.py
+++ b/cdist/argparse.py
@@ -1,50 +1,29 @@
import argparse
import cdist
import multiprocessing
+import os
import logging
import collections
-import functools
-import cdist.configuration
-import cdist.preos
-import cdist.info
# set of beta sub-commands
-BETA_COMMANDS = set(('install', 'inventory', ))
+BETA_COMMANDS = set(('install', ))
# set of beta arguments for sub-commands
BETA_ARGS = {
- 'config': set(('tag', 'all_tagged_hosts', 'use_archiving', )),
+ 'config': set(('jobs', )),
}
-EPILOG = "Get cdist at https://code.ungleich.ch/ungleich-public/cdist"
+EPILOG = "Get cdist at http://www.nico.schottelius.org/software/cdist/"
# Parser others can reuse
parser = None
-_verbosity_level_off = -2
_verbosity_level = {
- None: logging.WARNING,
- _verbosity_level_off: logging.OFF,
- -1: logging.ERROR,
- 0: logging.WARNING,
- 1: logging.INFO,
- 2: logging.VERBOSE,
- 3: logging.DEBUG,
- 4: logging.TRACE,
+ 0: logging.ERROR,
+ 1: logging.WARNING,
+ 2: logging.INFO,
}
-
-
-# Generate verbosity level constants:
-# VERBOSE_OFF, VERBOSE_ERROR, VERBOSE_WARNING, VERBOSE_INFO, VERBOSE_VERBOSE,
-# VERBOSE_DEBUG, VERBOSE_TRACE.
-this_globals = globals()
-for level in _verbosity_level:
- const = 'VERBOSE_' + logging.getLevelName(_verbosity_level[level])
- this_globals[const] = level
-
-
-# All verbosity levels above 4 are TRACE.
_verbosity_level = collections.defaultdict(
- lambda: logging.TRACE, _verbosity_level)
+ lambda: logging.DEBUG, _verbosity_level)
def add_beta_command(cmd):
@@ -76,15 +55,17 @@ def check_beta(args_dict):
raise cdist.CdistBetaRequired(cmd, arg)
-def check_lower_bounded_int(value, lower_bound, name):
+def check_positive_int(value):
+ import argparse
+
try:
val = int(value)
except ValueError:
raise argparse.ArgumentTypeError(
"{} is invalid int value".format(value))
- if val < lower_bound:
+ if val <= 0:
raise argparse.ArgumentTypeError(
- "{} is invalid {} value".format(val, name))
+ "{} is invalid positive int value".format(val))
return val
@@ -99,43 +80,31 @@ def get_parsers():
# Options _all_ parsers have in common
parser['loglevel'] = argparse.ArgumentParser(add_help=False)
parser['loglevel'].add_argument(
- '-l', '--log-level', metavar='LOGLEVEL',
- type=functools.partial(check_lower_bounded_int, lower_bound=-1,
- name="log level"),
- help=('Set the specified verbosity level. '
- 'The levels, in order from the lowest to the highest, are: '
- 'ERROR (-1), WARNING (0), INFO (1), VERBOSE (2), DEBUG (3), '
- 'TRACE (4 or higher). If used along with -v then -v '
- 'increases last set value and -l overwrites last set '
- 'value.'),
- action='store', dest='verbose', required=False)
- parser['loglevel'].add_argument(
- '-q', '--quiet',
- help='Quiet mode: disables logging, including WARNING and ERROR.',
+ '-d', '--debug',
+ help=('Set log level to debug (deprecated, use -vvv instead)'),
action='store_true', default=False)
parser['loglevel'].add_argument(
'-v', '--verbose',
help=('Increase the verbosity level. Every instance of -v '
'increments the verbosity level by one. Its default value '
- 'is 0 which includes ERROR and WARNING levels. '
- 'The levels, in order from the lowest to the highest, are: '
- 'ERROR (-1), WARNING (0), INFO (1), VERBOSE (2), DEBUG (3) '
- 'TRACE (4 or higher). If used along with -l then -l '
- 'overwrites last set value and -v increases last set '
- 'value.'),
- action='count', default=None)
+ 'is 0. There are 4 levels of verbosity. The order of levels '
+ 'from the lowest to the highest are: ERROR (0), '
+ 'WARNING (1), INFO (2) and DEBUG (3 or higher).'),
+ action='count', default=0)
parser['beta'] = argparse.ArgumentParser(add_help=False)
parser['beta'].add_argument(
'-b', '--beta',
- help=('Enable beta functionality. '),
- action='store_true', dest='beta', default=None)
+ help=('Enable beta functionalities. '
+ 'Can also be enabled using CDIST_BETA env var.'),
+ action='store_true', dest='beta',
+ default='CDIST_BETA' in os.environ)
# Main subcommand parser
parser['main'] = argparse.ArgumentParser(
- description='cdist ' + cdist.VERSION)
+ description='cdist ' + cdist.VERSION, parents=[parser['loglevel']])
parser['main'].add_argument(
- '-V', '--version', help='Show version.', action='version',
+ '-V', '--version', help='Show version', action='version',
version='%(prog)s ' + cdist.VERSION)
parser['sub'] = parser['main'].add_subparsers(
title="Commands", dest="command")
@@ -145,147 +114,68 @@ def get_parsers():
'banner', parents=[parser['loglevel']])
parser['banner'].set_defaults(func=cdist.banner.banner)
- parser['inventory_common'] = argparse.ArgumentParser(add_help=False)
- parser['inventory_common'].add_argument(
- '-I', '--inventory',
- help=('Use specified custom inventory directory. '
- 'Inventory directory is set up by the following rules: '
- 'if cdist configuration resolves this value then specified '
- 'directory is used, '
- 'if HOME env var is set then ~/.cdist/inventory is '
- 'used, otherwise distribution inventory directory is used.'),
- dest="inventory_dir", required=False)
-
- parser['common'] = argparse.ArgumentParser(add_help=False)
- parser['common'].add_argument(
- '-g', '--config-file',
- help=('Use specified custom configuration file.'),
- dest="config_file", required=False)
-
# Config
parser['config_main'] = argparse.ArgumentParser(add_help=False)
- parser['config_main'].add_argument(
- '-4', '--force-ipv4',
- help=('Force to use IPv4 addresses only. No influence for custom'
- ' remote commands.'),
- action='store_const', dest='force_ipv', const=4)
- parser['config_main'].add_argument(
- '-6', '--force-ipv6',
- help=('Force to use IPv6 addresses only. No influence for custom'
- ' remote commands.'),
- action='store_const', dest='force_ipv', const=6)
- parser['config_main'].add_argument(
- '-C', '--cache-path-pattern',
- help=('Specify custom cache path pattern. If '
- 'it is not set then default hostdir is used.'),
- dest='cache_path_pattern',
- default=None)
parser['config_main'].add_argument(
'-c', '--conf-dir',
help=('Add configuration directory (can be repeated, '
- 'last one wins).'), action='append')
+ 'last one wins)'), action='append')
parser['config_main'].add_argument(
'-i', '--initial-manifest',
- help='Path to a cdist manifest or \'-\' to read from stdin.',
+ help='path to a cdist manifest or \'-\' to read from stdin.',
dest='manifest', required=False)
parser['config_main'].add_argument(
'-j', '--jobs', nargs='?',
- type=functools.partial(check_lower_bounded_int, lower_bound=1,
- name="positive int"),
- help=('Operate in parallel in specified maximum number of jobs. '
- 'Global explorers, object prepare and object run are '
- 'supported. Without argument CPU count is used by default. '),
+ type=check_positive_int,
+ help=('Specify the maximum number of parallel jobs. Global'
+ 'explorers, object prepare and object run are supported'
+ '(currently in beta'),
action='store', dest='jobs',
const=multiprocessing.cpu_count())
parser['config_main'].add_argument(
'-n', '--dry-run',
- help='Do not execute code.', action='store_true')
+ help='do not execute code', action='store_true')
parser['config_main'].add_argument(
'-o', '--out-dir',
- help='Directory to save cdist output in.', dest="out_path")
- parser['config_main'].add_argument(
- '-P', '--timestamp',
- help=('Timestamp log messages with the current local date and time '
- 'in the format: YYYYMMDDHHMMSS.us.'),
- action='store_true', dest='timestamp')
- parser['config_main'].add_argument(
- '-R', '--use-archiving', nargs='?',
- choices=('tar', 'tgz', 'tbz2', 'txz',),
- help=('Operate by using archiving with compression where '
- 'appropriate. Supported values are: tar - tar archive, '
- 'tgz - gzip tar archive (the default), '
- 'tbz2 - bzip2 tar archive and txz - lzma tar archive. '
- 'Currently in beta.'),
- action='store', dest='use_archiving',
- const='tgz')
+ help='directory to save cdist output in', dest="out_path")
# remote-copy and remote-exec defaults are environment variables
# if set; if not then None - these will be futher handled after
# parsing to determine implementation default
- parser['config_main'].add_argument(
- '-r', '--remote-out-dir',
- help='Directory to save cdist output in on the target host.',
- dest="remote_out_path")
parser['config_main'].add_argument(
'--remote-copy',
- help='Command to use for remote copy (should behave like scp).',
+ help='Command to use for remote copy (should behave like scp)',
action='store', dest='remote_copy',
- default=None)
+ default=os.environ.get('CDIST_REMOTE_COPY'))
parser['config_main'].add_argument(
'--remote-exec',
help=('Command to use for remote execution '
- '(should behave like ssh).'),
+ '(should behave like ssh)'),
action='store', dest='remote_exec',
- default=None)
- parser['config_main'].add_argument(
- '-S', '--disable-saving-output-streams',
- help='Disable saving output streams.',
- action='store_false', dest='save_output_streams', default=True)
+ default=os.environ.get('CDIST_REMOTE_EXEC'))
# Config
parser['config_args'] = argparse.ArgumentParser(add_help=False)
parser['config_args'].add_argument(
- '-A', '--all-tagged',
- help=('Use all hosts present in tags db. Currently in beta.'),
- action="store_true", dest="all_tagged_hosts", default=False)
- parser['config_args'].add_argument(
- '-a', '--all',
- help=('List hosts that have all specified tags, '
- 'if -t/--tag is specified.'),
- action="store_true", dest="has_all_tags", default=False)
+ 'host', nargs='*', help='host(s) to operate on')
parser['config_args'].add_argument(
'-f', '--file',
- help=('Read specified file for a list of additional hosts to '
- 'operate on or if \'-\' is given, read stdin (one host per '
- 'line). If no host or host file is specified then, by '
- 'default, read hosts from stdin.'),
+ help=('Read additional hosts to operate on from specified file '
+ 'or from stdin if \'-\' (each host on separate line). '
+ 'If no host or host file is specified then, by default, '
+ 'read hosts from stdin.'),
dest='hostfile', required=False)
parser['config_args'].add_argument(
- '-p', '--parallel', nargs='?', metavar='HOST_MAX',
- type=functools.partial(check_lower_bounded_int, lower_bound=1,
- name="positive int"),
- help=('Operate on multiple hosts in parallel for specified maximum '
- 'hosts at a time. Without argument CPU count is used by '
- 'default.'),
- action='store', dest='parallel',
- const=multiprocessing.cpu_count())
+ '-p', '--parallel',
+ help='operate on multiple hosts in parallel',
+ action='store_true', dest='parallel')
parser['config_args'].add_argument(
'-s', '--sequential',
- help='Operate on multiple hosts sequentially (default).',
- action='store_const', dest='parallel', const=0)
- parser['config_args'].add_argument(
- '-t', '--tag',
- help=('Host is specified by tag, not hostname/address; '
- 'list all hosts that contain any of specified tags. '
- 'Currently in beta.'),
- dest='tag', required=False, action="store_true", default=False)
- parser['config_args'].add_argument(
- 'host', nargs='*', help='Host(s) to operate on.')
+ help='operate on multiple hosts sequentially (default)',
+ action='store_false', dest='parallel')
parser['config'] = parser['sub'].add_parser(
'config', parents=[parser['loglevel'], parser['beta'],
- parser['common'],
parser['config_main'],
- parser['inventory_common'],
parser['config_args']])
parser['config'].set_defaults(func=cdist.config.Config.commandline)
@@ -294,140 +184,6 @@ def get_parsers():
parents=[parser['config']])
parser['install'].set_defaults(func=cdist.install.Install.commandline)
- # Inventory
- parser['inventory'] = parser['sub'].add_parser('inventory')
- parser['invsub'] = parser['inventory'].add_subparsers(
- title="Inventory commands", dest="subcommand")
-
- parser['add-host'] = parser['invsub'].add_parser(
- 'add-host', parents=[parser['loglevel'], parser['beta'],
- parser['common'],
- parser['inventory_common']])
- parser['add-host'].add_argument(
- 'host', nargs='*', help='Host(s) to add.')
- parser['add-host'].add_argument(
- '-f', '--file',
- help=('Read additional hosts to add from specified file '
- 'or from stdin if \'-\' (each host on separate line). '
- 'If no host or host file is specified then, by default, '
- 'read from stdin.'),
- dest='hostfile', required=False)
-
- parser['add-tag'] = parser['invsub'].add_parser(
- 'add-tag', parents=[parser['loglevel'], parser['beta'],
- parser['common'],
- parser['inventory_common']])
- parser['add-tag'].add_argument(
- 'host', nargs='*',
- help='List of host(s) for which tags are added.')
- parser['add-tag'].add_argument(
- '-f', '--file',
- help=('Read additional hosts to add tags from specified file '
- 'or from stdin if \'-\' (each host on separate line). '
- 'If no host or host file is specified then, by default, '
- 'read from stdin. If no tags/tagfile nor hosts/hostfile'
- ' are specified then tags are read from stdin and are'
- ' added to all hosts.'),
- dest='hostfile', required=False)
- parser['add-tag'].add_argument(
- '-T', '--tag-file',
- help=('Read additional tags to add from specified file '
- 'or from stdin if \'-\' (each tag on separate line). '
- 'If no tag or tag file is specified then, by default, '
- 'read from stdin. If no tags/tagfile nor hosts/hostfile'
- ' are specified then tags are read from stdin and are'
- ' added to all hosts.'),
- dest='tagfile', required=False)
- parser['add-tag'].add_argument(
- '-t', '--taglist',
- help=("Tag list to be added for specified host(s), comma separated"
- " values."),
- dest="taglist", required=False)
-
- parser['del-host'] = parser['invsub'].add_parser(
- 'del-host', parents=[parser['loglevel'], parser['beta'],
- parser['common'],
- parser['inventory_common']])
- parser['del-host'].add_argument(
- 'host', nargs='*', help='Host(s) to delete.')
- parser['del-host'].add_argument(
- '-a', '--all', help=('Delete all hosts.'),
- dest='all', required=False, action="store_true", default=False)
- parser['del-host'].add_argument(
- '-f', '--file',
- help=('Read additional hosts to delete from specified file '
- 'or from stdin if \'-\' (each host on separate line). '
- 'If no host or host file is specified then, by default, '
- 'read from stdin.'),
- dest='hostfile', required=False)
-
- parser['del-tag'] = parser['invsub'].add_parser(
- 'del-tag', parents=[parser['loglevel'], parser['beta'],
- parser['common'],
- parser['inventory_common']])
- parser['del-tag'].add_argument(
- 'host', nargs='*',
- help='List of host(s) for which tags are deleted.')
- parser['del-tag'].add_argument(
- '-a', '--all',
- help=('Delete all tags for specified host(s).'),
- dest='all', required=False, action="store_true", default=False)
- parser['del-tag'].add_argument(
- '-f', '--file',
- help=('Read additional hosts to delete tags for from specified '
- 'file or from stdin if \'-\' (each host on separate line). '
- 'If no host or host file is specified then, by default, '
- 'read from stdin. If no tags/tagfile nor hosts/hostfile'
- ' are specified then tags are read from stdin and are'
- ' deleted from all hosts.'),
- dest='hostfile', required=False)
- parser['del-tag'].add_argument(
- '-T', '--tag-file',
- help=('Read additional tags from specified file '
- 'or from stdin if \'-\' (each tag on separate line). '
- 'If no tag or tag file is specified then, by default, '
- 'read from stdin. If no tags/tagfile nor'
- ' hosts/hostfile are specified then tags are read from'
- ' stdin and are added to all hosts.'),
- dest='tagfile', required=False)
- parser['del-tag'].add_argument(
- '-t', '--taglist',
- help=("Tag list to be deleted for specified host(s), "
- "comma separated values."),
- dest="taglist", required=False)
-
- parser['list'] = parser['invsub'].add_parser(
- 'list', parents=[parser['loglevel'], parser['beta'],
- parser['common'],
- parser['inventory_common']])
- parser['list'].add_argument(
- 'host', nargs='*', help='Host(s) to list.')
- parser['list'].add_argument(
- '-a', '--all',
- help=('List hosts that have all specified tags, '
- 'if -t/--tag is specified.'),
- action="store_true", dest="has_all_tags", default=False)
- parser['list'].add_argument(
- '-f', '--file',
- help=('Read additional hosts to list from specified file '
- 'or from stdin if \'-\' (each host on separate line). '
- 'If no host or host file is specified then, by default, '
- 'list all.'), dest='hostfile', required=False)
- parser['list'].add_argument(
- '-H', '--host-only', help=('Suppress tags listing.'),
- action="store_true", dest="list_only_host", default=False)
- parser['list'].add_argument(
- '-t', '--tag',
- help=('Host is specified by tag, not hostname/address; '
- 'list all hosts that contain any of specified tags.'),
- action="store_true", default=False)
-
- parser['inventory'].set_defaults(
- func=cdist.inventory.Inventory.commandline)
-
- # PreOS
- parser['preos'] = parser['sub'].add_parser('preos', add_help=False)
-
# Shell
parser['shell'] = parser['sub'].add_parser(
'shell', parents=[parser['loglevel']])
@@ -437,37 +193,6 @@ def get_parsers():
' should be POSIX compatible shell.'))
parser['shell'].set_defaults(func=cdist.shell.Shell.commandline)
- # Info
- parser['info'] = parser['sub'].add_parser('info')
- parser['info'].add_argument(
- '-a', '--all', help='Display all info. This is the default.',
- action='store_true', default=False)
- parser['info'].add_argument(
- '-c', '--conf-dir',
- help='Add configuration directory (can be repeated).',
- action='append')
- parser['info'].add_argument(
- '-e', '--global-explorers',
- help='Display info for global explorers.', action='store_true',
- default=False)
- parser['info'].add_argument(
- '-F', '--fixed-string',
- help='Interpret pattern as a fixed string.', action='store_true',
- default=False)
- parser['info'].add_argument(
- '-f', '--full', help='Display full details.',
- action='store_true', default=False)
- parser['info'].add_argument(
- '-g', '--config-file',
- help='Use specified custom configuration file.',
- dest="config_file", required=False)
- parser['info'].add_argument(
- '-t', '--types', help='Display info for types.',
- action='store_true', default=False)
- parser['info'].add_argument(
- 'pattern', nargs='?', help='Glob pattern.')
- parser['info'].set_defaults(func=cdist.info.Info.commandline)
-
for p in parser:
parser[p].epilog = EPILOG
@@ -475,31 +200,12 @@ def get_parsers():
def handle_loglevel(args):
- if hasattr(args, 'quiet') and args.quiet:
- args.verbose = _verbosity_level_off
+ if args.debug:
+ retval = "-d/--debug is deprecated, use -vvv instead"
+ args.verbose = 3
+ else:
+ retval = None
logging.root.setLevel(_verbosity_level[args.verbose])
-
-def parse_and_configure(argv, singleton=True):
- parser = get_parsers()
- parser_args = parser['main'].parse_args(argv)
- try:
- cfg = cdist.configuration.Configuration(parser_args,
- singleton=singleton)
- args = cfg.get_args()
- except ValueError as e:
- raise cdist.Error(str(e))
- # Loglevels are handled globally in here
- handle_loglevel(args)
-
- log = logging.getLogger("cdist")
-
- log.verbose("version %s" % cdist.VERSION)
- log.trace('command line args: {}'.format(cfg.command_line_args))
- log.trace('configuration: {}'.format(cfg.get_config()))
- log.trace('configured args: {}'.format(args))
-
- check_beta(vars(args))
-
- return parser, cfg
+ return retval
diff --git a/cdist/autil.py b/cdist/autil.py
deleted file mode 100644
index d16d147e..00000000
--- a/cdist/autil.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# 2017 Darko Poljak (darko.poljak at gmail.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-
-
-import cdist
-import tarfile
-import os
-import glob
-import tempfile
-
-
-_ARCHIVING_MODES = {
- 'tar': '',
- 'tgz': 'gz',
- 'tbz2': 'bz2',
- 'txz': 'xz',
-}
-
-
-_UNARCHIVE_OPT = {
- 'tar': None,
- 'tgz': '-z',
- 'tbz2': '-j',
- 'txz': '-J',
-}
-
-
-# Archiving will be enabled if directory contains more than FILES_LIMIT files.
-FILES_LIMIT = 1
-
-
-def get_extract_option(mode):
- return _UNARCHIVE_OPT[mode]
-
-
-def tar(source, mode="tgz"):
- if mode not in _ARCHIVING_MODES:
- raise cdist.Error("Unsupported archiving mode {}.".format(mode))
-
- files = glob.glob1(source, '*')
- fcnt = len(files)
- if fcnt <= FILES_LIMIT:
- return None, fcnt
-
- tarmode = 'w:{}'.format(_ARCHIVING_MODES[mode])
- _, tarpath = tempfile.mkstemp(suffix='.' + mode)
- with tarfile.open(tarpath, tarmode, dereference=True) as tar:
- if os.path.isdir(source):
- for f in files:
- tar.add(os.path.join(source, f), arcname=f)
- else:
- tar.add(source)
- return tarpath, fcnt
diff --git a/cdist/banner.py b/cdist/banner.py
index da4dea5d..edfa72e8 100644
--- a/cdist/banner.py
+++ b/cdist/banner.py
@@ -20,6 +20,8 @@
#
import logging
+import sys
+
import cdist
log = logging.getLogger(__name__)
diff --git a/cdist/conf/explorer/cpu_cores b/cdist/conf/explorer/cpu_cores
index a52bddac..7f7a955e 100755
--- a/cdist/conf/explorer/cpu_cores
+++ b/cdist/conf/explorer/cpu_cores
@@ -25,17 +25,13 @@
os=$("$__explorer/os")
case "$os" in
"macosx")
- sysctl -n hw.physicalcpu
- ;;
-
- "openbsd")
- sysctl -n hw.ncpuonline
+ echo "$(sysctl -n hw.physicalcpu)"
;;
*)
if [ -r /proc/cpuinfo ]; then
cores="$(grep "core id" /proc/cpuinfo | sort | uniq | wc -l)"
- if [ "${cores}" -eq 0 ]; then
+ if [ ${cores} -eq 0 ]; then
cores="1"
fi
echo "$cores"
diff --git a/cdist/conf/explorer/cpu_sockets b/cdist/conf/explorer/cpu_sockets
index a32e2f00..8a8194df 100755
--- a/cdist/conf/explorer/cpu_sockets
+++ b/cdist/conf/explorer/cpu_sockets
@@ -25,14 +25,14 @@
os=$("$__explorer/os")
case "$os" in
"macosx")
- system_profiler SPHardwareDataType | grep "Number of Processors" | awk -F': ' '{print $2}'
+ echo "$(system_profiler SPHardwareDataType | grep "Number of Processors" | awk -F': ' '{print $2}')"
;;
*)
if [ -r /proc/cpuinfo ]; then
- sockets="$(grep "physical id" /proc/cpuinfo | sort -u | wc -l)"
- if [ "${sockets}" -eq 0 ]; then
- sockets="$(grep -c "processor" /proc/cpuinfo)"
+ sockets="$(grep "physical id" /proc/cpuinfo | sort | uniq | wc -l)"
+ if [ ${sockets} -eq 0 ]; then
+ sockets="$(cat /proc/cpuinfo | grep "processor" | wc -l)"
fi
echo "${sockets}"
fi
diff --git a/cdist/conf/explorer/disks b/cdist/conf/explorer/disks
old mode 100755
new mode 100644
index 24540601..52fef81e
--- a/cdist/conf/explorer/disks
+++ b/cdist/conf/explorer/disks
@@ -1,67 +1,2 @@
-#!/bin/sh -e
-#
-# based on previous work by other people, modified by:
-# 2020 Dennis Camera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-# Finds disks of the system (excl. ram disks, floppy, cdrom)
-
-uname_s="$(uname -s)"
-
-case $uname_s in
- FreeBSD)
- sysctl -n kern.disks
- ;;
- OpenBSD)
- sysctl -n hw.disknames | grep -Eo '[lsw]d[0-9]+'
- ;;
- NetBSD)
- PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin"
- sysctl -n hw.disknames \
- | awk 'BEGIN { RS = " " } /^[lsw]d[0-9]+/'
- ;;
- Linux)
- # list of major device numbers toexclude:
- # ram disks, floppies, cdroms
- # https://www.kernel.org/doc/Documentation/admin-guide/devices.txt
- ign_majors='1 2 11'
-
- if command -v lsblk >/dev/null 2>&1
- then
- lsblk -e "$(echo "$ign_majors" | tr ' ' ',')" -dno name
- elif test -d /sys/block/
- then
- # shellcheck disable=SC2012
- ls -1 /sys/block/ \
- | awk -v ign_majors="$(echo "$ign_majors" | tr ' ' '|')" '
- {
- devfile = "/sys/block/" $0 "/dev"
- getline devno < devfile
- close(devfile)
- if (devno !~ "^(" ign_majors "):") print
- }'
- else
- echo "Don't know how to list disks on Linux without lsblk and sysfs." >&2
- echo 'If you can, please submit a patch.'>&2
- fi
- ;;
- *)
- printf "Don't know how to list disks for %s operating system.\n" "${uname_s}" >&2
- printf 'If you can please submit a patch\n' >&2
- ;;
-esac \
-| xargs
+cd /dev
+echo sd? hd? vd?
diff --git a/cdist/conf/explorer/hostname b/cdist/conf/explorer/hostname
index dca004d1..7715c6b0 100755
--- a/cdist/conf/explorer/hostname
+++ b/cdist/conf/explorer/hostname
@@ -1,6 +1,7 @@
#!/bin/sh
#
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
+# 2010-2014 Nico Schottelius (nico-cdist at schottelius.org)
+# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@@ -18,12 +19,7 @@
# along with cdist. If not, see .
#
#
-# Retrieve the running hostname
-#
-if command -v hostname >/dev/null
-then
- hostname
-else
- uname -n
+if command -v uname >/dev/null; then
+ uname -n
fi
diff --git a/cdist/conf/explorer/init b/cdist/conf/explorer/init
index f27c77ef..2693a0d3 100755
--- a/cdist/conf/explorer/init
+++ b/cdist/conf/explorer/init
@@ -1,8 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Daniel Heule (hda at sfs.biz)
-# Copyright 2017, Philippe Gregoire
-# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -20,423 +18,18 @@
# along with cdist. If not, see .
#
#
-# Returns the name of the init system (PID 1)
-
-# Expected values:
-# Linux:
-# Adélie Linux:
-# sysvinit+openrc
-# Alpine Linux:
-# busybox-init+openrc
-# ArchLinux:
-# systemd, sysvinit
-# CRUX:
-# sysvinit
-# Debian:
-# systemd, upstart, sysvinit, openrc, ???
-# Devuan:
-# sysvinit, sysvinit+openrc
-# Gentoo:
-# sysvinit+openrc, openrc-init, systemd
-# OpenBMC:
-# systemd
-# OpenWrt:
-# procd, init???
-# RedHat (RHEL, CentOS, Fedora, RedHat Linux, ...):
-# systemd, upstart, upstart-legacy, sysvinit
-# Slackware:
-# sysvinit
-# SuSE:
-# systemd, sysvinit
-# Ubuntu:
-# systemd, upstart, upstart-legacy, sysvinit
-# VoidLinux:
-# runit
+# Returns the process name of pid 1 ( normaly the init system )
+# for example at linux this value is "init" or "systemd" in most cases
#
-# GNU:
-# Debian:
-# sysvinit, hurd-init
-#
-# BSD:
-# {Free,Open,Net}BSD:
-# init
-#
-# Mac OS X:
-# launchd, init+SystemStarter
-#
-# Solaris/Illumos:
-# smf, init???
-# NOTE: init systems can be stacked. This is popular to run OpenRC on top of
-# sysvinit (Gentoo) or busybox-init (Alpine), but can also be used to run runit
-# as a systemd service. This makes init system detection very complicated
-# (which result is expected?) This script tries to untangle some combinations,
-# OpenRC on top of sysv or busybox (X+openrc), but will ignore others (runit as
-# a systemd service)
+uname_s="$(uname -s)"
-# NOTE: When we have no idea, nothing will be printed!
-
-# NOTE:
-# When trying to gather information about the init system make sure to do so
-# without calling the binary! On some systems this triggers a reinitialisation
-# of the system which we don't want (e.g. embedded systems).
-
-
-set -e
-
-KERNEL_NAME=$(uname -s)
-
-KNOWN_INIT_SYSTEMS=$(cat </dev/null 2>&1 || return 1
- launchctl getenv PATH >/dev/null || return 1
- echo launchd
-}
-
-check_openrc() {
- test -f /run/openrc/softlevel || return 1
- echo openrc
-}
-
-check_procd() (
- procd_path=${1:-/sbin/procd}
- test -x "${procd_path}" || return 1
- grep -q 'procd' "${procd_path}" || return 1
- echo procd
-)
-
-check_runit() {
- test -d /run/runit || return 1
- echo runit
-}
-
-check_smf() {
- # XXX: Is this the correct way??
- test -f /etc/svc/volatile/svc_nonpersist.db || return 1
- echo smf
-}
-
-check_systemd() {
- # NOTE: sd_booted(3)
- test -d /run/systemd/system/ || return 1
- # systemctl --version | sed -e '/^systemd/!d;s/^systemd //'
- echo systemd
-}
-
-check_systemstarter() {
- test -d /System/Library/StartupItems/ || return 1
- test -f /System/Library/StartupItems/LoginWindow/StartupParameters.plist || return 1
- echo init+SystemStarter
-}
-
-check_sysvinit() (
- init_path=${1:-/sbin/init}
- test -x "${init_path}" || return 1
- grep -q 'INIT_VERSION=sysvinit-[0-9.]*' "${init_path}" || return 1
-
- # It is quite common to use SysVinit to stack other init systemd
- # (like OpenRC) on top of it. So we check for that, too.
- if stacked=$(check_openrc)
- then
- echo "sysvinit+${stacked}"
- else
- echo sysvinit
- fi
- unset stacked
-)
-
-check_upstart() {
- test -x "$(command -v initctl)" || return 1
- case $(initctl version)
- in
- *'(upstart '*')')
- if test -d /etc/init
- then
- # modern (DBus-based?) upstart >= 0.5
- echo upstart
- elif test -d /etc/event.d
- then
- # ancient upstart
- echo upstart-legacy
- else
- # whatever...
- echo upstart
- fi
- ;;
- *)
- return 1
- ;;
- esac
-}
-
-find_init_procfs() (
- # First, check if the required file in procfs exists...
- test -h /proc/1/exe || return 1
-
- # Find init executable
- init_exe=$(ls -l /proc/1/exe 2>/dev/null) || return 1
- init_exe=${init_exe#* -> }
-
- if ! test -x "$init_exe"
- then
- # On some rare occasions it can happen that the
- # running init's binary has been replaced. In this
- # case Linux adjusts the symlink to "X (deleted)"
-
- # [root@fedora-12 ~]# readlink /proc/1/exe
- # /sbin/init (deleted)
- # [root@fedora-12 ~]# ls -l /proc/1/exe
- # lrwxrwxrwx. 1 root root 0 2020-01-30 23:00 /proc/1/exe -> /sbin/init (deleted)
-
- init_exe=${init_exe% (deleted)}
- test -x "$init_exe" || return 1
- fi
-
- echo "${init_exe}"
-)
-
-guess_by_path() {
- case $1
- in
- /bin/busybox)
- check_busybox_init "$1" && return
- ;;
- /lib/systemd/systemd)
- check_systemd "$1" && return
- ;;
- /hurd/init)
- check_hurd_init "$1" && return
- ;;
- /sbin/launchd)
- check_launchd "$1" && return
- ;;
- /usr/bin/runit|/sbin/runit)
- check_runit "$1" && return
- ;;
- /sbin/openrc-init)
- if check_openrc "$1" >/dev/null
- then
- echo openrc-init
- return
- fi
- ;;
- /sbin/procd)
- check_procd "$1" && return
- ;;
- /sbin/init|*/init)
- # init: it could be anything -> (explicit) no match
- return 1
- ;;
- esac
-
- # No match
- return 1
-}
-
-guess_by_comm_name() {
- case $1
- in
- busybox)
- check_busybox_init && return
- ;;
- openrc-init)
- if check_openrc >/dev/null
- then
- echo openrc-init
- return 0
- fi
- ;;
- init)
- # init could be anything -> no match
- return 1
- ;;
- *)
- # Run check function by comm name if available.
- # Fall back to comm name if either it does not exist or
- # returns non-zero.
- if type "check_$1" >/dev/null
- then
- "check_$1" && return
- else
- echo "$1" ; return 0
- fi
- esac
-
- return 1
-}
-
-check_list() (
- # List must be a multi-line input on stdin (one name per line)
- while read -r init
- do
- "check_${init}" || continue
- return 0
- done
- return 1
-)
-
-
-# BusyBox's versions of ps and pgrep do not support some options
-# depending on which compile-time options have been used.
-
-find_init_pgrep() {
- pgrep -P0 -fl 2>/dev/null | awk -F '[[:blank:]]' '$1 == 1 { print $2 }'
-}
-
-find_init_ps() {
- case $KERNEL_NAME
- in
- Darwin)
- ps -o command -p 1 2>/dev/null | tail -n +2
- ;;
- FreeBSD)
- ps -o args= -p 1 2>/dev/null | cut -d ' ' -f 1
- ;;
- Linux)
- ps -o comm= -p 1 2>/dev/null
- ;;
- NetBSD)
- ps -o comm= -p 1 2>/dev/null
- ;;
- OpenBSD)
- ps -o args -p 1 2>/dev/null | tail -n +2 | cut -d ' ' -f 1
- ;;
- *)
- ps -o args= -p 1 2>/dev/null
- ;;
- esac | trim # trim trailing whitespace (some ps like Darwin add it)
-}
-
-find_init() {
- case $KERNEL_NAME
- in
- Linux|GNU|NetBSD)
- find_init_procfs || find_init_pgrep || find_init_ps
- ;;
- FreeBSD)
- find_init_procfs || find_init_ps
- ;;
- OpenBSD)
- find_init_pgrep || find_init_ps
- ;;
- Darwin|SunOS)
- find_init_ps
- ;;
- *)
- echo "Don't know how to determine init." >&2
- echo 'Please send a patch.' >&2
- exit 1
- esac
-}
-
-# -----
-
-init=$(find_init)
-
-# If we got a path, guess by the path first (fall back to file name if no match)
-# else guess by file name directly.
-# shellcheck disable=SC2015
-{
- test -x "${init}" \
- && guess_by_path "${init}" \
- || guess_by_comm_name "$(basename "${init}")"
-} && exit 0 || true
-
-
-# Guessing based on the file path and name didn’t lead to a definitive result.
-#
-# We go through all of the checks until we find a match. To speed up the
-# process, common cases will be checked first based on the underlying kernel.
-
-{ common_candidates_by_kernel; echo "${KNOWN_INIT_SYSTEMS}"; } \
- | unique | check_list
+case "$uname_s" in
+ Linux|FreeBSD)
+ ps -o comm= -p 1 || true
+ ;;
+ *)
+ # return a empty string as unknown value
+ echo ""
+ ;;
+esac
diff --git a/cdist/conf/explorer/interfaces b/cdist/conf/explorer/interfaces
index aeb55ed0..c1f2a57a 100755
--- a/cdist/conf/explorer/interfaces
+++ b/cdist/conf/explorer/interfaces
@@ -1,6 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2019 Ander Punnar (ander-at-kvlt-dot-ee)
+# 2012 Sébastien Gross
#
# This file is part of cdist.
#
@@ -17,12 +17,35 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
#
+#
+# List all network interfaces in explorer/ifaces. One interface per line.
+#
+# If your OS is not supported please provide a ifconfig output
+#
-if command -v ip >/dev/null
-then
- ip -o link show | sed -n 's/^[0-9]\+: \(.\+\): <.*/\1/p'
-elif command -v ifconfig >/dev/null
-then
- ifconfig -a | sed -n -E 's/^(.*)(:[[:space:]]*flags=|Link encap).*/\1/p'
-fi \
- | sort -u
+# Use ip, if available
+if command -v ip >/dev/null; then
+ ip -o link show | sed -n 's/^[0-9]\+: \(.\+\): <.*/\1/p'
+ exit 0
+fi
+
+if ! command -v ifconfig >/dev/null; then
+ # no ifconfig, nothing we could do
+ exit 0
+fi
+
+uname_s="$(uname -s)"
+REGEXP='s/^(.*)(:[[:space:]]*flags=|Link encap).*/\1/p'
+
+case "$uname_s" in
+ Darwin)
+ ifconfig -a | sed -n -E "$REGEXP"
+ ;;
+ Linux|*BSD)
+ ifconfig -a | sed -n -r "$REGEXP"
+ ;;
+ *)
+ echo "Unsupported ifconfig output for $uname_s" >&2
+ exit 1
+ ;;
+esac
diff --git a/cdist/conf/explorer/is-freebsd-jail b/cdist/conf/explorer/is-freebsd-jail
deleted file mode 100755
index 010917f5..00000000
--- a/cdist/conf/explorer/is-freebsd-jail
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-sysctl -n security.jail.jailed 2>/dev/null | grep "1" || true
diff --git a/cdist/conf/explorer/kernel_name b/cdist/conf/explorer/kernel_name
old mode 100755
new mode 100644
index 1f9cfca4..98ebac2a
--- a/cdist/conf/explorer/kernel_name
+++ b/cdist/conf/explorer/kernel_name
@@ -1,2 +1 @@
-#!/bin/sh
uname -s
diff --git a/cdist/conf/explorer/lsb_codename b/cdist/conf/explorer/lsb_codename
index 26bb8e3d..eebd3e0f 100755
--- a/cdist/conf/explorer/lsb_codename
+++ b/cdist/conf/explorer/lsb_codename
@@ -20,9 +20,8 @@
#
set +e
-case "$("$__explorer/os")" in
+case "$($__explorer/os)" in
openwrt)
- # shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_CODENAME")
;;
*)
diff --git a/cdist/conf/explorer/lsb_description b/cdist/conf/explorer/lsb_description
index b1009627..23f45421 100755
--- a/cdist/conf/explorer/lsb_description
+++ b/cdist/conf/explorer/lsb_description
@@ -20,9 +20,8 @@
#
set +e
-case "$("$__explorer/os")" in
+case "$($__explorer/os)" in
openwrt)
- # shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_DESCRIPTION")
;;
*)
diff --git a/cdist/conf/explorer/lsb_id b/cdist/conf/explorer/lsb_id
index 82ff9977..9754eb63 100755
--- a/cdist/conf/explorer/lsb_id
+++ b/cdist/conf/explorer/lsb_id
@@ -20,9 +20,8 @@
#
set +e
-case "$("$__explorer/os")" in
+case "$($__explorer/os)" in
openwrt)
- # shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_ID")
;;
*)
diff --git a/cdist/conf/explorer/lsb_release b/cdist/conf/explorer/lsb_release
index 5ebfff1a..35b5547c 100755
--- a/cdist/conf/explorer/lsb_release
+++ b/cdist/conf/explorer/lsb_release
@@ -20,9 +20,8 @@
#
set +e
-case "$("$__explorer/os")" in
+case "$($__explorer/os)" in
openwrt)
- # shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_RELEASE")
;;
*)
diff --git a/cdist/conf/explorer/machine b/cdist/conf/explorer/machine
index 7ecb67e3..d4a0e106 100755
--- a/cdist/conf/explorer/machine
+++ b/cdist/conf/explorer/machine
@@ -22,6 +22,6 @@
#
#
-if command -v uname >/dev/null 2>&1 ; then
+if command -v uname 2>&1 >/dev/null; then
uname -m
fi
diff --git a/cdist/conf/explorer/machine_type b/cdist/conf/explorer/machine_type
index bb21f69c..eb3c9d36 100755
--- a/cdist/conf/explorer/machine_type
+++ b/cdist/conf/explorer/machine_type
@@ -22,13 +22,13 @@
# FIXME: other system types (not linux ...)
-if [ -d "/proc/vz" ] && [ ! -d "/proc/bc" ]; then
+if [ -d "/proc/vz" -a ! -d "/proc/bc" ]; then
echo openvz
exit
fi
if [ -e "/proc/1/environ" ] &&
- tr '\000' '\n' < "/proc/1/environ" | grep -Eiq '^container='; then
+ cat "/proc/1/environ" | tr '\000' '\n' | grep -Eiq '^container='; then
echo lxc
exit
fi
@@ -56,20 +56,6 @@ if [ -r /proc/cpuinfo ]; then
exit
fi
fi
-
- if [ -r /sys/class/dmi/id/sys_vendor ]; then
- if grep -q -i 'qemu' /sys/class/dmi/id/sys_vendor; then
- echo "virtual_by_kvm"
- exit
- fi
- fi
-
- if [ -r /sys/class/dmi/id/chassis_vendor ]; then
- if grep -q -i 'qemu' /sys/class/dmi/id/chassis_vendor; then
- echo "virtual_by_kvm"
- exit
- fi
- fi
fi
echo "virtual_by_unknown"
else
diff --git a/cdist/conf/explorer/memory b/cdist/conf/explorer/memory
index 4e3efff8..05db865f 100755
--- a/cdist/conf/explorer/memory
+++ b/cdist/conf/explorer/memory
@@ -2,7 +2,6 @@
#
# 2014 Daniel Heule (hda at sfs.biz)
# 2014 Thomas Oettli (otho at sfs.biz)
-# Copyright 2017, Philippe Gregoire
#
# This file is part of cdist.
#
@@ -29,10 +28,6 @@ case "$os" in
echo "$(sysctl -n hw.memsize)/1024" | bc
;;
- "openbsd")
- echo "$(sysctl -n hw.physmem) / 1048576" | bc
- ;;
-
*)
if [ -r /proc/meminfo ]; then
grep "MemTotal:" /proc/meminfo | awk '{print $2}'
diff --git a/cdist/conf/explorer/os b/cdist/conf/explorer/os
index 563fa4cf..094685ea 100755
--- a/cdist/conf/explorer/os
+++ b/cdist/conf/explorer/os
@@ -1,7 +1,6 @@
#!/bin/sh
#
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
-# Copyright 2017, Philippe Gregoire
#
# This file is part of cdist.
#
@@ -51,17 +50,15 @@ if grep -q ^DISTRIB_ID=Ubuntu /etc/lsb-release 2>/dev/null; then
exit 0
fi
-# devuan ascii has both devuan_version and debian_version, so we need to check devuan_version first!
-if [ -f /etc/devuan_version ]; then
- echo devuan
- exit 0
-fi
-
if [ -f /etc/debian_version ]; then
echo debian
exit 0
fi
+if [ -f /etc/devuan_version ]; then
+ echo devuan
+ exit 0
+fi
###
if [ -f /etc/gentoo-release ]; then
@@ -142,12 +139,5 @@ case "$uname_s" in
;;
esac
-if [ -f /etc/os-release ]; then
- # already lowercase, according to:
- # https://www.freedesktop.org/software/systemd/man/os-release.html
- awk -F= '/^ID=/ { if ($2 ~ /^'"'"'(.*)'"'"'$/ || $2 ~ /^"(.*)"$/) { print substr($2, 2, length($2) - 2) } else { print $2 } }' /etc/os-release
- exit 0
-fi
-
echo "Unknown OS" >&2
exit 1
diff --git a/cdist/conf/explorer/os_release b/cdist/conf/explorer/os_release
deleted file mode 100644
index 6489446b..00000000
--- a/cdist/conf/explorer/os_release
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/sh
-#
-# 2018 Adam Dej (dejko.a at gmail.com)
-# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-
-# See os-release(5) and http://0pointer.de/blog/projects/os-release
-
-if test -f /etc/os-release
-then
- # Linux and FreeBSD (usually a symlink)
- cat /etc/os-release
-elif test -f /usr/lib/os-release
-then
- # systemd
- cat /usr/lib/os-release
-elif test -f /var/run/os-release
-then
- # FreeBSD (created by os-release service)
- cat /var/run/os-release
-fi
-
diff --git a/cdist/conf/explorer/os_version b/cdist/conf/explorer/os_version
index 1d54ea60..380782cc 100755
--- a/cdist/conf/explorer/os_version
+++ b/cdist/conf/explorer/os_version
@@ -22,7 +22,7 @@
#
#
-case "$("$__explorer/os")" in
+case "$($__explorer/os)" in
amazon)
cat /etc/system-release
;;
@@ -70,7 +70,4 @@ case "$("$__explorer/os")" in
ubuntu)
lsb_release -sr
;;
- alpine)
- cat /etc/alpine-release
- ;;
-esac
\ No newline at end of file
+esac
diff --git a/cdist/conf/type/__acl/explorer/acl_is b/cdist/conf/type/__acl/explorer/acl_is
deleted file mode 100755
index a693c023..00000000
--- a/cdist/conf/type/__acl/explorer/acl_is
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-[ ! -e "/$__object_id" ] && exit 0
-
-if ! command -v getfacl > /dev/null
-then
- echo 'getfacl not available' >&2
- exit 1
-fi
-
-getfacl "/$__object_id" 2>/dev/null \
- | grep -Eo '^(default:)?(user|group|(mask|other):):[^:][[:graph:]]+' \
- || true
diff --git a/cdist/conf/type/__acl/explorer/checks b/cdist/conf/type/__acl/explorer/checks
deleted file mode 100755
index 70bb0412..00000000
--- a/cdist/conf/type/__acl/explorer/checks
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-# TODO check if filesystem has ACL turned on etc
-
-if [ -f "$__object/parameter/acl" ]
-then
- grep -E '^(default:)?(user|group):' "$__object/parameter/acl" \
- | while read -r acl
- do
- param="$( echo "$acl" | awk -F: '{print $(NF-2)}' )"
- check="$( echo "$acl" | awk -F: '{print $(NF-1)}' )"
-
- [ "$param" = 'user' ] && db=passwd || db="$param"
-
- if ! getent "$db" "$check" > /dev/null
- then
- echo "missing $param '$check'" >&2
- exit 1
- fi
- done
-fi
diff --git a/cdist/conf/type/__acl/explorer/file_is b/cdist/conf/type/__acl/explorer/file_is
deleted file mode 100755
index 096cffd1..00000000
--- a/cdist/conf/type/__acl/explorer/file_is
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-if [ -e "/$__object_id" ]
-then
- if [ -d "/$__object_id" ]
- then echo directory
- elif [ -f "/$__object_id" ]
- then echo regular
- else echo other
- fi
-else
- echo missing
-fi
diff --git a/cdist/conf/type/__acl/gencode-remote b/cdist/conf/type/__acl/gencode-remote
deleted file mode 100755
index e5404a9d..00000000
--- a/cdist/conf/type/__acl/gencode-remote
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-file_is="$( cat "$__object/explorer/file_is" )"
-
-if [ "$file_is" = 'missing' ] \
- && [ -z "$__cdist_dry_run" ] \
- && \( [ ! -f "$__object/parameter/file" ] \
- || [ ! -f "$__object/parameter/directory" ] \)
-then
- exit 0
-fi
-
-os="$( cat "$__global/explorer/os" )"
-
-acl_path="/$__object_id"
-
-acl_is="$( cat "$__object/explorer/acl_is" )"
-
-if [ -f "$__object/parameter/source" ]
-then
- acl_source="$( cat "$__object/parameter/source" )"
-
- if [ "$acl_source" = '-' ]
- then
- acl_should="$( cat "$__object/stdin" )"
- else
- acl_should="$( grep -Ev '^#|^$' "$acl_source" )"
- fi
-elif [ -f "$__object/parameter/entry" ]
-then
- acl_should="$( cat "$__object/parameter/entry" )"
-elif [ -f "$__object/parameter/acl" ]
-then
- acl_should="$( cat "$__object/parameter/acl" )"
-elif
- [ -f "$__object/parameter/user" ] \
- || [ -f "$__object/parameter/group" ] \
- || [ -f "$__object/parameter/mask" ] \
- || [ -f "$__object/parameter/other" ]
-then
- acl_should="$( for param in user group mask other
- do
- [ ! -f "$__object/parameter/$param" ] && continue
-
- echo "$param" | grep -Eq 'mask|other' && sep=:: || sep=:
-
- echo "$param$sep$( cat "$__object/parameter/$param" )"
- done )"
-else
- echo 'no parameters set' >&2
- exit 1
-fi
-
-if [ -f "$__object/parameter/default" ]
-then
- acl_should="$( echo "$acl_should" \
- | sed 's/^default://' \
- | sort -u \
- | sed 's/\(.*\)/default:\1\n\1/' )"
-fi
-
-if [ "$file_is" = 'regular' ] \
- && echo "$acl_should" | grep -Eq '^default:'
-then
- # only directories can have default ACLs,
- # but instead of error,
- # let's just remove default entries
- acl_should="$( echo "$acl_should" | grep -Ev '^default:' )"
-fi
-
-if echo "$acl_should" | awk -F: '{ print $NF }' | grep -Fq 'X'
-then
- [ "$file_is" = 'directory' ] && rep=x || rep=-
-
- acl_should="$( echo "$acl_should" | sed "s/\\(.*\\)X/\\1$rep/" )"
-fi
-
-setfacl_exec='setfacl'
-
-if [ -f "$__object/parameter/recursive" ]
-then
- if echo "$os" | grep -Fq 'freebsd'
- then
- echo "$os setfacl do not support recursive operations" >&2
- else
- setfacl_exec="$setfacl_exec -R"
- fi
-fi
-
-if [ -f "$__object/parameter/remove" ]
-then
- echo "$acl_is" | while read -r acl
- do
- # skip wanted ACL entries which already exist
- # and skip mask and other entries, because we
- # can't actually remove them, but only change.
- if echo "$acl_should" | grep -Eq "^$acl" \
- || echo "$acl" | grep -Eq '^(default:)?(mask|other)'
- then continue
- fi
-
- if echo "$os" | grep -Fq 'freebsd'
- then
- remove="$acl"
- else
- remove="$( echo "$acl" | sed 's/:...$//' )"
- fi
-
- echo "$setfacl_exec -x \"$remove\" \"$acl_path\""
- echo "removed '$remove'" >> "$__messages_out"
- done
-fi
-
-for acl in $acl_should
-do
- if ! echo "$acl_is" | grep -Eq "^$acl"
- then
- if echo "$os" | grep -Fq 'freebsd' \
- && echo "$acl" | grep -Eq '^default:'
- then
- echo "setting default ACL in $os is currently not supported" >&2
- else
- echo "$setfacl_exec -m \"$acl\" \"$acl_path\""
- echo "added '$acl'" >> "$__messages_out"
- fi
- fi
-done
diff --git a/cdist/conf/type/__acl/man.rst b/cdist/conf/type/__acl/man.rst
deleted file mode 100644
index 28412871..00000000
--- a/cdist/conf/type/__acl/man.rst
+++ /dev/null
@@ -1,110 +0,0 @@
-cdist-type__acl(7)
-==================
-
-NAME
-----
-cdist-type__acl - Set ACL entries
-
-
-DESCRIPTION
------------
-Fully supported and tested on Linux (ext4 filesystem), partial support for FreeBSD.
-
-See ``setfacl`` and ``acl`` manpages for more details.
-
-
-REQUIRED MULTIPLE PARAMETERS
-----------------------------
-entry
- Set ACL entry following ``getfacl`` output syntax.
-
-
-OPTIONAL PARAMETERS
--------------------
-source
- Read ACL entries from stdin or file.
- Ordering of entries is not important.
- When reading from file, comments and empty lines are ignored.
-
-file
- Create/change file with ``__file`` using ``user:group:mode`` pattern.
-
-directory
- Create/change directory with ``__directory`` using ``user:group:mode`` pattern.
-
-
-BOOLEAN PARAMETERS
-------------------
-default
- Set all ACL entries as default too.
- Only directories can have default ACLs.
- Setting default ACL in FreeBSD is currently not supported.
-
-recursive
- Make ``setfacl`` recursive (Linux only), but not ``getfacl`` in explorer.
-
-remove
- Remove undefined ACL entries.
- ``mask`` and ``other`` entries can't be removed, but only changed.
-
-
-DEPRECATED PARAMETERS
----------------------
-Parameters ``acl``, ``user``, ``group``, ``mask`` and ``other`` are deprecated and they
-will be removed in future versions. Please use ``entry`` parameter instead.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __acl /srv/project \
- --default \
- --recursive \
- --remove \
- --entry user:alice:rwx \
- --entry user:bob:r-x \
- --entry group:project-group:rwx \
- --entry group:some-other-group:r-x \
- --entry mask::r-x \
- --entry other::r-x
-
- # give Alice read-only access to subdir,
- # but don't allow her to see parent content.
-
- __acl /srv/project2 \
- --remove \
- --entry default:group:secret-project:rwx \
- --entry group:secret-project:rwx \
- --entry user:alice:--x
-
- __acl /srv/project2/subdir \
- --default \
- --remove \
- --entry group:secret-project:rwx \
- --entry user:alice:r-x
-
- # read acl from stdin
- echo 'user:alice:rwx' \
- | __acl /path/to/directory --source -
-
- # create/change directory too
- __acl /path/to/directory \
- --default \
- --remove \
- --directory root:root:770 \
- --entry user:nobody:rwx
-
-
-AUTHORS
--------
-Ander Punnar
-
-
-COPYING
--------
-Copyright \(C) 2018 Ander Punnar. 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.
diff --git a/cdist/conf/type/__acl/manifest b/cdist/conf/type/__acl/manifest
deleted file mode 100755
index 5fd23110..00000000
--- a/cdist/conf/type/__acl/manifest
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh -e
-
-for p in file directory
-do
- [ ! -f "$__object/parameter/$p" ] && continue
-
- "__$p" "/$__object_id" \
- --owner "$( awk -F: '{print $1}' "$__object/parameter/$p" )" \
- --group "$( awk -F: '{print $2}' "$__object/parameter/$p" )" \
- --mode "$( awk -F: '{print $3}' "$__object/parameter/$p" )"
-done
diff --git a/cdist/conf/type/__acl/parameter/boolean b/cdist/conf/type/__acl/parameter/boolean
deleted file mode 100644
index 8b96693f..00000000
--- a/cdist/conf/type/__acl/parameter/boolean
+++ /dev/null
@@ -1,3 +0,0 @@
-recursive
-default
-remove
diff --git a/cdist/conf/type/__acl/parameter/deprecated/acl b/cdist/conf/type/__acl/parameter/deprecated/acl
deleted file mode 100644
index 94e14159..00000000
--- a/cdist/conf/type/__acl/parameter/deprecated/acl
+++ /dev/null
@@ -1 +0,0 @@
-see manual for details
diff --git a/cdist/conf/type/__acl/parameter/deprecated/group b/cdist/conf/type/__acl/parameter/deprecated/group
deleted file mode 100644
index 94e14159..00000000
--- a/cdist/conf/type/__acl/parameter/deprecated/group
+++ /dev/null
@@ -1 +0,0 @@
-see manual for details
diff --git a/cdist/conf/type/__acl/parameter/deprecated/mask b/cdist/conf/type/__acl/parameter/deprecated/mask
deleted file mode 100644
index 94e14159..00000000
--- a/cdist/conf/type/__acl/parameter/deprecated/mask
+++ /dev/null
@@ -1 +0,0 @@
-see manual for details
diff --git a/cdist/conf/type/__acl/parameter/deprecated/other b/cdist/conf/type/__acl/parameter/deprecated/other
deleted file mode 100644
index 94e14159..00000000
--- a/cdist/conf/type/__acl/parameter/deprecated/other
+++ /dev/null
@@ -1 +0,0 @@
-see manual for details
diff --git a/cdist/conf/type/__acl/parameter/deprecated/user b/cdist/conf/type/__acl/parameter/deprecated/user
deleted file mode 100644
index 94e14159..00000000
--- a/cdist/conf/type/__acl/parameter/deprecated/user
+++ /dev/null
@@ -1 +0,0 @@
-see manual for details
diff --git a/cdist/conf/type/__acl/parameter/optional b/cdist/conf/type/__acl/parameter/optional
deleted file mode 100644
index cdcbc0b8..00000000
--- a/cdist/conf/type/__acl/parameter/optional
+++ /dev/null
@@ -1,5 +0,0 @@
-mask
-other
-source
-file
-directory
diff --git a/cdist/conf/type/__acl/parameter/optional_multiple b/cdist/conf/type/__acl/parameter/optional_multiple
deleted file mode 100644
index c615d507..00000000
--- a/cdist/conf/type/__acl/parameter/optional_multiple
+++ /dev/null
@@ -1,4 +0,0 @@
-entry
-acl
-user
-group
diff --git a/cdist/conf/type/__apt_default_release/man.rst b/cdist/conf/type/__apt_default_release/man.rst
deleted file mode 100644
index 0277a06f..00000000
--- a/cdist/conf/type/__apt_default_release/man.rst
+++ /dev/null
@@ -1,46 +0,0 @@
-cdist-type__apt_default_release(7)
-==================================
-
-NAME
-----
-cdist-type__apt_default_release - Configure the default release for apt
-
-
-DESCRIPTION
------------
-Configure the default release for apt, using the APT::Default-Release
-configuration value.
-
-REQUIRED PARAMETERS
--------------------
-release
- The value to set APT::Default-Release to.
-
- This can contain release name, codename or release version. Examples:
- 'stable', 'testing', 'unstable', 'stretch', 'buster', '4.0', '5.0*'.
-
-
-OPTIONAL PARAMETERS
--------------------
-None.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __apt_default_release --release stretch
-
-
-AUTHORS
--------
-Matthijs Kooijman
-
-
-COPYING
--------
-Copyright \(C) 2017 Matthijs Kooijman. 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.
diff --git a/cdist/conf/type/__apt_default_release/manifest b/cdist/conf/type/__apt_default_release/manifest
deleted file mode 100755
index 1232efb5..00000000
--- a/cdist/conf/type/__apt_default_release/manifest
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/sh -e
-#
-# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2017 Matthijs Kooijman (matthijs at stdin.nl)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-
-os=$(cat "$__global/explorer/os")
-release="$(cat "$__object/parameter/release")"
-
-case "$os" in
- ubuntu|debian|devuan)
- __file /etc/apt/apt.conf.d/99-default-release \
- --owner root --group root --mode 644 \
- --source - << DONE
-APT::Default-Release "$release";
-DONE
- ;;
- *)
- cat >&2 << DONE
-The developer of this type (${__type##*/}) did not think your operating system
-($os) would have any use for it. If you think otherwise please submit a patch.
-DONE
- exit 1
- ;;
-esac
diff --git a/cdist/conf/type/__apt_default_release/parameter/required b/cdist/conf/type/__apt_default_release/parameter/required
deleted file mode 100644
index d7025695..00000000
--- a/cdist/conf/type/__apt_default_release/parameter/required
+++ /dev/null
@@ -1 +0,0 @@
-release
diff --git a/cdist/conf/type/__apt_default_release/singleton b/cdist/conf/type/__apt_default_release/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__apt_key/explorer/state b/cdist/conf/type/__apt_key/explorer/state
index 38f1bd3c..f7940741 100755
--- a/cdist/conf/type/__apt_key/explorer/state
+++ b/cdist/conf/type/__apt_key/explorer/state
@@ -27,18 +27,6 @@ else
keyid="$__object_id"
fi
-keydir="$(cat "$__object/parameter/keydir")"
-keyfile="$keydir/$__object_id.gpg"
-
-if [ -d "$keydir" ]
-then
- if [ -f "$keyfile" ]
- then echo present
- else echo absent
- fi
-else
- # fallback to deprecated apt-key
- apt-key export "$keyid" | head -n 1 | grep -Fqe "BEGIN PGP PUBLIC KEY BLOCK" \
- && echo present \
- || echo absent
-fi
+apt-key export "$keyid" | head -n 1 | grep -Fqe "BEGIN PGP PUBLIC KEY BLOCK" \
+ && echo present \
+ || echo absent
diff --git a/cdist/conf/type/__apt_key/gencode-remote b/cdist/conf/type/__apt_key/gencode-remote
index 0c96ff67..c6ead91c 100755
--- a/cdist/conf/type/__apt_key/gencode-remote
+++ b/cdist/conf/type/__apt_key/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -31,82 +31,12 @@ if [ "$state_should" = "$state_is" ]; then
exit 0
fi
-keydir="$(cat "$__object/parameter/keydir")"
-keyfile="$keydir/$__object_id.gpg"
-
case "$state_should" in
present)
keyserver="$(cat "$__object/parameter/keyserver")"
-
- if [ -f "$__object/parameter/uri" ]; then
- uri="$(cat "$__object/parameter/uri")"
-
- if [ -d "$keydir" ]; then
- cat << EOF
-
-curl -s -L \\
- -o "$keyfile" \\
- "$uri"
-
-key="\$( cat "$keyfile" )"
-
-if echo "\$key" | grep -Fq 'BEGIN PGP PUBLIC KEY BLOCK'
-then
- echo "\$key" | gpg --dearmor > "$keyfile"
-fi
-
-EOF
- else
- # fallback to deprecated apt-key
- echo "curl -s -L '$uri' | apt-key add -"
- fi
- elif [ -d "$keydir" ]; then
- # we need to kill gpg after 30 seconds, because gpg
- # can get stuck if keyserver is not responding.
- # exporting env var and not exit 1,
- # because we need to clean up and kill dirmngr.
- cat << EOF
-
-gpgtmphome="\$( mktemp -d )"
-
-if timeout 30s \\
- gpg --homedir "\$gpgtmphome" \\
- --keyserver "$keyserver" \\
- --recv-keys "$keyid"
-then
- gpg --homedir "\$gpgtmphome" \\
- --export "$keyid" \\
- > "$keyfile"
-else
- export GPG_GOT_STUCK=1
-fi
-
-GNUPGHOME="\$gpgtmphome" gpgconf --kill dirmngr
-
-rm -rf "\$gpgtmphome"
-
-if [ -n "\$GPG_GOT_STUCK" ]
-then
- echo "GPG GOT STUCK - no response from keyserver after 30 seconds" >&2
- exit 1
-fi
-
-EOF
- else
- # fallback to deprecated apt-key
- echo "apt-key adv --keyserver \"$keyserver\" --recv-keys \"$keyid\""
- fi
-
- echo "added '$keyid'" >> "$__messages_out"
+ echo "apt-key adv --keyserver \"$keyserver\" --recv-keys \"$keyid\""
;;
absent)
- if [ -f "$keyfile" ]; then
- echo "rm '$keyfile'"
- else
- # fallback to deprecated apt-key
- echo "apt-key del \"$keyid\""
- fi
-
- echo "removed '$keyid'" >> "$__messages_out"
+ echo "apt-key del \"$keyid\""
;;
esac
diff --git a/cdist/conf/type/__apt_key/man.rst b/cdist/conf/type/__apt_key/man.rst
index 234bc715..9009877e 100644
--- a/cdist/conf/type/__apt_key/man.rst
+++ b/cdist/conf/type/__apt_key/man.rst
@@ -28,12 +28,6 @@ keyserver
the keyserver from which to fetch the key. If omitted the default set
in ./parameter/default/keyserver is used.
-keydir
- key save location, defaults to ``/etc/apt/trusted.pgp.d``
-
-uri
- the URI from which to download the key
-
EXAMPLES
--------
@@ -53,20 +47,15 @@ EXAMPLES
# same thing with other keyserver
__apt_key UbuntuArchiveKey --keyid 437D05B5 --keyserver keyserver.ubuntu.com
- # download key from the internet
- __apt_key rabbitmq \
- --uri http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
-
AUTHORS
-------
Steven Armstrong
-Ander Punnar
COPYING
-------
-Copyright \(C) 2011-2019 Steven Armstrong and Ander Punnar. 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
+Copyright \(C) 2011-2014 Steven Armstrong. 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.
diff --git a/cdist/conf/type/__apt_key/manifest b/cdist/conf/type/__apt_key/manifest
deleted file mode 100755
index 010357cd..00000000
--- a/cdist/conf/type/__apt_key/manifest
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh -e
-
-__package gnupg
-
-if [ -f "$__object/parameter/uri" ]
-then __package curl
-else __package dirmngr
-fi
diff --git a/cdist/conf/type/__apt_key/parameter/default/keydir b/cdist/conf/type/__apt_key/parameter/default/keydir
deleted file mode 100644
index 190eb2de..00000000
--- a/cdist/conf/type/__apt_key/parameter/default/keydir
+++ /dev/null
@@ -1 +0,0 @@
-/etc/apt/trusted.gpg.d
diff --git a/cdist/conf/type/__apt_key/parameter/optional b/cdist/conf/type/__apt_key/parameter/optional
index de647375..18cf2586 100644
--- a/cdist/conf/type/__apt_key/parameter/optional
+++ b/cdist/conf/type/__apt_key/parameter/optional
@@ -1,5 +1,3 @@
state
keyid
keyserver
-keydir
-uri
diff --git a/cdist/conf/type/__apt_key_uri/explorer/state b/cdist/conf/type/__apt_key_uri/explorer/state
index 6f607607..15d6e653 100755
--- a/cdist/conf/type/__apt_key_uri/explorer/state
+++ b/cdist/conf/type/__apt_key_uri/explorer/state
@@ -27,6 +27,6 @@ else
name="$__object_id"
fi
-apt-key list 2> /dev/null | grep -Fqe "$name" \
+apt-key list | grep -Fqe "$name" \
&& echo present \
|| echo absent
diff --git a/cdist/conf/type/__apt_key_uri/gencode-remote b/cdist/conf/type/__apt_key_uri/gencode-remote
index 229b6564..078b8695 100755
--- a/cdist/conf/type/__apt_key_uri/gencode-remote
+++ b/cdist/conf/type/__apt_key_uri/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__apt_key_uri/manifest b/cdist/conf/type/__apt_key_uri/manifest
index bf7b267d..8dddde56 100755
--- a/cdist/conf/type/__apt_key_uri/manifest
+++ b/cdist/conf/type/__apt_key_uri/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013-2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__apt_mark/explorer/apt_version b/cdist/conf/type/__apt_mark/explorer/apt_version
old mode 100755
new mode 100644
index 7bb90cc2..32a0a58f
--- a/cdist/conf/type/__apt_mark/explorer/apt_version
+++ b/cdist/conf/type/__apt_mark/explorer/apt_version
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Ander Punnar (cdist at kvlt.ee)
#
@@ -26,6 +26,6 @@ apt_version_is=$(dpkg-query --show --showformat '${Version}' apt)
apt_version_should=0.8.14.2
-dpkg --compare-versions "$apt_version_should" le "$apt_version_is" \
+dpkg --compare-versions $apt_version_should le $apt_version_is \
&& echo 0 \
|| echo 1
diff --git a/cdist/conf/type/__apt_mark/explorer/package_installed b/cdist/conf/type/__apt_mark/explorer/package_installed
old mode 100755
new mode 100644
index 0b072cbc..c78ac3a9
--- a/cdist/conf/type/__apt_mark/explorer/package_installed
+++ b/cdist/conf/type/__apt_mark/explorer/package_installed
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Ander Punnar (cdist at kvlt.ee)
#
@@ -24,7 +24,7 @@ else
name="$__object_id"
fi
-dpkg-query --show --showformat '${Status}' "$name" 2>/dev/null \
- | grep -Fq 'ok installed' \
+dpkg-query --show --showformat '${Status}' $name 2>/dev/null \
+ | grep -q 'ok installed' \
&& echo 0 \
|| echo 1
diff --git a/cdist/conf/type/__apt_mark/explorer/state b/cdist/conf/type/__apt_mark/explorer/state
old mode 100755
new mode 100644
index b7fe08fa..3b70003a
--- a/cdist/conf/type/__apt_mark/explorer/state
+++ b/cdist/conf/type/__apt_mark/explorer/state
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Ander Punnar (cdist at kvlt.ee)
#
@@ -24,4 +24,4 @@ else
name="$__object_id"
fi
-apt-mark showhold | grep -Fq "$name" && echo hold || echo unhold
+apt-mark showhold | grep -q $name && echo hold || echo unhold
diff --git a/cdist/conf/type/__apt_mark/gencode-remote b/cdist/conf/type/__apt_mark/gencode-remote
old mode 100755
new mode 100644
index bc995444..c1ac58b3
--- a/cdist/conf/type/__apt_mark/gencode-remote
+++ b/cdist/conf/type/__apt_mark/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Ander Punnar (cdist at kvlt.ee)
#
diff --git a/cdist/conf/type/__apt_norecommends/manifest b/cdist/conf/type/__apt_norecommends/manifest
index e737df89..9e633308 100755
--- a/cdist/conf/type/__apt_norecommends/manifest
+++ b/cdist/conf/type/__apt_norecommends/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__apt_ppa/explorer/state b/cdist/conf/type/__apt_ppa/explorer/state
index d47e7d20..2bb4f65a 100755
--- a/cdist/conf/type/__apt_ppa/explorer/state
+++ b/cdist/conf/type/__apt_ppa/explorer/state
@@ -23,11 +23,10 @@
name="$__object_id"
-# shellcheck disable=SC1091
. /etc/lsb-release
repo_name="${name#ppa:}"
-repo_file_name="$(echo "$repo_name" | sed -e 's|[/:]|-|' -e 's|\.|_|')-${DISTRIB_CODENAME}.list"
+repo_file_name="$(echo "$repo_name" | sed -e "s|[/:]|-|" -e "s|\.|_|")-${DISTRIB_CODENAME}.list"
[ -s "/etc/apt/sources.list.d/${repo_file_name}" ] \
&& echo present || echo absent
diff --git a/cdist/conf/type/__apt_ppa/gencode-remote b/cdist/conf/type/__apt_ppa/gencode-remote
index 84ebebfe..300a0e1e 100755
--- a/cdist/conf/type/__apt_ppa/gencode-remote
+++ b/cdist/conf/type/__apt_ppa/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -29,9 +29,9 @@ fi
case "$state_should" in
present)
- echo "add-apt-repository '$name'"
+ echo add-apt-repository \"$name\"
;;
absent)
- echo "remove-apt-repository '$name'"
+ echo remove-apt-repository \"$name\"
;;
esac
diff --git a/cdist/conf/type/__apt_ppa/manifest b/cdist/conf/type/__apt_ppa/manifest
index c6f4e876..a67c7613 100755
--- a/cdist/conf/type/__apt_ppa/manifest
+++ b/cdist/conf/type/__apt_ppa/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2016 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -18,6 +18,8 @@
# along with cdist. If not, see .
#
+name="$__object_id"
+
__package software-properties-common
require="__package/software-properties-common" \
diff --git a/cdist/conf/type/__apt_source/gencode-remote b/cdist/conf/type/__apt_source/gencode-remote
deleted file mode 100755
index 1e8592c6..00000000
--- a/cdist/conf/type/__apt_source/gencode-remote
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Steven Armstrong (steven-cdist at armstrong.cc)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-
-name="$__object_id"
-destination="/etc/apt/sources.list.d/${name}.list"
-
-if grep -q "^__file${destination}" "$__messages_in"; then
- printf 'apt-get update || apt-get update\n'
-fi
-
diff --git a/cdist/conf/type/__apt_source/man.rst b/cdist/conf/type/__apt_source/man.rst
index d1acb388..8aa6c144 100644
--- a/cdist/conf/type/__apt_source/man.rst
+++ b/cdist/conf/type/__apt_source/man.rst
@@ -8,8 +8,7 @@ cdist-type__apt_source - Manage apt sources
DESCRIPTION
-----------
-This cdist type allows you to manage apt sources. It invokes index update
-internally when needed so call of index updating type is not needed.
+This cdist type allows you to manage apt sources.
REQUIRED PARAMETERS
@@ -64,7 +63,7 @@ Steven Armstrong
COPYING
-------
-Copyright \(C) 2011-2018 Steven Armstrong. You can redistribute it
+Copyright \(C) 2011-2014 Steven Armstrong. 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.
diff --git a/cdist/conf/type/__apt_source/manifest b/cdist/conf/type/__apt_source/manifest
index 35f15909..59c7c567 100755
--- a/cdist/conf/type/__apt_source/manifest
+++ b/cdist/conf/type/__apt_source/manifest
@@ -1,6 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2011-2018 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2011-2013 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@@ -50,3 +50,5 @@ __file "/etc/apt/sources.list.d/${name}.list" \
--source "$__object/files/source.list" \
--owner root --group root --mode 0644 \
--state "$state"
+
+require="$__object_name" __apt_update_index
diff --git a/cdist/conf/type/__apt_source/nonparallel b/cdist/conf/type/__apt_source/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__apt_unattended_upgrades/man.rst b/cdist/conf/type/__apt_unattended_upgrades/man.rst
deleted file mode 100644
index 2231b5f9..00000000
--- a/cdist/conf/type/__apt_unattended_upgrades/man.rst
+++ /dev/null
@@ -1,68 +0,0 @@
-cdist-type__apt_unattended_upgrades(7)
-======================================
-
-NAME
-----
-cdist-type__apt_unattended_upgrades - automatic installation of updates
-
-
-DESCRIPTION
------------
-
-Install and configure unattended-upgrades package.
-
-For more information see https://wiki.debian.org/UnattendedUpgrades.
-
-
-OPTIONAL MULTIPLE PARAMETERS
-----------------------------
-option
- Set options for unattended-upgrades. See examples.
-
- Supported options with default values (as of 2020-01-17) are:
-
- - AutoFixInterruptedDpkg, default is "true"
- - MinimalSteps, default is "true"
- - InstallOnShutdown, default is "false"
- - Mail, default is "" (empty)
- - MailOnlyOnError, default is "false"
- - Remove-Unused-Kernel-Packages, default is "true"
- - Remove-New-Unused-Dependencies, default is "true"
- - Remove-Unused-Dependencies, default is "false"
- - Automatic-Reboot, default is "false"
- - Automatic-Reboot-WithUsers, default is "true"
- - Automatic-Reboot-Time, default is "02:00"
- - SyslogEnable, default is "false"
- - SyslogFacility, default is "daemon"
- - OnlyOnACPower, default is "true"
- - Skip-Updates-On-Metered-Connections, default is "true"
- - Verbose, default is "false"
- - Debug, default is "false"
-
-blacklist
- Python regular expressions, matching packages to exclude from upgrading.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __apt_unattended_upgrades \
- --option Mail=root \
- --option MailOnlyOnError=true \
- --blacklist multipath-tools \
- --blacklist open-iscsi
-
-
-AUTHORS
--------
-Ander Punnar
-
-
-COPYING
--------
-Copyright \(C) 2020 Ander Punnar. 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.
diff --git a/cdist/conf/type/__apt_unattended_upgrades/manifest b/cdist/conf/type/__apt_unattended_upgrades/manifest
deleted file mode 100755
index 3c00e2f4..00000000
--- a/cdist/conf/type/__apt_unattended_upgrades/manifest
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/bin/sh -e
-#
-# 2020 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-__package unattended-upgrades
-
-export require='__package/unattended-upgrades'
-
-# in normal circumstances 20auto-upgrades is managed
-# by debconf and it can only contain these lines
-
-__file /etc/apt/apt.conf.d/20auto-upgrades \
- --owner root \
- --group root \
- --mode 644 \
- --source - << EOF
-APT::Periodic::Update-Package-Lists "1";
-APT::Periodic::Unattended-Upgrade "1";
-EOF
-
-# lets not write into upstream 50unattended-upgrades file,
-# but use our own config file to avoid clashes
-
-conf_file='/etc/apt/apt.conf.d/51unattended-upgrades-cdist'
-
-conf='# this file is managed by cdist'
-
-if [ -f "$__object/parameter/option" ]
-then
- o=''
-
- while read -r l
- do
- o="$( printf '%s\nUnattended-Upgrade::%s "%s";\n' "$o" "${l%%=*}" "${l#*=}" )"
- done \
- < "$__object/parameter/option"
-
- conf="$( printf '%s\n%s\n' "$conf" "$o" )"
-fi
-
-if [ -f "$__object/parameter/blacklist" ]
-then
- b='Unattended-Upgrade::Package-Blacklist {'
-
- while read -r l
- do
- b="$( printf '%s\n"%s";\n' "$b" "$l" )"
- done \
- < "$__object/parameter/blacklist"
-
- conf="$( printf '%s\n%s\n}\n' "$conf" "$b" )"
-fi
-
-if [ "$( echo "$conf" | wc -l )" -gt 1 ]
-then
- echo "$conf" \
- | __file "$conf_file" \
- --owner root \
- --group root \
- --mode 644 \
- --source -
-else
- __file "$conf_file" --state absent
-fi
diff --git a/cdist/conf/type/__apt_unattended_upgrades/parameter/optional_multiple b/cdist/conf/type/__apt_unattended_upgrades/parameter/optional_multiple
deleted file mode 100644
index ea4fba2b..00000000
--- a/cdist/conf/type/__apt_unattended_upgrades/parameter/optional_multiple
+++ /dev/null
@@ -1,2 +0,0 @@
-option
-blacklist
diff --git a/cdist/conf/type/__apt_unattended_upgrades/singleton b/cdist/conf/type/__apt_unattended_upgrades/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__apt_update_index/gencode-remote b/cdist/conf/type/__apt_update_index/gencode-remote
index 70b59710..61ce11a9 100755
--- a/cdist/conf/type/__apt_update_index/gencode-remote
+++ b/cdist/conf/type/__apt_update_index/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__block/gencode-remote b/cdist/conf/type/__block/gencode-remote
index 1f5cc033..2e2147e5 100755
--- a/cdist/conf/type/__block/gencode-remote
+++ b/cdist/conf/type/__block/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -18,11 +18,6 @@
# along with cdist. If not, see .
#
-# quote function from http://www.etalabs.net/sh_tricks.html
-quote() {
- printf '%s\n' "$1" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/'/"
-}
-
file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__object_id")"
state_should=$(cat "$__object/parameter/state")
prefix=$(cat "$__object/parameter/prefix" 2>/dev/null || echo "#cdist:__block/$__object_id")
@@ -51,7 +46,7 @@ tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX)
if [ -f "$file" ]; then
cp -p "$file" "\$tmpfile"
fi
-awk -v prefix=^$(quote "$prefix")\$ -v suffix=^$(quote "$suffix")\$ '
+awk -v prefix="^$prefix\$" -v suffix="^$suffix\$" '
{
if (match(\$0,prefix)) {
triggered=1
diff --git a/cdist/conf/type/__block/manifest b/cdist/conf/type/__block/manifest
index 726950d3..bf96181c 100755
--- a/cdist/conf/type/__block/manifest
+++ b/cdist/conf/type/__block/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013-2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -18,6 +18,8 @@
# along with cdist. If not, see .
#
+
+file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__object_id")"
prefix=$(cat "$__object/parameter/prefix" 2>/dev/null || echo "#cdist:__block/$__object_id")
suffix=$(cat "$__object/parameter/suffix" 2>/dev/null || echo "#/cdist:__block/$__object_id")
text=$(cat "$__object/parameter/text")
diff --git a/cdist/conf/type/__ccollect_source/gencode-remote b/cdist/conf/type/__ccollect_source/gencode-remote
index 57353c24..c41b5179 100755
--- a/cdist/conf/type/__ccollect_source/gencode-remote
+++ b/cdist/conf/type/__ccollect_source/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -42,20 +42,21 @@ get_current_value() {
}
set_group() {
- echo "chgrp '$1' '$destination'"
- echo "chgrp '$1'" >> "$__messages_out"
+ echo chgrp \"$1\" \"$destination\"
+ echo chgrp $1 >> "$__messages_out"
}
set_owner() {
- echo "chown '$1' '$destination'"
- echo "chown '$1'" >> "$__messages_out"
+ echo chown \"$1\" \"$destination\"
+ echo chown $1 >> "$__messages_out"
}
set_mode() {
- echo "chmod '$1' '$destination'"
- echo "chmod '$1'" >> "$__messages_out"
+ echo chmod \"$1\" \"$destination\"
+ echo chmod $1 >> "$__messages_out"
}
+set_attributes=
case "$state_should" in
present|exists)
# Note: Mode - needs to happen last as a chown/chgrp can alter mode by
@@ -66,11 +67,11 @@ case "$state_should" in
# change 0xxx format to xxx format => same as stat returns
if [ "$attribute" = mode ]; then
- value_should="$(echo "$value_should" | sed 's/^0\(...\)/\1/')"
+ value_should="$(echo $value_should | sed 's/^0\(...\)/\1/')"
fi
value_is="$(get_current_value "$attribute" "$value_should")"
- if [ -f "$__object/files/set-attributes" ] || [ "$value_should" != "$value_is" ]; then
+ if [ -f "$__object/files/set-attributes" -o "$value_should" != "$value_is" ]; then
"set_$attribute" "$value_should"
fi
fi
@@ -80,7 +81,7 @@ case "$state_should" in
absent)
if [ "$type" = "file" ]; then
- echo "rm -f '$destination'"
+ echo rm -f \"$destination\"
echo remove >> "$__messages_out"
fi
;;
diff --git a/cdist/conf/type/__ccollect_source/man.rst b/cdist/conf/type/__ccollect_source/man.rst
index b0c23482..617571bb 100644
--- a/cdist/conf/type/__ccollect_source/man.rst
+++ b/cdist/conf/type/__ccollect_source/man.rst
@@ -38,8 +38,6 @@ BOOLEAN PARAMETERS
verbose
Whether to report backup verbosely
-create-destination
- Create the directory specified in the destination parameter on the remote host
EXAMPLES
--------
@@ -52,13 +50,6 @@ EXAMPLES
--exclude '/proc/*' --exclude '/sys/*' \
--verbose
- __ccollect_source doc.ungleich.ch \
- --source doc.ungleich.ch:/ \
- --destination /backup/doc.ungleich.ch \
- --exclude '/proc/*' --exclude '/sys/*' \
- --verbose \
- --create-destination
-
SEE ALSO
--------
diff --git a/cdist/conf/type/__ccollect_source/manifest b/cdist/conf/type/__ccollect_source/manifest
index 727a4c97..b95b75c3 100755
--- a/cdist/conf/type/__ccollect_source/manifest
+++ b/cdist/conf/type/__ccollect_source/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -22,7 +22,7 @@ name="$__object_id"
state="$(cat "$__object/parameter/state")"
source="$(cat "$__object/parameter/source")"
destination="$(cat "$__object/parameter/destination")"
-ccollectconf="$(sed 's,/$,,' "$__object/parameter/ccollectconf")"
+ccollectconf="$(cat "$__object/parameter/ccollectconf" | sed 's,/$,,')"
sourcedir="$ccollectconf/sources"
basedir="$sourcedir/$name"
@@ -53,7 +53,3 @@ if [ -f "$__object/parameter/exclude" ]; then
__file "$exclude_file" --source - --state "$state" \
< "$__object/parameter/exclude"
fi
-
-if [ -f "$__object/parameter/create-destination" ]; then
- __directory "${destination}" --parents --state "${state}"
-fi
diff --git a/cdist/conf/type/__ccollect_source/parameter/boolean b/cdist/conf/type/__ccollect_source/parameter/boolean
index 434c644f..c00ee94a 100644
--- a/cdist/conf/type/__ccollect_source/parameter/boolean
+++ b/cdist/conf/type/__ccollect_source/parameter/boolean
@@ -1,2 +1 @@
verbose
-create-destination
diff --git a/cdist/conf/type/__cdist/man.rst b/cdist/conf/type/__cdist/man.rst
index be082781..9e1c72cb 100644
--- a/cdist/conf/type/__cdist/man.rst
+++ b/cdist/conf/type/__cdist/man.rst
@@ -30,7 +30,7 @@ username
source
Select the source from which to clone cdist from.
- Defaults to "git@code.ungleich.ch:ungleich-public/cdist.git".
+ Defaults to "git://github.com/ungleich/cdist.git".
branch
@@ -47,7 +47,7 @@ EXAMPLES
__cdist /home/cdist/cdist
# Use alternative source
- __cdist --source "git@code.ungleich.ch:ungleich-public/cdist.git" /home/cdist/cdist
+ __cdist --source "git://github.com/ungleich/cdist" /home/cdist/cdist
AUTHORS
diff --git a/cdist/conf/type/__cdist/manifest b/cdist/conf/type/__cdist/manifest
index 0b0f1263..7c0ae60e 100755
--- a/cdist/conf/type/__cdist/manifest
+++ b/cdist/conf/type/__cdist/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -37,7 +37,6 @@ source="$(cat "$__object/parameter/source")"
# out of it
home=/home/$username
-# shellcheck disable=SC2086
__user "$username" --home "$home" $shell
require="__user/$username" __directory "$home" \
diff --git a/cdist/conf/type/__cdist/parameter/default/source b/cdist/conf/type/__cdist/parameter/default/source
index 1ad3a250..3f8e31ad 100644
--- a/cdist/conf/type/__cdist/parameter/default/source
+++ b/cdist/conf/type/__cdist/parameter/default/source
@@ -1 +1 @@
-git@code.ungleich.ch:ungleich-public/cdist.git
+git://github.com/ungleich/cdist.git
diff --git a/cdist/conf/type/__cdistmarker/gencode-remote b/cdist/conf/type/__cdistmarker/gencode-remote
index e71955c4..5e889e52 100755
--- a/cdist/conf/type/__cdistmarker/gencode-remote
+++ b/cdist/conf/type/__cdistmarker/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# Copyright (C) 2011 Daniel Maher (phrawzty+cdist at gmail.com)
#
diff --git a/cdist/conf/type/__check_messages/gencode-remote b/cdist/conf/type/__check_messages/gencode-remote
deleted file mode 100755
index ec36cecc..00000000
--- a/cdist/conf/type/__check_messages/gencode-remote
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-if grep -Eq \
- "$( cat "$__object/parameter/pattern" )" \
- "$__messages_in"
-then
- tee "$__messages_out" < "$__object/parameter/execute"
-fi
diff --git a/cdist/conf/type/__check_messages/man.rst b/cdist/conf/type/__check_messages/man.rst
deleted file mode 100644
index 5c80a0ae..00000000
--- a/cdist/conf/type/__check_messages/man.rst
+++ /dev/null
@@ -1,52 +0,0 @@
-cdist-type__check_messages(7)
-=============================
-
-NAME
-----
-cdist-type__check_messages - Check messages for pattern and execute command on match.
-
-
-DESCRIPTION
------------
-Check messages for pattern and execute command on match.
-
-This type is useful if you chain together multiple related types using
-dependencies and want to restart service if at least one type changes
-something.
-
-For more information about messages see `cdist messaging `_.
-
-For more information about dependencies and execution order see
-`cdist manifest `_ documentation.
-
-
-REQUIRED PARAMETERS
--------------------
-pattern
- Extended regular expression pattern for search (passed to ``grep -E``).
-
-execute
- Command to execute on pattern match.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __check_messages munin \
- --pattern '^__(file|link|line)/etc/munin/' \
- --execute 'service munin-node restart'
-
-
-AUTHORS
--------
-Ander Punnar
-
-
-COPYING
--------
-Copyright \(C) 2019 Ander Punnar. 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.
diff --git a/cdist/conf/type/__check_messages/parameter/required b/cdist/conf/type/__check_messages/parameter/required
deleted file mode 100644
index 374363cb..00000000
--- a/cdist/conf/type/__check_messages/parameter/required
+++ /dev/null
@@ -1,2 +0,0 @@
-pattern
-execute
diff --git a/cdist/conf/type/__chroot_mount/gencode-local b/cdist/conf/type/__chroot_mount/gencode-local
index b131346c..2c3b51b8 100755
--- a/cdist/conf/type/__chroot_mount/gencode-local
+++ b/cdist/conf/type/__chroot_mount/gencode-local
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__chroot_mount/gencode-remote b/cdist/conf/type/__chroot_mount/gencode-remote
index 4fbb3ffc..a3b94b33 100755
--- a/cdist/conf/type/__chroot_mount/gencode-remote
+++ b/cdist/conf/type/__chroot_mount/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__chroot_umount/gencode-local b/cdist/conf/type/__chroot_umount/gencode-local
index b3cb69c6..a6793534 100755
--- a/cdist/conf/type/__chroot_umount/gencode-local
+++ b/cdist/conf/type/__chroot_umount/gencode-local
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__chroot_umount/gencode-remote b/cdist/conf/type/__chroot_umount/gencode-remote
index ff669e1b..bb854efe 100755
--- a/cdist/conf/type/__chroot_umount/gencode-remote
+++ b/cdist/conf/type/__chroot_umount/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__chroot_umount/manifest b/cdist/conf/type/__chroot_umount/manifest
index b3cb69c6..a6793534 100755
--- a/cdist/conf/type/__chroot_umount/manifest
+++ b/cdist/conf/type/__chroot_umount/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__clean_path/explorer/list b/cdist/conf/type/__clean_path/explorer/list
deleted file mode 100755
index 07d38127..00000000
--- a/cdist/conf/type/__clean_path/explorer/list
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-path="/$__object_id"
-
-[ ! -d "$path" ] && exit 0
-
-pattern="$( cat "$__object/parameter/pattern" )"
-
-if [ -f "$__object/parameter/exclude" ]
-then
- exclude="$( cat "$__object/parameter/exclude" )"
-
- find "$path" -mindepth 1 -maxdepth 1 -regex "$pattern" \
- -and -not -regex "$exclude"
-else
- find "$path" -mindepth 1 -maxdepth 1 -regex "$pattern"
-fi
diff --git a/cdist/conf/type/__clean_path/gencode-remote b/cdist/conf/type/__clean_path/gencode-remote
deleted file mode 100755
index 998a70d8..00000000
--- a/cdist/conf/type/__clean_path/gencode-remote
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-[ ! -s "$__object/explorer/list" ] && exit 0
-
-path="/$__object_id"
-
-pattern="$( cat "$__object/parameter/pattern" )"
-
-if [ -f "$__object/parameter/exclude" ]
-then
- exclude="$( cat "$__object/parameter/exclude" )"
-
- echo "find '$path' -mindepth 1 -maxdepth 1 -regex '$pattern'" \
- "-and -not -regex '$exclude'" \
- '-exec rm -rf {} \;'
-else
- echo "find '$path' -mindepth 1 -maxdepth 1 -regex '$pattern'" \
- '-exec rm -rf {} \;'
-fi
-
-while read -r f
-do
- echo "removed '$f'" >> "$__messages_out"
-done \
-< "$__object/explorer/list"
-
-if [ -f "$__object/parameter/onchange" ]
-then
- cat "$__object/parameter/onchange"
-fi
diff --git a/cdist/conf/type/__clean_path/man.rst b/cdist/conf/type/__clean_path/man.rst
deleted file mode 100644
index 826f4589..00000000
--- a/cdist/conf/type/__clean_path/man.rst
+++ /dev/null
@@ -1,60 +0,0 @@
-cdist-type__clean_path(7)
-=========================
-
-NAME
-----
-cdist-type__clean_path - Remove files and directories which match the pattern.
-
-
-DESCRIPTION
------------
-Remove files and directories which match the pattern.
-
-Provided path (as __object_id) must be a directory.
-
-Patterns are passed to ``find``'s ``-regex`` - see ``find(1)`` for more details.
-
-Look up of files and directories is non-recursive (``-maxdepth 1``).
-
-Parent directory is excluded (``-mindepth 1``).
-
-This type is not POSIX compatible (sorry, Solaris users).
-
-
-REQUIRED PARAMETERS
--------------------
-pattern
- Pattern of files which are removed from path.
-
-
-OPTIONAL PARAMETERS
--------------------
-exclude
- Pattern of files which are excluded from removal.
-
-onchange
- The code to run if files or directories were removed.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __clean_path /etc/apache2/conf-enabled \
- --pattern '.+' \
- --exclude '.+\(charset\.conf\|security\.conf\)' \
- --onchange 'service apache2 restart'
-
-
-AUTHORS
--------
-Ander Punnar
-
-
-COPYING
--------
-Copyright \(C) 2019 Ander Punnar. 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.
diff --git a/cdist/conf/type/__clean_path/parameter/optional b/cdist/conf/type/__clean_path/parameter/optional
deleted file mode 100644
index 6f313474..00000000
--- a/cdist/conf/type/__clean_path/parameter/optional
+++ /dev/null
@@ -1,2 +0,0 @@
-exclude
-onchange
diff --git a/cdist/conf/type/__clean_path/parameter/required b/cdist/conf/type/__clean_path/parameter/required
deleted file mode 100644
index 54774947..00000000
--- a/cdist/conf/type/__clean_path/parameter/required
+++ /dev/null
@@ -1 +0,0 @@
-pattern
diff --git a/cdist/conf/type/__config_file/gencode-remote b/cdist/conf/type/__config_file/gencode-remote
index 5f1626be..e9b38c35 100755
--- a/cdist/conf/type/__config_file/gencode-remote
+++ b/cdist/conf/type/__config_file/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -19,9 +19,16 @@
#
destination="$__object_id"
+state="$(cat "$__object/parameter/state")"
+
+if [ "$state" = "absent" ]; then
+ # nothing to do
+ exit 0
+fi
if [ -f "$__object/parameter/onchange" ]; then
if grep -q "^__file/${destination}" "$__messages_in"; then
cat "$__object/parameter/onchange"
fi
fi
+
diff --git a/cdist/conf/type/__config_file/manifest b/cdist/conf/type/__config_file/manifest
index be8f9f67..29add8b7 100755
--- a/cdist/conf/type/__config_file/manifest
+++ b/cdist/conf/type/__config_file/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -19,8 +19,7 @@
#
set -- "/${__object_id}"
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
source)
source="$(cat "$__object/parameter/source")"
diff --git a/cdist/conf/type/__consul/files/versions/1.0.6/cksum b/cdist/conf/type/__consul/files/versions/1.0.6/cksum
deleted file mode 100644
index b70b55f4..00000000
--- a/cdist/conf/type/__consul/files/versions/1.0.6/cksum
+++ /dev/null
@@ -1 +0,0 @@
-4120550353 48801129 consul
diff --git a/cdist/conf/type/__consul/files/versions/1.0.6/source b/cdist/conf/type/__consul/files/versions/1.0.6/source
deleted file mode 100644
index 769d3134..00000000
--- a/cdist/conf/type/__consul/files/versions/1.0.6/source
+++ /dev/null
@@ -1 +0,0 @@
-https://releases.hashicorp.com/consul/1.0.6/consul_1.0.6_linux_amd64.zip
diff --git a/cdist/conf/type/__consul/files/versions/1.2.3/cksum b/cdist/conf/type/__consul/files/versions/1.2.3/cksum
deleted file mode 100644
index 6352409e..00000000
--- a/cdist/conf/type/__consul/files/versions/1.2.3/cksum
+++ /dev/null
@@ -1 +0,0 @@
-191982 110369685
diff --git a/cdist/conf/type/__consul/files/versions/1.2.3/source b/cdist/conf/type/__consul/files/versions/1.2.3/source
deleted file mode 100644
index 5e67bc37..00000000
--- a/cdist/conf/type/__consul/files/versions/1.2.3/source
+++ /dev/null
@@ -1 +0,0 @@
-https://releases.hashicorp.com/consul/1.2.3/consul_1.2.3_linux_amd64.zip
diff --git a/cdist/conf/type/__consul/files/versions/1.3.0/cksum b/cdist/conf/type/__consul/files/versions/1.3.0/cksum
deleted file mode 100644
index 7a885378..00000000
--- a/cdist/conf/type/__consul/files/versions/1.3.0/cksum
+++ /dev/null
@@ -1 +0,0 @@
-1714523667 98363467 consul
diff --git a/cdist/conf/type/__consul/files/versions/1.3.0/source b/cdist/conf/type/__consul/files/versions/1.3.0/source
deleted file mode 100644
index 18a1ba8e..00000000
--- a/cdist/conf/type/__consul/files/versions/1.3.0/source
+++ /dev/null
@@ -1 +0,0 @@
-https://releases.hashicorp.com/consul/1.3.0/consul_1.3.0_linux_amd64.zip
diff --git a/cdist/conf/type/__consul/files/versions/1.5.0/cksum b/cdist/conf/type/__consul/files/versions/1.5.0/cksum
deleted file mode 100644
index efca9caa..00000000
--- a/cdist/conf/type/__consul/files/versions/1.5.0/cksum
+++ /dev/null
@@ -1 +0,0 @@
-886614099 103959898 consul
diff --git a/cdist/conf/type/__consul/files/versions/1.5.0/source b/cdist/conf/type/__consul/files/versions/1.5.0/source
deleted file mode 100644
index cafa9248..00000000
--- a/cdist/conf/type/__consul/files/versions/1.5.0/source
+++ /dev/null
@@ -1 +0,0 @@
-https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_linux_amd64.zip
diff --git a/cdist/conf/type/__consul/gencode-remote b/cdist/conf/type/__consul/gencode-remote
deleted file mode 100755
index 2a21054f..00000000
--- a/cdist/conf/type/__consul/gencode-remote
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Darko Poljak (darko.poljak at gmail.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-#set -x
-
-if [ ! -f "$__object/parameter/direct" ]; then
- # Nothing here, staged file is used.
- exit 0
-fi
-
-state=$(cat "$__object/parameter/state")
-destination="/usr/local/bin/consul"
-
-if [ "$state" = "absent" ]; then
- printf 'rm -f "%s"' "$destination"
- exit 0
-fi
-
-versions_dir="$__type/files/versions"
-version="$(cat "$__object/parameter/version")"
-version_dir="$versions_dir/$version"
-
-source=$(cat "$version_dir/source")
-source_file_name="${source##*/}"
-cksum_should=$(cut -d' ' -f1,2 "$version_dir/cksum")
-
-cat << eof
- tmpdir=\$(mktemp -d -p /tmp "${__type##*/}.XXXXXXXXXX")
- curl -s -L "$source" > "\$tmpdir/$source_file_name"
- unzip -p "\$tmpdir/$source_file_name" > "${destination}.tmp"
- rm -rf "\$tmpdir"
-
- cksum_is=\$(cksum "${destination}.tmp" | cut -d' ' -f1,2)
- if [ "\$cksum_is" = "$cksum_should" ]; then
- rm -f "${destination}"
- mv "${destination}.tmp" "${destination}"
- chown root:root "$destination"
- chmod 755 "$destination"
- else
- rm -f "${destination}.tmp"
- echo "Failed to verify checksum for $__object_name" >&2
- exit 1
- fi
-eof
-
-echo "/usr/local/bin/consul created" >> "$__messages_out"
diff --git a/cdist/conf/type/__consul/man.rst b/cdist/conf/type/__consul/man.rst
index 5b2db50a..19ceb535 100644
--- a/cdist/conf/type/__consul/man.rst
+++ b/cdist/conf/type/__consul/man.rst
@@ -10,8 +10,7 @@ DESCRIPTION
-----------
Downloads and installs the consul binary from https://dl.bintray.com/mitchellh/consul.
Note that the consul binary is downloaded on the server (the machine running
-cdist) and then deployed to the target host using the __file type unless --direct
-parameter is used.
+cdist) and then deployed to the target host using the __file type.
REQUIRED PARAMETERS
@@ -29,22 +28,6 @@ version
supported versions. Defaults to the latest known version.
-BOOLEAN PARAMETERS
-------------------
-direct
- Download and deploy consul binary directly on the target machine.
-
-
-MESSAGES
---------
-If consul binary is created using __staged_file then underlaying __file type messages are emitted.
-
-If consul binary is created by direct method then the following messages are emitted:
-
-/usr/local/bin/consul created
- consul binary was created
-
-
EXAMPLES
--------
@@ -53,9 +36,6 @@ EXAMPLES
# just install using defaults
__consul
- # install by downloading consul binary directly on the target machine
- __consul --direct
-
# specific version
__consul \
--version 0.4.1
@@ -63,8 +43,7 @@ EXAMPLES
AUTHORS
-------
-| Steven Armstrong
-| Darko Poljak
+Steven Armstrong
COPYING
diff --git a/cdist/conf/type/__consul/manifest b/cdist/conf/type/__consul/manifest
index 156eb667..7d0e73c5 100755
--- a/cdist/conf/type/__consul/manifest
+++ b/cdist/conf/type/__consul/manifest
@@ -1,8 +1,7 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
# 2016 Nico Schottelius (nico-cdist at schottelius.org)
-# 2018 Darko Poljak (darko.poljak at gmail.com)
#
# This file is part of cdist.
#
@@ -24,7 +23,7 @@
os=$(cat "$__global/explorer/os")
case "$os" in
- alpine|scientific|centos|redhat|ubuntu|debian|devuan|archlinux|gentoo)
+ scientific|centos|redhat|ubuntu|debian|devuan|archlinux|gentoo)
# any linux should work
:
;;
@@ -45,17 +44,12 @@ if [ ! -d "$version_dir" ]; then
exit 1
fi
-if [ -f "$__object/parameter/direct" ]; then
- __package unzip
- __package curl
-else
- __staged_file /usr/local/bin/consul \
- --source "$(cat "$version_dir/source")" \
- --cksum "$(cat "$version_dir/cksum")" \
- --fetch-command 'curl -s -L "%s"' \
- --prepare-command 'unzip -p "%s"' \
- --state "$(cat "$__object/parameter/state")" \
- --group root \
- --owner root \
- --mode 755
-fi
+__staged_file /usr/local/bin/consul \
+ --source "$(cat "$version_dir/source")" \
+ --cksum "$(cat "$version_dir/cksum")" \
+ --fetch-command 'curl -s -L "%s"' \
+ --prepare-command 'unzip -p "%s"' \
+ --state "$(cat "$__object/parameter/state")" \
+ --group root \
+ --owner root \
+ --mode 755
diff --git a/cdist/conf/type/__consul/parameter/boolean b/cdist/conf/type/__consul/parameter/boolean
deleted file mode 100644
index aa81b5e0..00000000
--- a/cdist/conf/type/__consul/parameter/boolean
+++ /dev/null
@@ -1 +0,0 @@
-direct
diff --git a/cdist/conf/type/__consul/parameter/default/version b/cdist/conf/type/__consul/parameter/default/version
index af0b7ddb..d2b13eb6 100644
--- a/cdist/conf/type/__consul/parameter/default/version
+++ b/cdist/conf/type/__consul/parameter/default/version
@@ -1 +1 @@
-1.0.6
+0.6.4
diff --git a/cdist/conf/type/__consul_agent/files/consul.sys-openrc b/cdist/conf/type/__consul_agent/files/consul.sys-openrc
deleted file mode 100644
index 1dbe9375..00000000
--- a/cdist/conf/type/__consul_agent/files/consul.sys-openrc
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/sbin/openrc-run
-# 2019 Nico Schottelius (nico-cdist at schottelius.org)
-
-description="consul agent"
-
-pidfile="${CONSUL_PIDFILE:-"/var/run/$RC_SVCNAME/pidfile"}"
-command="${CONSUL_BINARY:-"/usr/local/bin/consul"}"
-
-
-checkconfig() {
- if [ ! -d /var/run/consul ] ; then
- mkdir -p /var/run/consul || return 1
- chown consul:consul /var/run/$NAME || return 1
- chmod 2770 /var/run/$NAME || return 1
- fi
-}
-
-start() {
- need net
-
- start-stop-daemon --start --quiet --oknodo \
- --pidfile "$pidfile" --background \
- --exec $command -- agent -pid-file="$pidfile" -config-dir /etc/consul/conf.d
-}
-start_pre() {
- checkconfig
-}
-
-stop() {
- if [ "${RC_CMD}" = "restart" ] ; then
- checkconfig || return 1
- fi
-
- ebegin "Stopping $RC_SVCNAME"
- start-stop-daemon --stop --exec "$command" \
- --pidfile "$pidfile" --quiet
- eend $?
-}
diff --git a/cdist/conf/type/__consul_agent/files/consul.sysv-debian b/cdist/conf/type/__consul_agent/files/consul.sysv-debian
index 4f43c000..a75c555d 100644
--- a/cdist/conf/type/__consul_agent/files/consul.sysv-debian
+++ b/cdist/conf/type/__consul_agent/files/consul.sysv-debian
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# 2015-2018 Nico Schottelius (nico-cdist at schottelius.org)
+# 2015 Nico Schottelius (nico-cdist at schottelius.org)
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
@@ -18,24 +18,11 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
#
-### BEGIN INIT INFO
-# Provides: consul
-# Required-Start: $network $local_fs $remote_fs
-# Required-Stop: $local_fs
-# Should-Start:
-# Should-Stop:
-# Short-Description: consul
-# Description: consul agent
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-### END INIT INFO
if [ -f "/etc/default/consul" ]; then
- # shellcheck disable=SC1091
. /etc/default/consul
fi
-# shellcheck disable=SC1091
. /lib/lsb/init-functions
NAME=consul
diff --git a/cdist/conf/type/__consul_agent/files/consul.sysv-redhat b/cdist/conf/type/__consul_agent/files/consul.sysv-redhat
index 58fc9bd9..13dafd2e 100644
--- a/cdist/conf/type/__consul_agent/files/consul.sysv-redhat
+++ b/cdist/conf/type/__consul_agent/files/consul.sysv-redhat
@@ -11,52 +11,49 @@
# pidfile: /var/run/consul/pidfile
# Source function library.
-
-# shellcheck disable=SC1091
. /etc/init.d/functions
NAME=consul
CONSUL=/usr/local/bin/consul
-CONFIG="/etc/$NAME/conf.d"
-PID_FILE="/var/run/$NAME/pidfile"
-LOG_FILE="/var/log/$NAME"
+CONFIG=/etc/$NAME/conf.d
+PID_FILE=/var/run/$NAME/pidfile
+LOG_FILE=/var/log/$NAME
-# shellcheck disable=SC1090
-[ -e "/etc/sysconfig/$NAME" ] && . "/etc/sysconfig/$NAME"
-export GOMAXPROCS="${GOMAXPROCS:-2}"
+[ -e /etc/sysconfig/$NAME ] && . /etc/sysconfig/$NAME
+export GOMAXPROCS=${GOMAXPROCS:-2}
-mkdir -p "/var/run/$NAME"
-chown consul:consul "/var/run/$NAME"
-chmod 2770 "/var/run/$NAME"
+mkdir -p /var/run/$NAME
+chown consul:consul /var/run/$NAME
+chmod 2770 /var/run/$NAME
start() {
- printf "Starting %s: " "$NAME"
+ echo -n "Starting $NAME: "
daemon --user=consul \
--pidfile="$PID_FILE" \
"$CONSUL" agent -pid-file="$PID_FILE" -config-dir "$CONFIG" >> "$LOG_FILE" &
retcode=$?
- touch "/var/lock/subsys/$NAME"
- return "$retcode"
+ touch /var/lock/subsys/$NAME
+ return $retcode
}
stop() {
- printf "Shutting down %s: " "$NAME"
- killproc -p "$PID_FILE" "$NAME"
+ echo -n "Shutting down $NAME: "
+ killproc -p "$PID_FILE" $NAME
retcode=$?
- rm -f "/var/lock/subsys/$NAME"
- return "$retcode"
+ rm -f /var/lock/subsys/$NAME
+ return $retcode
}
case "$1" in
start)
- if status -p "$PID_FILE" "$NAME" >/dev/null; then
+ if $(status -p "$PID_FILE" $NAME >/dev/null); then
echo "$NAME already running"
else
start
fi
;;
stop)
- if status -p "$PID_FILE" "$NAME" >/dev/null; then
+ if $(status -p "$PID_FILE" $NAME >/dev/null); then
stop
else
echo "$NAME not running"
@@ -66,25 +63,25 @@ case "$1" in
"$CONSUL" info
;;
status)
- status -p "$PID_FILE" "$NAME"
+ status -p "$PID_FILE" $NAME
exit $?
;;
restart)
- if status -p "$PID_FILE" "$NAME" >/dev/null; then
+ if $(status -p "$PID_FILE" $NAME >/dev/null); then
stop
fi
start
;;
reload)
- if status -p "$PID_FILE" "$NAME" >/dev/null; then
- kill -HUP "$(cat "$PID_FILE")"
+ if $(status -p "$PID_FILE" $NAME >/dev/null); then
+ kill -HUP `cat $PID_FILE`
else
echo "$NAME not running"
fi
;;
condrestart)
- if [ -f "/var/lock/subsys/$NAME" ]; then
- if status -p "$PID_FILE" "$NAME" >/dev/null; then
+ if [ -f /var/lock/subsys/$NAME ]; then
+ if $(status -p "$PID_FILE" $NAME >/dev/null); then
stop
fi
start
diff --git a/cdist/conf/type/__consul_agent/gencode-remote b/cdist/conf/type/__consul_agent/gencode-remote
index 997aa831..04662967 100755
--- a/cdist/conf/type/__consul_agent/gencode-remote
+++ b/cdist/conf/type/__consul_agent/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__consul_agent/man.rst b/cdist/conf/type/__consul_agent/man.rst
index 62ee70bb..966abc60 100644
--- a/cdist/conf/type/__consul_agent/man.rst
+++ b/cdist/conf/type/__consul_agent/man.rst
@@ -116,9 +116,6 @@ verify-incoming
verify-outgoing
enforce the use of TLS and verify the peers authenticity on outgoing connections
-use-distribution-package
- uses distribution package instead of upstream binary
-
EXAMPLES
--------
diff --git a/cdist/conf/type/__consul_agent/manifest b/cdist/conf/type/__consul_agent/manifest
index 7b54529c..64efd366 100755
--- a/cdist/conf/type/__consul_agent/manifest
+++ b/cdist/conf/type/__consul_agent/manifest
@@ -1,8 +1,7 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2015-2020 Nico Schottelius (nico-cdist at schottelius.org)
-# 2019 Timothée Floure (timothee.floure at ungleich.ch)
+# 2015 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -20,87 +19,132 @@
# along with cdist. If not, see .
#
+
os=$(cat "$__global/explorer/os")
-###
-# Type parameters.
+case "$os" in
+ scientific|centos|debian|devuan|redhat|ubuntu)
+ # whitelist safeguard
+ :
+ ;;
+ *)
+ echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
+ echo "Please contribute an implementation for it if you can." >&2
+ exit 1
+ ;;
+esac
state="$(cat "$__object/parameter/state")"
user="$(cat "$__object/parameter/user")"
group="$(cat "$__object/parameter/group")"
-release=$(cat "$__global/explorer/lsb_release")
-if [ -f "$__object/parameter/use-distribution-package" ]; then
- use_distribution_package=1
-fi
-
-###
-# Those are default that might be overriden by os-specific logic.
-
data_dir="/var/lib/consul"
+conf_dir="/etc/consul/conf.d"
+conf_file="config.json"
-
-
-tls_dir="$conf_dir/tls"
-
-case "$os" in
- alpine)
- conf_dir="/etc/consul"
- conf_file="server.json"
- ;;
- *)
- conf_dir="/etc/consul/conf.d"
- conf_file="config.json"
- ;;
+# FIXME: there has got to be a better way to handle the dependencies in this case
+case "$state" in
+ present)
+ __group "$group" --system --state "$state"
+ require="__group/$group" \
+ __user "$user" --system --gid "$group" \
+ --home "$data_dir" --state "$state"
+ export require="__user/consul"
+ ;;
+ absent)
+ echo "Sorry, state=absent currently not supported :-(" >&2
+ exit 1
+ require="$__object_name" \
+ __user "$user" --system --gid "$group" --state "$state"
+ require="__user/$user" \
+ __group "$group" --system --state "$state"
+ ;;
esac
-###
-# Sane deployment, based on distribution package when available.
+__directory /etc/consul \
+ --owner root --group "$group" --mode 750 --state "$state"
+require="__directory/etc/consul" \
+ __directory "$conf_dir" \
+ --owner root --group "$group" --mode 750 --state "$state"
-distribution_setup () {
- case "$os" in
- debian)
- # consul is only available starting Debian 10 (buster).
- # See https://packages.debian.org/buster/consul
- if [ "$release" -lt 10 ]; then
- echo "Consul is not available for your debian release." >&2
- echo "Please use the 'manual' (i.e. non-package) installation or \
- upgrade the target system." >&2
- exit 1
- fi
+if [ -f "$__object/parameter/ca-file-source" -o -f "$__object/parameter/cert-file-source" -o -f "$__object/parameter/key-file-source" ]; then
+ # create directory for ssl certs
+ require="__directory/etc/consul" \
+ __directory /etc/consul/ssl \
+ --owner root --group "$group" --mode 750 --state "$state"
+fi
- # Override previously defined environment to match debian packaging.
- conf_dir='/etc/consul.d'
- user='consul'
- group='consul'
- ;;
- alpine)
- # consul is only available starting Alpine 3.12 (= edge during the 3.11 cycle).
- # See https://pkgs.alpinelinux.org/packages?name=consul&branch=edge
+__directory "$data_dir" \
+ --owner "$user" --group "$group" --mode 770 --state "$state"
- # Override previously defined environment to match alpine packaging.
- conf_dir='/etc/consul'
- conf_file='server.json'
- data_dir='/var/consul'
- user='consul'
- group='consul'
- ;;
- *)
- echo "Your operating system ($os) is currently not supported with the \
- --use-distribution-package flag (${__type##*/})." >&2
- echo "Please use non-package installation or contribute an \
- implementation for if you can." >&2
- exit 1
- ;;
- esac
- # Install consul package.
- __package consul --state "$state"
+# Generate json config file
+(
+echo "{"
- export config_deployment_requires="__package/consul"
-}
+# parameters we define ourself
+printf ' "data_dir": "%s"\n' "$data_dir"
-###
-# LEGACY manual deployment, kept for compatibility reasons.
+for param in $(ls "$__object/parameter/"); do
+ case "$param" in
+ state|user|group|json-config) continue ;;
+ ca-file-source|cert-file-source|key-file-source)
+ source="$(cat "$__object/parameter/$param")"
+ destination="/etc/consul/ssl/${source##*/}"
+ require="__directory/etc/consul/ssl" \
+ __file "$destination" \
+ --owner root --group consul --mode 640 \
+ --source "$source" \
+ --state "$state"
+ key="$(echo "${param%-*}" | tr '-' '_')"
+ printf ' ,"%s": "%s"\n' "$key" "$destination"
+ ;;
+ disable-remote-exec|disable-update-check|leave-on-terminate|rejoin-after-leave|server|enable-syslog|verify-incoming|verify-outgoing)
+ # handle boolean parameters
+ key="$(echo "$param" | tr '-' '_')"
+ printf ' ,"%s": true\n' "$key"
+ ;;
+ retry-join)
+ # join multiple parameters into json array
+ retry_join="$(awk '{printf "\""$1"\","}' "$__object/parameter/retry-join")"
+ # remove trailing ,
+ printf ' ,"retry_join": [%s]\n' "${retry_join%*,}"
+ ;;
+ retry-join-wan)
+ # join multiple parameters into json array over wan
+ retry_join_wan="$(awk '{printf "\""$1"\","}' "$__object/parameter/retry-join-wan")"
+ # remove trailing ,
+ printf ' ,"retry_join_wan": [%s]\n' "${retry_join_wan%*,}"
+ ;;
+ bootstrap-expect)
+ # integer key=value parameters
+ key="$(echo "$param" | tr '-' '_')"
+ printf ' ,"%s": %s\n' "$key" "$(cat "$__object/parameter/$param")"
+ ;;
+ *)
+ # string key=value parameters
+ key="$(echo "$param" | tr '-' '_')"
+ printf ' ,"%s": "%s"\n' "$key" "$(cat "$__object/parameter/$param")"
+ ;;
+ esac
+done
+if [ -f "$__object/parameter/json-config" ]; then
+ json_config="$(cat "$__object/parameter/json-config")"
+ if [ "$json_config" = "-" ]; then
+ json_config="$__object/stdin"
+ fi
+ # remove leading and trailing whitespace and commas from first and last line
+ # indent each line with 3 spaces for consistency
+ json=$(sed -e 's/^[ \t]*/ /' -e '1s/^[ \t,]*//' -e '$s/[ \t,]*$//' "$json_config")
+ printf ' ,%s\n' "$json"
+fi
+echo "}"
+) | \
+require="__directory${conf_dir}" \
+ __config_file "${conf_dir}/${conf_file}" \
+ --owner root --group "$group" --mode 640 \
+ --state "$state" \
+ --onchange 'service consul status >/dev/null && service consul reload || true' \
+ --source -
init_sysvinit()
{
@@ -134,186 +178,48 @@ init_upstart()
require="__file/etc/init/consul.conf" __start_on_boot consul
}
-manual_setup () {
- case "$os" in
- alpine|scientific|centos|debian|devuan|redhat|ubuntu)
- # whitelist safeguard
- :
- ;;
- *)
- echo "Your operating system ($os) is currently not supported by this \
- type (${__type##*/})." >&2
- echo "Please contribute an implementation for it if you can." >&2
- exit 1
- ;;
- esac
+# Install init script to start on boot
+case "$os" in
+ centos|redhat)
+ os_version="$(sed 's/[^0-9.]//g' "$__global/explorer/os_version")"
+ major_version="${os_version%%.*}"
+ case "$major_version" in
+ [456])
+ init_sysvinit redhat
+ ;;
+ 7)
+ init_systemd
+ ;;
+ *)
+ echo "Unsupported CentOS/Redhat version: $os_version" >&2
+ exit 1
+ ;;
+ esac
+ ;;
- # FIXME: there has got to be a better way to handle the dependencies in this case
- case "$state" in
- present)
- __group "$group" --system --state "$state"
- require="__group/$group" __user "$user" \
- --system --gid "$group" --home "$data_dir" --state "$state"
- ;;
- *)
- echo "The $state state is not (yet?) supported by this type." >&2
- exit 1
- ;;
- esac
+ debian)
+ os_version=$(cat "$__global/explorer/os_version")
+ major_version="${os_version%%.*}"
- # Create data directory.
- require="__user/consul" __directory "$data_dir" \
- --owner "$user" --group "$group" --mode 770 --state "$state"
+ case "$major_version" in
+ [567])
+ init_sysvinit debian
+ ;;
+ 8)
+ init_systemd
+ ;;
+ *)
+ echo "Unsupported Debian version $os_version" >&2
+ exit 1
+ ;;
+ esac
+ ;;
- # Create config directory.
- require="__user/consul" __directory "$conf_dir" \
- --parents --owner root --group "$group" --mode 750 --state "$state"
+ devuan)
+ init_sysvinit debian
+ ;;
- # Install init script to start on boot
- case "$os" in
- devuan)
- init_sysvinit debian
- ;;
- centos|redhat)
- os_version="$(sed 's/[^0-9.]//g' "$__global/explorer/os_version")"
- major_version="${os_version%%.*}"
- case "$major_version" in
- [456])
- init_sysvinit redhat
- ;;
- 7)
- init_systemd
- ;;
- *)
- echo "Unsupported CentOS/Redhat version: $os_version" >&2
- exit 1
- ;;
- esac
- ;;
-
- debian)
- os_version=$(cat "$__global/explorer/os_version")
- major_version="${os_version%%.*}"
-
- case "$major_version" in
- [567])
- init_sysvinit debian
- ;;
- [89]|10)
- init_systemd
- ;;
- *)
- echo "Unsupported Debian version $os_version" >&2
- exit 1
- ;;
- esac
- ;;
-
- ubuntu)
- init_upstart
- ;;
- esac
-
- config_deployment_requires="__user/consul __directory/$conf_dir"
-}
-
-###
-# Trigger requested installation method.
-if [ $use_distribution_package ]; then
- distribution_setup
-else
- manual_setup
-fi
-
-###
-# Install TLS certificates.
-
-if [ -f "$__object/parameter/ca-file-source" ] || \
- [ -f "$__object/parameter/cert-file-source" ] || \
- [ -f "$__object/parameter/key-file-source" ]; then
-
- requires="$config_deployment_requires" __directory "$tls_dir" \
- --owner root --group "$group" --mode 750 --state "$state"
-
- # Append to service restart requirements.
- restart_requires="$restart_requires __directory/$conf_dir/tls"
-fi
-
-###
-# Generate and deploy configuration.
-
-json_configuration=$(
- echo "{"
-
- # parameters we define ourself
- printf ' "data_dir": "%s"\n' "$data_dir"
-
- cd "$__object/parameter/"
- for param in *; do
- case "$param" in
- state|user|group|json-config|use-distribution-package) continue ;;
- ca-file-source|cert-file-source|key-file-source)
- source="$(cat "$__object/parameter/$param")"
- destination="$tls_dir/${source##*/}"
- require="__directory/$tls_dir" \
- __file "$destination" \
- --owner root --group consul --mode 640 \
- --source "$source" \
- --state "$state"
- key="$(echo "${param%-*}" | tr '-' '_')"
- printf ' ,"%s": "%s"\n' "$key" "$destination"
- ;;
- disable-remote-exec|disable-update-check|leave-on-terminate\
- |rejoin-after-leave|server|enable-syslog|verify-incoming|verify-outgoing)
- # handle boolean parameters
- key="$(echo "$param" | tr '-' '_')"
- printf ' ,"%s": true\n' "$key"
- ;;
- retry-join)
- # join multiple parameters into json array
- retry_join="$(awk '{printf "\""$1"\","}' "$__object/parameter/retry-join")"
- # remove trailing ,
- printf ' ,"retry_join": [%s]\n' "${retry_join%*,}"
- ;;
- retry-join-wan)
- # join multiple parameters into json array over wan
- retry_join_wan="$(awk '{printf "\""$1"\","}' "$__object/parameter/retry-join-wan")"
- # remove trailing ,
- printf ' ,"retry_join_wan": [%s]\n' "${retry_join_wan%*,}"
- ;;
- bootstrap-expect)
- # integer key=value parameters
- key="$(echo "$param" | tr '-' '_')"
- printf ' ,"%s": %s\n' "$key" "$(cat "$__object/parameter/$param")"
- ;;
- *)
- # string key=value parameters
- key="$(echo "$param" | tr '-' '_')"
- printf ' ,"%s": "%s"\n' "$key" "$(cat "$__object/parameter/$param")"
- ;;
- esac
- done
- if [ -f "$__object/parameter/json-config" ]; then
- json_config="$(cat "$__object/parameter/json-config")"
- if [ "$json_config" = "-" ]; then
- json_config="$__object/stdin"
- fi
- # remove leading and trailing whitespace and commas from first and last line
- # indent each line with 3 spaces for consistency
- json=$(sed -e 's/^[ \t]*/ /' -e '1s/^[ \t,]*//' -e '$s/[ \t,]*$//' "$json_config")
- printf ' ,%s\n' "$json"
- fi
- echo "}"
-)
-echo "$json_configuration" | require="$config_deployment_requires" \
- __file "$conf_dir/$conf_file" \
- --owner root --group "$group" --mode 640 \
- --state "$state" \
- --source -
-
-# Set configuration deployment as requirement for service restart.
-restart_requires="__file/$conf_dir/$conf_file"
-
-###
-# Restart consul agent after everything else.
-require="$restart_requires" __service consul --action restart
+ ubuntu)
+ init_upstart
+ ;;
+esac
diff --git a/cdist/conf/type/__consul_agent/parameter/boolean b/cdist/conf/type/__consul_agent/parameter/boolean
index c86853c3..91f7f17e 100644
--- a/cdist/conf/type/__consul_agent/parameter/boolean
+++ b/cdist/conf/type/__consul_agent/parameter/boolean
@@ -6,4 +6,3 @@ server
enable-syslog
verify-incoming
verify-outgoing
-use-distribution-package
diff --git a/cdist/conf/type/__consul_check/explorer/conf-dir b/cdist/conf/type/__consul_check/explorer/conf-dir
deleted file mode 120000
index daa712c3..00000000
--- a/cdist/conf/type/__consul_check/explorer/conf-dir
+++ /dev/null
@@ -1 +0,0 @@
-../../__consul_service/explorer/conf-dir
\ No newline at end of file
diff --git a/cdist/conf/type/__consul_check/manifest b/cdist/conf/type/__consul_check/manifest
index 522aa1a9..658e2598 100755
--- a/cdist/conf/type/__consul_check/manifest
+++ b/cdist/conf/type/__consul_check/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015-2016 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -19,7 +19,7 @@
#
name="$(cat "$__object/parameter/name" 2>/dev/null || echo "$__object_id")"
-conf_dir=$(cat "$__object/explorer/conf-dir")
+conf_dir="/etc/consul/conf.d"
conf_file="check_${name}.json"
state="$(cat "$__object/parameter/state")"
@@ -40,7 +40,7 @@ if [ ! -f "$__object/parameter/interval" ]; then
fi
done
fi
-if [ -f "$__object/parameter/docker-container-id" ] && [ ! -f "$__object/parameter/script" ]; then
+if [ -f "$__object/parameter/docker-container-id" -a ! -f "$__object/parameter/script" ]; then
echo "When using --docker-container-id you must also define --script." >&2
exit 1
fi
@@ -50,8 +50,7 @@ fi
echo "{"
printf ' "check": {\n'
printf ' "name": "%s"\n' "$name"
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
state|name) continue ;;
*)
diff --git a/cdist/conf/type/__consul_reload/gencode-remote b/cdist/conf/type/__consul_reload/gencode-remote
index 839fd0c3..9369db73 100755
--- a/cdist/conf/type/__consul_reload/gencode-remote
+++ b/cdist/conf/type/__consul_reload/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__consul_service/explorer/conf-dir b/cdist/conf/type/__consul_service/explorer/conf-dir
deleted file mode 100644
index 0fc9ef84..00000000
--- a/cdist/conf/type/__consul_service/explorer/conf-dir
+++ /dev/null
@@ -1,15 +0,0 @@
-# Determine the configuration directory used by consul.
-
-check_dir () {
- if [ -d "$1" ]; then
- printf '%s' "$1"
- exit
- fi
-}
-
-check_dir '/etc/consul/conf.d'
-check_dir '/etc/consul.d'
-check_dir '/etc/consul'
-
-echo 'Could not determine consul configuration dir. Exiting.' >&2
-exit 1
diff --git a/cdist/conf/type/__consul_service/manifest b/cdist/conf/type/__consul_service/manifest
index d16f18e0..4f52d542 100755
--- a/cdist/conf/type/__consul_service/manifest
+++ b/cdist/conf/type/__consul_service/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -19,20 +19,20 @@
#
name="$(cat "$__object/parameter/name" 2>/dev/null || echo "$__object_id")"
-conf_dir=$(cat "$__object/explorer/conf-dir")
+conf_dir="/etc/consul/conf.d"
conf_file="service_${name}.json"
state="$(cat "$__object/parameter/state")"
# Sanity checks
-if [ -f "$__object/parameter/check-script" ] && [ -f "$__object/parameter/check-ttl" ]; then
+if [ -f "$__object/parameter/check-script" -a -f "$__object/parameter/check-ttl" ]; then
echo "Use either --check-script together with --check-interval OR --check-ttl, but not both" >&2
exit 1
fi
-if [ -f "$__object/parameter/check-script" ] && [ ! -f "$__object/parameter/check-interval" ]; then
+if [ -f "$__object/parameter/check-script" -a ! -f "$__object/parameter/check-interval" ]; then
echo "When using --check-script you must also define --check-interval" >&2
exit 1
fi
-if [ -f "$__object/parameter/check-http" ] && [ ! -f "$__object/parameter/check-interval" ]; then
+if [ -f "$__object/parameter/check-http" -a ! -f "$__object/parameter/check-interval" ]; then
echo "When using --check-http you must also define --check-interval" >&2
exit 1
fi
@@ -42,10 +42,9 @@ fi
echo "{"
printf ' "service": {\n'
printf ' "name": "%s"\n' "$name"
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
- state|name|check-interval|conf-dir) continue ;;
+ state|name|check-interval) continue ;;
check-script)
printf ' ,"check": {\n'
printf ' "script": "%s"\n' "$(cat "$__object/parameter/check-script")"
@@ -86,6 +85,7 @@ echo " }"
# end json file
echo "}"
) | \
+require="__directory${conf_dir}" \
__config_file "${conf_dir}/${conf_file}" \
--owner root --group consul --mode 640 \
--state "$state" \
diff --git a/cdist/conf/type/__consul_template/files/consul-template.sysv b/cdist/conf/type/__consul_template/files/consul-template.sysv
index b263915a..0a463020 100644
--- a/cdist/conf/type/__consul_template/files/consul-template.sysv
+++ b/cdist/conf/type/__consul_template/files/consul-template.sysv
@@ -10,75 +10,72 @@
# pidfile: /var/run/consul-template/pidfile
# Source function library.
-
-# shellcheck disable=SC1091
. /etc/init.d/functions
NAME=consul-template
CONSUL_TEMPLATE=/usr/local/bin/consul-template
-CONFIG="/etc/$NAME/conf.d"
-PID_FILE="/var/run/$NAME/pidfile"
-LOG_FILE="/var/log/$NAME"
+CONFIG=/etc/$NAME/conf.d
+PID_FILE=/var/run/$NAME/pidfile
+LOG_FILE=/var/log/$NAME
-# shellcheck disable=SC1090
-[ -e "/etc/sysconfig/$NAME" ] && . "/etc/sysconfig/$NAME"
-export CONSUL_TEMPLATE_LOG="${CONSUL_TEMPLATE_LOG:-info}"
-export GOMAXPROCS="${GOMAXPROCS:-2}"
+[ -e /etc/sysconfig/$NAME ] && . /etc/sysconfig/$NAME
+export CONSUL_TEMPLATE_LOG=${CONSUL_TEMPLATE_LOG:-info}
+export GOMAXPROCS=${GOMAXPROCS:-2}
-mkdir -p "/var/run/$NAME"
+mkdir -p /var/run/$NAME
start() {
- printf "Starting %s: " "$NAME"
+ echo -n "Starting $NAME: "
daemon --pidfile="$PID_FILE" \
"$CONSUL_TEMPLATE" -config "$CONFIG" >> "$LOG_FILE" 2>&1 &
- echo "$!" > "$PID_FILE"
+ echo $! > "$PID_FILE"
retcode=$?
- touch "/var/lock/subsys/$NAME"
- return "$retcode"
+ touch /var/lock/subsys/$NAME
+ return $retcode
}
stop() {
- printf "Shutting down %s: " "$NAME"
- killproc -p "$PID_FILE" "$CONSUL_TEMPLATE"
+ echo -n "Shutting down $NAME: "
+ killproc -p $PID_FILE $CONSUL_TEMPLATE
retcode=$?
- rm -f "/var/lock/subsys/$NAME"
- return "$retcode"
+ rm -f /var/lock/subsys/$NAME
+ return $retcode
}
case "$1" in
start)
- if status -p "$PID_FILE" "$NAME" >/dev/null; then
+ if $(status -p "$PID_FILE" $NAME >/dev/null); then
echo "$NAME already running"
else
start
fi
;;
stop)
- if status -p "$PID_FILE" "$NAME" >/dev/null; then
+ if $(status -p "$PID_FILE" $NAME >/dev/null); then
stop
else
echo "$NAME not running"
fi
;;
status)
- status -p "$PID_FILE" "$NAME"
+ status -p "$PID_FILE" $NAME
exit $?
;;
restart)
- if status -p "$PID_FILE" "$NAME" >/dev/null; then
+ if $(status -p "$PID_FILE" $NAME >/dev/null); then
stop
fi
start
;;
reload)
- if status -p "$PID_FILE" "$NAME" >/dev/null; then
- kill -HUP "$(cat "$PID_FILE")"
+ if $(status -p "$PID_FILE" $NAME >/dev/null); then
+ kill -HUP `cat $PID_FILE`
else
echo "$NAME not running"
fi
;;
condrestart)
- if [ -f "/var/lock/subsys/$NAME" ]; then
- if status -p "$PID_FILE" "$NAME" >/dev/null; then
+ if [ -f /var/lock/subsys/$NAME ]; then
+ if $(status -p "$PID_FILE" $NAME >/dev/null); then
stop
fi
start
diff --git a/cdist/conf/type/__consul_template/manifest b/cdist/conf/type/__consul_template/manifest
index b02fc332..fd249185 100755
--- a/cdist/conf/type/__consul_template/manifest
+++ b/cdist/conf/type/__consul_template/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -75,8 +75,7 @@ require="__directory/etc/consul-template" \
# Generate hcl config file
(
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
auth-password|state|ssl-*|syslog-*|version|vault-token|vault-ssl*) continue ;;
auth-username)
diff --git a/cdist/conf/type/__consul_template_template/manifest b/cdist/conf/type/__consul_template_template/manifest
index 1eae1fad..b832075d 100755
--- a/cdist/conf/type/__consul_template_template/manifest
+++ b/cdist/conf/type/__consul_template_template/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -26,36 +26,32 @@ template_dir="/etc/consul-template/template"
require=""
# Sanity checks
-if [ -f "$__object/parameter/source" ] && [ -f "$__object/parameter/source-file" ]; then
+if [ -f "$__object/parameter/source" -a -f "$__object/parameter/source-file" ]; then
echo "Use either --source OR --source-file, but not both." >&2
exit 1
fi
-if [ ! -f "$__object/parameter/source" ] && [ ! -f "$__object/parameter/source-file" ]; then
+if [ ! -f "$__object/parameter/source" -a ! -f "$__object/parameter/source-file" ]; then
echo "Either --source OR --source-file must be given." >&2
exit 1
fi
-if [ -f "$__object/parameter/source-file" ]; then
- destination="${template_dir}/${name}"
- require="__file${destination}"
-fi
-
# Generate hcl config file
-{
+(
printf 'template {\n'
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
source-file)
source="$(cat "$__object/parameter/$param")"
if [ "$source" = "-" ]; then
source="$__object/stdin"
fi
+ destination="${template_dir}/${name}"
require="__directory${template_dir}" \
__file "$destination" \
--owner root --group root --mode 640 \
--source "$source" \
--state "$state"
+ export require="__file${destination}"
printf ' source = "%s"\n' "$destination"
;;
@@ -69,7 +65,7 @@ for param in *; do
esac
done
printf '}\n'
-} | \
+) | \
require="$require __directory${conf_dir}" \
__config_file "${conf_dir}/${conf_file}" \
--owner root --group root --mode 640 \
diff --git a/cdist/conf/type/__consul_watch_checks/explorer/conf-dir b/cdist/conf/type/__consul_watch_checks/explorer/conf-dir
deleted file mode 120000
index daa712c3..00000000
--- a/cdist/conf/type/__consul_watch_checks/explorer/conf-dir
+++ /dev/null
@@ -1 +0,0 @@
-../../__consul_service/explorer/conf-dir
\ No newline at end of file
diff --git a/cdist/conf/type/__consul_watch_checks/manifest b/cdist/conf/type/__consul_watch_checks/manifest
index 4976b25a..c05ae9eb 100755
--- a/cdist/conf/type/__consul_watch_checks/manifest
+++ b/cdist/conf/type/__consul_watch_checks/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -20,12 +20,12 @@
cdist_type="${__type##*/}"
watch_type="${cdist_type##*_}"
-conf_dir=$(cat "$__object/explorer/conf-dir")
+conf_dir="/etc/consul/conf.d"
conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")"
# Sanity checks
-if [ -f "$__object/parameter/filter-service" ] && [ -f "$__object/parameter/filter-state" ]; then
+if [ -f "$__object/parameter/filter-service" -a -f "$__object/parameter/filter-state" ]; then
echo "Use either --filter-service or --filter-state but not both." >&2
exit 1
fi
@@ -35,8 +35,7 @@ fi
echo "{"
printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type"
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
state) continue ;;
filter-*)
diff --git a/cdist/conf/type/__consul_watch_event/explorer/conf-dir b/cdist/conf/type/__consul_watch_event/explorer/conf-dir
deleted file mode 120000
index daa712c3..00000000
--- a/cdist/conf/type/__consul_watch_event/explorer/conf-dir
+++ /dev/null
@@ -1 +0,0 @@
-../../__consul_service/explorer/conf-dir
\ No newline at end of file
diff --git a/cdist/conf/type/__consul_watch_event/manifest b/cdist/conf/type/__consul_watch_event/manifest
index b17680c1..4e36a10d 100755
--- a/cdist/conf/type/__consul_watch_event/manifest
+++ b/cdist/conf/type/__consul_watch_event/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -20,7 +20,7 @@
cdist_type="${__type##*/}"
watch_type="${cdist_type##*_}"
-conf_dir=$(cat "$__object/explorer/conf-dir")
+conf_dir="/etc/consul/conf.d"
conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")"
@@ -29,8 +29,7 @@ state="$(cat "$__object/parameter/state")"
echo "{"
printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type"
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
state) continue ;;
*)
diff --git a/cdist/conf/type/__consul_watch_key/explorer/conf-dir b/cdist/conf/type/__consul_watch_key/explorer/conf-dir
deleted file mode 120000
index daa712c3..00000000
--- a/cdist/conf/type/__consul_watch_key/explorer/conf-dir
+++ /dev/null
@@ -1 +0,0 @@
-../../__consul_service/explorer/conf-dir
\ No newline at end of file
diff --git a/cdist/conf/type/__consul_watch_key/manifest b/cdist/conf/type/__consul_watch_key/manifest
index b17680c1..4e36a10d 100755
--- a/cdist/conf/type/__consul_watch_key/manifest
+++ b/cdist/conf/type/__consul_watch_key/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -20,7 +20,7 @@
cdist_type="${__type##*/}"
watch_type="${cdist_type##*_}"
-conf_dir=$(cat "$__object/explorer/conf-dir")
+conf_dir="/etc/consul/conf.d"
conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")"
@@ -29,8 +29,7 @@ state="$(cat "$__object/parameter/state")"
echo "{"
printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type"
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
state) continue ;;
*)
diff --git a/cdist/conf/type/__consul_watch_keyprefix/explorer/conf-dir b/cdist/conf/type/__consul_watch_keyprefix/explorer/conf-dir
deleted file mode 120000
index daa712c3..00000000
--- a/cdist/conf/type/__consul_watch_keyprefix/explorer/conf-dir
+++ /dev/null
@@ -1 +0,0 @@
-../../__consul_service/explorer/conf-dir
\ No newline at end of file
diff --git a/cdist/conf/type/__consul_watch_keyprefix/manifest b/cdist/conf/type/__consul_watch_keyprefix/manifest
index b17680c1..4e36a10d 100755
--- a/cdist/conf/type/__consul_watch_keyprefix/manifest
+++ b/cdist/conf/type/__consul_watch_keyprefix/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -20,7 +20,7 @@
cdist_type="${__type##*/}"
watch_type="${cdist_type##*_}"
-conf_dir=$(cat "$__object/explorer/conf-dir")
+conf_dir="/etc/consul/conf.d"
conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")"
@@ -29,8 +29,7 @@ state="$(cat "$__object/parameter/state")"
echo "{"
printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type"
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
state) continue ;;
*)
diff --git a/cdist/conf/type/__consul_watch_nodes/explorer/conf-dir b/cdist/conf/type/__consul_watch_nodes/explorer/conf-dir
deleted file mode 120000
index daa712c3..00000000
--- a/cdist/conf/type/__consul_watch_nodes/explorer/conf-dir
+++ /dev/null
@@ -1 +0,0 @@
-../../__consul_service/explorer/conf-dir
\ No newline at end of file
diff --git a/cdist/conf/type/__consul_watch_nodes/manifest b/cdist/conf/type/__consul_watch_nodes/manifest
index b17680c1..4e36a10d 100755
--- a/cdist/conf/type/__consul_watch_nodes/manifest
+++ b/cdist/conf/type/__consul_watch_nodes/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -20,7 +20,7 @@
cdist_type="${__type##*/}"
watch_type="${cdist_type##*_}"
-conf_dir=$(cat "$__object/explorer/conf-dir")
+conf_dir="/etc/consul/conf.d"
conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")"
@@ -29,8 +29,7 @@ state="$(cat "$__object/parameter/state")"
echo "{"
printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type"
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
state) continue ;;
*)
diff --git a/cdist/conf/type/__consul_watch_service/explorer/conf-dir b/cdist/conf/type/__consul_watch_service/explorer/conf-dir
deleted file mode 120000
index daa712c3..00000000
--- a/cdist/conf/type/__consul_watch_service/explorer/conf-dir
+++ /dev/null
@@ -1 +0,0 @@
-../../__consul_service/explorer/conf-dir
\ No newline at end of file
diff --git a/cdist/conf/type/__consul_watch_service/manifest b/cdist/conf/type/__consul_watch_service/manifest
index e8d18328..6011e288 100755
--- a/cdist/conf/type/__consul_watch_service/manifest
+++ b/cdist/conf/type/__consul_watch_service/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -20,7 +20,7 @@
cdist_type="${__type##*/}"
watch_type="${cdist_type##*_}"
-conf_dir=$(cat "$__object/explorer/conf-dir")
+conf_dir="/etc/consul/conf.d"
conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")"
@@ -29,8 +29,7 @@ state="$(cat "$__object/parameter/state")"
echo "{"
printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type"
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
state) continue ;;
passingonly)
diff --git a/cdist/conf/type/__consul_watch_services/explorer/conf-dir b/cdist/conf/type/__consul_watch_services/explorer/conf-dir
deleted file mode 120000
index daa712c3..00000000
--- a/cdist/conf/type/__consul_watch_services/explorer/conf-dir
+++ /dev/null
@@ -1 +0,0 @@
-../../__consul_service/explorer/conf-dir
\ No newline at end of file
diff --git a/cdist/conf/type/__consul_watch_services/manifest b/cdist/conf/type/__consul_watch_services/manifest
index b17680c1..4e36a10d 100755
--- a/cdist/conf/type/__consul_watch_services/manifest
+++ b/cdist/conf/type/__consul_watch_services/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -20,7 +20,7 @@
cdist_type="${__type##*/}"
watch_type="${cdist_type##*_}"
-conf_dir=$(cat "$__object/explorer/conf-dir")
+conf_dir="/etc/consul/conf.d"
conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")"
@@ -29,8 +29,7 @@ state="$(cat "$__object/parameter/state")"
echo "{"
printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type"
-cd "$__object/parameter/"
-for param in *; do
+for param in $(ls "$__object/parameter/"); do
case "$param" in
state) continue ;;
*)
diff --git a/cdist/conf/type/__cron/explorer/entry b/cdist/conf/type/__cron/explorer/entry
index 801861a3..2167e045 100644
--- a/cdist/conf/type/__cron/explorer/entry
+++ b/cdist/conf/type/__cron/explorer/entry
@@ -24,7 +24,7 @@ user="$(cat "$__object/parameter/user")"
if [ -f "$__object/parameter/raw_command" ]; then
command="$(cat "$__object/parameter/command")"
- crontab -u "$user" -l 2>/dev/null | grep "^$command\$" || true
+ crontab -u $user -l 2>/dev/null | grep "^$command\$" || true
else
- crontab -u "$user" -l 2>/dev/null | grep "# $name\$" || true
+ crontab -u $user -l 2>/dev/null | grep "# $name\$" || true
fi
diff --git a/cdist/conf/type/__cron/gencode-remote b/cdist/conf/type/__cron/gencode-remote
old mode 100755
new mode 100644
index 9debbc47..3c3ed6b3
--- a/cdist/conf/type/__cron/gencode-remote
+++ b/cdist/conf/type/__cron/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
@@ -31,28 +31,24 @@ if [ -f "$__object/parameter/raw" ]; then
elif [ -f "$__object/parameter/raw_command" ]; then
entry="$command"
else
- minute="$(cat "$__object/parameter/minute")"
- hour="$(cat "$__object/parameter/hour")"
- day_of_month="$(cat "$__object/parameter/day_of_month")"
- month="$(cat "$__object/parameter/month")"
- day_of_week="$(cat "$__object/parameter/day_of_week")"
+ minute="$(cat "$__object/parameter/minute" 2>/dev/null || echo "*")"
+ hour="$(cat "$__object/parameter/hour" 2>/dev/null || echo "*")"
+ day_of_month="$(cat "$__object/parameter/day_of_month" 2>/dev/null || echo "*")"
+ month="$(cat "$__object/parameter/month" 2>/dev/null || echo "*")"
+ day_of_week="$(cat "$__object/parameter/day_of_week" 2>/dev/null || echo "*")"
entry="$minute $hour $day_of_month $month $day_of_week $command # $name"
fi
mkdir "$__object/files"
echo "$entry" > "$__object/files/entry"
-if [ -s "$__object/explorer/entry" ]; then
- if diff -q "$__object/files/entry" "$__object/explorer/entry" >/dev/null; then
- state_is=present
- else
- state_is=modified
- fi
+if diff -q "$__object/files/entry" "$__object/explorer/entry" >/dev/null; then
+ state_is=present
else
state_is=absent
fi
-state_should="$(cat "$__object/parameter/state")"
+state_should="$(cat "$__object/parameter/state" 2>/dev/null || echo "present")"
[ "$state_is" = "$state_should" ] && exit 0
@@ -62,7 +58,7 @@ state_should="$(cat "$__object/parameter/state")"
# These are the old markers
prefix="#cdist:__cron/$__object_id"
suffix="#/cdist:__cron/$__object_id"
-filter='^# DO NOT EDIT THIS FILE|^# \(.* installed on |^# \(Cron version V|^# \(Cronie version .\..\)$'
+filter="^# DO NOT EDIT THIS FILE|^# \(.* installed on |^# \(Cron version V|^# \(Cronie version .\..\)$"
cat << DONE
crontab -u $user -l 2>/dev/null | grep -v -E "$filter" | awk -v prefix="$prefix" -v suffix="$suffix" '
{
diff --git a/cdist/conf/type/__cron/manifest b/cdist/conf/type/__cron/manifest
old mode 100755
new mode 100644
index e7b51863..9992df25
--- a/cdist/conf/type/__cron/manifest
+++ b/cdist/conf/type/__cron/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Thomas Oettli (otho at sfs.biz)
#
@@ -22,12 +22,3 @@ if [ -f "$__object/parameter/raw" ] && [ -f "$__object/parameter/raw_command" ];
echo "ERROR: both raw and raw_command specified" >&2
exit 1
fi
-
-case "$(cat "$__object/parameter/state")" in
- present) ;;
- absent) ;;
-
- *)
- echo "ERROR: unkown cron state" >&2
- exit 2
-esac
diff --git a/cdist/conf/type/__cron/nonparallel b/cdist/conf/type/__cron/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__cron/parameter/default/day_of_month b/cdist/conf/type/__cron/parameter/default/day_of_month
deleted file mode 100644
index 72e8ffc0..00000000
--- a/cdist/conf/type/__cron/parameter/default/day_of_month
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/cdist/conf/type/__cron/parameter/default/day_of_week b/cdist/conf/type/__cron/parameter/default/day_of_week
deleted file mode 100644
index 72e8ffc0..00000000
--- a/cdist/conf/type/__cron/parameter/default/day_of_week
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/cdist/conf/type/__cron/parameter/default/hour b/cdist/conf/type/__cron/parameter/default/hour
deleted file mode 100644
index 72e8ffc0..00000000
--- a/cdist/conf/type/__cron/parameter/default/hour
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/cdist/conf/type/__cron/parameter/default/minute b/cdist/conf/type/__cron/parameter/default/minute
deleted file mode 100644
index 72e8ffc0..00000000
--- a/cdist/conf/type/__cron/parameter/default/minute
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/cdist/conf/type/__cron/parameter/default/month b/cdist/conf/type/__cron/parameter/default/month
deleted file mode 100644
index 72e8ffc0..00000000
--- a/cdist/conf/type/__cron/parameter/default/month
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/cdist/conf/type/__cron/parameter/default/state b/cdist/conf/type/__cron/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__cron/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__daemontools/files/init.d-svscan b/cdist/conf/type/__daemontools/files/init.d-svscan
index 996eb4e8..127dfdb3 100644
--- a/cdist/conf/type/__daemontools/files/init.d-svscan
+++ b/cdist/conf/type/__daemontools/files/init.d-svscan
@@ -23,9 +23,9 @@ fi
case "$1" in
start)
- printf "Starting daemontools: "
- if ! pidof svscan > /dev/null 2>&1; then
- printf "svscan "
+ echo -n "Starting daemontools: "
+ if [ ! `pidof svscan` ]; then
+ echo -n "svscan "
env - PATH="$PATH" svscan /service 2>&1 | setuidgid daemon multilog t /var/log/svscan &
echo "."
else
@@ -33,28 +33,23 @@ case "$1" in
fi
;;
stop)
- printf "Stopping daemontools: "
- pids="$(pidof svscan)"
- if [ -n "${pids}" ]
- then
- printf "svscan"
- while [ -n "${pids}" ]
- do
- # shellcheck disable=SC2086
- kill ${pids}
- printf "."
- pids="$(pidof svscan)"
+ echo -n "Stopping daemontools: "
+ if [ `pidof svscan` ]; then
+ echo -n "svscan"
+ while [ `pidof svscan` ]; do
+ kill `pidof svscan`
+ echo -n "."
done
fi
- printf " services"
- for i in /service/*; do
- svc -dx "$i"
- printf "."
+ echo -n " services"
+ for i in `ls -d /service/*`; do
+ svc -dx $i
+ echo -n "."
done
- printf " logging "
- for i in /service/*/log; do
- svc -dx "$i"
- printf "."
+ echo -n " logging "
+ for i in `ls -d /service/*/log`; do
+ svc -dx $i
+ echo -n "."
done
echo ""
;;
diff --git a/cdist/conf/type/__daemontools/man.rst b/cdist/conf/type/__daemontools/man.rst
index bc1b4d33..a8e81e54 100644
--- a/cdist/conf/type/__daemontools/man.rst
+++ b/cdist/conf/type/__daemontools/man.rst
@@ -21,16 +21,11 @@ OPTIONAL PARAMETERS
from-package
Package to install. Must be compatible with the original daemontools. Example: daemontools-encore. Default: daemontools.
-servicedir
- Directory to scan for services. Default: `/service`
-
-
BOOLEAN PARAMETERS
------------------
install-init-script
Add an init script and set it to start on boot.
-
EXAMPLES
--------
diff --git a/cdist/conf/type/__daemontools/manifest b/cdist/conf/type/__daemontools/manifest
old mode 100755
new mode 100644
index b04c7e07..550994a7
--- a/cdist/conf/type/__daemontools/manifest
+++ b/cdist/conf/type/__daemontools/manifest
@@ -1,40 +1,20 @@
-#!/bin/sh -e
+#!/bin/sh
pkg=$(cat "$__object/parameter/from-package")
-servicedir=$(cat "$__object/parameter/servicedir")
-__package "$pkg"
-__directory "$servicedir" --mode 700
+__package $pkg
-os=$(cat "$__global/explorer/os")
-init=$(cat "$__global/explorer/init")
-
-require=""
-case $os in
- freebsd)
- # TODO change to __start_on_boot once it supports freebsd
- __config_file /etc/rc.conf.d/svscan --source - <<-EOT
- svscan_enable="YES"
- svscan_servicedir="$servicedir"
- EOT
- require="$require __package/$pkg __directory/$servicedir __config_file/etc/rc.conf.d/svscan" \
- __process svscan --name ".*/svscan $servicedir" --start 'service svscan start'
- ;;
- *)
- case $init in
- init)
- if [ -f "$__object/parameter/install-init-script" ]; then
- __config_file /etc/init.d/svscan --mode 755 --source "$__type/files/init.d-svscan"
- REQUIREEXTRA="__config_file/etc/init.d/svscan"
- fi
- require="$require $REQUIREEXTRA" __start_on_boot svscan
- require="$require __package/$pkg __directory/$servicedir __start_on_boot/svscan" \
- __process svscan --name ".*/svscan $servicedir" --start 'service svscan start'
- ;;
- *)
- echo "Your init system ($init) is not supported by this type. Submit a patch at github.com/ungleich/cdist!"
- exit 1
- ;;
- esac
- ;;
-esac
+if [ -f "$__object/parameter/install-init-script" ]; then
+ init=$(cat "$__global/explorer/init")
+ case $init in
+ init)
+ __config_file /etc/init.d/svscan --mode 755 --source "$__type/files/init.d-svscan"
+ require="$require __config_file/etc/init.d/svscan" __start_on_boot svscan
+ require="$require __start_on_boot/svscan" __process svscan --start 'service svscan start'
+ ;;
+ *)
+ echo "Your init system ($init) is not supported by this type. Submit a patch at github.com/ungleich/cdist!"
+ exit 1
+ ;;
+ esac
+fi
diff --git a/cdist/conf/type/__daemontools/parameter/default/servicedir b/cdist/conf/type/__daemontools/parameter/default/servicedir
deleted file mode 100644
index b74e27f6..00000000
--- a/cdist/conf/type/__daemontools/parameter/default/servicedir
+++ /dev/null
@@ -1 +0,0 @@
-/service
diff --git a/cdist/conf/type/__daemontools/parameter/optional b/cdist/conf/type/__daemontools/parameter/optional
index 22c0805d..8eca305b 100644
--- a/cdist/conf/type/__daemontools/parameter/optional
+++ b/cdist/conf/type/__daemontools/parameter/optional
@@ -1,2 +1 @@
from-package
-servicedir
diff --git a/cdist/conf/type/__daemontools_service/explorer/svc b/cdist/conf/type/__daemontools_service/explorer/svc
old mode 100755
new mode 100644
index 9ba462f2..d33fcea4
--- a/cdist/conf/type/__daemontools_service/explorer/svc
+++ b/cdist/conf/type/__daemontools_service/explorer/svc
@@ -1,2 +1 @@
-#!/bin/sh
command -v svc || true
diff --git a/cdist/conf/type/__daemontools_service/man.rst b/cdist/conf/type/__daemontools_service/man.rst
index 9bbbe2f8..ec1d20ff 100644
--- a/cdist/conf/type/__daemontools_service/man.rst
+++ b/cdist/conf/type/__daemontools_service/man.rst
@@ -40,12 +40,6 @@ run-file
log-run
Command to run for log consumption. Default: `multilog t ./main`
-owner
- User to chown to.
-
-group
- User to chgrp to.
-
servicedir
Directory to install into. Default: `/service`
diff --git a/cdist/conf/type/__daemontools_service/manifest b/cdist/conf/type/__daemontools_service/manifest
old mode 100755
new mode 100644
index 8a81b5f5..175066af
--- a/cdist/conf/type/__daemontools_service/manifest
+++ b/cdist/conf/type/__daemontools_service/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
RUN_PREFIX="#!/bin/sh
exec 2>&1
@@ -9,8 +9,6 @@ servicedir=$(cat "$__object/parameter/servicedir")
run=$(cat "$__object/parameter/run")
runfile=$(cat "$__object/parameter/run-file")
logrun=$(cat "$__object/parameter/log-run")
-owner=$(cat "$__object/parameter/owner")
-group=$(cat "$__object/parameter/group")
svc=$(cat "$__type/explorer/svc")
@@ -27,22 +25,14 @@ badusage() {
[ -z "$run$runfile" ] && badusage
[ -n "$run" ] && [ -n "$runfile" ] && badusage
-flags=""
-if [ -n "$owner" ]; then
- flags="$flags --owner $owner"
-fi
-if [ -n "$group" ]; then
- flags="$flags --group $group"
-fi
-
-__directory "$servicedir/$name/log/main" --parents $flags
+__directory $servicedir/$name/log/main --parents
echo "$RUN_PREFIX$run" | require="__directory/$servicedir/$name/log/main" __config_file "$servicedir/$name/run" \
--onchange "svc -t '$servicedir/$name' 2>/dev/null" \
- --mode 755 $flags \
+ --mode 755 \
--source "${runfile:--}"
-echo "$RUN_PREFIX$logrun" | require="__directory/$servicedir/$name/log/main" __config_file "$servicedir/$name/log/run" \
+echo "$RUN_PREFIX$logrun" | require="__directory/$servicedir/$name/log/main" __config_file $servicedir/$name/log/run \
--onchange "svc -t '$servicedir/$name/log' 2>/dev/null" \
- --mode 755 $flags \
+ --mode 755 \
--source "-"
diff --git a/cdist/conf/type/__daemontools_service/parameter/default/group b/cdist/conf/type/__daemontools_service/parameter/default/group
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__daemontools_service/parameter/default/owner b/cdist/conf/type/__daemontools_service/parameter/default/owner
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__daemontools_service/parameter/optional b/cdist/conf/type/__daemontools_service/parameter/optional
index 7c66b514..7e54985f 100644
--- a/cdist/conf/type/__daemontools_service/parameter/optional
+++ b/cdist/conf/type/__daemontools_service/parameter/optional
@@ -1,6 +1,4 @@
-group
log-run
-owner
run
run-file
servicedir
diff --git a/cdist/conf/type/__debconf_set_selections/gencode-remote b/cdist/conf/type/__debconf_set_selections/gencode-remote
index e99aef40..bb719c46 100755
--- a/cdist/conf/type/__debconf_set_selections/gencode-remote
+++ b/cdist/conf/type/__debconf_set_selections/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2014 Nico Schottelius (nico-cdist at schottelius.org)
#
diff --git a/cdist/conf/type/__directory/explorer/stat b/cdist/conf/type/__directory/explorer/stat
index 105d894f..41bc8b04 100755
--- a/cdist/conf/type/__directory/explorer/stat
+++ b/cdist/conf/type/__directory/explorer/stat
@@ -1,7 +1,6 @@
#!/bin/sh
#
# 2013 Steven Armstrong (steven-cdist armstrong.cc)
-# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -21,80 +20,31 @@
destination="/$__object_id"
-fallback() {
- # Patch the output together, manually
-
- ls_line=$(ls -ldn "$destination")
-
- uid=$(echo "$ls_line" | awk '{ print $3 }')
- gid=$(echo "$ls_line" | awk '{ print $4 }')
-
- owner=$(awk -F: -v uid="$uid" '$3 == uid { print $1; f=1 } END { if (!f) print "UNKNOWN" }' /etc/passwd)
- group=$(awk -F: -v uid="$uid" '$3 == uid { print $1; f=1 } END { if (!f) print "UNKNOWN" }' /etc/group)
-
- mode_text=$(echo "$ls_line" | awk '{ print $1 }')
- mode=$(echo "$mode_text" | awk '{ k=0; for (i=0; i<=8; i++) k += ((substr($1, i+2, 1) ~ /[rwx]/) * 2^(8-i)); printf("%0o", k) }')
-
- printf 'type: %s\nowner: %d %s\ngroup: %d %s\nmode: %s %s\n' \
- "$("$__type_explorer/type")" \
- "$uid" "$owner" \
- "$gid" "$group" \
- "$mode" "$mode_text"
-}
-
# nothing to work with, nothing we could do
[ -e "$destination" ] || exit 0
-if ! command -v stat >/dev/null
-then
- fallback
- exit
-fi
-
-case $("$__explorer/os") in
- "freebsd"|"netbsd"|"openbsd"|"macosx")
- stat -f "type: %HT
+os=$("$__explorer/os")
+case "$os" in
+ "freebsd"|"netbsd"|"openbsd")
+ # FIXME: should be something like this based on man page, but can not test
+ stat -f "type: %ST
owner: %Du %Su
group: %Dg %Sg
-mode: %Lp %Sp
-" "$destination" | awk '/^type/ { print tolower($0); next } { print }'
- ;;
- solaris)
- ls1="$( ls -ld "$destination" )"
- ls2="$( ls -ldn "$destination" )"
-
- if [ -f "$__object/parameter/mode" ]
- then mode_should="$( cat "$__object/parameter/mode" )"
- fi
-
- # yes, it is ugly hack, but if you know better way...
- if [ -z "$( find "$destination" -perm "$mode_should" )" ]
- then octets=888
- else octets="$( echo "$mode_should" | sed 's/^0//' )"
- fi
-
- case "$( echo "$ls1" | cut -c1-1 )" in
- -) echo 'type: regular file' ;;
- d) echo 'type: directory' ;;
- esac
-
- echo "owner: $( echo "$ls2" \
- | awk '{print $3}' ) $( echo "$ls1" \
- | awk '{print $3}' )"
-
- echo "group: $( echo "$ls2" \
- | awk '{print $4}' ) $( echo "$ls1" \
- | awk '{print $4}' )"
-
- echo "mode: $octets $( echo "$ls1" | awk '{print $1}' )"
+mode: %Op %Sp
+" "$destination"
+ ;;
+ "macosx")
+ stat -f "type: %HT
+ owner: %Du %Su
+ group: %Dg %Sg
+ mode: %Lp %Sp
+ " "$destination"
;;
*)
- # NOTE: Do not use --printf here as it is not supported by BusyBox stat.
- # NOTE: BusyBox's stat might not support the "-c" option, in which case
- # we fall through to the shell fallback.
- stat -c "type: %F
+ stat --printf="type: %F
owner: %u %U
group: %g %G
-mode: %a %A" "$destination" 2>/dev/null || fallback
+mode: %a %A
+" "$destination"
;;
esac
diff --git a/cdist/conf/type/__directory/gencode-remote b/cdist/conf/type/__directory/gencode-remote
index a1a32ea2..aba618ac 100755
--- a/cdist/conf/type/__directory/gencode-remote
+++ b/cdist/conf/type/__directory/gencode-remote
@@ -1,9 +1,8 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
# 2013 Steven Armstrong (steven-cdist armstrong.cc)
# 2014 Daniel Heule (hda at sfs.biz)
-# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -22,8 +21,8 @@
#
destination="/$__object_id"
-state_should=$(cat "$__object/parameter/state")
-type=$(cat "$__object/explorer/type")
+state_should="$(cat "$__object/parameter/state")"
+type="$(cat "$__object/explorer/type")"
stat_file="$__object/explorer/stat"
# variable to keep track if we have to set directory attributes
@@ -58,36 +57,32 @@ get_current_value() {
}
set_group() {
- echo "chgrp $recursive '$1' '$destination'"
- echo "chgrp $recursive '$1'" >> "$__messages_out"
+ echo chgrp $recursive \"$1\" \"$destination\"
+ echo chgrp $recursive $1 >> "$__messages_out"
}
set_owner() {
- echo "chown $recursive '$1' '$destination'"
- echo "chown $recursive '$1'" >> "$__messages_out"
+ echo chown $recursive \"$1\" \"$destination\"
+ echo chown $recursive $1 >> "$__messages_out"
}
set_mode() {
- echo "chmod $recursive '$1' '$destination'"
- echo "chmod $recursive '$1'" >> "$__messages_out"
+ echo chmod $recursive \"$1\" \"$destination\"
+ echo chmod $recursive $1 >> "$__messages_out"
}
case "$state_should" in
- present|exists)
+ present)
if [ "$type" != "directory" ]; then
set_attributes=1
if [ "$type" != "none" ]; then
# our destination is not a directory, remove whatever is there
# and then create our directory and set all attributes
- echo "rm -f '$destination'"
+ echo rm -f "\"$destination\""
echo "remove non directory" >> "$__messages_out"
fi
- echo "mkdir $mkdiropt '$destination'"
+ echo "mkdir $mkdiropt \"$destination\""
echo "create" >> "$__messages_out"
- elif [ "$state_should" = 'exists' ]; then
- # The type is directory and --state exists. We are done and do not
- # check or set the attributes.
- exit 0
fi
# Note: Mode - needs to happen last as a chown/chgrp can alter mode by
@@ -99,7 +94,7 @@ case "$state_should" in
# change 0xxx format to xxx format => same as stat returns
if [ "$attribute" = mode ]; then
- value_should="$(echo "$value_should" | sed 's/^0\(...\)/\1/')"
+ value_should="$(echo $value_should | sed 's/^0\(...\)/\1/')"
fi
if [ "$set_attributes" = 1 ] || [ "$value_should" != "$value_is" ]; then
@@ -108,29 +103,9 @@ case "$state_should" in
fi
done
;;
- pre-exists)
- case $type in
- directory)
- # all good
- exit 0
- ;;
- none)
- printf 'Directory "%s" does not exist\n' "$destination" >&2
- exit 1
- ;;
- file|symlink)
- printf 'File "%s" exists and is a %s, but should be a directory\n' "$destination" "$type" >&2
- exit 1
- ;;
- *)
- printf 'File or directory "%s" is in an unknown state\n' "$destination" >&2
- exit 1
- ;;
- esac
- ;;
absent)
if [ "$type" = "directory" ]; then
- echo "rm -rf '$destination'"
+ echo rm -rf \"$destination\"
echo remove >> "$__messages_out"
fi
;;
diff --git a/cdist/conf/type/__directory/man.rst b/cdist/conf/type/__directory/man.rst
index 7755334c..74b00afe 100644
--- a/cdist/conf/type/__directory/man.rst
+++ b/cdist/conf/type/__directory/man.rst
@@ -19,18 +19,7 @@ None.
OPTIONAL PARAMETERS
-------------------
state
- 'present', 'absent', 'exists' or 'pre-exists', defaults to 'present' where:
-
- present
- the directory exists and the given attributes are set.
- absent
- the directory does not exist.
- exists
- the directory exists, but its attributes are not altered if it already
- existed.
- pre-exists
- check that the directory exists and is indeed a directory, but do not
- create or modify it.
+ 'present' or 'absent', defaults to 'present'
group
Group to chgrp to.
@@ -47,7 +36,7 @@ BOOLEAN PARAMETERS
parents
Whether to create parents as well (mkdir -p behaviour).
Warning: all intermediate directory permissions default
- to whatever mkdir -p does.
+ to whatever mkdir -p does.
Usually this means root:root, 0700.
diff --git a/cdist/conf/type/__docker/man.rst b/cdist/conf/type/__docker/man.rst
index 718543a8..70b92cc7 100644
--- a/cdist/conf/type/__docker/man.rst
+++ b/cdist/conf/type/__docker/man.rst
@@ -3,12 +3,12 @@ cdist-type__docker(7)
NAME
----
-cdist-type__docker - install Docker CE
+cdist-type__docker - install docker-engine
DESCRIPTION
-----------
-Installs latest Docker Community Edition package.
+Installs latest docker-engine package from dockerproject.org.
REQUIRED PARAMETERS
@@ -18,16 +18,16 @@ None.
OPTIONAL PARAMETERS
-------------------
-state
- 'present' or 'absent', defaults to 'present'
-version
- The specific version to install. Defaults to the special value 'latest',
- meaning the version the package manager will install by default.
+None.
BOOLEAN PARAMETERS
------------------
-None.
+experimental
+ Install the experimental docker-engine package instead of the latest stable release.
+
+state
+ 'present' or 'absent', defaults to 'present'
EXAMPLES
@@ -38,11 +38,12 @@ EXAMPLES
# Install docker
__docker
+ # Install experimental
+ __docker --experimental
+
# Remove docker
__docker --state absent
- # Install specific version
- __docker --state present --version 18.03.0.ce
AUTHORS
-------
diff --git a/cdist/conf/type/__docker/manifest b/cdist/conf/type/__docker/manifest
index 6a57d85a..1f473afb 100755
--- a/cdist/conf/type/__docker/manifest
+++ b/cdist/conf/type/__docker/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -21,84 +21,58 @@
os=$(cat "$__global/explorer/os")
state=$(cat "$__object/parameter/state")
-version=$(cat "$__object/parameter/version")
case "$os" in
centos)
- # shellcheck source=/dev/null
- if (. "$__global/explorer/os_release" && [ "${VERSION_ID}" = "7" ]); then
- __yum_repo docker-ce-stable \
- --name 'Docker CE Stable' \
- --baseurl "https://download.docker.com/linux/centos/7/\$basearch/stable" \
- --enabled \
- --gpgcheck 1 \
- --gpgkey 'https://download.docker.com/linux/centos/gpg' \
- --state "${state}"
- if [ "$version" != "latest" ]; then
- require="__yum_repo/docker-ce-stable" __package docker-ce --version "${version}" --state "${state}"
- else
- require="__yum_repo/docker-ce-stable" __package docker-ce --state "${state}"
- fi
- else
- echo "CentOS version 7 is required!" >&2
- exit 1
+ component="main"
+ if [ -f "$__object/parameter/experimental" ]; then
+ component="experimental"
fi
+ __yum_repo docker \
+ --name 'Docker Repository' \
+ --baseurl "https://yum.dockerproject.org/repo/$component/centos/\$releasever/" \
+ --enabled \
+ --gpgcheck 1 \
+ --gpgkey 'https://yum.dockerproject.org/gpg' \
+ --state ${state}
+ require="__yum_repo/docker" __package docker-engine --state ${state}
;;
- ubuntu|debian)
- if [ "${state}" = "present" ]; then
- __package apt-transport-https
- __package ca-certificates
- __package gnupg2
- fi
- __apt_key_uri docker --name "Docker Release (CE deb) " \
- --uri "https://download.docker.com/linux/${os}/gpg" --state "${state}"
-
- require="__apt_key_uri/docker" __apt_source docker \
- --uri "https://download.docker.com/linux/${os}" \
- --distribution "$(cat "$__global/explorer/lsb_codename")" \
- --state "${state}" \
- --component "stable"
- if [ "$version" != "latest" ]; then
- require="__apt_source/docker" __package docker-ce --version "${version}" --state "${state}"
- else
- require="__apt_source/docker" __package docker-ce --state "${state}"
+ ubuntu)
+ component="main"
+ if [ -f "$__object/parameter/experimental" ]; then
+ component="experimental"
fi
+ __package apparmor --state ${state}
+ __package ca-certificates --state ${state}
+ __package apt-transport-https --state ${state}
+ __apt_key docker --keyid 58118E89F3A912897C070ADBF76221572C52609D --state ${state}
+ export CDIST_ORDER_DEPENDENCY=on
+ __apt_source docker \
+ --uri https://apt.dockerproject.org/repo \
+ --distribution "ubuntu-$(cat "$__global/explorer/lsb_codename")" \
+ --state ${state} \
+ --component "$component"
+ __package docker-engine --state ${state}
+ unset CDIST_ORDER_DEPENDENCY
;;
- devuan)
- os_version="$(cat "$__global/explorer/os_version")"
-
- case "$os_version" in
- ascii)
- distribution="stretch"
- ;;
- jessie)
- distribution="jessie"
- ;;
- *)
- echo "Your devuan release ($os_version) is currently not supported by this type (${__type##*/}).">&2
- echo "Please contribute an implementation for it if you can." >&2
- exit 1
- ;;
- esac
-
- if [ "${state}" = "present" ]; then
- __package apt-transport-https
- __package ca-certificates
- __package gnupg2
+ debian)
+ component="main"
+ if [ -f "$__object/parameter/experimental" ]; then
+ component="experimental"
fi
- __apt_key_uri docker --name "Docker Release (CE deb) " \
- --uri "https://download.docker.com/linux/${os}/gpg" --state "${state}"
- require="__apt_key_uri/docker" __apt_source docker \
- --uri "https://download.docker.com/linux/${os}" \
- --distribution "${distribution}" \
- --state "${state}" \
- --component "stable"
- if [ "$version" != "latest" ]; then
- require="__apt_source/docker" __package docker-ce --version "${version}" --state "${state}"
- else
- require="__apt_source/docker" __package docker-ce --state "${state}"
- fi
+ __package apt-transport-https --state ${state}
+ __package ca-certificates --state ${state}
+ __package gnupg2 --state ${state}
+ __apt_key docker --keyid 58118E89F3A912897C070ADBF76221572C52609D --state ${state}
+ export CDIST_ORDER_DEPENDENCY=on
+ __apt_source docker \
+ --uri https://apt.dockerproject.org/repo \
+ --distribution "debian-$(cat "$__global/explorer/lsb_codename")" \
+ --state ${state} \
+ --component "$component"
+ __package docker-engine --state ${state}
+ unset CDIST_ORDER_DEPENDENCY
;;
*)
diff --git a/cdist/conf/type/__docker/parameter/boolean b/cdist/conf/type/__docker/parameter/boolean
new file mode 100644
index 00000000..9839eb20
--- /dev/null
+++ b/cdist/conf/type/__docker/parameter/boolean
@@ -0,0 +1 @@
+experimental
diff --git a/cdist/conf/type/__docker/parameter/default/version b/cdist/conf/type/__docker/parameter/default/version
deleted file mode 100644
index a0f9a4b4..00000000
--- a/cdist/conf/type/__docker/parameter/default/version
+++ /dev/null
@@ -1 +0,0 @@
-latest
diff --git a/cdist/conf/type/__docker/parameter/optional b/cdist/conf/type/__docker/parameter/optional
index 4d595ed7..ff72b5c7 100644
--- a/cdist/conf/type/__docker/parameter/optional
+++ b/cdist/conf/type/__docker/parameter/optional
@@ -1,2 +1 @@
state
-version
diff --git a/cdist/conf/type/__docker_compose/gencode-remote b/cdist/conf/type/__docker_compose/gencode-remote
old mode 100755
new mode 100644
index 77fc2fdf..bd1ad452
--- a/cdist/conf/type/__docker_compose/gencode-remote
+++ b/cdist/conf/type/__docker_compose/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Dominique Roux (dominique.roux at ungleich.ch)
#
@@ -22,11 +22,10 @@
version="$(cat "$__object/parameter/version")"
state="$(cat "$__object/parameter/state")"
-if [ "${state}" = "present" ]; then
+if [ ${state} = "present" ]; then
# Download docker-compose file
- #shellcheck disable=SC2016
- echo 'curl -L "https://github.com/docker/compose/releases/download/'"${version}"'/docker-compose-$(uname -s)-$(uname -m)" -o /tmp/docker-compose'
- echo 'mv /tmp/docker-compose /usr/local/bin/docker-compose'
+ echo 'curl -L "https://github.com/docker/compose/releases/download/'${version}'/docker-compose-$(uname -s)-$(uname -m)" -o /tmp/docker-compose'
+ echo 'mv /tmp/docker-compose /usr/local/bin/docker-compose'
# Change permissions
echo 'chmod +x /usr/local/bin/docker-compose'
fi
diff --git a/cdist/conf/type/__docker_compose/manifest b/cdist/conf/type/__docker_compose/manifest
old mode 100755
new mode 100644
index f7de3a76..559375ef
--- a/cdist/conf/type/__docker_compose/manifest
+++ b/cdist/conf/type/__docker_compose/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Dominique Roux (dominique.roux at ungleich.ch)
#
@@ -22,10 +22,10 @@
state="$(cat "$__object/parameter/state")"
# Needed packages
-if [ "${state}" = "present" ]; then
+if [ ${state} = "present" ]; then
__docker
__package curl
-elif [ "${state}" = "absent" ]; then
+elif [ ${state} = "absent" ]; then
__file /usr/local/bin/docker-compose --state absent
else
echo "Unknown state: ${state}" >&2
diff --git a/cdist/conf/type/__docker_compose/parameter/default/version b/cdist/conf/type/__docker_compose/parameter/default/version
index 850e7424..0eed1a29 100644
--- a/cdist/conf/type/__docker_compose/parameter/default/version
+++ b/cdist/conf/type/__docker_compose/parameter/default/version
@@ -1 +1 @@
-1.14.0
+1.12.0
diff --git a/cdist/conf/type/__docker_config/explorer/config-data b/cdist/conf/type/__docker_config/explorer/config-data
deleted file mode 100755
index b4bb0e11..00000000
--- a/cdist/conf/type/__docker_config/explorer/config-data
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-docker config inspect "${__object_id:?}" --format '{{json .Spec.Data}}' \
- 2>/dev/null | tr -d '"' | base64 -d
diff --git a/cdist/conf/type/__docker_config/explorer/config-exists b/cdist/conf/type/__docker_config/explorer/config-exists
deleted file mode 100755
index 58c207d4..00000000
--- a/cdist/conf/type/__docker_config/explorer/config-exists
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-if docker config ls | grep -q " ${__object_id:?} "; then
- echo yes
-else
- echo no
-fi
diff --git a/cdist/conf/type/__docker_config/gencode-remote b/cdist/conf/type/__docker_config/gencode-remote
deleted file mode 100755
index 65497b7e..00000000
--- a/cdist/conf/type/__docker_config/gencode-remote
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-config="${__object_id:?}"
-config_exists=$(cat "${__object:?}/explorer/config-exists")
-state=$(cat "${__object:?}/parameter/state")
-
-case "${state}" in
- absent)
- if [ "${config_exists}" != "yes" ]; then
- exit 0
- fi
-
- echo "docker config rm \"${config}\""
- ;;
- present)
- source=$(cat "${__object}/parameter/source")
-
- if [ -z "${source}" ]; then
- exit 0
- fi
-
- if [ "${source}" = "-" ]; then
- source="${__object}/stdin"
- fi
-
- if [ "${config_exists}" = "yes" ]; then
- if cmp -s "${source}" "${__object}/explorer/config-data"; then
- exit 0
- else
- echo "docker config rm \"${config}\""
- fi
- fi
-
- cat <<-EOF
- source_file="\$(mktemp cdist.XXXXXXXXXX)"
-
- base64 -d > "\${source_file}" << eof
- $(base64 "${source}")
- eof
-
- docker config create "${config}" "\${source_file}"
-
- rm "\${source_file}"
- EOF
- ;;
- *)
- echo "Unsupported state: ${state}" >&2
-
- exit 1
- ;;
-esac
diff --git a/cdist/conf/type/__docker_config/man.rst b/cdist/conf/type/__docker_config/man.rst
deleted file mode 100644
index 7c74c8af..00000000
--- a/cdist/conf/type/__docker_config/man.rst
+++ /dev/null
@@ -1,55 +0,0 @@
-cdist-type__docker_config(7)
-============================
-
-NAME
-----
-
-cdist-type__docker_config - Manage Docker configs
-
-DESCRIPTION
------------
-
-This type manages Docker configs.
-
-OPTIONAL PARAMETERS
--------------------
-
-source
- Path to the source file. If it is '-' (dash), read standard input.
-
-state
- 'present' or 'absent', defaults to 'present' where:
-
- present
- if the config does not exist, it is created
- absent
- the config is removed
-
-CAVEATS
--------
-
-Since Docker configs cannot be updated once created, this type tries removing
-and recreating the config if it changes. If the config is used by a service at
-the time of removing, then this type will fail.
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # Creates "foo" config from "bar" source file
- __docker_config foo --source bar
-
-
-AUTHORS
--------
-
-Ľubomír Kučera
-
-COPYING
--------
-
-Copyright \(C) 2018 Ľubomír Kučera. 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.
diff --git a/cdist/conf/type/__docker_config/parameter/default/source b/cdist/conf/type/__docker_config/parameter/default/source
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__docker_config/parameter/default/state b/cdist/conf/type/__docker_config/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__docker_config/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__docker_config/parameter/optional b/cdist/conf/type/__docker_config/parameter/optional
deleted file mode 100644
index d77f3048..00000000
--- a/cdist/conf/type/__docker_config/parameter/optional
+++ /dev/null
@@ -1,2 +0,0 @@
-source
-state
diff --git a/cdist/conf/type/__docker_secret/explorer/secret-exists b/cdist/conf/type/__docker_secret/explorer/secret-exists
deleted file mode 100755
index 1405f8bc..00000000
--- a/cdist/conf/type/__docker_secret/explorer/secret-exists
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-if docker secret ls | grep -q " ${__object_id:?} "; then
- echo yes
-else
- echo no
-fi
diff --git a/cdist/conf/type/__docker_secret/gencode-remote b/cdist/conf/type/__docker_secret/gencode-remote
deleted file mode 100755
index c75e91d9..00000000
--- a/cdist/conf/type/__docker_secret/gencode-remote
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-secret="${__object_id:?}"
-secret_exists=$(cat "${__object:?}/explorer/secret-exists")
-state=$(cat "${__object:?}/parameter/state")
-
-case "${state}" in
- absent)
- if [ "${secret_exists}" != "yes" ]; then
- exit 0
- fi
-
- echo "docker secret rm ${secret}"
- ;;
- present)
- if [ "${secret_exists}" = "yes" ]; then
- exit 0
- fi
-
- source=$(cat "${__object}/parameter/source")
-
- if [ -z "${source}" ]; then
- exit 0
- fi
-
- if [ "${source}" = "-" ]; then
- source="${__object}/stdin"
- fi
-
- cat <<-EOF
- source_file="\$(mktemp cdist.XXXXXXXXXX)"
-
- base64 -d > "\${source_file}" << eof
- $(base64 "${source}")
- eof
-
- docker secret create "${secret}" "\${source_file}"
-
- rm "\${source_file}"
- EOF
- ;;
- *)
- echo "Unsupported state: ${state}" >&2
-
- exit 1
- ;;
-esac
diff --git a/cdist/conf/type/__docker_secret/man.rst b/cdist/conf/type/__docker_secret/man.rst
deleted file mode 100644
index 7fe69623..00000000
--- a/cdist/conf/type/__docker_secret/man.rst
+++ /dev/null
@@ -1,54 +0,0 @@
-cdist-type__docker_secret(7)
-============================
-
-NAME
-----
-
-cdist-type__docker_secret - Manage Docker secrets
-
-DESCRIPTION
------------
-
-This type manages Docker secrets.
-
-OPTIONAL PARAMETERS
--------------------
-
-source
- Path to the source file. If it is '-' (dash), read standard input.
-
-state
- 'present' or 'absent', defaults to 'present' where:
-
- present
- if the secret does not exist, it is created
- absent
- the secret is removed
-
-CAVEATS
--------
-
-Since Docker secrets cannot be updated once created, this type takes no action
-if the specified secret already exists.
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # Creates "foo" secret from "bar" source file
- __docker_secret foo --source bar
-
-
-AUTHORS
--------
-
-Ľubomír Kučera
-
-COPYING
--------
-
-Copyright \(C) 2018 Ľubomír Kučera. 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.
diff --git a/cdist/conf/type/__docker_secret/parameter/default/source b/cdist/conf/type/__docker_secret/parameter/default/source
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__docker_secret/parameter/default/state b/cdist/conf/type/__docker_secret/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__docker_secret/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__docker_secret/parameter/optional b/cdist/conf/type/__docker_secret/parameter/optional
deleted file mode 100644
index d77f3048..00000000
--- a/cdist/conf/type/__docker_secret/parameter/optional
+++ /dev/null
@@ -1,2 +0,0 @@
-source
-state
diff --git a/cdist/conf/type/__docker_stack/explorer/stack-exists b/cdist/conf/type/__docker_stack/explorer/stack-exists
deleted file mode 100755
index 4f511821..00000000
--- a/cdist/conf/type/__docker_stack/explorer/stack-exists
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-if docker stack ls | grep -q "^${__object_id:?} "; then
- echo 1
-else
- echo 0
-fi
diff --git a/cdist/conf/type/__docker_stack/gencode-remote b/cdist/conf/type/__docker_stack/gencode-remote
deleted file mode 100755
index 586271d0..00000000
--- a/cdist/conf/type/__docker_stack/gencode-remote
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-stack="${__object_id:?}"
-state=$(cat "${__object:?}/parameter/state")
-
-case "${state}" in
- absent)
- stack_exists=$(cat "${__object:?}/explorer/stack-exists")
-
- if [ "${stack_exists}" -ne 1 ]; then
- exit 0
- fi
-
- echo "docker stack rm ${stack}"
- ;;
- present)
- compose_file=$(cat "${__object}/parameter/compose-file")
-
- if [ -z "${compose_file}" ]; then
- exit 0
- fi
-
- if [ "${compose_file}" = "-" ]; then
- compose_file="${__object}/stdin"
- fi
-
- cat <<-EOF
- compose_file="\$(mktemp cdist.XXXXXXXXXX)"
-
- base64 -d > "\${compose_file}" << eof
- $(base64 "${compose_file}")
- eof
-
- docker stack deploy --compose-file "\${compose_file}" \
- --prune --with-registry-auth ${stack}
-
- rm "\${compose_file}"
- EOF
- ;;
- *)
- echo "Unsupported state: ${state}" >&2
-
- exit 1
- ;;
-esac
diff --git a/cdist/conf/type/__docker_stack/man.rst b/cdist/conf/type/__docker_stack/man.rst
deleted file mode 100644
index d0597c25..00000000
--- a/cdist/conf/type/__docker_stack/man.rst
+++ /dev/null
@@ -1,54 +0,0 @@
-cdist-type__docker_stack(7)
-===========================
-
-NAME
-----
-
-cdist-type__docker_stack - Manage Docker stacks
-
-DESCRIPTION
------------
-
-This type manages service stacks.
-
-.. note::
- Since there is no easy way to tell whether a stack needs to be updated,
- `docker stack deploy` is being run every time this type is invoked.
- However, it does not mean this type is not idempotent. If Docker does not
- detect changes, the existing stack will not be updated.
-
-OPTIONAL PARAMETERS
--------------------
-
-compose-file
- Path to the compose file. If it is '-' (dash), read standard input.
-
-state
- 'present' or 'absent', defaults to 'present' where:
-
- present
- the stack is deployed
- absent
- the stack is removed
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # Deploys 'foo' stack defined in 'docker-compose.yml' compose file
- __docker_stack foo --compose-file docker-compose.yml
-
-
-AUTHORS
--------
-
-Ľubomír Kučera
-
-COPYING
--------
-
-Copyright \(C) 2018 Ľubomír Kučera. 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.
diff --git a/cdist/conf/type/__docker_stack/parameter/default/compose-file b/cdist/conf/type/__docker_stack/parameter/default/compose-file
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__docker_stack/parameter/default/state b/cdist/conf/type/__docker_stack/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__docker_stack/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__docker_stack/parameter/optional b/cdist/conf/type/__docker_stack/parameter/optional
deleted file mode 100644
index b3457bd3..00000000
--- a/cdist/conf/type/__docker_stack/parameter/optional
+++ /dev/null
@@ -1,2 +0,0 @@
-compose-file
-state
diff --git a/cdist/conf/type/__docker_swarm/explorer/swarm-state b/cdist/conf/type/__docker_swarm/explorer/swarm-state
deleted file mode 100755
index 2c9fd598..00000000
--- a/cdist/conf/type/__docker_swarm/explorer/swarm-state
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-docker info 2>/dev/null | grep '^ *Swarm: ' | awk '{print $2}'
diff --git a/cdist/conf/type/__docker_swarm/gencode-remote b/cdist/conf/type/__docker_swarm/gencode-remote
deleted file mode 100755
index 4b199a02..00000000
--- a/cdist/conf/type/__docker_swarm/gencode-remote
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/sh -e
-#
-# 2018 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-state=$(cat "${__object:?}/parameter/state")
-swarm_state="$(cat "${__object}/explorer/swarm-state")"
-
-if [ -z "${swarm_state}" ]; then
- echo "Unable to determine Swarm state. Is compatible version of Docker installed?" >&2
-
- exit 1
-fi
-
-case "${state}" in
- absent)
- if [ "${swarm_state}" = "active" ]; then
- echo "docker swarm leave --force"
- fi
- ;;
- present)
- if [ "${swarm_state}" = "inactive" ]; then
- echo "docker swarm init"
- fi
- ;;
- *)
- echo "Unsupported state: ${state}" >&2
-
- exit 1
- ;;
-esac
diff --git a/cdist/conf/type/__docker_swarm/man.rst b/cdist/conf/type/__docker_swarm/man.rst
deleted file mode 100644
index 4dc408f0..00000000
--- a/cdist/conf/type/__docker_swarm/man.rst
+++ /dev/null
@@ -1,49 +0,0 @@
-cdist-type__docker_swarm(7)
-===========================
-
-NAME
-----
-
-cdist-type__docker_swarm - Manage Swarm
-
-DESCRIPTION
------------
-
-This type can initialize Docker swarm mode. For more information about swarm
-mode, see `Swarm mode overview `_.
-
-OPTIONAL PARAMETERS
--------------------
-
-state
- 'present' or 'absent', defaults to 'present' where:
-
- present
- Swarm is initialized
- absent
- Swarm is left
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # Initializes a swarm
- __docker_swarm
-
- # Leaves a swarm
- __docker_swarm --state absent
-
-
-AUTHORS
--------
-
-Ľubomír Kučera
-
-COPYING
--------
-
-Copyright \(C) 2018 Ľubomír Kučera. 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.
diff --git a/cdist/conf/type/__docker_swarm/parameter/default/state b/cdist/conf/type/__docker_swarm/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__docker_swarm/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__docker_swarm/parameter/optional b/cdist/conf/type/__docker_swarm/parameter/optional
deleted file mode 100644
index ff72b5c7..00000000
--- a/cdist/conf/type/__docker_swarm/parameter/optional
+++ /dev/null
@@ -1 +0,0 @@
-state
diff --git a/cdist/conf/type/__docker_swarm/singleton b/cdist/conf/type/__docker_swarm/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__dog_vdi/gencode-remote b/cdist/conf/type/__dog_vdi/gencode-remote
old mode 100755
new mode 100644
index 9d49506c..56e4108a
--- a/cdist/conf/type/__dog_vdi/gencode-remote
+++ b/cdist/conf/type/__dog_vdi/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
#
diff --git a/cdist/conf/type/__dog_vdi/manifest b/cdist/conf/type/__dog_vdi/manifest
old mode 100755
new mode 100644
index 869bdede..be327a3a
--- a/cdist/conf/type/__dog_vdi/manifest
+++ b/cdist/conf/type/__dog_vdi/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
#
diff --git a/cdist/conf/type/__dot_file/explorer/home b/cdist/conf/type/__dot_file/explorer/home
index 08d941bf..132cfc71 100755
--- a/cdist/conf/type/__dot_file/explorer/home
+++ b/cdist/conf/type/__dot_file/explorer/home
@@ -19,7 +19,7 @@ set -eu
user="$(cat "${__object}/parameter/user")"
-if command -v getent >/dev/null 2>&1; then
+if which getent >/dev/null 2>&1; then
line=$(getent passwd "${user}")
else
line=$(grep "^${user}:" /etc/passwd)
diff --git a/cdist/conf/type/__dot_file/manifest b/cdist/conf/type/__dot_file/manifest
index 5e4957e5..4bc9f179 100755
--- a/cdist/conf/type/__dot_file/manifest
+++ b/cdist/conf/type/__dot_file/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# Copyright (C) 2016 Bogatov Dmitry
#
diff --git a/cdist/conf/type/__file/explorer/stat b/cdist/conf/type/__file/explorer/stat
index 91c8cc84..8a917556 100755
--- a/cdist/conf/type/__file/explorer/stat
+++ b/cdist/conf/type/__file/explorer/stat
@@ -1,8 +1,6 @@
#!/bin/sh
#
# 2013 Steven Armstrong (steven-cdist armstrong.cc)
-# 2019 Nico Schottelius (nico-cdist at schottelius.org)
-# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -22,95 +20,37 @@
destination="/$__object_id"
-fallback() {
- # Fallback: Patch the output together, manually.
-
- ls_line=$(ls -ldn "$destination")
-
- uid=$(echo "$ls_line" | awk '{ print $3 }')
- gid=$(echo "$ls_line" | awk '{ print $4 }')
-
- owner=$(awk -F: -v uid="$uid" '$3 == uid { print $1; f=1 } END { if (!f) print "UNKNOWN" }' /etc/passwd)
- group=$(awk -F: -v uid="$uid" '$3 == uid { print $1; f=1 } END { if (!f) print "UNKNOWN" }' /etc/group)
-
- mode_text=$(echo "$ls_line" | awk '{ print $1 }')
- mode=$(echo "$mode_text" | awk '{ k=0; for (i=0; i<=8; i++) k += ((substr($1, i+2, 1) ~ /[rwx]/) * 2^(8-i)); printf("%0o", k) }')
-
- size=$(echo "$ls_line" | awk '{ print $5 }')
- links=$(echo "$ls_line" | awk '{ print $2 }')
-
- printf 'type: %s\nowner: %d %s\ngroup: %d %s\nmode: %s %s\nsize: %d\nlinks: %d\n' \
- "$("$__type_explorer/type")" \
- "$uid" "$owner" \
- "$gid" "$group" \
- "$mode" "$mode_text" \
- "$size" \
- "$links"
-}
-
-
# nothing to work with, nothing we could do
[ -e "$destination" ] || exit 0
-
-if ! command -v stat >/dev/null
-then
- fallback
- exit
-fi
-
-
-case $("$__explorer/os")
-in
- freebsd|netbsd|openbsd|macosx)
- stat -f "type: %HT
+os=$("$__explorer/os")
+case "$os" in
+ "freebsd"|"netbsd"|"openbsd")
+ # FIXME: should be something like this based on man page, but can not test
+ stat -f "type: %ST
+owner: %Du %Su
+group: %Dg %Sg
+mode: %Op %Sp
+size: %Dz
+links: %Dl
+" "$destination"
+ ;;
+ "macosx")
+ stat -f "type: %HT
owner: %Du %Su
group: %Dg %Sg
mode: %Lp %Sp
size: %Dz
links: %Dl
-" "$destination" | awk '/^type/ { print tolower($0); next } { print }'
- ;;
- solaris)
- ls1="$( ls -ld "$destination" )"
- ls2="$( ls -ldn "$destination" )"
-
- if [ -f "$__object/parameter/mode" ]
- then mode_should="$( cat "$__object/parameter/mode" )"
- fi
-
- # yes, it is ugly hack, but if you know better way...
- if [ -z "$( find "$destination" -perm "$mode_should" )" ]
- then octets=888
- else octets="$( echo "$mode_should" | sed 's/^0//' )"
- fi
-
- case "$( echo "$ls1" | cut -c1-1 )" in
- -) echo 'type: regular file' ;;
- d) echo 'type: directory' ;;
- esac
-
- echo "owner: $( echo "$ls2" \
- | awk '{print $3}' ) $( echo "$ls1" \
- | awk '{print $3}' )"
-
- echo "group: $( echo "$ls2" \
- | awk '{print $4}' ) $( echo "$ls1" \
- | awk '{print $4}' )"
-
- echo "mode: $octets $( echo "$ls1" | awk '{print $1}' )"
- echo "size: $( echo "$ls1" | awk '{print $5}' )"
- echo "links: $( echo "$ls1" | awk '{print $2}' )"
- ;;
+" "$destination"
+ ;;
*)
- # NOTE: Do not use --printf here as it is not supported by BusyBox stat.
- # NOTE: BusyBox's stat might not support the "-c" option, in which case
- # we fall through to the shell fallback.
- stat -c "type: %F
+ stat --printf="type: %F
owner: %u %U
group: %g %G
mode: %a %A
size: %s
-links: %h" "$destination" 2>/dev/null || fallback
- ;;
+links: %h
+" "$destination"
+ ;;
esac
diff --git a/cdist/conf/type/__file/gencode-local b/cdist/conf/type/__file/gencode-local
index 231b6927..4caa6df6 100755
--- a/cdist/conf/type/__file/gencode-local
+++ b/cdist/conf/type/__file/gencode-local
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
# 2013 Steven Armstrong (steven-cdist armstrong.cc)
@@ -23,43 +23,14 @@ destination="/$__object_id"
state_should="$(cat "$__object/parameter/state")"
type="$(cat "$__object/explorer/type")"
-[ "$state_should" = "exists" ] && [ "$type" = "file" ] && exit 0 # nothing to do
-
-if [ "$state_should" = "pre-exists" ]; then
- if [ -f "$__object/parameter/source" ]; then
- echo "--source cannot be used with --state pre-exists"
- exit 1
- fi
-
- case $type in
- file)
- # nothing to do
- exit 0
- ;;
- none)
- printf 'File "%s" does not exist\n' "$destination" >&2
- exit 1
- ;;
- directory|symlink)
- printf 'File "%s" exists and is a %s, but should be a regular file\n' "$destination" "$type" >&2
- exit 1
- ;;
- *)
- printf 'File or directory "%s" is in an unknown state\n' "$destination" >&2
- exit 1
- ;;
- esac
-fi
+[ "$state_should" = "exists" -a "$type" = "file" ] && exit 0 # nothing to do
upload_file=
create_file=
-if [ "$state_should" = "present" ] || [ "$state_should" = "exists" ]; then
+if [ "$state_should" = "present" -o "$state_should" = "exists" ]; then
if [ ! -f "$__object/parameter/source" ]; then
- remote_stat="$(cat "$__object/explorer/stat")"
- if [ -z "$remote_stat" ]; then
- create_file=1
- echo create >> "$__messages_out"
- fi
+ create_file=1
+ echo create >> "$__messages_out"
else
source="$(cat "$__object/parameter/source")"
if [ "$source" = "-" ]; then
@@ -82,7 +53,7 @@ if [ "$state_should" = "present" ] || [ "$state_should" = "exists" ]; then
fi
fi
fi
- if [ "$create_file" ] || [ "$upload_file" ]; then
+ if [ "$create_file" -o "$upload_file" ]; then
# tell gencode-remote that we created or uploaded a file and that it must
# set all attributes no matter what the explorer retreived
mkdir "$__object/files"
@@ -96,7 +67,7 @@ DONE
if [ "$upload_file" ]; then
echo upload >> "$__messages_out"
# IPv6 fix
- if echo "${__target_host}" | grep -q -E '^[0-9a-fA-F:]+$'
+ if $(echo "${__target_host}" | grep -q -E '^[0-9a-fA-F:]+$')
then
my_target_host="[${__target_host}]"
else
diff --git a/cdist/conf/type/__file/gencode-remote b/cdist/conf/type/__file/gencode-remote
index 815593bd..dcf3857b 100755
--- a/cdist/conf/type/__file/gencode-remote
+++ b/cdist/conf/type/__file/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
# 2013 Steven Armstrong (steven-cdist armstrong.cc)
@@ -23,7 +23,7 @@ destination="/$__object_id"
state_should="$(cat "$__object/parameter/state")"
type="$(cat "$__object/explorer/type")"
stat_file="$__object/explorer/stat"
-fire_onchange=''
+
get_current_value() {
if [ -s "$stat_file" ]; then
@@ -43,58 +43,47 @@ get_current_value() {
}
set_group() {
- echo "chgrp '$1' '$destination'"
- echo "chgrp '$1'" >> "$__messages_out"
- fire_onchange=1
+ echo chgrp \"$1\" \"$destination\"
+ echo chgrp $1 >> "$__messages_out"
}
set_owner() {
- echo "chown '$1' '$destination'"
- echo "chown '$1'" >> "$__messages_out"
- fire_onchange=1
+ echo chown \"$1\" \"$destination\"
+ echo chown $1 >> "$__messages_out"
}
set_mode() {
- echo "chmod '$1' '$destination'"
- echo "chmod '$1'" >> "$__messages_out"
- fire_onchange=1
+ echo chmod \"$1\" \"$destination\"
+ echo chmod $1 >> "$__messages_out"
}
+set_attributes=
case "$state_should" in
present|exists)
- # Note: Mode - needs to happen last as a chown/chgrp can alter mode by
- # clearing S_ISUID and S_ISGID bits (see chown(2))
- for attribute in group owner mode; do
- if [ -f "$__object/parameter/$attribute" ]; then
- value_should="$(cat "$__object/parameter/$attribute")"
+ # Note: Mode - needs to happen last as a chown/chgrp can alter mode by
+ # clearing S_ISUID and S_ISGID bits (see chown(2))
+ for attribute in group owner mode; do
+ if [ -f "$__object/parameter/$attribute" ]; then
+ value_should="$(cat "$__object/parameter/$attribute")"
- # change 0xxx format to xxx format => same as stat returns
- if [ "$attribute" = mode ]; then
- value_should="$(echo "$value_should" | sed 's/^0\(...\)/\1/')"
- fi
-
- value_is="$(get_current_value "$attribute" "$value_should")"
- if [ -f "$__object/files/set-attributes" ] || [ "$value_should" != "$value_is" ]; then
- "set_$attribute" "$value_should"
- fi
+ # change 0xxx format to xxx format => same as stat returns
+ if [ "$attribute" = mode ]; then
+ value_should="$(echo $value_should | sed 's/^0\(...\)/\1/')"
+ fi
+
+ value_is="$(get_current_value "$attribute" "$value_should")"
+ if [ -f "$__object/files/set-attributes" -o "$value_should" != "$value_is" ]; then
+ "set_$attribute" "$value_should"
fi
- done
- if [ -f "$__object/files/set-attributes" ]; then
- # set-attributes is created if file is created or uploaded in gencode-local
- fire_onchange=1
fi
- ;;
+ done
- pre-exists)
- # pre-exists should never reach gencode-remote…
- exit 1
- ;;
+ ;;
absent)
if [ "$type" = "file" ]; then
- echo "rm -f '$destination'"
+ echo rm -f \"$destination\"
echo remove >> "$__messages_out"
- fire_onchange=1
fi
;;
@@ -103,9 +92,3 @@ case "$state_should" in
exit 1
;;
esac
-
-if [ -f "$__object/parameter/onchange" ]; then
- if [ -n "$fire_onchange" ]; then
- cat "$__object/parameter/onchange"
- fi
-fi
diff --git a/cdist/conf/type/__file/man.rst b/cdist/conf/type/__file/man.rst
index 7a0603bb..7d9b413b 100644
--- a/cdist/conf/type/__file/man.rst
+++ b/cdist/conf/type/__file/man.rst
@@ -23,10 +23,6 @@ symlink
directory
replace it with the source file
-One exception is that when state is pre-exists, an error is raised if
-the file would have been created otherwise (e.g. it is not present or
-not a regular file).
-
In any case, make sure that the file attributes are as specified.
@@ -37,7 +33,7 @@ None.
OPTIONAL PARAMETERS
-------------------
state
- 'present', 'absent', 'exists' or 'pre-exists', defaults to 'present' where:
+ 'present', 'absent' or 'exists', defaults to 'present' where:
present
the file is exactly the one from source
@@ -45,9 +41,6 @@ state
the file does not exist
exists
the file from source but only if it doesn't already exist
- pre-exists
- check that the file exists and is a regular file, but do not
- create or modify it
group
Group to chgrp to.
@@ -63,9 +56,6 @@ source
If not supplied, an empty file or directory will be created.
If source is '-' (dash), take what was written to stdin as the file content.
-onchange
- The code to run if file is modified.
-
MESSAGES
--------
chgrp
@@ -103,8 +93,6 @@ EXAMPLES
__file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \
--state exists \
--owner frodo --mode 0600
- # Check that the file is present, show an error when it is not
- __file /etc/somefile --state pre-exists
# Take file content from stdin
__file /tmp/whatever --owner root --group root --mode 644 --source - << DONE
Here goes the content for /tmp/whatever
diff --git a/cdist/conf/type/__file/parameter/optional b/cdist/conf/type/__file/parameter/optional
index 9b98352c..c696d592 100644
--- a/cdist/conf/type/__file/parameter/optional
+++ b/cdist/conf/type/__file/parameter/optional
@@ -3,4 +3,3 @@ group
mode
owner
source
-onchange
diff --git a/cdist/conf/type/__filesystem/gencode-remote b/cdist/conf/type/__filesystem/gencode-remote
old mode 100755
new mode 100644
index 0bcdc13c..3ca1c498
--- a/cdist/conf/type/__filesystem/gencode-remote
+++ b/cdist/conf/type/__filesystem/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 - 2016 Daniel Heule (hda at sfs.biz)
#
diff --git a/cdist/conf/type/__firewalld_rule/explorer/rule b/cdist/conf/type/__firewalld_rule/explorer/rule
index 0234e5b6..5a0e0265 100644
--- a/cdist/conf/type/__firewalld_rule/explorer/rule
+++ b/cdist/conf/type/__firewalld_rule/explorer/rule
@@ -25,7 +25,7 @@ chain="$(cat "$__object/parameter/chain")"
priority="$(cat "$__object/parameter/priority")"
rule="$(cat "$__object/parameter/rule")"
-if firewall-cmd --permanent --direct --query-rule "$protocol" "$table" "$chain" "$priority" "$rule" >/dev/null; then
+if firewall-cmd --permanent --direct --query-rule "$protocol" "$table" "$chain" "$priority" $rule >/dev/null; then
echo present
else
echo absent
diff --git a/cdist/conf/type/__firewalld_rule/gencode-remote b/cdist/conf/type/__firewalld_rule/gencode-remote
old mode 100755
new mode 100644
index bd6d13e5..8f1ba28a
--- a/cdist/conf/type/__firewalld_rule/gencode-remote
+++ b/cdist/conf/type/__firewalld_rule/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -19,6 +19,7 @@
#
#
+name="$__object_id"
state_should="$(cat "$__object/parameter/state")"
state_is="$(cat "$__object/explorer/rule")"
@@ -32,13 +33,13 @@ rule="$(cat "$__object/parameter/rule")"
case "$state_should" in
present)
- echo "firewall-cmd --quiet --permanent --direct --add-rule '$protocol' '$table' '$chain' '$priority' $rule"
- echo "firewall-cmd --quiet --direct --add-rule '$protocol' '$table' '$chain' '$priority' $rule"
+ echo firewall-cmd --quiet --permanent --direct --add-rule \"$protocol\" \"$table\" \"$chain\" \"$priority\" $rule
+ echo firewall-cmd --quiet --direct --add-rule \"$protocol\" \"$table\" \"$chain\" \"$priority\" $rule
;;
absent)
- echo "firewall-cmd --quiet --permanent --direct --remove-rule '$protocol' '$table' '$chain' '$priority' $rule"
- echo "firewall-cmd --quiet --direct --remove-rule '$protocol' '$table' '$chain' '$priority' $rule"
+ echo firewall-cmd --quiet --permanent --direct --remove-rule \"$protocol\" \"$table\" \"$chain\" \"$priority\" $rule
+ echo firewall-cmd --quiet --direct --remove-rule \"$protocol\" \"$table\" \"$chain\" \"$priority\" $rule
;;
*)
echo "Unknown state $state_should" >&2
diff --git a/cdist/conf/type/__firewalld_rule/manifest b/cdist/conf/type/__firewalld_rule/manifest
old mode 100755
new mode 100644
index 71156329..5baf6da3
--- a/cdist/conf/type/__firewalld_rule/manifest
+++ b/cdist/conf/type/__firewalld_rule/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 David Hürlimann (david at ungleich.ch)
#
diff --git a/cdist/conf/type/__firewalld_start/gencode-remote b/cdist/conf/type/__firewalld_start/gencode-remote
old mode 100755
new mode 100644
index 3e767f68..7a3b6298
--- a/cdist/conf/type/__firewalld_start/gencode-remote
+++ b/cdist/conf/type/__firewalld_start/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Darko Poljak(darko.poljak at ungleich.ch)
#
diff --git a/cdist/conf/type/__firewalld_start/manifest b/cdist/conf/type/__firewalld_start/manifest
old mode 100755
new mode 100644
index 98caaad9..2c6a0219
--- a/cdist/conf/type/__firewalld_start/manifest
+++ b/cdist/conf/type/__firewalld_start/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Darko Poljak (darko.poljak at ungleich.ch)
#
diff --git a/cdist/conf/type/__git/explorer/group b/cdist/conf/type/__git/explorer/group
index 3ddf9656..1308c710 100644
--- a/cdist/conf/type/__git/explorer/group
+++ b/cdist/conf/type/__git/explorer/group
@@ -2,4 +2,4 @@
destination="/$__object_id/.git"
-stat --print "%G" "${destination}" 2>/dev/null || exit 0
+stat --print "%G" ${destination} 2>/dev/null || exit 0
diff --git a/cdist/conf/type/__git/explorer/owner b/cdist/conf/type/__git/explorer/owner
index 4c3cd431..8c36b035 100644
--- a/cdist/conf/type/__git/explorer/owner
+++ b/cdist/conf/type/__git/explorer/owner
@@ -2,4 +2,4 @@
destination="/$__object_id/.git"
-stat --print "%U" "${destination}" 2>/dev/null || exit 0
+stat --print "%U" ${destination} 2>/dev/null || exit 0
diff --git a/cdist/conf/type/__git/gencode-remote b/cdist/conf/type/__git/gencode-remote
old mode 100755
new mode 100644
index ab22655f..c4fc1ef2
--- a/cdist/conf/type/__git/gencode-remote
+++ b/cdist/conf/type/__git/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -19,46 +19,43 @@
#
#
-state_is=$(cat "$__object/explorer/state")
-owner_is=$(cat "$__object/explorer/owner")
-group_is=$(cat "$__object/explorer/group")
+state_is="$(cat "$__object/explorer/state")"
+owner_is="$(cat "$__object/explorer/owner")"
+group_is="$(cat "$__object/explorer/group")"
-state_should=$(cat "$__object/parameter/state")
+state_should="$(cat "$__object/parameter/state")"
-branch=$(cat "$__object/parameter/branch")
+branch="$(cat "$__object/parameter/branch")"
-source=$(cat "$__object/parameter/source")
+source="$(cat "$__object/parameter/source")"
destination="/$__object_id"
-owner=$(cat "$__object/parameter/owner")
-group=$(cat "$__object/parameter/group")
-mode=$(cat "$__object/parameter/mode")
+owner="$(cat "$__object/parameter/owner")"
+group="$(cat "$__object/parameter/group")"
+mode="$(cat "$__object/parameter/mode")"
-[ -f "$__object/parameter/recursive" ] && recursive='--recurse-submodules' || recursive=''
-[ -f "$__object/parameter/shallow" ] && shallow='--depth 1 --shallow-submodules' || shallow=''
-
-[ "$state_should" = "$state_is" ] \
- && [ "$owner" = "$owner_is" ] \
- && [ "$group" = "$group_is" ] \
- && [ -n "$mode" ] && exit 0
+[ "$state_should" = "$state_is" -a \
+ "$owner" = "$owner_is" -a \
+ "$group" = "$group_is" -a \
+ -n "$mode" ] && exit 0
case $state_should in
present)
+
if [ "$state_should" != "$state_is" ]; then
- echo git clone --quiet "$recursive" "$shallow" --branch "$branch" "$source" "$destination"
+ echo git clone --quiet --branch "$branch" "$source" "$destination"
fi
- if { [ -n "$owner" ] && [ "$owner_is" != "$owner" ]; } || \
- { [ -n "$group" ] && [ "$group_is" != "$group" ]; }; then
+ if [ \( -n "$owner" -a "$owner_is" != "$owner" \) -o \
+ \( -n "$group" -a "$group_is" != "$group" \) ]; then
echo chown -R "${owner}:${group}" "$destination"
fi
if [ -n "$mode" ]; then
echo chmod -R "$mode" "$destination"
fi
;;
-
+ # Handled in manifest
absent)
- # Handled in manifest
;;
*)
diff --git a/cdist/conf/type/__git/man.rst b/cdist/conf/type/__git/man.rst
index d3e15f25..17e9c623 100644
--- a/cdist/conf/type/__git/man.rst
+++ b/cdist/conf/type/__git/man.rst
@@ -35,12 +35,6 @@ mode
owner
User to chown to.
-recursive
- Passes the --recurse-submodules flag to git when cloning the repository.
-
-shallow
- Sets --depth=1 and --shallow-submodules for cloning repositories with big history.
-
EXAMPLES
--------
@@ -50,7 +44,7 @@ EXAMPLES
__git /home/services/dokuwiki --source git://github.com/splitbrain/dokuwiki.git
# Checkout cdist, stay on branch 2.1
- __git /home/nico/cdist --source git@code.ungleich.ch:ungleich-public/cdist.git --branch 2.1
+ __git /home/nico/cdist --source git://github.com/ungleich/cdist.git --branch 2.1
AUTHORS
diff --git a/cdist/conf/type/__git/manifest b/cdist/conf/type/__git/manifest
old mode 100755
new mode 100644
index 6fb870f4..b2b0feb0
--- a/cdist/conf/type/__git/manifest
+++ b/cdist/conf/type/__git/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
#
diff --git a/cdist/conf/type/__git/parameter/boolean b/cdist/conf/type/__git/parameter/boolean
deleted file mode 100644
index d600d4ca..00000000
--- a/cdist/conf/type/__git/parameter/boolean
+++ /dev/null
@@ -1,2 +0,0 @@
-recursive
-shallow
diff --git a/cdist/conf/type/__go_get/explorer/go-executable b/cdist/conf/type/__go_get/explorer/go-executable
old mode 100755
new mode 100644
index 87182282..4c84ce07
--- a/cdist/conf/type/__go_get/explorer/go-executable
+++ b/cdist/conf/type/__go_get/explorer/go-executable
@@ -1,6 +1,3 @@
-#!/bin/sh
-# shellcheck disable=SC1091
[ -f /etc/environment ] && . /etc/environment
-# shellcheck disable=SC1091
[ -f /etc/profile ] && . /etc/profile
go version 2>/dev/null || true
diff --git a/cdist/conf/type/__go_get/gencode-remote b/cdist/conf/type/__go_get/gencode-remote
old mode 100755
new mode 100644
index 4c47a70e..5f1d3aae
--- a/cdist/conf/type/__go_get/gencode-remote
+++ b/cdist/conf/type/__go_get/gencode-remote
@@ -1,5 +1,3 @@
-#!/bin/sh -e
-
package=$__object_id
cat<&2 && exit 1
diff --git a/cdist/conf/type/__golang_from_vendor/gencode-remote b/cdist/conf/type/__golang_from_vendor/gencode-remote
old mode 100755
new mode 100644
index 5200e9e3..e372bf61
--- a/cdist/conf/type/__golang_from_vendor/gencode-remote
+++ b/cdist/conf/type/__golang_from_vendor/gencode-remote
@@ -1,8 +1,8 @@
-#!/bin/sh -e
+#!/bin/sh
version=$(cat "$__object/parameter/version")
-kernel_name=$(tr '[:upper:]' '[:lower:]' < "$__global/explorer/kernel_name")
+kernel_name=$(cat "$__global/explorer/kernel_name" | tr '[:upper:]' '[:lower:]')
machine=$(cat "$__global/explorer/machine")
case $machine in
x86_64|amd64)
diff --git a/cdist/conf/type/__golang_from_vendor/manifest b/cdist/conf/type/__golang_from_vendor/manifest
old mode 100755
new mode 100644
index ad39ddfb..9d320830
--- a/cdist/conf/type/__golang_from_vendor/manifest
+++ b/cdist/conf/type/__golang_from_vendor/manifest
@@ -1,4 +1 @@
-#!/bin/sh -e
-
-# shellcheck disable=SC2016
__line go_in_path --line 'export PATH=/usr/local/go/bin:$PATH' --file /etc/profile
diff --git a/cdist/conf/type/__grafana_dashboard/manifest b/cdist/conf/type/__grafana_dashboard/manifest
old mode 100755
new mode 100644
index d145c4c3..b6e3020e
--- a/cdist/conf/type/__grafana_dashboard/manifest
+++ b/cdist/conf/type/__grafana_dashboard/manifest
@@ -1,46 +1,32 @@
-#!/bin/sh -e
+os=$(cat $__global/explorer/os)
+os_version=$(cat $__global/explorer/os_version)
-os=$(cat "$__global/explorer/os")
-os_version=$(cat "$__global/explorer/os_version")
-
-require=""
case $os in
debian|devuan)
case $os_version in
8*|jessie)
- # Differntation not needed anymore
- apt_source_distribution=stable
- ;;
- 9*|ascii/ceres|ascii)
- # Differntation not needed anymore
- apt_source_distribution=stable
- ;;
- 10*)
- # Differntation not needed anymore
- apt_source_distribution=stable
- ;;
+ __apt_key_uri grafana \
+ --name 'Grafana Release Signing Key' \
+ --uri https://packagecloud.io/gpg.key
+
+ require="__apt_key_uri/grafana" __apt_source grafana \
+ --uri https://packagecloud.io/grafana/stable/debian/ \
+ --distribution jessie \
+ --component main
+
+ __package apt-transport-https
+
+ require="__apt_source/grafana __package/apt-transport-https" __package grafana
+ require="__package/grafana" __start_on_boot grafana-server
+ ;;
*)
- echo "Don't know how to install Grafana on $os $os_version. Send us a pull request!" >&2
+ echo "Don't know how to install Grafana on $os $os_version. Send us a pull request!"
exit 1
- ;;
+ ;;
esac
-
- __apt_key_uri grafana \
- --name 'Grafana Release Signing Key' \
- --uri https://packages.grafana.com/gpg.key
-
- require="$require __apt_key_uri/grafana" __apt_source grafana \
- --uri https://packages.grafana.com/oss/deb \
- --distribution $apt_source_distribution \
- --component main
- __package apt-transport-https
- require="$require __apt_source/grafana" __apt_update_index
- require="$require __package/apt-transport-https __apt_update_index" __package grafana
- require="$require __package/grafana" __start_on_boot grafana-server
- require="$require __start_on_boot/grafana-server" __process grafana-server --start "service grafana-server start"
- ;;
+ ;;
*)
- echo "Don't know how to install Grafana on $os. Send us a pull request!" >&2
+ echo "Don't know how to install Grafana on $os. Send us a pull request!"
exit 1
- ;;
+ ;;
esac
diff --git a/cdist/conf/type/__group/explorer/group b/cdist/conf/type/__group/explorer/group
index dc673f61..07f73a91 100755
--- a/cdist/conf/type/__group/explorer/group
+++ b/cdist/conf/type/__group/explorer/group
@@ -1,7 +1,6 @@
#!/bin/sh
#
# 2011-2015 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -22,21 +21,7 @@
# Get an existing groups group entry.
#
-not_supported() {
- echo "Your operating system ($("$__explorer/os")) is currently not supported." >&2
- echo "Cannot extract group information." >&2
- echo "Please contribute an implementation for it if you can." >&2
- exit 1
-}
-
name=$__object_id
-if command -v getent >/dev/null
-then
- getent group "$name" || true
-elif [ -f /etc/group ]
-then
- grep "^${name}:" /etc/group || true
-else
- not_supported
-fi
+getent group "$name" || true
+
diff --git a/cdist/conf/type/__group/explorer/gshadow b/cdist/conf/type/__group/explorer/gshadow
index 05841d69..2e2ab29d 100755
--- a/cdist/conf/type/__group/explorer/gshadow
+++ b/cdist/conf/type/__group/explorer/gshadow
@@ -1,7 +1,6 @@
#!/bin/sh
#
# 2011-2015 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -23,28 +22,13 @@
#
name=$__object_id
-os=$("$__explorer/os")
+os="$($__explorer/os)"
-not_supported() {
- echo "Your operating system ($os) is currently not supported." >&2
- echo "Cannot extract group information." >&2
- echo "Please contribute an implementation for it if you can." >&2
- exit 1
-}
-
-case $os in
- "freebsd"|"netbsd")
- echo "$os does not have getent gshadow" >&2
- exit 0
- ;;
+case "$os" in
+ "freebsd"|"netbsd")
+ echo "$os does not have getent gshadow"
+ exit 0
+ ;;
esac
-if command -v getent >/dev/null
-then
- getent gshadow "$name" || true
-elif [ -f /etc/gshadow ]
-then
- grep "^${name}:" /etc/gshadow || true
-else
- not_supported
-fi
+getent gshadow "$name" || true
diff --git a/cdist/conf/type/__group/gencode-remote b/cdist/conf/type/__group/gencode-remote
index 6091c548..2aaa83f3 100755
--- a/cdist/conf/type/__group/gencode-remote
+++ b/cdist/conf/type/__group/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2015 Steven Armstrong (steven-cdist at armstrong.cc)
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
@@ -30,9 +30,9 @@ state="$(cat "$__object/parameter/state")"
# Use short option names for portability
shorten_property() {
case "$1" in
- gid) echo " -g";;
- password) echo " -p";;
- system) echo " -r";;
+ gid) echo "-g";;
+ password) echo "-p";;
+ system) echo "-r";;
esac
}
@@ -40,9 +40,11 @@ shorten_property() {
if [ "$state" = "present" ]; then
case "$os" in
freebsd)
+ supported_add_properties="gid"
supported_change_properties="gid"
;;
*)
+ supported_add_properties="gid password system"
supported_change_properties="gid password"
;;
esac
@@ -61,8 +63,8 @@ if [ "$state" = "present" ]; then
;;
esac
if [ "$new_value" != "$current_value" ]; then
- set -- "$@" "$(shorten_property "$property")" \'"$new_value"\'
- echo "change $property $new_value $current_value" >> "$__messages_out"
+ set -- "$@" "$(shorten_property $property)" \'$new_value\'
+ echo change $property $new_value $current_value >> "$__messages_out"
fi
fi
done
@@ -81,9 +83,9 @@ if [ "$state" = "present" ]; then
new_value="$(cat "$__object/parameter/$property")"
if [ -z "$new_value" ]; then
# Boolean parameters have no value
- set -- "$@" "$(shorten_property "$property")"
+ set -- "$@" "$(shorten_property $property)"
else
- set -- "$@" "$(shorten_property "$property")" \'"$new_value"\'
+ set -- "$@" "$(shorten_property $property)" \'$new_value\'
fi
fi
done
diff --git a/cdist/conf/type/__hostname/explorer/has_hostnamectl b/cdist/conf/type/__hostname/explorer/has_hostnamectl
index 2f531f30..9040023d 100755
--- a/cdist/conf/type/__hostname/explorer/has_hostnamectl
+++ b/cdist/conf/type/__hostname/explorer/has_hostnamectl
@@ -21,4 +21,4 @@
# Check whether system has hostnamectl
#
-command -v hostnamectl 2>/dev/null || true
+command -v hostnamectl || true
diff --git a/cdist/test/autil/fixtures/explorer/hostname b/cdist/conf/type/__hostname/explorer/hostname_file
similarity index 73%
rename from cdist/test/autil/fixtures/explorer/hostname
rename to cdist/conf/type/__hostname/explorer/hostname_file
index 7715c6b0..6a00aa9f 100755
--- a/cdist/test/autil/fixtures/explorer/hostname
+++ b/cdist/conf/type/__hostname/explorer/hostname_file
@@ -1,7 +1,6 @@
#!/bin/sh
#
-# 2010-2014 Nico Schottelius (nico-cdist at schottelius.org)
-# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2014 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -19,7 +18,13 @@
# along with cdist. If not, see .
#
#
+# Retrieve the contents of /etc/hostname
+#
-if command -v uname >/dev/null; then
- uname -n
+# Almost any distribution
+if [ -f /etc/hostname ]; then
+ cat /etc/hostname
+# SuSE
+elif [ -f /etc/HOSTNAME ]; then
+ cat /etc/HOSTNAME
fi
diff --git a/cdist/test/autil/fixtures/explorer/machine b/cdist/conf/type/__hostname/explorer/hostname_sysconfig
similarity index 77%
rename from cdist/test/autil/fixtures/explorer/machine
rename to cdist/conf/type/__hostname/explorer/hostname_sysconfig
index d4a0e106..d0d7b4e7 100755
--- a/cdist/test/autil/fixtures/explorer/machine
+++ b/cdist/conf/type/__hostname/explorer/hostname_sysconfig
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# 2010-2011 Andi Brönnimann (andi-cdist at v-net.ch)
+# 2014 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -18,10 +18,9 @@
# along with cdist. If not, see .
#
#
-# All os variables are lower case
-#
+# Retrieve the contents of /etc/hostname
#
-if command -v uname 2>&1 >/dev/null; then
- uname -m
+if [ -f /etc/sysconfig/network ]; then
+ awk -F= '/^HOSTNAME=/ { print $2 }' /etc/sysconfig/network
fi
diff --git a/cdist/conf/type/__hostname/explorer/max_len b/cdist/conf/type/__hostname/explorer/max_len
deleted file mode 100644
index fb863949..00000000
--- a/cdist/conf/type/__hostname/explorer/max_len
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh -e
-
-command -v getconf >/dev/null || exit 0
-
-val=$(getconf HOST_NAME_MAX 2>/dev/null) || exit 0
-
-if test -n "${val}" -a "${val}" != 'undefined'
-then
- echo "${val}"
-fi
diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote
index ae224611..4eb08723 100755
--- a/cdist/conf/type/__hostname/gencode-remote
+++ b/cdist/conf/type/__hostname/gencode-remote
@@ -1,8 +1,7 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2014-2017 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -20,81 +19,57 @@
# along with cdist. If not, see .
#
-os=$(cat "$__global/explorer/os")
-name_running=$(cat "$__global/explorer/hostname")
-has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl")
-
-
-if test -s "$__object/parameter/name"
-then
- name_should=$(cat "$__object/parameter/name")
+if [ -f "$__object/parameter/name" ]; then
+ name_should="$(cat "$__object/parameter/name")"
else
- case $os
- in
- # RedHat-derivatives and BSDs
- centos|fedora|redhat|scientific|freebsd|macosx|netbsd|openbsd)
- # Hostname is FQDN
- name_should="${__target_host}"
- ;;
- *)
- # Hostname is only first component of FQDN
- name_should="${__target_host%%.*}"
- ;;
- esac
+ name_should="$(echo "${__target_host%%.*}")"
fi
+os=$(cat "$__global/explorer/os")
+name_running=$(cat "$__global/explorer/hostname")
+name_config=$(cat "$__object/explorer/hostname_file")
+name_sysconfig=$(cat "$__object/explorer/hostname_sysconfig")
+has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl")
################################################################################
-# Check if the (running) hostname is already correct
+# If everything is ok -> exit
#
-test "$name_running" != "$name_should" || exit 0
-
+case "$os" in
+ archlinux|debian|suse|ubuntu|devuan)
+ if [ "$name_config" = "$name_should" -a "$name_running" = "$name_should" ]; then
+ exit 0
+ fi
+ ;;
+ scientific|centos|openbsd)
+ if [ "$name_sysconfig" = "$name_should" -a "$name_running" = "$name_should" ]; then
+ exit 0
+ fi
+ ;;
+ *)
+ echo "Unsupported os: $os" >&2
+ exit 1
+ ;;
+esac
################################################################################
# Setup hostname
#
-echo 'changed' >>"$__messages_out"
+echo changed >> "$__messages_out"
-# Use the good old way to set the hostname.
-case $os
-in
- alpine|debian|devuan|ubuntu)
- echo 'hostname -F /etc/hostname'
- ;;
- archlinux)
- echo 'command -v hostnamectl >/dev/null 2>&1' \
- "&& hostnamectl set-hostname '$name_should'" \
- "|| hostname '$name_should'"
- ;;
- centos|fedora|redhat|scientific|freebsd|netbsd|openbsd|gentoo|void)
- echo "hostname '$name_should'"
- ;;
- macosx)
- echo "scutil --set HostName '$name_should'"
- ;;
- solaris)
- echo "uname -S '$name_should'"
- ;;
- slackware|suse|opensuse-leap)
- # We do not read from /etc/HOSTNAME, because the running
- # hostname is the first component only while the file contains
- # the FQDN.
- echo "hostname '$name_should'"
- ;;
- *)
- # Fall back to set the hostname using hostnamectl, if available.
- if test -n "$has_hostnamectl"
- then
- # Don't use hostnamectl as the primary means to set the hostname for
- # systemd systems, because it cannot be trusted to work reliably and
- # exit with non-zero when it fails (e.g. hostname too long,
- # D-Bus failure, etc.).
-
- echo "hostnamectl set-hostname \"\$(cat /etc/hostname)\""
- echo "test \"\$(hostname)\" = \"\$(cat /etc/hostname)\"" \
- " || hostname -F /etc/hostname"
- else
- printf "echo 'Unsupported OS: %s' >&2\nexit 1\n" "$os"
- fi
- ;;
-esac
+if [ "$has_hostnamectl" ]; then
+ echo "hostnamectl set-hostname '$name_should'"
+else
+ case "$os" in
+ archlinux|debian|ubuntu|devuan)
+ echo "hostname '$name_should'"
+ echo "printf '%s\n' '$name_should' > /etc/hostname"
+ ;;
+ centos|openbsd)
+ echo "hostname '$name_should'"
+ ;;
+ suse)
+ echo "hostname '$name_should'"
+ echo "printf '%s\n' '$name_should' > /etc/HOSTNAME"
+ ;;
+ esac
+fi
diff --git a/cdist/conf/type/__hostname/man.rst b/cdist/conf/type/__hostname/man.rst
index 72aefbab..d23a3b8a 100644
--- a/cdist/conf/type/__hostname/man.rst
+++ b/cdist/conf/type/__hostname/man.rst
@@ -8,10 +8,7 @@ cdist-type__hostname - Set the hostname
DESCRIPTION
-----------
-Sets the hostname on various operating systems.
-
-**Tip:** For advice on choosing a hostname, see
-`RFC 1178 `_.
+Set's the hostname on various operating systems.
REQUIRED PARAMETERS
@@ -21,7 +18,7 @@ None.
OPTIONAL PARAMETERS
-------------------
name
- The hostname to set. Defaults to the first segment of __target_host
+ The hostname to set. Defaults to the first segment of __target_host
(${__target_host%%.*})
diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest
index e1e356a0..823d2f7e 100755
--- a/cdist/conf/type/__hostname/manifest
+++ b/cdist/conf/type/__hostname/manifest
@@ -1,8 +1,7 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -20,170 +19,43 @@
# along with cdist. If not, see .
#
-not_supported() {
- echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
- echo "Please contribute an implementation for it if you can." >&2
- exit 1
-}
-
-set_hostname_systemd() {
- echo "$1" | __file /etc/hostname --source -
-}
-
os=$(cat "$__global/explorer/os")
-os_version=$(cat "$__global/explorer/os_version")
-os_major=$(echo "$os_version" | grep -o '^[0-9][0-9]*' || true)
-
-max_len=$(cat "$__object/explorer/max_len")
-has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl")
-
-if test -s "$__object/parameter/name"
-then
- name_should=$(cat "$__object/parameter/name")
+if [ -f "$__object/parameter/name" ]; then
+ name_should="$(cat "$__object/parameter/name")"
else
- case $os
- in
- # RedHat-derivatives and BSDs
- centos|fedora|redhat|scientific|freebsd|netbsd|openbsd|slackware)
- # Hostname is FQDN
- name_should="${__target_host}"
- ;;
- suse|opensuse-leap)
- # Classic SuSE stores the FQDN in /etc/HOSTNAME, while
- # systemd does not. The running hostname is the first
- # component in both cases.
- # In versions before 15.x, the FQDN is stored in /etc/hostname.
- if test -n "$has_hostnamectl" && test "$os_major" -ge 15 \
- && test "$os_major" -ne 42
- then
- name_should="${__target_host%%.*}"
- else
- name_should="${__target_host}"
- fi
- ;;
- *)
- # Hostname is only first component of FQDN on all other systems.
- name_should="${__target_host%%.*}"
- ;;
+ case "$os" in
+ openbsd)
+ name_should="$(echo "${__target_host}")"
+ ;;
+ *)
+ name_should="$(echo "${__target_host%%.*}")"
+ ;;
esac
fi
-if test -n "$max_len" && test "$(printf '%s' "$name_should" | wc -c)" -gt "$max_len"
-then
- printf "Host name too long. Up to %u characters allowed.\n" "${max_len}" >&2
- exit 1
-fi
-case $os
-in
- alpine|debian|devuan|ubuntu|void)
- echo "$name_should" | __file /etc/hostname --source -
- ;;
- archlinux)
- if test -n "$has_hostnamectl"
- then
- set_hostname_systemd "$name_should"
- else
- echo 'Ancient ArchLinux variants without hostnamectl are not supported.' >&2
- exit 1
- # Only for ancient ArchLinux, write to /etc/rc.conf on pre-systemd
- # versions. There are some versions which use /etc/hostname but not
- # systemd. It is unclear which ones these are.
+not_supported() {
+ echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
+ echo "Please contribute an implementation for it if you can." >&2
+ exit 1
+}
- # __key_value '/etc/rc.conf:HOSTNAME' \
- # --file /etc/rc.conf \
- # --delimiter '=' --exact_delimiter \
- # --key 'HOSTNAME' \
- # --value "\"$name_should\""
- fi
- ;;
- centos|fedora|redhat|scientific)
- if test -z "$has_hostnamectl"
- then
- # Only write to /etc/sysconfig/network on non-systemd versions.
- # On systemd-based versions this entry is ignored.
- __key_value '/etc/sysconfig/network:HOSTNAME' \
- --file /etc/sysconfig/network \
- --delimiter '=' --exact_delimiter \
- --key HOSTNAME \
- --value "\"$name_should\""
- else
- set_hostname_systemd "$name_should"
- fi
- ;;
- gentoo)
- # Only write to /etc/conf.d/hostname on OpenRC-based installations.
- # On systemd use hostnamectl(1) in gencode-remote.
- if test -z "$has_hostnamectl"
- then
- __key_value '/etc/conf.d/hostname:hostname' \
- --file /etc/conf.d/hostname \
- --delimiter '=' --exact_delimiter \
- --key 'hostname' \
- --value "\"$name_should\""
- else
- set_hostname_systemd "$name_should"
- fi
- ;;
- freebsd)
- __key_value '/etc/rc.conf:hostname' \
- --file /etc/rc.conf \
- --delimiter '=' --exact_delimiter \
- --key 'hostname' \
- --value "\"$name_should\""
- ;;
- macosx)
+case "$os" in
+ archlinux|debian|suse|ubuntu|devuan)
# handled in gencode-remote
:
;;
- netbsd)
- __key_value '/etc/rc.conf:hostname' \
- --file /etc/rc.conf \
- --delimiter '=' --exact_delimiter \
- --key 'hostname' \
- --value "\"$name_should\""
-
- # To avoid confusion, ensure that the hostname is only stored once.
- __file /etc/myname --state absent
+ scientific|centos)
+ __key_value sysconfig-hostname \
+ --file /etc/sysconfig/network \
+ --delimiter '=' \
+ --key HOSTNAME \
+ --value "$name_should" --exact_delimiter
;;
openbsd)
echo "$name_should" | __file /etc/myname --source -
;;
- slackware)
- # We write the FQDN into /etc/HOSTNAME. But /etc/rc.d/rc.M will only
- # read the first component from this file and set it as the running
- # hostname on boot.
- echo "$name_should" | __file /etc/HOSTNAME --source -
- ;;
- solaris)
- echo "$name_should" | __file /etc/nodename --source -
- ;;
- suse|opensuse-leap)
- # Modern SuSE provides /etc/HOSTNAME as a symlink for
- # backwards-compatibility. Unfortunately it cannot be used
- # here as __file does not follow the symlink.
- # Therefore, we use the presence of the hostnamectl binary as
- # an indication of which file to use. This unfortunately does
- # not work correctly on openSUSE 12.x which provides
- # hostnamectl but not /etc/hostname.
-
- if test -n "$has_hostnamectl" -a "$os_major" -gt 12
- then
- hostname_file='/etc/hostname'
- else
- hostname_file='/etc/HOSTNAME'
- fi
-
- echo "$name_should" | __file "$hostname_file" --source -
- ;;
*)
- # On other operating systems we fall back to systemd's
- # hostnamectl if available…
- if test -n "$has_hostnamectl"
- then
- set_hostname_systemd "$name_should"
- else
- not_supported
- fi
+ not_supported
;;
esac
diff --git a/cdist/conf/type/__hosts/manifest b/cdist/conf/type/__hosts/manifest
index c536b83b..6fa21608 100755
--- a/cdist/conf/type/__hosts/manifest
+++ b/cdist/conf/type/__hosts/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
# Copyright (C) 2015 Bogatov Dmitry
#
# This program is free software: you can redistribute it and/or modify
diff --git a/cdist/conf/type/__install_bootloader_grub/gencode-remote b/cdist/conf/type/__install_bootloader_grub/gencode-remote
index 1caebbbf..0db6dee6 100755
--- a/cdist/conf/type/__install_bootloader_grub/gencode-remote
+++ b/cdist/conf/type/__install_bootloader_grub/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -28,7 +28,7 @@ install_script="$__object/files/install_script"
# Link file descriptor #6 with stdout
exec 6>&1
# Link stdout with $install_script
-exec > "$install_script"
+exec > $install_script
# Generate script to install bootloader on distro
printf '#!/bin/sh -l\n'
diff --git a/cdist/test/autil/fixtures/explorer/lsb_id b/cdist/conf/type/__install_bootloader_grub/manifest
similarity index 74%
rename from cdist/test/autil/fixtures/explorer/lsb_id
rename to cdist/conf/type/__install_bootloader_grub/manifest
index 9754eb63..4c7c4955 100755
--- a/cdist/test/autil/fixtures/explorer/lsb_id
+++ b/cdist/conf/type/__install_bootloader_grub/manifest
@@ -17,17 +17,9 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
#
-#
-set +e
-case "$($__explorer/os)" in
- openwrt)
- (. /etc/openwrt_release && echo "$DISTRIB_ID")
- ;;
- *)
- lsb_release=$(command -v lsb_release)
- if [ -x "$lsb_release" ]; then
- $lsb_release --short --id
- fi
- ;;
-esac
+# set defaults
+device="$(cat "$__object/parameter/device" 2>/dev/null \
+ || echo "/$__object_id" | tee "$__object/parameter/device")"
+chroot="$(cat "$__object/parameter/chroot" 2>/dev/null \
+ || echo "/target" | tee "$__object/parameter/chroot")"
diff --git a/cdist/conf/type/__install_chroot_mount/gencode-local b/cdist/conf/type/__install_chroot_mount/gencode-local
deleted file mode 120000
index 68dcbd6a..00000000
--- a/cdist/conf/type/__install_chroot_mount/gencode-local
+++ /dev/null
@@ -1 +0,0 @@
-../__chroot_mount/gencode-local
\ No newline at end of file
diff --git a/cdist/conf/type/__install_chroot_umount/manifest b/cdist/conf/type/__install_chroot_umount/manifest
deleted file mode 120000
index f17af67a..00000000
--- a/cdist/conf/type/__install_chroot_umount/manifest
+++ /dev/null
@@ -1 +0,0 @@
-../__chroot_umount/manifest
\ No newline at end of file
diff --git a/cdist/conf/type/__install_config/files/remote/copy b/cdist/conf/type/__install_config/files/remote/copy
index fa7fa9b7..df6a3f06 100755
--- a/cdist/conf/type/__install_config/files/remote/copy
+++ b/cdist/conf/type/__install_config/files/remote/copy
@@ -1,6 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2011-2017 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@@ -32,17 +32,17 @@ log() {
chroot="$1"; shift
target_host="$__target_host"
+scp="scp -o User=root -q"
+
# postfix target_host with chroot location
code="$(echo "$@" | sed "s|$target_host:|$target_host:$chroot|g")"
log "target_host: $target_host"
log "chroot: $chroot"
-log "@: $*"
+log "@: $@"
log "code: $code"
# copy files into chroot
-# __default_remote_copy and code should be split
-# shellcheck disable=SC2086
-$__default_remote_copy $code
+$scp $code
log "-----"
diff --git a/cdist/conf/type/__install_config/files/remote/exec b/cdist/conf/type/__install_config/files/remote/exec
index c2057ebf..17375693 100755
--- a/cdist/conf/type/__install_config/files/remote/exec
+++ b/cdist/conf/type/__install_config/files/remote/exec
@@ -1,6 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2011-2017 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2011-2013 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@@ -34,19 +34,18 @@ target_host="$__target_host"
# In exec mode the first argument is the __target_host which we already got from env. Get rid of it.
shift
+ssh="ssh -o User=root -q $target_host"
+
# escape ' with '"'"'
code="$(echo "$@" | sed -e "s/'/'\"'\"'/g")"
-# shellcheck disable=SC2089
-code="chroot $chroot sh -e -c '$code'"
+code="$ssh chroot $chroot sh -c '$code'"
log "target_host: $target_host"
log "chroot: $chroot"
-log "@: $*"
+log "@: $@"
log "code: $code"
# Run the code
-# __default_remote_exec and code should be split
-# shellcheck disable=SC2086,SC2090
-$__default_remote_exec "$target_host" $code
+$code
log "-----"
diff --git a/cdist/conf/type/__install_config/gencode-local b/cdist/conf/type/__install_config/gencode-local
index dd4f2a78..3767253e 100755
--- a/cdist/conf/type/__install_config/gencode-local
+++ b/cdist/conf/type/__install_config/gencode-local
@@ -1,6 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2011-2018 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2011-2017 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@@ -22,12 +22,13 @@ chroot="$(cat "$__object/parameter/chroot")"
remote_exec="$__type/files/remote/exec"
remote_copy="$__type/files/remote/copy"
+cdist_args=""
+[ "$__verbose" = "yes" ] && cdist_args="-vv"
+[ "$__debug" = "yes" ] && cdist_args="-d"
+
cat << DONE
-export __cdist_install_config=yes
-export __cdist_log_level=$__cdist_log_level
-export __default_remote_exec="$__remote_exec"
-export __default_remote_copy="$__remote_copy"
cdist config \
+ $cdist_args \
--remote-exec="$remote_exec $chroot" \
--remote-copy="$remote_copy $chroot" \
$__target_host
diff --git a/cdist/conf/type/__systemd_unit/explorer/enablement-state b/cdist/conf/type/__install_config/manifest
old mode 100644
new mode 100755
similarity index 78%
rename from cdist/conf/type/__systemd_unit/explorer/enablement-state
rename to cdist/conf/type/__install_config/manifest
index 5a5a4462..f26297b4
--- a/cdist/conf/type/__systemd_unit/explorer/enablement-state
+++ b/cdist/conf/type/__install_config/manifest
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# 2017 Ľubomír Kučera
+# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@@ -18,4 +18,6 @@
# along with cdist. If not, see .
#
-systemctl is-enabled "${__object_id}" 2>/dev/null || true
+# set defaults
+chroot="$(cat "$__object/parameter/chroot" 2>/dev/null \
+ || echo "/target" | tee "$__object/parameter/chroot")"
diff --git a/cdist/conf/type/__install_config/parameter/default/chroot b/cdist/conf/type/__install_config/parameter/default/chroot
deleted file mode 100644
index ea8c4bf7..00000000
--- a/cdist/conf/type/__install_config/parameter/default/chroot
+++ /dev/null
@@ -1 +0,0 @@
-/target
diff --git a/cdist/conf/type/__install_coreos/gencode-remote b/cdist/conf/type/__install_coreos/gencode-remote
deleted file mode 100755
index f550b5a5..00000000
--- a/cdist/conf/type/__install_coreos/gencode-remote
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh -e
-
-device=$(cat "${__object:?}/parameter/device")
-ignition=$(cat "${__object}/parameter/ignition")
-
-cat < "\${ignition_file}" << eof
-$(base64 "${ignition}")
-eof
-
-coreos-install -d "${device}" \
- \$(if [ -s "\${ignition_file}" ]; then
- printf -- "-i \${ignition_file}\\n"
- fi)
-
-rm "\${ignition_file}"
-EOF
diff --git a/cdist/conf/type/__install_coreos/install b/cdist/conf/type/__install_coreos/install
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__install_coreos/man.rst b/cdist/conf/type/__install_coreos/man.rst
deleted file mode 100644
index 314f9f2a..00000000
--- a/cdist/conf/type/__install_coreos/man.rst
+++ /dev/null
@@ -1,50 +0,0 @@
-cdist-type__install_coreos(7)
-=============================
-
-NAME
-----
-
-cdist-type__install_coreos - Install CoreOS
-
-DESCRIPTION
------------
-
-This type installs CoreOS to a given device using coreos-install_, which is
-present in CoreOS ISO by default.
-
-.. _coreos-install: https://raw.githubusercontent.com/coreos/init/master/bin/coreos-install
-
-REQUIRED PARAMETERS
--------------------
-
-device
- A device CoreOS will be installed to.
-
-OPTIONAL PARAMETERS
--------------------
-
-ignition
- Path to ignition config.
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __install_coreos \
- --device /dev/sda \
- --ignition ignition.json
-
-
-AUTHORS
--------
-
-Ľubomír Kučera
-
-COPYING
--------
-
-Copyright \(C) 2018 Ľubomír Kučera. 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.
diff --git a/cdist/conf/type/__install_coreos/parameter/default/ignition b/cdist/conf/type/__install_coreos/parameter/default/ignition
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__install_coreos/parameter/optional b/cdist/conf/type/__install_coreos/parameter/optional
deleted file mode 100644
index df284caa..00000000
--- a/cdist/conf/type/__install_coreos/parameter/optional
+++ /dev/null
@@ -1 +0,0 @@
-ignition
diff --git a/cdist/conf/type/__install_coreos/parameter/required b/cdist/conf/type/__install_coreos/parameter/required
deleted file mode 100644
index f89ee6a8..00000000
--- a/cdist/conf/type/__install_coreos/parameter/required
+++ /dev/null
@@ -1 +0,0 @@
-device
diff --git a/cdist/conf/type/__install_coreos/singleton b/cdist/conf/type/__install_coreos/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__install_directory/man.rst b/cdist/conf/type/__install_directory/man.rst
deleted file mode 100644
index c402cbad..00000000
--- a/cdist/conf/type/__install_directory/man.rst
+++ /dev/null
@@ -1,101 +0,0 @@
-cdist-type__install_directory(7)
-================================
-
-NAME
-----
-cdist-type__install_directory - Manage a directory with install command
-
-
-DESCRIPTION
------------
-This cdist type allows you to create or remove directories on the target.
-
-
-REQUIRED PARAMETERS
--------------------
-None.
-
-
-OPTIONAL PARAMETERS
--------------------
-state
- 'present' or 'absent', defaults to 'present'
-
-group
- Group to chgrp to.
-
-mode
- Unix permissions, suitable for chmod.
-
-owner
- User to chown to.
-
-
-BOOLEAN PARAMETERS
-------------------
-parents
- Whether to create parents as well (mkdir -p behaviour).
- Warning: all intermediate directory permissions default
- to whatever mkdir -p does.
-
- Usually this means root:root, 0700.
-
-recursive
- If supplied the chgrp and chown call will run recursively.
- This does *not* influence the behaviour of chmod.
-
-MESSAGES
---------
-chgrp
- Changed group membership
-chown
- Changed owner
-chmod
- Changed mode
-create
- Empty directory was created
-remove
- Directory exists, but state is absent, directory will be removed by generated code.
-remove non directory
- Something other than a directory with the same name exists and was removed prior to create.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # A silly example
- __install_directory /tmp/foobar
-
- # Remove a directory
- __install_directory /tmp/foobar --state absent
-
- # Ensure /etc exists correctly
- __install_directory /etc --owner root --group root --mode 0755
-
- # Create nfs service directory, including parents
- __install_directory /home/services/nfs --parents
-
- # Change permissions recursively
- __install_directory /home/services --recursive --owner root --group root
-
- # Setup a temp directory
- __install_directory /local --mode 1777
-
- # Take it all
- __install_directory /home/services/kvm --recursive --parents \
- --owner root --group root --mode 0755 --state present
-
-
-AUTHORS
--------
-Nico Schottelius
-
-
-COPYING
--------
-Copyright \(C) 2011 Nico Schottelius. 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.
diff --git a/cdist/conf/type/__install_directory/man.rst b/cdist/conf/type/__install_directory/man.rst
new file mode 120000
index 00000000..1ad7fa84
--- /dev/null
+++ b/cdist/conf/type/__install_directory/man.rst
@@ -0,0 +1 @@
+../__directory/man.rst
\ No newline at end of file
diff --git a/cdist/conf/type/__install_file/man.rst b/cdist/conf/type/__install_file/man.rst
index 977ed77c..c5409167 100644
--- a/cdist/conf/type/__install_file/man.rst
+++ b/cdist/conf/type/__install_file/man.rst
@@ -23,10 +23,6 @@ symlink
directory
replace it with the source file
-One exception is that when state is pre-exists, an error is raised if
-the file would have been created otherwise (e.g. it is not present or
-not a regular file).
-
In any case, make sure that the file attributes are as specified.
@@ -37,7 +33,7 @@ None.
OPTIONAL PARAMETERS
-------------------
state
- 'present', 'absent', 'exists' or 'pre-exists', defaults to 'present' where:
+ 'present', 'absent' or 'exists', defaults to 'present' where:
present
the file is exactly the one from source
@@ -45,9 +41,6 @@ state
the file does not exist
exists
the file from source but only if it doesn't already exist
- pre-exists
- check that the file exists and is a regular file, but do not
- create or modify it
group
Group to chgrp to.
@@ -63,9 +56,6 @@ source
If not supplied, an empty file or directory will be created.
If source is '-' (dash), take what was written to stdin as the file content.
-onchange
- The code to run if file is modified.
-
MESSAGES
--------
chgrp
@@ -103,8 +93,6 @@ EXAMPLES
__install_file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \
--state exists \
--owner frodo --mode 0600
- # Check that the file is present, show an error when it is not
- __install_file /etc/somefile --state pre-exists
# Take file content from stdin
__install_file /tmp/whatever --owner root --group root --mode 644 --source - << DONE
Here goes the content for /tmp/whatever
diff --git a/cdist/conf/type/__install_fstab/manifest b/cdist/conf/type/__install_fstab/manifest
index c5d24f3c..74af53c0 100755
--- a/cdist/conf/type/__install_fstab/manifest
+++ b/cdist/conf/type/__install_fstab/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__install_generate_fstab/gencode-local b/cdist/conf/type/__install_generate_fstab/gencode-local
index 80455aaa..1fec9334 100755
--- a/cdist/conf/type/__install_generate_fstab/gencode-local
+++ b/cdist/conf/type/__install_generate_fstab/gencode-local
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -23,13 +23,12 @@ cat "$__type/files/fstab.header" > "$destination"
mkdir "$__object/files"
# get current UUID's from target_host
-$__remote_exec "$__target_host" blkid > "$__object/files/blkid"
+$__remote_exec $__target_host blkid > "$__object/files/blkid"
-find "$__global/object/__install_mount" -type d -name "$__cdist_object_marker" |
-while IFS= read -r object
-do
+for object in $(find "$__global/object/__install_mount" -type d -name "$__cdist_object_marker"); do
device="$(cat "$object/parameter/device")"
dir="$(cat "$object/parameter/dir")"
+ prefix="$(cat "$object/parameter/prefix")"
type="$(cat "$object/parameter/type")"
if [ -f "$object/parameter/options" ]; then
options="$(cat "$object/parameter/options")"
@@ -55,7 +54,7 @@ do
;;
esac
if [ -f "$__object/parameter/uuid" ]; then
- uuid="$(grep -w "$device" "$__object/files/blkid" | awk '{print $2}')"
+ uuid="$(grep -w $device "$__object/files/blkid" | awk '{print $2}')"
if [ -n "$uuid" ]; then
echo "# $dir was on $device during installation" >> "$destination"
device="$uuid"
diff --git a/cdist/conf/type/__install_mkfs/gencode-remote b/cdist/conf/type/__install_mkfs/gencode-remote
index 8fc2c98e..c11689df 100755
--- a/cdist/conf/type/__install_mkfs/gencode-remote
+++ b/cdist/conf/type/__install_mkfs/gencode-remote
@@ -1,7 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2013 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2017 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -23,31 +22,48 @@ device="$(cat "$__object/parameter/device")"
type="$(cat "$__object/parameter/type")"
case "$type" in
- swap)
- echo "mkswap -f $device"
- exit 0
- ;;
- xfs)
- command="mkfs.xfs -f -q"
- ;;
-
- vfat)
- command="mkfs.vfat"
- ;;
-
- *)
- command="mkfs -t $type -q"
- ;;
+ swap)
+ echo "mkswap -f $device"
+ ;;
+ xfs)
+ command="mkfs.xfs -f -q"
+ if [ -f "$__object/parameter/options" ]; then
+ options="$(cat "$__object/parameter/options")"
+ command="$command $options"
+ fi
+ command="$command $device"
+ if [ -f "$__object/parameter/blocks" ]; then
+ blocks="$(cat "$__object/parameter/blocks")"
+ command="$command $blocks"
+ fi
+ echo "$command"
+ ;;
+ vfat)
+ command="mkfs.vfat"
+ if [ -n "$fat_size" ]; then
+ command="$command -F $fat_size"
+ fi
+ if [ -f "$__object/parameter/options" ]; then
+ options="$(cat "$__object/parameter/options")"
+ command="$command $options"
+ fi
+ command="$command $device"
+ if [ -f "$__object/parameter/blocks" ]; then
+ blocks="$(cat "$__object/parameter/blocks")"
+ command="$command $blocks"
+ fi
+ echo "$command"
+ ;;
+ *)
+ command="mkfs -t $type -q"
+ if [ -f "$__object/parameter/options" ]; then
+ options="$(cat "$__object/parameter/options")"
+ command="$command $options"
+ fi
+ command="$command $device"
+ if [ -f "$__object/parameter/blocks" ]; then
+ blocks="$(cat "$__object/parameter/blocks")"
+ command="$command $blocks"
+ fi
+ echo "$command"
esac
-
-if [ -f "$__object/parameter/options" ]; then
- options="$(cat "$__object/parameter/options")"
- command="$command $options"
-fi
-
-command="$command $device"
-if [ -f "$__object/parameter/blocks" ]; then
- blocks="$(cat "$__object/parameter/blocks")"
- command="$command $blocks"
-fi
-echo "$command"
diff --git a/cdist/conf/type/__install_mkfs/manifest b/cdist/conf/type/__install_mkfs/manifest
index b0a21dae..e9d275a4 100755
--- a/cdist/conf/type/__install_mkfs/manifest
+++ b/cdist/conf/type/__install_mkfs/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -19,7 +19,13 @@
#
# set defaults
-if [ ! -f "$__object/parameter/device" ]; then
+if [ -f "$__object/parameter/device" ]; then
+ device="(cat "$__object/parameter/device")"
+else
device="/$__object_id"
echo "$device" > "$__object/parameter/device"
fi
+
+type="(cat "$__object/parameter/type")"
+
+options="(cat "$__object/parameter/options")"
diff --git a/cdist/conf/type/__install_mount/gencode-remote b/cdist/conf/type/__install_mount/gencode-remote
index 4415f0ff..b2498d41 100755
--- a/cdist/conf/type/__install_mount/gencode-remote
+++ b/cdist/conf/type/__install_mount/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2013 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -20,9 +20,7 @@
get_type_from_mkfs() {
_device="$1"
- find "$__global/object/__install_mkfs" -type d -name "$__cdist_object_marker" |
- while IFS= read -r mkfs_object
- do
+ for mkfs_object in $(find "$__global/object/__install_mkfs" -type d -name "$__cdist_object_marker"); do
mkfs_device="$(cat "$mkfs_object/parameter/device")"
if [ "$_device" = "$mkfs_device" ]; then
cat "$mkfs_object/parameter/type"
diff --git a/cdist/conf/type/__install_mount/manifest b/cdist/conf/type/__install_mount/manifest
index 72fc26e2..5afae7fc 100755
--- a/cdist/conf/type/__install_mount/manifest
+++ b/cdist/conf/type/__install_mount/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__install_partition_msdos/manifest b/cdist/conf/type/__install_partition_msdos/manifest
index b32605fa..636fbd6a 100755
--- a/cdist/conf/type/__install_partition_msdos/manifest
+++ b/cdist/conf/type/__install_partition_msdos/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__install_partition_msdos_apply/files/lib.sh b/cdist/conf/type/__install_partition_msdos_apply/files/lib.sh
index 2db9a441..cddc575d 100644
--- a/cdist/conf/type/__install_partition_msdos_apply/files/lib.sh
+++ b/cdist/conf/type/__install_partition_msdos_apply/files/lib.sh
@@ -1,20 +1,18 @@
-#!/bin/sh
-
die() {
- echo "[__install_partition_msdos_apply] $*" >&2
+ echo "[__install_partition_msdos_apply] $@" >&2
exit 1
}
debug() {
- #echo "[__install_partition_msdos_apply] $*" >&2
+ #echo "[__install_partition_msdos_apply] $@" >&2
:
}
fdisk_command() {
- device="$1"
- cmd="$2"
+ local device="$1"
+ local cmd="$2"
debug fdisk_command "running fdisk command '${cmd}' on device ${device}"
- printf '%s\nw\n' "${cmd}" | fdisk -c -u "$device"
+ printf "${cmd}\nw\n" | fdisk -c -u "$device"
ret=$?
# give disk some time
sleep 1
@@ -22,49 +20,49 @@ fdisk_command() {
}
create_disklabel() {
- device=$1
+ local device=$1
debug create_disklabel "creating new msdos disklabel"
- fdisk_command "${device}" "o"
+ fdisk_command ${device} "o"
return $?
}
toggle_bootable() {
- device="$1"
- minor="$2"
- fdisk_command "${device}" "a\\n${minor}\\n"
+ local device="$1"
+ local minor="$2"
+ fdisk_command ${device} "a\n${minor}\n"
return $?
}
create_partition() {
- device="$1"
- minor="$2"
- size="$3"
- type="$4"
- primary_count="$5"
+ local device="$1"
+ local minor="$2"
+ local size="$3"
+ local type="$4"
+ local primary_count="$5"
- if [ "$type" = "extended" ] || [ "$type" = "5" ]; then
+ if [ "$type" = "extended" -o "$type" = "5" ]; then
# Extended partition
- primary_extended='e\n'
- first_minor="${minor}\\n"
+ primary_extended="e\n"
+ first_minor="${minor}\n"
[ "${minor}" = "4" ] && first_minor=""
- type_minor="${minor}\\n"
+ type_minor="${minor}\n"
[ "${minor}" = "1" ] && type_minor=""
type="5"
elif [ "${minor}" -lt "5" ]; then
- primary_extended='p\n'
- first_minor="${minor}\\n"
+ primary_extended="p\n"
+ first_minor="${minor}\n"
[ "${minor}" = "4" ] && first_minor=""
- type_minor="${minor}\\n"
+ type_minor="${minor}\n"
[ "${minor}" = "1" ] && type_minor=""
else
# Logical partitions
- first_minor="${minor}\\n"
- type_minor="${minor}\\n"
- primary_extended='l\n'
+ first_minor="${minor}\n"
+ type_minor="${minor}\n"
+ primary_extended="l\n"
[ "$primary_count" -gt "3" ] && primary_extended=""
fi
[ -n "${size}" ] && size="+${size}M"
- fdisk_command "${device}" "n\\n${primary_extended}${first_minor}\\n${size}\\nt\\n${type_minor}${type}\\n"
+ fdisk_command ${device} "n\n${primary_extended}${first_minor}\n${size}\nt\n${type_minor}${type}\n"
return $?
}
diff --git a/cdist/conf/type/__install_partition_msdos_apply/gencode-remote b/cdist/conf/type/__install_partition_msdos_apply/gencode-remote
index a0b46b2d..60f2fd1e 100755
--- a/cdist/conf/type/__install_partition_msdos_apply/gencode-remote
+++ b/cdist/conf/type/__install_partition_msdos_apply/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2013 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -21,35 +21,35 @@
#set -x
die() {
- echo "[__install_partition_msdos_apply] $*" >&2
+ echo "[__install_partition_msdos_apply] $@" >&2
exit 1
}
debug() {
- #echo "[__install_partition_msdos_apply] $*" >&2
+ #echo "[__install_partition_msdos_apply] $@" >&2
:
}
# Convert a size specifier 1G 100M or 50% into the corresponding numeric MB.
size_to_mb() {
- size=$1
- available_size="$2"
+ local size=$1
+ local available_size="$2"
- number_suffix="$(echo "${size}" | sed -e 's:\.[0-9]\+::' -e 's:\([0-9]\+\)\([KkMmGg%]\)[Bb]\?:\1|\2:')"
- number="$(echo "${number_suffix}" | cut -d '|' -f1)"
- suffix="$(echo "${number_suffix}" | cut -d '|' -f2)"
+ local number_suffix="$(echo ${size} | sed -e 's:\.[0-9]\+::' -e 's:\([0-9]\+\)\([KkMmGg%]\)[Bb]\?:\1|\2:')"
+ local number="$(echo ${number_suffix} | cut -d '|' -f1)"
+ local suffix="$(echo ${number_suffix} | cut -d '|' -f2)"
case "$suffix" in
K|k)
- size="$(( number / 1024 ))"
+ size="$(( $number / 1024 ))"
;;
M|m)
size="$number"
;;
G|g)
- size="$(( number * 1024 ))"
+ size="$(( $number * 1024 ))"
;;
%)
- size="$(( available_size * number / 100 ))"
+ size="$(( $available_size * $number / 100 ))"
;;
*)
size="-1"
@@ -59,15 +59,13 @@ size_to_mb() {
get_objects() {
objects_file=$(mktemp)
- find "$__global/object/__install_partition_msdos" -type d -name "$__cdist_object_marker" |
- while IFS= read -r object
- do
+ for object in $(find "$__global/object/__install_partition_msdos" -type d -name "$__cdist_object_marker"); do
object_device="$(cat "$object/parameter/device")"
object_minor="$(cat "$object/parameter/minor")"
- echo "$object_device $object_minor $object" >> "$objects_file"
+ echo "$object_device $object_minor $object" >> $objects_file
done
- sort -k 1,2 "$objects_file" | cut -d' ' -f 3
- rm "$objects_file"
+ sort -k 1,2 $objects_file | cut -d' ' -f 3
+ rm $objects_file
unset objects_file
unset object
unset object_device
@@ -87,9 +85,9 @@ primary_count=0
for object in $objects; do
device="$(cat "$object/parameter/device")"
if [ "$current_device" != "$device" ]; then
- echo "create_disklabel '$device' || die 'Failed to create disklabel for $device'"
+ echo "create_disklabel \"$device\" || die 'Failed to create disklabel for $device'"
current_device="$device"
- device_name=$(echo "${device}" | sed -e 's:^/dev/::;s:/:\\/:g')
+ device_name=$(echo ${device} | sed -e 's:^/dev/::;s:/:\\/:g')
available_device_size=$(( $(awk "/${device_name}\$/ { print \$3; }" "$partitions") / 1024))
# make sure we don't go past the end of the drive
available_device_size=$((available_device_size - 2))
@@ -110,7 +108,7 @@ for object in $objects; do
if [ "${minor}" -lt "5" ]; then
# Primary partitions
- primary_count=$(( primary_count + 1 ))
+ primary_count=$(( $primary_count + 1 ))
available_size=$available_device_size
else
# Logical partitions
@@ -123,13 +121,13 @@ for object in $objects; do
available_size=0
else
partition_size=$(size_to_mb "$size" "$available_size")
- available_size="$(( available_size - partition_size ))"
+ available_size="$(( $available_size - $partition_size ))"
fi
if [ "${minor}" -lt "5" ]; then
# Primary partitions
available_device_size=$available_size
- if [ "$type" = "extended" ] || [ "$type" = "5" ]; then
+ if [ "$type" = "extended" -o "$type" = "5" ]; then
# Extended partition
available_extended_size=$partition_size
fi
diff --git a/cdist/conf/type/__install_reboot/gencode-remote b/cdist/conf/type/__install_reboot/gencode-remote
index 9a6322c1..4358347d 100755
--- a/cdist/conf/type/__install_reboot/gencode-remote
+++ b/cdist/conf/type/__install_reboot/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -18,13 +18,6 @@
# along with cdist. If not, see .
#
-#echo "reboot $options"
-cat << DONE
-echo 1 > /proc/sys/kernel/sysrq
-echo s > /proc/sysrq-trigger
+options="$(cat "$__object/parameter/options")"
-# close file descriptors to detach from ssh
-sh -c 'sleep 3; echo b > /proc/sysrq-trigger' > /dev/null 2>&1 .
#
-if [ -d "/etc/sysctl.d" ]; then
- echo "/etc/sysctl.d/99-Z-sysctl-cdist.conf";
-else
- echo "/etc/sysctl.conf";
-fi
+# set defaults
+options="$(cat "$__object/parameter/options" 2>/dev/null \
+ || echo "" | tee "$__object/parameter/options")"
diff --git a/cdist/conf/type/__install_reset_disk/gencode-remote b/cdist/conf/type/__install_reset_disk/gencode-remote
index ac9ae6cf..e8e9cf8c 100755
--- a/cdist/conf/type/__install_reset_disk/gencode-remote
+++ b/cdist/conf/type/__install_reset_disk/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -22,44 +22,38 @@ disk="/$__object_id"
disk_name="${disk##*/}"
cat << DONE
-
-debug() {
- echo "[DEBUG] \$@" >&2
-}
-
-find_md_device_names() {
- local disk_name="\$1"
- for slave in \$(find /sys/devices/virtual/block/*/slaves/ -name "\${disk_name}*"); do
- debug "slave: \$slave"
- for holder in \$slave/holders/*; do
- debug "holder: \$holder"
- if [ -d "\$holder/md" ]; then
- debug "mdadm found at \$holder"
- holder_name="\${holder##*/}"
- echo "\$holder_name"
- fi
- done
- done
-}
-
-# disable any enabled volume group
-if command -v vgchange >/dev/null; then
- vgchange -a n
-else
- echo "WARNING: vgchange command not found" >&2
+# stop lvm's if any
+if find /sys/class/block/$disk_name*/holders/ -mindepth 1 | grep -q holders/dm; then
+ if command -v vgchange >/dev/null; then
+ vgchange -a n
+ else
+ echo "WARNING: vgchange command not found" >&2
+ fi
fi
-# disable any running mdadm arrays related to $disk
-for md_name in \$(find_md_device_names "$disk_name" | sort | uniq); do
- echo "md_name: \$md_name"
- if command -v mdadm >/dev/null; then
- mdadm --stop "/dev/\$md_name"
- else
- echo "WARNING: mdadm command not found" >&2
- echo "WARNING: could not stop active mdadm raid for disk $disk" >&2
+# stop mdadm raids if any
+if [ -r /proc/mdstat ]; then
+ md_name="\$(awk "/$disk_name/ {print \$1}" /proc/mdstat)"
+ if [ -n "\$md_name" ]; then
+ if command -v mdadm >/dev/null; then
+ mdadm --stop "/dev/\$md_name"
+ else
+ echo "WARNING: mdadm command not found" >&2
+ echo "WARNING: could not stop active mdadm raid for disk $disk" >&2
+ fi
fi
-done
+fi
+if command -v pvremove >/dev/null; then
+ pvremove --force --force --yes "$disk" || true
+else
+ echo "WARNING: pvremove command not found" >&2
+fi
+if command -v mdadm >/dev/null; then
+ mdadm --zero-superblock --force "$disk" || true
+else
+ echo "WARNING: mdadm command not found" >&2
+fi
# clean disks from any legacy signatures
if command -v wipefs >/dev/null; then
wipefs -a "$disk" || true
@@ -67,5 +61,5 @@ fi
# erase partition table
dd if=/dev/zero of=$disk bs=512 count=1
-printf 'w\\n' | fdisk -u -c $disk || true
+printf 'w\n' | fdisk -u -c $disk || true
DONE
diff --git a/cdist/conf/type/__install_stage/gencode-remote b/cdist/conf/type/__install_stage/gencode-remote
index 776e9fd5..3b83ea61 100755
--- a/cdist/conf/type/__install_stage/gencode-remote
+++ b/cdist/conf/type/__install_stage/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2013 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -22,14 +22,8 @@ uri="$(cat "$__object/parameter/uri" 2>/dev/null \
|| echo "$__object_id")"
target="$(cat "$__object/parameter/target")"
-if [ "$__cdist_log_level" -le "10" ]
-then
- curl="curl"
- tar="tar -xvzp"
-else
- curl="curl -s"
- tar="tar -xzp"
-fi
+[ "$__debug" = "yes" ] && curl="curl" || curl="curl -s"
+[ "$__debug" = "yes" ] && tar="tar -xvzp" || tar="tar -xzp"
if [ -f "$__object/parameter/insecure" ] ; then
curl="$curl -k"
diff --git a/cdist/conf/type/__install_stage/man.rst b/cdist/conf/type/__install_stage/man.rst
index fd764693..6c68c543 100644
--- a/cdist/conf/type/__install_stage/man.rst
+++ b/cdist/conf/type/__install_stage/man.rst
@@ -17,9 +17,9 @@ REQUIRED PARAMETERS
uri
The uri from which to fetch the tarball.
Can be anything understood by curl, e.g:
- | http://path/to/stage.tgz
- | tftp:///path/to/stage.tgz
- | file:///local/path/stage.tgz
+ | http://path/to/stage.tgz
+ | tftp:///path/to/stage.tgz
+ | file:///local/path/stage.tgz
OPTIONAL PARAMETERS
diff --git a/cdist/conf/type/__install_umount/gencode-remote b/cdist/conf/type/__install_umount/gencode-remote
index 8dcfb253..c275fe5d 100755
--- a/cdist/conf/type/__install_umount/gencode-remote
+++ b/cdist/conf/type/__install_umount/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__systemd_unit/explorer/systemctl-present b/cdist/conf/type/__install_umount/manifest
old mode 100644
new mode 100755
similarity index 78%
rename from cdist/conf/type/__systemd_unit/explorer/systemctl-present
rename to cdist/conf/type/__install_umount/manifest
index 7218affc..c547e167
--- a/cdist/conf/type/__systemd_unit/explorer/systemctl-present
+++ b/cdist/conf/type/__install_umount/manifest
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# 2017 Ľubomír Kučera
+# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@@ -18,4 +18,6 @@
# along with cdist. If not, see .
#
-command -v systemctl > /dev/null 2>&1 && echo 0 || echo 1
+# set defaults
+target="$(cat "$__object/parameter/target" 2>/dev/null \
+ || echo "/target" | tee "$__object/parameter/target")"
diff --git a/cdist/conf/type/__install_umount/parameter/default/target b/cdist/conf/type/__install_umount/parameter/default/target
deleted file mode 100644
index ea8c4bf7..00000000
--- a/cdist/conf/type/__install_umount/parameter/default/target
+++ /dev/null
@@ -1 +0,0 @@
-/target
diff --git a/cdist/conf/type/__install_umount/parameter/optional b/cdist/conf/type/__install_umount/parameter/optional
deleted file mode 100644
index eb5a316c..00000000
--- a/cdist/conf/type/__install_umount/parameter/optional
+++ /dev/null
@@ -1 +0,0 @@
-target
diff --git a/cdist/conf/type/__iocage_clone/gencode-remote b/cdist/conf/type/__iocage_clone/gencode-remote
deleted file mode 100755
index 30d77099..00000000
--- a/cdist/conf/type/__iocage_clone/gencode-remote
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/bin/sh
-
-state="$(cat $__object/parameter/state)"
-template="$(cat $__object/parameter/template)"
-ip4_addr="$(cat $__object/parameter/bridge)|$(cat $__object/parameter/ip)"
-interfaces="none:none"
-defaultrouter="none"
-vnet="off"
-jail_zfs_dataset="$(cat $__object/parameter/jail_zfs_dataset)"
-devfs_ruleset="$(cat $__object/parameter/devfs_ruleset)"
-allow_socket_af="$(cat $__object/parameter/allow_socket_af)"
-mount_procfs="$(cat $__object/parameter/mount_procfs)"
-mount_linprocfs="$(cat $__object/parameter/mount_linprocfs)"
-
-if [ "X$state" = "Xabsent" ]; then
- cat <&2
- create_new=1
- fi
-fi
-
-if [ \$create_new -eq 0 ]; then
- if [ "off" == "\$(get_property_iocage jail_zfs "$__object_id")" ]; then
- current_jail_zfs_dataset=""
- else
- current_jail_zfs_dataset="\$(get_property_iocage jail_zfs_dataset "$__object_id")"
- fi
-fi
-
-configure=0
-if [ \$create_new -eq 1 ]; then
- configure=1
-elif [ "X$vnet" != "X\$(get_property_iocage vnet "$__object_id")" ]; then
- configure=1
-elif [ "X$ip4_addr" != "X\$(get_property_iocage ip4_addr "$__object_id")" ]; then
- configure=1
-elif [ "X$interfaces" != "X\$(get_property_iocage interfaces "$__object_id")" ]; then
- configure=1
-elif [ "X$defaultrouter" != "X\$(get_property_iocage defaultrouter "$__object_id")" ]; then
- configure=1
-elif [ "X$mount_procfs" != "X\$(get_property_iocage mount_procfs "$__object_id")" ]; then
- configure=1
-elif [ "X$devfs_ruleset" != "X\$(get_property_iocage devfs_ruleset "$__object_id")" ]; then
- configure=1
-elif [ "X$allow_socket_af" != "X\$(get_property_iocage allow_socket_af "$__object_id")" ]; then
- configure=1
-elif [ "X$jail_zfs_dataset" != "X\$current_jail_zfs_dataset" ]; then
- configure=1
-fi
-
-if [ \$create_new -eq 1 ]; then
- echo "Creating jail $__object_id" >&2
-
- iocage stop $__object_id || true
- iocage destroy -f $__object_id || true
- # Without VNETs, we should not need this.
- # TODO(riso): Use nicer path
- # /root/cdist/ioc deconfigure $__object_id
-
- rm -f /iocage/jails/$__object_id
-
- iocage clone $template tag=$__object_id
- iocage set boot=on $__object_id
- UUID=\$(iocage list | grep " $__object_id " | awk "{ print \\\$2; }")
- rm -f /iocage/jails/$__object_id
- ln -s /iocage/jails/\$UUID /iocage/jails/$__object_id
-else
- UUID=\$(iocage list | grep " $__object_id " | awk "{ print \\\$2; }")
- echo "Jail $__object_id already exists, UUID=\$UUID" >&2
-fi
-
-ROOT="/iocage/jails/\$UUID/root"
-FSTAB="/iocage/jails/\$UUID/fstab"
-rm -f \$FSTAB.new
-touch \$FSTAB.new
-cat $__object/parameter/mount 2>/dev/null | \\
-while read mount; do
- src=\$(echo \$mount | awk -F: "{ print \\\$1; }")
- dst_rel=\$(echo \$mount | awk -F: "{ print \\\$2; }")
- dst="/iocage/jails/\$UUID/root/\$dst_rel"
- mkdir -p "\$dst"
- echo "\$src \$dst nullfs rw 0 0" >>\$FSTAB.new
-done
-if [ $mount_linprocfs -eq 1 ]; then
- echo "linproc /iocage/jails/\$UUID/root/compat/linux/proc linprocfs rw 0 0" >>\$FSTAB.new
-fi
-
-fstab_changed=0
-if diff -q \$FSTAB \$FSTAB.new >/dev/null; then
- # pass
-else
- configure=1
- fstab_changed=1
-fi
-
-if [ \$configure -eq 1 ]; then
- echo "Configuring jail $__object_id." >&2
- iocage stop $__object_id || true
-
- iocage set vnet="$vnet" $__object_id
- iocage set interfaces="$interfaces" $__object_id
- iocage set hostname="$__object_id" $__object_id
- iocage set ip4_addr="$ip4_addr" $__object_id
- iocage set defaultrouter="$defaultrouter" $__object_id
- iocage set mount_procfs="$mount_procfs" $__object_id
- iocage set devfs_ruleset="$devfs_ruleset" $__object_id
- iocage set allow_socket_af="$allow_socket_af" $__object_id
- if [ -n "$jail_zfs_dataset" ]; then
- iocage set jail_zfs=on $__object_id
- iocage set jail_zfs_dataset="$jail_zfs_dataset" $__object_id
- else
- iocage set jail_zfs=off $__object_id
- fi
-
- if [ \$fstab_changed -eq 1 ]; then
- umount -afF \$FSTAB || true
- mv \$FSTAB.new \$FSTAB
- fi
-
- iocage start $__object_id || true
-
- # Iocage creates new mac address, but arp can have an old mac cached.
- # TODO(riso): Is this true without VNETs?
- arp -d -a
-else
- echo "Jail $__object_id is already configured." >&2
-fi
-rm -f \$FSTAB.new
-EOF
-fi
diff --git a/cdist/conf/type/__iocage_clone/manifest b/cdist/conf/type/__iocage_clone/manifest
deleted file mode 100644
index 0684fce8..00000000
--- a/cdist/conf/type/__iocage_clone/manifest
+++ /dev/null
@@ -1 +0,0 @@
-__package iocage
diff --git a/cdist/conf/type/__iocage_clone/parameter/default/allow_socket_af b/cdist/conf/type/__iocage_clone/parameter/default/allow_socket_af
deleted file mode 100644
index 573541ac..00000000
--- a/cdist/conf/type/__iocage_clone/parameter/default/allow_socket_af
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/cdist/conf/type/__iocage_clone/parameter/default/bridge b/cdist/conf/type/__iocage_clone/parameter/default/bridge
deleted file mode 100644
index 092f51c8..00000000
--- a/cdist/conf/type/__iocage_clone/parameter/default/bridge
+++ /dev/null
@@ -1 +0,0 @@
-bridge0
diff --git a/cdist/conf/type/__iocage_clone/parameter/default/devfs_ruleset b/cdist/conf/type/__iocage_clone/parameter/default/devfs_ruleset
deleted file mode 100644
index b8626c4c..00000000
--- a/cdist/conf/type/__iocage_clone/parameter/default/devfs_ruleset
+++ /dev/null
@@ -1 +0,0 @@
-4
diff --git a/cdist/conf/type/__iocage_clone/parameter/default/jail_zfs_dataset b/cdist/conf/type/__iocage_clone/parameter/default/jail_zfs_dataset
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__iocage_clone/parameter/default/mount_linprocfs b/cdist/conf/type/__iocage_clone/parameter/default/mount_linprocfs
deleted file mode 100644
index 573541ac..00000000
--- a/cdist/conf/type/__iocage_clone/parameter/default/mount_linprocfs
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/cdist/conf/type/__iocage_clone/parameter/default/mount_procfs b/cdist/conf/type/__iocage_clone/parameter/default/mount_procfs
deleted file mode 100644
index 573541ac..00000000
--- a/cdist/conf/type/__iocage_clone/parameter/default/mount_procfs
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/cdist/conf/type/__iocage_clone/parameter/default/net b/cdist/conf/type/__iocage_clone/parameter/default/net
deleted file mode 100644
index a45fd52c..00000000
--- a/cdist/conf/type/__iocage_clone/parameter/default/net
+++ /dev/null
@@ -1 +0,0 @@
-24
diff --git a/cdist/conf/type/__iocage_clone/parameter/default/state b/cdist/conf/type/__iocage_clone/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__iocage_clone/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__iocage_clone/parameter/optional b/cdist/conf/type/__iocage_clone/parameter/optional
deleted file mode 100644
index 8ca73ed9..00000000
--- a/cdist/conf/type/__iocage_clone/parameter/optional
+++ /dev/null
@@ -1,7 +0,0 @@
-state
-bridge
-jail_zfs_dataset
-mount_procfs
-mount_linprocfs
-devfs_ruleset
-allow_socket_af
diff --git a/cdist/conf/type/__iocage_clone/parameter/optional_multiple b/cdist/conf/type/__iocage_clone/parameter/optional_multiple
deleted file mode 100644
index fde64773..00000000
--- a/cdist/conf/type/__iocage_clone/parameter/optional_multiple
+++ /dev/null
@@ -1 +0,0 @@
-mount
diff --git a/cdist/conf/type/__iocage_clone/parameter/required b/cdist/conf/type/__iocage_clone/parameter/required
deleted file mode 100644
index 209d1544..00000000
--- a/cdist/conf/type/__iocage_clone/parameter/required
+++ /dev/null
@@ -1,2 +0,0 @@
-ip
-template
diff --git a/cdist/conf/type/__iptables_apply/files/init-script b/cdist/conf/type/__iptables_apply/files/init-script
index d9c79ef7..2247dcf5 100644
--- a/cdist/conf/type/__iptables_apply/files/init-script
+++ b/cdist/conf/type/__iptables_apply/files/init-script
@@ -24,15 +24,13 @@ case $1 in
iptables-save > "$status"
# Apply our ruleset
- cd "$basedir" || exit
- count="$(find . ! -name . -prune | wc -l)"
+ cd "$basedir"
+ count="$(ls -1 | wc -l)"
# Only do something if there are rules
if [ "$count" -ge 1 ]; then
for rule in *; do
echo "Applying iptables rule $rule ..."
- # Rule should be split.
- # shellcheck disable=SC2046
iptables $(cat "$rule")
done
fi
diff --git a/cdist/conf/type/__iptables_apply/gencode-remote b/cdist/conf/type/__iptables_apply/gencode-remote
old mode 100755
new mode 100644
index a80cb936..c15d4d7f
--- a/cdist/conf/type/__iptables_apply/gencode-remote
+++ b/cdist/conf/type/__iptables_apply/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
if grep -q "^__file/etc/iptables.d/" "$__messages_in"; then
echo /etc/init.d/iptables restart
diff --git a/cdist/conf/type/__iptables_apply/manifest b/cdist/conf/type/__iptables_apply/manifest
old mode 100755
new mode 100644
index 0061d3de..3bb2d976
--- a/cdist/conf/type/__iptables_apply/manifest
+++ b/cdist/conf/type/__iptables_apply/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
#
diff --git a/cdist/conf/type/__iptables_rule/manifest b/cdist/conf/type/__iptables_rule/manifest
old mode 100755
new mode 100644
index ed78787f..13cec523
--- a/cdist/conf/type/__iptables_rule/manifest
+++ b/cdist/conf/type/__iptables_rule/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
#
diff --git a/cdist/conf/type/__issue/manifest b/cdist/conf/type/__issue/manifest
index 0f0b3d83..d2720f2d 100755
--- a/cdist/conf/type/__issue/manifest
+++ b/cdist/conf/type/__issue/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -25,9 +25,6 @@ os="$(cat "$__global/explorer/os")"
if [ -f "$__object/parameter/source" ]; then
source="$(cat "$__object/parameter/source")"
- if [ "$source" = "-" ]; then
- source="${__object}/stdin"
- fi
else
case "$os" in
archlinux|redhat)
diff --git a/cdist/conf/type/__jail/manifest b/cdist/conf/type/__jail/manifest
index fad6a3a1..6df52c59 100755
--- a/cdist/conf/type/__jail/manifest
+++ b/cdist/conf/type/__jail/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Jake Guffey (jake.guffey at eprotex.com)
#
@@ -35,15 +35,16 @@ fi
jaildir="$(cat "$__object/parameter/jaildir")"
-__directory "${jaildir}" --parents
+__directory ${jaildir} --parents
-set -- "$@" "$__object_id"
+set -- "$@" "$__object_id" "--state" "$state"
cd "$__object/parameter"
-for property in *; do
+for property in $(ls .); do
set -- "$@" "--$property" "$(cat "$property")"
done
-if grep -q '^10\.' "$(cat "$__global/explorer/os_version")" ; then # Version is 10.x
+ver="$(cat "$__global/explorer/os_version")"
+if [ -n "$(echo "$ver" | grep '^10\.' )" ]; then # Version is 10.x
__jail_freebsd10 "$@"
else
__jail_freebsd9 "$@"
diff --git a/cdist/conf/type/__jail_freebsd10/explorer/status b/cdist/conf/type/__jail_freebsd10/explorer/status
index c8039f21..1ceba212 100755
--- a/cdist/conf/type/__jail_freebsd10/explorer/status
+++ b/cdist/conf/type/__jail_freebsd10/explorer/status
@@ -39,7 +39,7 @@ fi
# backslash-escaped $jaildir
sjaildir="$(echo ${jaildir} | sed 's#/#\\/#g')"
-jls_output="$(jls | grep "[ ]${sjaildir}\\/${name}\$")" || true
+jls_output="$(jls | grep "[ ]${sjaildir}\/${name}\$")" || true
if [ -n "${jls_output}" ]; then
echo "STARTED"
diff --git a/cdist/conf/type/__jail_freebsd10/gencode-local b/cdist/conf/type/__jail_freebsd10/gencode-local
index f163cad3..8c1687a9 100755
--- a/cdist/conf/type/__jail_freebsd10/gencode-local
+++ b/cdist/conf/type/__jail_freebsd10/gencode-local
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Jake Guffey (jake.guffey at eprotex.com)
#
@@ -44,7 +44,7 @@ basepresent="$(cat "$__object/explorer/basepresent")"
if [ "$state" = "present" ]; then
if [ "$basepresent" = "NONE" ]; then
# IPv6 fix
- if echo "${__target_host}" | grep -q -E '^[0-9a-fA-F:]+$'
+ if $(echo "${__target_host}" | grep -q -E '^[0-9a-fA-F:]+$')
then
my_target_host="[${__target_host}]"
else
diff --git a/cdist/conf/type/__jail_freebsd10/gencode-remote b/cdist/conf/type/__jail_freebsd10/gencode-remote
index 4f376c25..ae68616d 100755
--- a/cdist/conf/type/__jail_freebsd10/gencode-remote
+++ b/cdist/conf/type/__jail_freebsd10/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012,2014,2016 Jake Guffey (jake.guffey at jointheirstm.org)
#
@@ -36,7 +36,7 @@ state="$(cat "$__object/parameter/state")"
started="true"
# If the user wants the jail gone, it implies it shouldn't be started.
-{ [ -f "$__object/parameter/stopped" ] || [ "$state" = "absent" ]; } && started="false"
+[ -f "$__object/parameter/stopped" -o "$state" = "absent" ] && started="false"
if [ -f "$__object/parameter/ip" ]; then
ip="$(cat "$__object/parameter/ip")"
@@ -45,7 +45,7 @@ else
# when $state=present, it's required. Enforce this.
if [ "$state" = "present" ]; then
exec >&2
- printf 'If --state is "present", --ip must be given\!\n'
+ echo "If --state is 'present,' --ip must be given\!"
exit 1
fi
fi
@@ -66,7 +66,7 @@ devfsruleset="$(cat "$__object/parameter/devfs-ruleset")"
# devfs_ruleset being defined without devfs_enable being true
# is pointless. Treat this as an error.
-if [ -n "$devfsruleset" ] && [ "$devfsenable" = "false" ]; then
+if [ -n "$devfsruleset" -a "$devfsenable" = "false" ]; then
exec >&2
echo "Can't have --devfs-ruleset defined with --devfs-disable"
exit 1
@@ -83,12 +83,12 @@ present="$(cat "$__object/explorer/present")"
status="$(cat "$__object/explorer/status")"
# Handle ip="addr, addr" format
-if [ "$(expr "${ip}" : ".*, .*")" -gt "0" ]; then
+if [ $(expr "${ip}" : ".*, .*") -gt "0" ]; then
SAVE_IFS="$IFS"
IFS=", "
for cur_ip in ${ip}; do
# Just get the last IP address for SSH to listen on
- mgmt_ip=$(echo "${cur_ip}" | cut '-d ' -f1) # In case using "ip netmask" format rather than CIDR
+ mgmt_ip=$(echo "${ip}" | cut '-d ' -f1) # In case using "ip netmask" format rather than CIDR
done
IFS="$SAVE_IFS"
else
@@ -114,19 +114,19 @@ startJail() {
deleteJail() {
# Unmount the jail's mountpoints if necessary
cat <=1 rw mount is mounted still
- for DIR in "\${output}"; do
- umount -F "/etc/fstab.${name}" "\$(echo "${DIR}" | awk '{print \$3}')"
+ for DIR in "${output}"; do
+ umount -F "/etc/fstab.${name}" "\$(echo "${DIR}" | awk '{print $3}')"
done
fi
- output="\$(mount | grep "\\/${name} (")" || true
+ output="\$(mount | grep "\/${name} (")" || true
if [ -n "\${output}" ]; then # ro mount is mounted still
- umount -F "/etc/fstab.${name}" "\$(echo "\${output}" | awk '{print \$3}')"
+ umount -F "/etc/fstab.${name}" "\$(echo "${output}" | awk '{print $3}')"
fi
EOF
# Remove the jail's rw mountpoints
@@ -275,9 +275,9 @@ cat <&1 >/dev/null # Close the FD==fail...
@@ -290,7 +290,7 @@ add include \\\$devfsrules_unhide_basic
add include \\\$devfsrules_unhide_login
END
fi
- devfsruleset_num=\$(grep "\\[${devfsruleset}=" /etc/devfs.rules | sed -n 's/\\[.*=\\([0-9]*\\)\\]/\\1/pg')
+ devfsruleset_num=\$(grep "\[${devfsruleset}=" /etc/devfs.rules | sed -n 's/\[.*=\([0-9]*\)\]/\1/pg')
if [ -n "\$devfsruleset_num" ]; then
jaildata="\$jaildata
devfs_ruleset=\"\${devfsruleset_num}\";"
@@ -298,8 +298,8 @@ END
fi
EOF
- # shellcheck disable=SC2028
- echo "printf \"%s\\n%s\\n%s\\n\" \"\$jailheader\" \"\$jaildata\" \"\$jailtrailer\" >>\"\$jailfile\""
+
+ echo "printf \"%s\\n%s\n%s\n\" \"\$jailheader\" \"\$jaildata\" \"\$jailtrailer\" >>\"\$jailfile\""
# Add $name to jail_list if $onboot=yes
if [ "$onboot" = "yes" ]; then
diff --git a/cdist/conf/type/__jail_freebsd9/explorer/status b/cdist/conf/type/__jail_freebsd9/explorer/status
index c8039f21..1ceba212 100755
--- a/cdist/conf/type/__jail_freebsd9/explorer/status
+++ b/cdist/conf/type/__jail_freebsd9/explorer/status
@@ -39,7 +39,7 @@ fi
# backslash-escaped $jaildir
sjaildir="$(echo ${jaildir} | sed 's#/#\\/#g')"
-jls_output="$(jls | grep "[ ]${sjaildir}\\/${name}\$")" || true
+jls_output="$(jls | grep "[ ]${sjaildir}\/${name}\$")" || true
if [ -n "${jls_output}" ]; then
echo "STARTED"
diff --git a/cdist/conf/type/__jail_freebsd9/gencode-local b/cdist/conf/type/__jail_freebsd9/gencode-local
index bbdc9fcc..67420a6f 100755
--- a/cdist/conf/type/__jail_freebsd9/gencode-local
+++ b/cdist/conf/type/__jail_freebsd9/gencode-local
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Jake Guffey (jake.guffey at eprotex.com)
#
@@ -40,7 +40,7 @@ basepresent="$(cat "$__object/explorer/basepresent")"
if [ "$state" = "present" ]; then
if [ "$basepresent" = "NONE" ]; then
# IPv6 fix
- if echo "${__target_host}" | grep -q -E '^[0-9a-fA-F:]+$'
+ if $(echo "${__target_host}" | grep -q -E '^[0-9a-fA-F:]+$')
then
my_target_host="[${__target_host}]"
else
diff --git a/cdist/conf/type/__jail_freebsd9/gencode-remote b/cdist/conf/type/__jail_freebsd9/gencode-remote
index 68229d3e..6a4c64de 100755
--- a/cdist/conf/type/__jail_freebsd9/gencode-remote
+++ b/cdist/conf/type/__jail_freebsd9/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012,2014,2016 Jake Guffey (jake.guffey at jointheirstm.org)
#
@@ -36,7 +36,7 @@ state="$(cat "$__object/parameter/state")"
started="true"
# If the user wants the jail gone, it implies it shouldn't be started.
-{ [ -f "$__object/parameter/stopped" ] || [ "$state" = "absent" ]; } && started="false"
+[ -f "$__object/parameter/stopped" -o "$state" = "absent" ] && started="false"
if [ -f "$__object/parameter/ip" ]; then
ip="$(cat "$__object/parameter/ip")"
@@ -45,7 +45,7 @@ else
# when $state=present, it's required. Enforce this.
if [ "$state" = "present" ]; then
exec >&2
- printf 'If --state is "present", --ip must be given\!\n'
+ echo "If --state is 'present,' --ip must be given\!"
exit 1
fi
fi
@@ -70,7 +70,7 @@ devfsruleset="$(cat "$__object/parameter/devfs-ruleset")"
# devfs_ruleset being defined without devfs_enable being true
# is pointless. Treat this as an error.
-if [ -n "$devfsruleset" ] && [ "$devfsenable" = "false" ]; then
+if [ -n "$devfsruleset" -a "$devfsenable" = "false" ]; then
exec >&2
echo "Can't have --devfs-ruleset defined with --devfs-disable"
exit 1
@@ -86,14 +86,14 @@ present="$(cat "$__object/explorer/present")"
status="$(cat "$__object/explorer/status")"
# Handle ip="iface|addr, iface|addr" format
-if [ "$(expr "${ip}" : ".*|.*")" -gt "0" ]; then
+if [ $(expr "${ip}" : ".*|.*") -gt "0" ]; then
# If we have multiple IPs defined, $interface doesn't make sense because ip="iface|addr, iface|addr" implies it
interface=""
SAVE_IFS="$IFS"
IFS=", "
for cur_ip in ${ip}; do
# Just get the last IP address for SSH to listen on
- mgmt_ip=$(echo "${cur_ip}" | sed -E -e 's/^.*\|(.*)\/[0-9]+$/\1/')
+ mgmt_ip=$(echo "${ip}" | sed -E -e 's/^.*\|(.*)\/[0-9]+$/\1/')
done
IFS="$SAVE_IFS"
else
@@ -119,19 +119,19 @@ startJail() {
deleteJail() {
# Unmount the jail's mountpoints if necessary
cat <=1 rw mount is mounted still
- for DIR in "\${output}"; do
- umount -F "/etc/fstab.${name}" "\$(echo "${DIR}" | awk '{print \$3}')"
+ for DIR in "${output}"; do
+ umount -F "/etc/fstab.${name}" "\$(echo "${DIR}" | awk '{print $3}')"
done
fi
- output="\$(mount | grep "\\/${name} (")" || true
+ output="\$(mount | grep "\/${name} (")" || true
if [ -n "\${output}" ]; then # ro mount is mounted still
- umount -F "/etc/fstab.${name}" "\$(echo "\${output}" | awk '{print \$3}')"
+ umount -F "/etc/fstab.${name}" "\$(echo "${output}" | awk '{print $3}')"
fi
EOF
# Remove the jail's rw mountpoints
@@ -279,9 +279,9 @@ END
if [ ! -f /etc/devfs.rules ]; then
touch /etc/devfs.rules
fi
- if [ -z "\$(grep '\\[jailrules=' /etc/devfs.rules)" ]; then # The default ruleset doesn't exist
+ if [ -z "\$(grep '\[jailrules=' /etc/devfs.rules)" ]; then # The default ruleset doesn't exist
# Get the highest-numbered ruleset
- highest="\$(sed -n 's/\\[.*=\\([0-9]*\\)\\]/\\1/pg' /etc/devfs.rules | sort -u | tail -n 1)" || true
+ highest="\$(sed -n 's/\[.*=\([0-9]*\)\]/\1/pg' /etc/devfs.rules | sort -u | tail -n 1)" || true
# increment by 1
let num="\${highest}+1" 2>&- >&-
# add default ruleset
diff --git a/cdist/conf/type/__key_value/explorer/state b/cdist/conf/type/__key_value/explorer/state
index 7b2de1df..b990733d 100755
--- a/cdist/conf/type/__key_value/explorer/state
+++ b/cdist/conf/type/__key_value/explorer/state
@@ -19,9 +19,9 @@
# along with cdist. If not, see .
#
-key="$(cat "$__object/parameter/key" 2>/dev/null \
+export key="$(cat "$__object/parameter/key" 2>/dev/null \
|| echo "$__object_id")"
-state="$(cat "$__object/parameter/state")"
+export state="$(cat "$__object/parameter/state")"
file="$(cat "$__object/parameter/file")"
@@ -30,15 +30,14 @@ if [ ! -f "$file" ]; then
exit
fi
-delimiter="$(cat "$__object/parameter/delimiter")"
-value="$(cat "$__object/parameter/value" 2>/dev/null \
+export delimiter="$(cat "$__object/parameter/delimiter")"
+export value="$(cat "$__object/parameter/value" 2>/dev/null \
|| echo "__CDIST_NOTSET__")"
if [ -f "$__object/parameter/exact_delimiter" ]; then
- exact_delimiter=1
+ export exact_delimiter=1
else
- exact_delimiter=0
+ export exact_delimiter=0
fi
-export key state delimiter value exact_delimiter
awk -f - "$file" <<"AWK_EOF"
BEGIN {
diff --git a/cdist/conf/type/__key_value/files/remote_script.sh b/cdist/conf/type/__key_value/files/remote_script.sh
index f7a1add5..52b3f2de 100644
--- a/cdist/conf/type/__key_value/files/remote_script.sh
+++ b/cdist/conf/type/__key_value/files/remote_script.sh
@@ -1,21 +1,19 @@
#!/bin/sh
-key="$(cat "$__object/parameter/key" 2>/dev/null \
+export key="$(cat "$__object/parameter/key" 2>/dev/null \
|| echo "$__object_id")"
-state="$(cat "$__object/parameter/state")"
+export state="$(cat "$__object/parameter/state")"
file="$(cat "$__object/parameter/file")"
-delimiter="$(cat "$__object/parameter/delimiter")"
-value="$(cat "$__object/parameter/value" 2>/dev/null \
+export delimiter="$(cat "$__object/parameter/delimiter")"
+export value="$(cat "$__object/parameter/value" 2>/dev/null \
|| echo "__CDIST_NOTSET__")"
-export key state delimiter value
if [ -f "$__object/parameter/exact_delimiter" ]; then
- exact_delimiter=1
+ export exact_delimiter=1
else
- exact_delimiter=0
+ export exact_delimiter=0
fi
-export exact_delimiter
tmpfile=$(mktemp "${file}.cdist.XXXXXXXXXX")
# preserve ownership and permissions by copying existing file over tmpfile
diff --git a/cdist/conf/type/__key_value/gencode-remote b/cdist/conf/type/__key_value/gencode-remote
index 13cc27c7..e6815cb6 100755
--- a/cdist/conf/type/__key_value/gencode-remote
+++ b/cdist/conf/type/__key_value/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2012-2014 Nico Schottelius (nico-cdist at schottelius.org)
@@ -23,14 +23,13 @@
state_should="$(cat "$__object/parameter/state")"
state_is="$(cat "$__object/explorer/state")"
-fire_onchange=''
if [ "$state_is" = "$state_should" ]; then
exit 0
fi
# here we check only if the states are valid,
-# emit messages and
+# emmit messages and
# let awk do the work ...
case "$state_should" in
absent)
@@ -40,7 +39,6 @@ case "$state_should" in
;;
wrongformat|wrongvalue|present)
echo "remove" >> "$__messages_out"
- fire_onchange=1
;;
*)
echo "Unknown explorer state: $state_is" >&2
@@ -52,15 +50,12 @@ case "$state_should" in
case "$state_is" in
nosuchfile)
echo "create" >> "$__messages_out"
- fire_onchange=1
;;
absent)
echo "insert" >> "$__messages_out"
- fire_onchange=1
;;
wrongformated|wrongvalue)
echo "change" >> "$__messages_out"
- fire_onchange=1
;;
present)
# nothing to do
@@ -72,13 +67,9 @@ case "$state_should" in
esac
;;
*)
- echo "Unknown state: $state_should" >&2
- exit 1
+ echo "Unknown state: $state_should" >&2
+ exit 1
;;
esac
cat "$__type/files/remote_script.sh"
-
-if [ -n "$fire_onchange" ]; then
- cat "$__object/parameter/onchange"
-fi
diff --git a/cdist/conf/type/__key_value/man.rst b/cdist/conf/type/__key_value/man.rst
index 34e4aab2..f069d989 100644
--- a/cdist/conf/type/__key_value/man.rst
+++ b/cdist/conf/type/__key_value/man.rst
@@ -34,8 +34,6 @@ comment
but only if the key or value must be changed.
You need to ensure yourself that the line is prefixed with the correct
comment sign. (for example # or ; or wathever ..)
-onchange
- The code to run if the key or value changes (i.e. is inserted, removed or replaced).
BOOLEAN PARAMETERS
diff --git a/cdist/conf/type/__key_value/manifest b/cdist/conf/type/__key_value/manifest
index 5a91f60c..56f4c874 100755
--- a/cdist/conf/type/__key_value/manifest
+++ b/cdist/conf/type/__key_value/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
@@ -21,7 +21,7 @@
state_should="$(cat "$__object/parameter/state")"
-if [ "$state_should" = "present" ] && [ ! -f "$__object/parameter/value" ]; then
+if [ "$state_should" = "present" -a ! -f "$__object/parameter/value" ]; then
echo "Missing required parameter 'value'" >&2
exit 1
fi
diff --git a/cdist/conf/type/__key_value/parameter/default/onchange b/cdist/conf/type/__key_value/parameter/default/onchange
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__key_value/parameter/optional b/cdist/conf/type/__key_value/parameter/optional
index d4b8cac0..666be2ae 100644
--- a/cdist/conf/type/__key_value/parameter/optional
+++ b/cdist/conf/type/__key_value/parameter/optional
@@ -2,4 +2,3 @@ key
value
state
comment
-onchange
diff --git a/cdist/conf/type/__keyboard/manifest b/cdist/conf/type/__keyboard/manifest
old mode 100755
new mode 100644
index 80cd4819..3bfddf0b
--- a/cdist/conf/type/__keyboard/manifest
+++ b/cdist/conf/type/__keyboard/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# Carlos Ortigoza (carlos.ortigoza at ungleich.ch)
#
diff --git a/cdist/conf/type/__letsencrypt_acmetiny/gencode-remote b/cdist/conf/type/__letsencrypt_acmetiny/gencode-remote
deleted file mode 100644
index 9243acc9..00000000
--- a/cdist/conf/type/__letsencrypt_acmetiny/gencode-remote
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh -e
-
-ACME_TINY_CERT_REQUEST_DIR="/var/acme-tiny/cert-requests"
-ACME_TINY_ACCOUNT_KEY="/var/acme-tiny/account.key"
-ACME_CHALLENGE_DIR="/srv/www/sites/acme/public/.well-known/acme-challenge"
-
-REALM="${__object_id}"
-EXTRA_DOMAINS=""
-if [ -f "${__object}/parameter/extra-domain" ]; then
- EXTRA_DOMAINS="$(cat "${__object}/parameter/extra-domain")"
-fi
-
-#TODO: support linux too
-REALMS_DIR="/usr/local/etc/pki/realms"
-REALM_DIR="${REALMS_DIR}/${REALM}"
-REALM_CERT="${REALM_DIR}/default.crt"
-REALM_KEY="${REALM_DIR}/default.key"
-REALM_CERT_REQUEST="${ACME_TINY_CERT_REQUEST_DIR}/${REALM}.csr"
-REALM_CERT_REQUEST_CNF="${ACME_TINY_CERT_REQUEST_DIR}/${REALM}.cnf"
-
-CSR_ALT_NAMES=""
-REALM_CERT_REQUEST_CNF_LINE=""
-if [ -n "${EXTRA_DOMAINS}" ]; then
- CSR_ALT_NAMES="DNS:${REALM}"
- for domain in ${EXTRA_DOMAINS}; do
- CSR_ALT_NAMES="${CSR_ALT_NAMES},DNS:${domain}"
- done
- # CSR requests are executed always against .new, only after succeeding .new replaces the .cnf
- REALM_CERT_REQUEST_CNF_LINE="-reqexts SAN -config '${REALM_CERT_REQUEST_CNF}.new'"
-fi
-
-cat << EOF
-if [ ! -d '${REALM_DIR}' ]; then
- mkdir -p '${REALM_DIR}'
-fi
-if [ ! -f '${REALM_KEY}' ]; then
- openssl genrsa 4096 > '${REALM_KEY}'
-fi
-
-if [ ! -d '${ACME_TINY_CERT_REQUEST_DIR}' ]; then
- mkdir '${ACME_TINY_CERT_REQUEST_DIR}'
-fi
-
-FORCE_CSR_REGEN=""
-if [ -n '${CSR_ALT_NAMES}' ]; then
- # Generate new config
- cat /etc/ssl/openssl.cnf > '${REALM_CERT_REQUEST_CNF}.new'
- printf '[SAN]\nsubjectAltName=${CSR_ALT_NAMES}' >> '${REALM_CERT_REQUEST_CNF}.new'
- # Compare to previous config if necessary
- if [ -f '${REALM_CERT_REQUEST_CNF}' ]; then
- CNF_DIFF=\$(diff -q '${REALM_CERT_REQUEST_CNF}' '${REALM_CERT_REQUEST_CNF}.new' || true)
- if [ -n "\${CNF_DIFF}" ]; then
- # Options have changed
- FORCE_CSR_REGEN="YES"
- else
- # Since they match, we won't be using this, clean it
- rm '${REALM_CERT_REQUEST_CNF}.new'
- fi
- else
- # We never used SAN here, CSR regen needed.
- FORCE_CSR_REGEN="YES"
- fi
-else
- # We used SAN at some point, not any more
- if [ -f '${REALM_CERT_REQUEST_CNF}' ]; then
- rm '${REALM_CERT_REQUEST_CNF}'
- FORCE_CSR_REGEN="YES"
- fi
-fi
-
-# Create or re-create when params have changed
-if [ ! -f '${REALM_CERT_REQUEST}' -o -n "\${FORCE_CSR_REGEN}" ]; then
- openssl req -new -sha256 -key '${REALM_KEY}' -subj '/CN=${REALM}' -out '${REALM_CERT_REQUEST}' ${REALM_CERT_REQUEST_CNF_LINE}
-fi
-
-# Check if cert exists, and if so whether or not it's older than a month
-if [ -f '${REALM_CERT}' ]; then
- MODIFIED_IN_30d="\$(find '${REALM_CERT}' -mtime -30d)"
- if [ -z "\${MODIFIED_IN_30d}" ]; then
- # Cert is over a month old, it's fine to regenerate
- FORCE_CRT_REGEN="YES"
- fi
-else
- # This cert doesn't exist
- FORCE_CRT_REGEN="YES"
-fi
-
-
-# Only request certificate when needed
-# TODO: support linux too
-if [ -n "\${FORCE_CSR_REGEN}" -o -n "\${FORCE_CRT_REGEN}" ]; then
- doas -u acme-tiny -- acme_tiny \
- --account '${ACME_TINY_ACCOUNT_KEY}' \
- --csr '${REALM_CERT_REQUEST}' \
- --acme-dir '${ACME_CHALLENGE_DIR}' > '${REALM_CERT}.new'
-
- if [ -s '${REALM_CERT}.new' ]; then
- mv '${REALM_CERT}.new' '${REALM_CERT}'
- else
- echo "Failed to generate cert for realm '${REALM}'."
- exit 1
- fi
-fi
-
-cat "${REALM_CERT}" "${REALMS_DIR}/chain.pem" > ${REALM_DIR}/fullchain.pem
-
-if [ -n '${REALM_CERT_REQUEST_CNF_LINE}' -a -f '${REALM_CERT_REQUEST_CNF}.new' ]; then
- # CSR and cert generation succeded with a new config, put new config in-place.
- # This is the last thing we do, so we try again next time if sth fails.
- mv '${REALM_CERT_REQUEST_CNF}.new' '${REALM_CERT_REQUEST_CNF}'
-fi
-EOF
diff --git a/cdist/conf/type/__letsencrypt_acmetiny/manifest b/cdist/conf/type/__letsencrypt_acmetiny/manifest
deleted file mode 100644
index 48438abb..00000000
--- a/cdist/conf/type/__letsencrypt_acmetiny/manifest
+++ /dev/null
@@ -1 +0,0 @@
-#__letsencrypt_acmetiny_base
diff --git a/cdist/conf/type/__letsencrypt_acmetiny/nonparallel b/cdist/conf/type/__letsencrypt_acmetiny/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__letsencrypt_acmetiny/parameter/optional_multiple b/cdist/conf/type/__letsencrypt_acmetiny/parameter/optional_multiple
deleted file mode 100644
index 7bfb11da..00000000
--- a/cdist/conf/type/__letsencrypt_acmetiny/parameter/optional_multiple
+++ /dev/null
@@ -1 +0,0 @@
-extra-domain
diff --git a/cdist/conf/type/__letsencrypt_acmetiny_base/gencode-remote b/cdist/conf/type/__letsencrypt_acmetiny_base/gencode-remote
deleted file mode 100644
index 1e4174a4..00000000
--- a/cdist/conf/type/__letsencrypt_acmetiny_base/gencode-remote
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh -e
-
-ACME_HOME="/var/acme-tiny"
-ACME_ACCOUNT_KEY="${ACME_HOME}/account.key"
-
-cat << EOF
-if [ ! -f '${ACME_ACCOUNT_KEY}' ]; then
- openssl genrsa 4096 > '${ACME_ACCOUNT_KEY}'
- chown acme-tiny:acme-tiny '${ACME_ACCOUNT_KEY}'
- chmod 640 '${ACME_ACCOUNT_KEY}'
-fi
-EOF
diff --git a/cdist/conf/type/__letsencrypt_acmetiny_base/manifest b/cdist/conf/type/__letsencrypt_acmetiny_base/manifest
deleted file mode 100644
index cbedcdff..00000000
--- a/cdist/conf/type/__letsencrypt_acmetiny_base/manifest
+++ /dev/null
@@ -1,227 +0,0 @@
-# Arguments
-ACME_DOMAIN="$(cat "${__object}/parameter/acme_domain" || true)"
-
-if [ -z "${ACME_DOMAIN}" ]; then
- ACME_DOMAIN="${__target_host}"
-fi
-
-
-# Install needed stuffz
-
-## TODO: consider not depending on nginx? It is... practical though.
-## TODO: Maybe just move this out to a sepecial type?
-__package "nginx"
-
-NGINX_ETC="/usr/local/etc/nginx"
-
-# Setup the acme-challenge snippet
-require="__package/nginx" __directory "${NGINX_ETC}/snippets" --state present
-require="__directory${NGINX_ETC}/snippets" __file "${NGINX_ETC}/snippets/acme-challenge.conf" \
- --mode 644 \
- --source - << EOF
-# This file is managed remotely, all changes will be lost
-
-# This was heavily inspired by debops.org.
-
-# Automatic Certificate Management Environment (ACME) support.
-# https://tools.ietf.org/html/draft-ietf-acme-acme-01
-# https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment
-
-
-# Return the ACME challenge present in the server public root.
-# If not found, switch to global web server root.
-location ^~ /.well-known/acme-challenge/ {
- default_type "text/plain";
- try_files \$uri @well-known-acme-challenge;
-}
-
-# Return the ACME challenge present in the global server public root.
-# If not present, redirect request to a specified domain.
-location @well-known-acme-challenge {
- root /srv/www/sites/acme/public;
- default_type "text/plain";
- try_files \$uri @redirect-acme-challenge;
-}
-
-# Redirect the ACME challenge to a different host. If a redirect loop is
-# detected, return 404.
-location @redirect-acme-challenge {
- if (\$arg_redirect) {
- return 404;
- }
- return 307 \$scheme://${ACME_DOMAIN}\$request_uri?redirect=yes;
-}
-
-# Return 404 if ACME challenge well known path is accessed directly.
-location = /.well-known/acme-challenge/ {
- return 404;
-}
-EOF
-
-require="__package/nginx" __directory "${NGINX_ETC}/sites-enabled" --state present
-require="__directory${NGINX_ETC}/sites-enabled" __file "${NGINX_ETC}/nginx.conf" \
- --mode 644 \
- --source - << EOF
-# This file is managed remotely, all changes will be lost
-
-worker_processes 1;
-
-# This default error log path is compiled-in to make sure configuration parsing
-# errors are logged somewhere, especially during unattended boot when stderr
-# isn't normally logged anywhere. This path will be touched on every nginx
-# start regardless of error log location configured here. See
-# https://trac.nginx.org/nginx/ticket/147 for more info.
-#
-#error_log /var/log/nginx/error.log;
-#
-
-#pid logs/nginx.pid;
-
-
-events {
- worker_connections 1024;
-}
-
-
-http {
-
- include mime.types;
- default_type application/octet-stream;
-
- server_tokens off;
-
- ssl_session_cache shared:SSL:10m;
- ssl_session_timeout 5m;
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- types_hash_max_size 2048;
- gzip on;
- gzip_disable "msie6";
- gzip_comp_level 5;
- gzip_min_length 256;
- gzip_proxied any;
- gzip_vary on;
- gzip_types
- application/atom+xml
- application/javascript
- application/json
- application/ld+json
- application/manifest+json
- application/rss+xml
- application/vnd.geo+json
- application/vnd.ms-fontobject
- application/x-font-ttf
- application/x-web-app-manifest+json
- application/xhtml+xml
- application/xml
- font/opentype
- image/bmp
- image/svg+xml
- image/x-icon
- text/cache-manifest
- text/css
- text/plain
- text/vcard
- text/vnd.rim.location.xloc
- text/vtt
- text/x-component
- text/x-cross-domain-policy;
-
- # Logging
- access_log /var/log/nginx/access.log;
- error_log /var/log/nginx/error.log;
-
- #add_header X-Clacks-Overhead "GNU Terry Pratchett";
-
- # Virtual Hosts Configs
- include ${NGINX_ETC}/sites-enabled/*.conf;
-}
-EOF
-
-require="__directory${NGINX_ETC}/sites-enabled" __file "${NGINX_ETC}/sites-enabled/welcome.conf" \
- --mode 644 \
- --source - << EOF
-# This file is managed remotely, all changes will be lost
-
-# nginx server configuration for:
-# - https://welcome/
-
-server {
-
- listen [::]:80;
-
- server_name welcome;
-
- root /srv/www/sites/welcome/public;
-
- include snippets/acme-challenge.conf;
-
- location / {
- return 301 https://\$host\$request_uri;
- }
-}
-EOF
-
-## TODO: this is kinda bad, don't restart every time.
-## Otherwise this isn't idempotent.
-require="__package/nginx" __service nginx --action onerestart
-require="__package/nginx" __start_on_boot nginx
-
-
-__package "acme-tiny"
-
-# Create acme-tiny user and secure home dir
-ACME_TINY_HOME="/var/acme-tiny"
-require="__package/acme-tiny" __user acme-tiny --system --home ${ACME_TINY_HOME} --comment "acme-tiny client"
-require="__user/acme-tiny" __directory "${ACME_TINY_HOME}" --state present --mode 0750 --owner acme-tiny --group acme-tiny
-
-# Create ACME challenge dirs to be served by nginx
-ACME_PUBLIC_DIR="/srv/www/sites/acme/public"
-ACME_WELLKNOWN_DIR="${ACME_PUBLIC_DIR}/.well-known"
-ACME_CHALLENGE_DIR="${ACME_WELLKNOWN_DIR}/acme-challenge"
-__directory "${ACME_PUBLIC_DIR}" \
- --parents \
- --state present \
- --owner acme-tiny --group www \
- --mode 2750 # TODO: check whether this does require gid?
-require="__directory${ACME_PUBLIC_DIR}" __directory "${ACME_WELLKNOWN_DIR}" \
- --state present \
- --owner acme-tiny --group www \
- --mode 0750
-require="__directory${ACME_WELLKNOWN_DIR}" __directory "${ACME_CHALLENGE_DIR}" \
- --state present \
- --owner acme-tiny --group www \
- --mode 0750
-
-__package doas
-DOAS_CONF="/usr/local/etc/doas.conf"
-require="__package/doas" __file "${DOAS_CONF}" --mode 0640
-require="__file${DOAS_CONF}" __line "${DOAS_CONF}" \
- --regex 'root as acme-tiny' \
- --line 'permit nopass root as acme-tiny'
-
-# Setup CA
-REALMS_DIR="/usr/local/etc/pki/realms"
-__directory "${REALMS_DIR}" \
- --parents \
- --state present \
- --mode 0755
-
-require="__directory${REALMS_DIR}" __file ${REALMS_DIR}/intermediate.pem \
- --mode 0644 \
- --source - << EOF
-$(curl -s https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem.txt)
-EOF
-require="__directory${REALMS_DIR}" __file ${REALMS_DIR}/root.pem \
- --mode 0644 \
- --source - << EOF
-$(curl -s https://letsencrypt.org/certs/trustid-x3-root.pem.txt)
-EOF
-require="__directory${REALMS_DIR}" __file ${REALMS_DIR}/chain.pem \
- --mode 0644 \
- --source - << EOF
-$(curl -s https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem.txt)
-$(curl -s https://letsencrypt.org/certs/trustid-x3-root.pem.txt)
-EOF
-
diff --git a/cdist/conf/type/__letsencrypt_acmetiny_base/parameter/optional b/cdist/conf/type/__letsencrypt_acmetiny_base/parameter/optional
deleted file mode 100644
index fb20814d..00000000
--- a/cdist/conf/type/__letsencrypt_acmetiny_base/parameter/optional
+++ /dev/null
@@ -1 +0,0 @@
-acme_domain
diff --git a/cdist/conf/type/__letsencrypt_acmetiny_base/singleton b/cdist/conf/type/__letsencrypt_acmetiny_base/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__letsencrypt_cert/explorer/certbot-path b/cdist/conf/type/__letsencrypt_cert/explorer/certbot-path
deleted file mode 100755
index 3c6076df..00000000
--- a/cdist/conf/type/__letsencrypt_cert/explorer/certbot-path
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh -e
-
-command -v certbot 2>/dev/null || true
diff --git a/cdist/conf/type/__letsencrypt_cert/explorer/certificate-domains b/cdist/conf/type/__letsencrypt_cert/explorer/certificate-domains
deleted file mode 100755
index db605b63..00000000
--- a/cdist/conf/type/__letsencrypt_cert/explorer/certificate-domains
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh -e
-
-certbot_path=$("${__type_explorer}/certbot-path")
-if [ -n "${certbot_path}" ]
-then
- certbot certificates --cert-name "${__object_id:?}" | grep ' Domains: ' | \
- cut -d ' ' -f 6- | tr ' ' '\n'
-fi
diff --git a/cdist/conf/type/__letsencrypt_cert/explorer/certificate-exists b/cdist/conf/type/__letsencrypt_cert/explorer/certificate-exists
deleted file mode 100755
index 4e6f44db..00000000
--- a/cdist/conf/type/__letsencrypt_cert/explorer/certificate-exists
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh -e
-
-certbot_path=$("${__type_explorer}/certbot-path")
-if [ -n "${certbot_path}" ]
-then
- if certbot certificates | grep -q " Certificate Name: ${__object_id:?}$"; then
- echo yes
- else
- echo no
- fi
-else
- echo no
-fi
diff --git a/cdist/conf/type/__letsencrypt_cert/explorer/certificate-is-test b/cdist/conf/type/__letsencrypt_cert/explorer/certificate-is-test
deleted file mode 100755
index 9b445059..00000000
--- a/cdist/conf/type/__letsencrypt_cert/explorer/certificate-is-test
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh -e
-
-certbot_path=$("${__type_explorer}/certbot-path")
-if [ -n "${certbot_path}" ]
-then
- if certbot certificates --cert-name "${__object_id:?}" | \
- grep -q 'INVALID: TEST_CERT'; then
- echo yes
- else
- echo no
- fi
-else
- echo no
-fi
diff --git a/cdist/conf/type/__letsencrypt_cert/gencode-remote b/cdist/conf/type/__letsencrypt_cert/gencode-remote
deleted file mode 100755
index 375570a4..00000000
--- a/cdist/conf/type/__letsencrypt_cert/gencode-remote
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/bin/sh -e
-
-certificate_exists=$(cat "${__object:?}/explorer/certificate-exists")
-name="${__object_id:?}"
-state=$(cat "${__object}/parameter/state")
-
-case "${state}" in
- absent)
- if [ "${certificate_exists}" = "no" ]; then
- exit 0
- fi
-
- echo "certbot delete --cert-name '${name}' --quiet"
-
- echo remove >> "${__messages_out:?}"
- ;;
- present)
- domain_param_file="${__object}/parameter/domain"
- requested_domains=$(mktemp "${TMPDIR:-/tmp}/domain.cdist.XXXXXXXXXX")
- if [ -f "${domain_param_file}" ]; then
- cp "${domain_param_file}" "${requested_domains}"
- else
- echo "$__object_id" >> "${requested_domains}"
- fi
-
- staging=no
- if [ -f "${__object}/parameter/staging" ]; then
- staging=yes
- fi
-
- if [ "${certificate_exists}" = "yes" ]; then
- existing_domains="${__object}/explorer/certificate-domains"
- certificate_is_test=$(cat "${__object}/explorer/certificate-is-test")
-
- sort -uo "${requested_domains}" "${requested_domains}"
- sort -uo "${existing_domains}" "${existing_domains}"
-
- if [ -z "$(comm -23 "${requested_domains}" "${existing_domains}")" ] && \
- [ "${certificate_is_test}" = "${staging}" ]; then
- exit 0
- fi
- fi
-
- admin_email="$(cat "$__object/parameter/admin-email")"
- webroot="$(cat "$__object/parameter/webroot")"
-
- cat <<-EOF
- certbot certonly \
- --agree-tos \
- --cert-name '${name}' \
- --email '${admin_email}' \
- --expand \
- --non-interactive \
- --quiet \
- $(if [ "${staging}" = "yes" ]; then
- echo "--staging"
- elif [ "${certificate_is_test}" != "${staging}" ]; then
- echo "--force-renewal"
- fi) \
- $(if [ -z "${webroot}" ]; then
- echo "--standalone"
- else
- echo "--webroot --webroot-path '${webroot}'"
- fi) \
- $(while read -r domain; do
- echo "--domain '${domain}' \\"
- done < "${requested_domains}")
- EOF
- rm -f "${requested_domains}"
-
- if [ "${certificate_exists}" = "no" ]; then
- echo create >> "${__messages_out}"
- else
- echo change >> "${__messages_out}"
- fi
- ;;
- *)
- echo "Unsupported state: ${state}" >&2
-
- exit 1
- ;;
-esac
diff --git a/cdist/conf/type/__letsencrypt_cert/man.rst b/cdist/conf/type/__letsencrypt_cert/man.rst
deleted file mode 100644
index 85eb88ea..00000000
--- a/cdist/conf/type/__letsencrypt_cert/man.rst
+++ /dev/null
@@ -1,109 +0,0 @@
-cdist-type__letsencrypt_cert(7)
-===============================
-
-NAME
-----
-
-cdist-type__letsencrypt_cert - Get an SSL certificate from Let's Encrypt
-
-DESCRIPTION
------------
-
-Automatically obtain a Let's Encrypt SSL certificate using Certbot.
-
-REQUIRED PARAMETERS
--------------------
-
-object id
- A cert name. If domain parameter is not specified then it is used
- as a domain to be included in the certificate.
-
-admin-email
- Where to send Let's Encrypt emails like "certificate needs renewal".
-
-OPTIONAL PARAMETERS
--------------------
-
-state
- 'present' or 'absent', defaults to 'present' where:
-
- present
- if the certificate does not exist, it will be obtained
- absent
- the certificate will be removed
-
-webroot
- The path to your webroot, as set up in your webserver config. If this
- parameter is not present, Certbot will be run in standalone mode.
-
-OPTIONAL MULTIPLE PARAMETERS
-----------------------------
-
-renew-hook
- Renew hook command directly passed to Certbot in cron job.
-
-domain
- Domains to be included in the certificate. When specified then object id
- is not used as a domain.
-
-BOOLEAN PARAMETERS
-------------------
-
-automatic-renewal
- Install a cron job, which attempts to renew certificates daily.
-
-staging
- Obtain a test certificate from a staging server.
-
-MESSAGES
---------
-
-change
- Certificate was changed.
-
-create
- Certificate was created.
-
-remove
- Certificate was removed.
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # use object id as domain
- __letsencrypt_cert example.com \
- --admin-email root@example.com \
- --automatic-renewal \
- --renew-hook "service nginx reload" \
- --webroot /data/letsencrypt/root
-
-.. code-block:: sh
-
- # domain parameter is specified so object id is not used as domain
- # and example.com needs to be included again with domain parameter
- __letsencrypt_cert example.com \
- --admin-email root@example.com \
- --automatic-renewal \
- --domain example.com \
- --domain foo.example.com \
- --domain bar.example.com \
- --renew-hook "service nginx reload" \
- --webroot /data/letsencrypt/root
-
-AUTHORS
--------
-
-| Nico Schottelius
-| Kamila Součková
-| Darko Poljak
-| Ľubomír Kučera
-
-COPYING
--------
-
-Copyright \(C) 2017-2018 Nico Schottelius, Kamila Součková, Darko Poljak and
-Ľubomír Kučera. 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.
diff --git a/cdist/conf/type/__letsencrypt_cert/manifest b/cdist/conf/type/__letsencrypt_cert/manifest
deleted file mode 100755
index 68ecf9d4..00000000
--- a/cdist/conf/type/__letsencrypt_cert/manifest
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/bin/sh
-
-certbot_fullpath="$(cat "${__object:?}/explorer/certbot-path")"
-
-if [ -z "${certbot_fullpath}" ]; then
- os="$(cat "${__global:?}/explorer/os")"
- os_version="$(cat "${__global}/explorer/os_version")"
-
- case "$os" in
- archlinux)
- __package certbot
- ;;
- alpine)
- __package certbot
- ;;
- debian)
- case "$os_version" in
- 8*)
- __apt_source jessie-backports \
- --uri http://http.debian.net/debian \
- --distribution jessie-backports \
- --component main
-
- require="__apt_source/jessie-backports" __package_apt python-certbot \
- --target-release jessie-backports
- require="__apt_source/jessie-backports" __package_apt certbot \
- --target-release jessie-backports
- # Seems to be a missing dependency on debian 8
- __package python-ndg-httpsclient
- ;;
- 9*)
- __apt_source stretch-backports \
- --uri http://http.debian.net/debian \
- --distribution stretch-backports \
- --component main
-
- require="__apt_source/stretch-backports" __package_apt python-certbot \
- --target-release stretch-backports
- require="__apt_source/stretch-backports" __package_apt certbot \
- --target-release stretch-backports
- ;;
- 10*)
- __package_apt certbot
- ;;
-
- *)
- echo "Unsupported OS version: $os_version" >&2
- exit 1
- ;;
- esac
-
- certbot_fullpath=/usr/bin/certbot
- ;;
- devuan)
- case "$os_version" in
- jessie)
- __apt_source jessie-backports \
- --uri http://auto.mirror.devuan.org/merged \
- --distribution jessie-backports \
- --component main
-
- require="__apt_source/jessie-backports" __package_apt python-certbot \
- --target-release jessie-backports
- require="__apt_source/jessie-backports" __package_apt certbot \
- --target-release jessie-backports
- # Seems to be a missing dependency on debian 8
- __package python-ndg-httpsclient
- ;;
- ascii*)
- __apt_source ascii-backports \
- --uri http://auto.mirror.devuan.org/merged \
- --distribution ascii-backports \
- --component main
-
- require="__apt_source/ascii-backports" __package_apt certbot \
- --target-release ascii-backports
- ;;
- beowulf*)
- __package_apt certbot
- ;;
- *)
- echo "Unsupported OS version: $os_version" >&2
- exit 1
- ;;
- esac
-
- certbot_fullpath=/usr/bin/certbot
- ;;
- freebsd)
- __package py27-certbot
-
- certbot_fullpath=/usr/local/bin/certbot
- ;;
- *)
- echo "Unsupported os: $os" >&2
- exit 1
- ;;
- esac
-fi
-
-if [ -f "${__object}/parameter/automatic-renewal" ]; then
- renew_hook_param="${__object}/parameter/renew-hook"
- renew_hook=""
- if [ -f "${renew_hook_param}" ]; then
- while read -r hook; do
- renew_hook="${renew_hook} --renew-hook \"${hook}\""
- done < "${renew_hook_param}"
- fi
-
- __cron letsencrypt-certbot \
- --user root \
- --command "${certbot_fullpath} renew -q ${renew_hook}" \
- --hour 0 \
- --minute 47
-fi
diff --git a/cdist/conf/type/__letsencrypt_cert/nonparallel b/cdist/conf/type/__letsencrypt_cert/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__letsencrypt_cert/parameter/boolean b/cdist/conf/type/__letsencrypt_cert/parameter/boolean
deleted file mode 100644
index d5b8be99..00000000
--- a/cdist/conf/type/__letsencrypt_cert/parameter/boolean
+++ /dev/null
@@ -1,2 +0,0 @@
-automatic-renewal
-staging
diff --git a/cdist/conf/type/__letsencrypt_cert/parameter/default/state b/cdist/conf/type/__letsencrypt_cert/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__letsencrypt_cert/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__letsencrypt_cert/parameter/default/webroot b/cdist/conf/type/__letsencrypt_cert/parameter/default/webroot
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__letsencrypt_cert/parameter/optional b/cdist/conf/type/__letsencrypt_cert/parameter/optional
deleted file mode 100644
index 0a63b11e..00000000
--- a/cdist/conf/type/__letsencrypt_cert/parameter/optional
+++ /dev/null
@@ -1,2 +0,0 @@
-state
-webroot
diff --git a/cdist/conf/type/__letsencrypt_cert/parameter/optional_multiple b/cdist/conf/type/__letsencrypt_cert/parameter/optional_multiple
deleted file mode 100644
index 0e866d45..00000000
--- a/cdist/conf/type/__letsencrypt_cert/parameter/optional_multiple
+++ /dev/null
@@ -1,2 +0,0 @@
-domain
-renew-hook
diff --git a/cdist/conf/type/__letsencrypt_cert/parameter/required b/cdist/conf/type/__letsencrypt_cert/parameter/required
deleted file mode 100644
index bfe77226..00000000
--- a/cdist/conf/type/__letsencrypt_cert/parameter/required
+++ /dev/null
@@ -1 +0,0 @@
-admin-email
diff --git a/cdist/conf/type/__line/explorer/state b/cdist/conf/type/__line/explorer/state
index e8fc3630..d04d5d09 100755
--- a/cdist/conf/type/__line/explorer/state
+++ b/cdist/conf/type/__line/explorer/state
@@ -1,7 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2018 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
+# 2012-2013 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -18,80 +17,26 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
#
+#
-if [ -f "$__object/parameter/file" ]; then
- file=$(cat "$__object/parameter/file")
-else
- file="/$__object_id"
-fi
-
-[ -f "$file" ] || exit 0
-
-if [ -f "$__object/parameter/before" ]; then
- position="before"
-elif [ -f "$__object/parameter/after" ]; then
- position="after"
-else
- # By default we append to the end of the file.
- position="end"
-fi
+file="/$__object_id"
+[ -f "$__object/parameter/file" ] && file=$(cat "$__object/parameter/file")
if [ -f "$__object/parameter/regex" ]; then
- needle="regex"
+ regex=$(cat "$__object/parameter/regex")
+ greparg=""
else
- needle="line"
+ if [ ! -f "$__object/parameter/line" ]; then
+ echo "Parameter line and regex missing - cannot explore" >&2
+ exit 1
+ fi
+ regex="$(cat "$__object/parameter/line")"
+ greparg="-F -x"
fi
-awk -v position="$position" -v needle="$needle" '
-function _find(_text, _pattern) {
- if (needle == "regex") {
- return match(_text, _pattern)
- } else {
- return index(_text, _pattern) == 1
- }
-}
-BEGIN {
- getline anchor < (ENVIRON["__object"] "/parameter/" position)
- getline pattern < (ENVIRON["__object"] "/parameter/" needle)
-
- found_line = 0
- correct_pos = (position != "after" && position != "before")
-}
-{
- if (position == "after") {
- if (match($0, anchor)) {
- getline
- if (_find($0, pattern)) {
- found_line++
- correct_pos = 1
- exit 0
- }
- } else if (_find($0, pattern)) {
- found_line++
- }
- } else if (position == "before") {
- if (_find($0, pattern)) {
- found_line++
- getline
- if (match($0, anchor)) {
- correct_pos = 1
- exit 0
- }
- }
- } else {
- if (_find($0, pattern)) {
- found_line++
- exit 0
- }
- }
-}
-END {
- if (found_line && correct_pos) {
- print "present"
- } else if (found_line) {
- print "wrongposition"
- } else {
- print "absent"
- }
-}
-' "$file"
+# Allow missing file - thus 2>/dev/null
+if grep -q $greparg "$regex" "$file" 2>/dev/null; then
+ echo present
+else
+ echo absent
+fi
diff --git a/cdist/conf/type/__line/gencode-remote b/cdist/conf/type/__line/gencode-remote
index 88cae68b..f73444e3 100755
--- a/cdist/conf/type/__line/gencode-remote
+++ b/cdist/conf/type/__line/gencode-remote
@@ -1,7 +1,7 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2018 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
+# 2012 Nico Schottelius (nico-cdist at schottelius.org)
+# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@@ -18,119 +18,74 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
#
+#
-if [ -f "$__object/parameter/before" ] && [ -f "$__object/parameter/after" ]; then
- echo "Use either --before OR --after but not both." >&2
- exit 1
-fi
+file="/$__object_id"
+regex=""
+state_should="present"
+[ -f "$__object/parameter/file" ] && file=$(cat "$__object/parameter/file")
+[ -f "$__object/parameter/regex" ] && regex=$(cat "$__object/parameter/regex")
+[ -f "$__object/parameter/state" ] && state_should=$(cat "$__object/parameter/state")
+[ -f "$__object/parameter/line" ] && line=$(cat "$__object/parameter/line")
-if [ -f "$__object/parameter/file" ]; then
- file="$(cat "$__object/parameter/file")"
-else
- file="/$__object_id"
-fi
-
-state_should="$(cat "$__object/parameter/state")"
state_is="$(cat "$__object/explorer/state")"
-if [ -z "$state_is" ]; then
- printf 'The file "%s" is missing. Please create it before using %s on it.\n' "$file" "${__type##*/}" >&2
- exit 1
-fi
+[ "$state_should" = "$state_is" ] && exit 0
-if [ "$state_should" = "$state_is" ]; then
- # nothing to do
- exit 0
-fi
-
-if [ -f "$__object/parameter/before" ]; then
- position="before"
-elif [ -f "$__object/parameter/after" ]; then
- position="after"
-else
- # By default we append to the end of the file.
- position="end"
-fi
-
-if [ -f "$__object/parameter/regex" ]; then
- needle="regex"
-else
- needle="line"
-fi
-
-add=0
-remove=0
case "$state_should" in
- present)
- if [ "$state_is" = "wrongposition" ]; then
- echo updated >> "$__messages_out"
- remove=1
- else
- echo added >> "$__messages_out"
- fi
- add=1
- ;;
- absent)
- echo removed >> "$__messages_out"
- remove=1
- ;;
-esac
+ present)
+ if [ ! "$line" ]; then
+ echo "Required parameter \"line\" is missing" >&2
+ exit 1
+ fi
-cat << DONE
+ #echo "echo \"$line\" >> $file"
+ #line_sanitised=$(cat "$__object/parameter/line" | sed 's/"/\"/g')
+ # Idea: replace ' in the string:
+ # '"'"'
+ # |------> ': end the string
+ # |-|---> "'": create ' in the output string
+ # |--> ': continue the string
+ #
+ # Replace all \ so \t and other combinations are not interpreted
+ #
+
+
+ # line_sanitised=$(cat "$__object/parameter/line" | sed -e "s/'/'\"'\"'/g" -e 's/\\/\\\\/g')
+ # The one above does not work:
+ # --line "PS1='[\t] \[\033[1m\]\h\[\033[0m\]:\w\\$ '"
+ # becomes
+ # PS1='[\\t] \\[\\033[1m\\]\\h\\[\\033[0m\\]:\\w\\$ '
+
+ # Only replace ' with '"'"' and keep \ as they are
+ line_sanitised=$(cat "$__object/parameter/line" | sed -e "s/'/'\"'\"'/g")
+ printf '%s' "printf '%s\n' '$line_sanitised' >> $file"
+
+ ;;
+ absent)
+ if [ "$regex" -a "$line" ]; then
+ echo "Mutally exclusive parameters regex and line given for state absent" >&2
+ exit 1
+ fi
+
+ greparg=""
+ if [ "$line" ]; then
+ regex="$line"
+ greparg="-F -x"
+ fi
+
+ cat << eof
tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX)
# preserve ownership and permissions of existing file
if [ -f "$file" ]; then
cp -p "$file" "\$tmpfile"
fi
-
-awk -v position="$position" -v needle="$needle" -v remove=$remove -v add=$add '
-function _find(_text, _pattern) {
- if (needle == "regex") {
- return match(_text, _pattern)
- } else {
- return index(_text, _pattern)
- }
-}
-BEGIN {
- line_file = ENVIRON["__object"] "/parameter/line"
- getline line < line_file
- # Need to close line file as it may be re-read as pattern below.
- close(line_file)
- getline pattern < (ENVIRON["__object"] "/parameter/" needle)
- getline anchor < (ENVIRON["__object"] "/parameter/" position)
-}
-{
- if (remove) {
- if (_find(\$0, pattern)) {
- # skip over this line -> remove it
- next
- }
- }
- if (add) {
- if (anchor && match(\$0, anchor)) {
- if (position == "before") {
- print line
- add = 0
- print
- } else if (position == "after") {
- print
- print line
- add = 0
- }
- next
- }
- }
- print
-}
-END {
- if (add) {
- print line
- }
-}
-' "$file" > "\$tmpfile"
+grep -v $greparg '$regex' '$file' > \$tmpfile || true
mv -f "\$tmpfile" "$file"
-DONE
-
-if [ -f "$__object/parameter/onchange" ]; then
- cat "$__object/parameter/onchange"
-fi
+eof
+ ;;
+ *)
+ echo "Unknown state: $state_should" >&2
+ exit 1
+ ;;
+esac
diff --git a/cdist/conf/type/__line/man.rst b/cdist/conf/type/__line/man.rst
index f76cab64..e6adce9c 100644
--- a/cdist/conf/type/__line/man.rst
+++ b/cdist/conf/type/__line/man.rst
@@ -13,104 +13,65 @@ This cdist type allows you to add lines and remove lines from files.
REQUIRED PARAMETERS
-------------------
-None.
-
OPTIONAL PARAMETERS
-------------------
-after
- Insert the given line after this pattern.
+state
+ 'present' or 'absent', defaults to 'present'
-before
- Insert the given line before this pattern.
+line
+ Specifies the line which should be absent or present
+
+ Must be present, if state is present.
+ Must not be combined with regex, if state is absent.
+
+regex
+ If state is present, search for this pattern and add
+ given line, if the given regular expression does not match.
+
+ In case of absent, ensure all lines matching the
+ regular expression are absent.
+
+ The regular expression is interpreted by grep.
+
+ Must not be combined with line, if state is absent.
file
If supplied, use this as the destination file.
Otherwise the object_id is used.
-line
- Specifies the line which should be absent or present.
-
- Must be present, if state is 'present'.
- Ignored if regex is given and state is 'absent'.
-
-regex
- If state is 'present', search for this pattern and if it matches add
- the given line.
-
- If state is 'absent', ensure all lines matching the regular expression
- are absent.
-
- The regular expression is interpreted by awk's match function.
-
-state
- 'present' or 'absent', defaults to 'present'
-
-onchange
- The code to run if line is added, removed or updated.
-
-
-BOOLEAN PARAMETERS
-------------------
-None.
-
-
-MESSAGES
---------
-added
- The line was added.
-
-updated
- The line or its position was changed.
-
-removed
- The line was removed.
-
EXAMPLES
--------
.. code-block:: sh
- # Manage a hosts entry for www.example.com.
- __line /etc/hosts \
- --line '127.0.0.2 www.example.com'
+ # Manage the DAEMONS line in rc.conf
+ __line daemons --file /etc/rc.conf --line 'DAEMONS=(hwclock !network sshd crond postfix)'
- # Manage another hosts entry for test.example.com.
- __line hosts:test.example.com \
- --file /etc/hosts \
- --line '127.0.0.3 test.example.com'
+ # Ensure the home mount is present in /etc/fstab - explicitly make it present
+ __line home-fstab \
+ --file /etc/fstab \
+ --line 'filer.fs:/vol/home /home nfs defaults 0 0' \
+ --state present
- # Remove the line starting with TIMEZONE from the /etc/rc.conf file.
- __line legacy_timezone \
- --file /etc/rc.conf \
- --regex 'TIMEZONE=.*' \
- --state absent
-
- # Insert a line before another one.
- __line password-auth-local:classify \
- --file /etc/pam.d/password-auth-local \
- --line '-session required pam_exec.so debug log=/tmp/classify.log /usr/local/libexec/classify' \
- --before '^session[[:space:]]+include[[:space:]]+password-auth-ac$'
-
- # Insert a line after another one.
- __line password-auth-local:classify \
- --file /etc/pam.d/password-auth-local \
- --line '-session required pam_exec.so debug log=/tmp/classify.log /usr/local/libexec/classify' \
- --after '^session[[:space:]]+include[[:space:]]+password-auth-ac$'
+ # Removes the line specifiend in "include_www" from the file "lighttpd.conf"
+ __line legacy_timezone --file /etc/rc.conf --regex 'TIMEZONE=.*' --state absent
SEE ALSO
--------
-:strong:`cdist-type`\ (7)
+:strong:`grep`\ (1)
AUTHORS
-------
-Steven Armstrong
+Nico Schottelius
COPYING
-------
-Copyright \(C) 2018 Steven Armstrong. Free use of this software is
-granted under the terms of the GNU General Public License version 3 (GPLv3).
+Copyright \(C) 2012-2013 Nico Schottelius. 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.
diff --git a/cdist/conf/type/__line/parameter/default/state b/cdist/conf/type/__line/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__line/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__line/parameter/optional b/cdist/conf/type/__line/parameter/optional
index 1c34c699..604a203e 100644
--- a/cdist/conf/type/__line/parameter/optional
+++ b/cdist/conf/type/__line/parameter/optional
@@ -1,7 +1,4 @@
-after
-before
+state
+regex
file
line
-regex
-state
-onchange
diff --git a/cdist/conf/type/__link/explorer/state b/cdist/conf/type/__link/explorer/state
index 7150df25..b8d8fc2b 100755
--- a/cdist/conf/type/__link/explorer/state
+++ b/cdist/conf/type/__link/explorer/state
@@ -32,9 +32,9 @@ destination_dir="${destination%/*}"
case "$type" in
symbolic)
- cd "$destination_dir" || exit 1
+ cd "$destination_dir"
+ source_is=$(ls -l "$destination" | sed 's/.*-> //g')
if [ -h "$destination" ]; then
- source_is=$(readlink "$destination")
# ignore trailing slashes for comparison
if [ "${source_is%/}" = "${source%/}" ]; then
echo present
@@ -46,19 +46,13 @@ case "$type" in
fi
;;
hard)
- cd "$destination_dir" || exit 1
+ cd "$destination_dir"
# check source relative to destination_dir
if [ ! -e "$source" ]; then
echo sourcemissing
exit 0
fi
- # Currently not worth the effor to change it, stat is not defined by POSIX
- # and different OSes has different implementations for it.
- # shellcheck disable=SC2012
destination_inode=$(ls -i "$destination" | awk '{print $1}')
- # Currently not worth the effor to change it, stat is not defined by POSIX
- # and different OSes has different implementations for it.
- # shellcheck disable=SC2012
source_inode=$(ls -i "$source" | awk '{print $1}')
if [ "$destination_inode" -eq "$source_inode" ]; then
echo present
diff --git a/cdist/conf/type/__link/explorer/type b/cdist/conf/type/__link/explorer/type
index b322bf42..579fd081 100755
--- a/cdist/conf/type/__link/explorer/type
+++ b/cdist/conf/type/__link/explorer/type
@@ -24,26 +24,23 @@
destination="/$__object_id"
if [ ! -e "$destination" ]; then
- echo none
+ echo none
elif [ -h "$destination" ]; then
- echo symlink
+ echo symlink
elif [ -f "$destination" ]; then
- type="$(cat "$__object/parameter/type")"
- case "$type" in
- hard)
- # Currently not worth the effor to change it, stat is not defined by POSIX
- # and different OSes has different implementations for it.
- # shellcheck disable=SC2012
- link_count=$(ls -l "$destination" | awk '{ print $2 }')
- if [ "$link_count" -gt 1 ]; then
- echo hardlink
- exit 0
- fi
- ;;
- esac
- echo file
+ type="$(cat "$__object/parameter/type")"
+ case "$type" in
+ hard)
+ link_count=$(ls -l "$destination" | awk '{ print $2 }')
+ if [ $link_count -gt 1 ]; then
+ echo hardlink
+ exit 0
+ fi
+ ;;
+ esac
+ echo file
elif [ -d "$destination" ]; then
- echo directory
+ echo directory
else
- echo unknown
+ echo unknown
fi
diff --git a/cdist/conf/type/__link/gencode-remote b/cdist/conf/type/__link/gencode-remote
index 45c22fcc..9e7831c7 100755
--- a/cdist/conf/type/__link/gencode-remote
+++ b/cdist/conf/type/__link/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
# 2013-2014 Steven Armstrong (steven-cdist at armstrong.cc)
@@ -48,25 +48,21 @@ case "$state_should" in
if [ "$file_type" = "directory" ]; then
# our destination is currently a directory, delete it
printf 'rm -rf "%s" &&\n' "$destination"
- echo "removed '$destination' (directory)" >> "$__messages_out"
else
if [ "$state_is" = "wrongsource" ]; then
# our destination is a symlink but points to the wrong source,
# delete it
printf 'rm -f "%s" &&\n' "$destination"
- echo "removed '$destination' (wrongsource)" >> "$__messages_out"
fi
fi
# create our link
printf 'ln %s -f "%s" "%s"\n' "$lnopt" "$source" "$destination"
- echo "created '$destination'" >> "$__messages_out"
;;
absent)
# only delete if it is a sym/hard link
- if [ "$file_type" = "symlink" ] || [ "$file_type" = "hardlink" ]; then
+ if [ "$file_type" = "symlink" -o "$file_type" = "hardlink" ]; then
printf 'rm -f "%s"\n' "$destination"
- echo "removed '$destination'" >> "$__messages_out"
fi
;;
*)
diff --git a/cdist/conf/type/__link/man.rst b/cdist/conf/type/__link/man.rst
index fe0ce425..9dc4665f 100644
--- a/cdist/conf/type/__link/man.rst
+++ b/cdist/conf/type/__link/man.rst
@@ -27,22 +27,6 @@ state
'present' or 'absent', defaults to 'present'
-MESSAGES
---------
-
-created
- Link to destination was created.
-
-removed
- Link to destination was removed.
-
-removed (directory)
- Destination was removed because state is ``present`` and destination was directory.
-
-removed (wrongsource)
- Destination was removed because state is ``present`` and destination link source was wrong.
-
-
EXAMPLES
--------
diff --git a/cdist/conf/type/__locale/gencode-remote b/cdist/conf/type/__locale/gencode-remote
old mode 100755
new mode 100644
index 1feb9884..538ce2cd
--- a/cdist/conf/type/__locale/gencode-remote
+++ b/cdist/conf/type/__locale/gencode-remote
@@ -1,6 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2013-2019 Nico Schottelius (nico-cdist at schottelius.org)
+# 2013 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -37,15 +37,6 @@ locale_remove=$(echo "$locale" | sed 's/UTF-8/utf8/')
state=$(cat "$__object/parameter/state")
-os=$(cat "$__global/explorer/os")
-
-# Nothing to be done on alpine
-case "$os" in
- alpine)
- exit 0
- ;;
-esac
-
case "$state" in
present)
echo localedef -A "$alias" -f "$charmap" -i "$input" "$locale"
diff --git a/cdist/conf/type/__locale/man.rst b/cdist/conf/type/__locale/man.rst
index e36ab061..60a4eacc 100644
--- a/cdist/conf/type/__locale/man.rst
+++ b/cdist/conf/type/__locale/man.rst
@@ -8,8 +8,7 @@ cdist-type__locale - Configure locales
DESCRIPTION
-----------
-This cdist type allows you to setup locales. On systems that don't
-support locale setting like alpine/musl libc, it is a no-op.
+This cdist type allows you to setup locales.
OPTIONAL PARAMETERS
@@ -45,6 +44,6 @@ Nico Schottelius
COPYING
-------
-Copyright \(C) 2013-2019 Nico Schottelius. Free use of this software is
+Copyright \(C) 2013-2016 Nico Schottelius. Free use of this software is
granted under the terms of the GNU General Public License version 3 or
later (GPLv3+).
diff --git a/cdist/conf/type/__locale/manifest b/cdist/conf/type/__locale/manifest
old mode 100755
new mode 100644
index 9f1e17ac..d360e9f3
--- a/cdist/conf/type/__locale/manifest
+++ b/cdist/conf/type/__locale/manifest
@@ -1,6 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2013-2019 Nico Schottelius (nico-cdist at schottelius.org)
+# 2013-2015 Nico Schottelius (nico-cdist at schottelius.org)
# 2015 David Hürlimann (david at ungleich.ch)
#
# This file is part of cdist.
@@ -19,7 +19,7 @@
# along with cdist. If not, see .
#
#
-# Install required packages
+# Install required packages
#
os=$(cat "$__global/explorer/os")
@@ -30,7 +30,7 @@ case "$os" in
# Debian needs a seperate package
__package locales --state present
;;
- archlinux|suse|ubuntu|scientific|centos|alpine)
+ archlinux|suse|ubuntu|scientific|centos)
:
;;
*)
diff --git a/cdist/conf/type/__locale_system/manifest b/cdist/conf/type/__locale_system/manifest
old mode 100755
new mode 100644
index 80f7401b..02cf48df
--- a/cdist/conf/type/__locale_system/manifest
+++ b/cdist/conf/type/__locale_system/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2016 Steven Armstrong (steven-cdist at armstrong.cc)
# 2016 Carlos Ortigoza (carlos.ortigoza at ungleich.ch)
diff --git a/cdist/conf/type/__motd/gencode-remote b/cdist/conf/type/__motd/gencode-remote
index 738ea834..41fe3482 100755
--- a/cdist/conf/type/__motd/gencode-remote
+++ b/cdist/conf/type/__motd/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -29,18 +29,7 @@ case "$os" in
echo "uname -snrvm > /var/run/motd"
echo "cat /etc/motd.tail >> /var/run/motd"
;;
- freebsd)
- # FreeBSD only updates /etc/motd on boot,
- # as seen in /etc/rc.d/motd
- echo "uname -sri > /etc/motd"
- echo "cat /etc/motd.template >> /etc/motd"
- # FreeBSD 13 starts treating motd slightly different from previous
- # versions this ensures hosts have the expected config.
- echo "rm /etc/motd.template || true"
- echo "service motd start"
- ;;
*)
- # Other OS tend to treat /etc/motd statically
exit 0
;;
esac
diff --git a/cdist/conf/type/__motd/man.rst b/cdist/conf/type/__motd/man.rst
index a567dc80..17369684 100644
--- a/cdist/conf/type/__motd/man.rst
+++ b/cdist/conf/type/__motd/man.rst
@@ -10,13 +10,6 @@ DESCRIPTION
-----------
This cdist type allows you to easily setup /etc/motd.
-.. note::
- In some OS, motd is a bit special, check `motd(5)`.
- Currently Debian, Devuan, Ubuntu and FreeBSD are taken into account.
- If your OS of choice does something besides /etc/motd, check the source
- and contribute support for it.
- Otherwise it will likely just work.
-
REQUIRED PARAMETERS
-------------------
@@ -27,7 +20,6 @@ OPTIONAL PARAMETERS
-------------------
source
If supplied, copy this file from the host running cdist to the target.
- If source is '-' (dash), take what was written to stdin as the file content.
If not supplied, a default message will be placed onto the target.
@@ -42,15 +34,6 @@ EXAMPLES
# Supply source file from a different type
__motd --source "$__type/files/my-motd"
- # Supply source from stdin
- __motd --source "-" <
COPYING
-------
-Copyright \(C) 2020 Nico Schottelius. You can redistribute it
+Copyright \(C) 2011 Nico Schottelius. 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.
diff --git a/cdist/conf/type/__motd/manifest b/cdist/conf/type/__motd/manifest
index ded734d7..4848a4c3 100755
--- a/cdist/conf/type/__motd/manifest
+++ b/cdist/conf/type/__motd/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -22,9 +22,6 @@
# Select motd source
if [ -f "$__object/parameter/source" ]; then
source="$(cat "$__object/parameter/source")"
- if [ "$source" = "-" ]; then
- source="${__object}/stdin"
- fi
else
source="$__type/files/motd"
fi
@@ -34,17 +31,9 @@ os=$(cat "$__global/explorer/os")
case "$os" in
debian|ubuntu|devuan)
- # Debian-based systems use /etc/motd.tail as a template
destination=/etc/motd.tail
;;
- freebsd)
- # FreeBSD uses motd.template to prepend system information on boot
- # (this actually only applies starting with version 13,
- # but we fix that for whatever version in gencode-remote)
- destination=/etc/motd.template
- ;;
*)
- # Most UNIX systems, including other Linux and OpenBSD just use /etc/motd
destination=/etc/motd
;;
esac
diff --git a/cdist/conf/type/__mount/gencode-remote b/cdist/conf/type/__mount/gencode-remote
index b2096764..2626f3de 100755
--- a/cdist/conf/type/__mount/gencode-remote
+++ b/cdist/conf/type/__mount/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -39,7 +39,7 @@ case "$state_should" in
printf ' -o %s' "$(cat "$__object/parameter/options")"
fi
printf ' %s' "$(cat "$__object/parameter/device")"
- printf ' %s\n' "$path"
+ printf " %s\n" "$path"
else
# mount using existing fstab entry
printf 'mount "%s"\n' "$path"
diff --git a/cdist/conf/type/__mount/manifest b/cdist/conf/type/__mount/manifest
index 999d806c..472b6e2e 100755
--- a/cdist/conf/type/__mount/manifest
+++ b/cdist/conf/type/__mount/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -31,7 +31,7 @@ printf " %s" "$type"
options="$(cat "$__object/parameter/options")"
printf " %s" "$options"
printf " %s" "$(cat "$__object/parameter/dump")"
-printf ' %s\n' "$(cat "$__object/parameter/pass")"
+printf " %s\n" "$(cat "$__object/parameter/pass")"
) | \
__block "$__object_name" \
--file "/etc/fstab" \
diff --git a/cdist/conf/type/__mysql_database/explorer/state b/cdist/conf/type/__mysql_database/explorer/state
deleted file mode 100755
index 79858695..00000000
--- a/cdist/conf/type/__mysql_database/explorer/state
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh -e
-#
-# 2020 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-if [ -f "$__object/parameter/name" ]
-then
- name="$( cat "$__object/parameter/name" )"
-else
- name="$__object_id"
-fi
-
-if [ -n "$( mysql -B -N -e "show databases like '$name'" )" ]
-then
- echo 'present'
-else
- echo 'absent'
-fi
diff --git a/cdist/conf/type/__mysql_database/gencode-remote b/cdist/conf/type/__mysql_database/gencode-remote
index 1bdb2b11..b1c2e6a1 100755
--- a/cdist/conf/type/__mysql_database/gencode-remote
+++ b/cdist/conf/type/__mysql_database/gencode-remote
@@ -1,6 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2020 Ander Punnar (ander-at-kvlt-dot-ee)
+# 2012 Benedikt Koeppel (code@benediktkoeppel.ch)
#
# This file is part of cdist.
#
@@ -17,30 +17,38 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
#
+#
-state_is="$( cat "$__object/explorer/state" )"
-
-state_should="$( cat "$__object/parameter/state" )"
-
-if [ "$state_is" = "$state_should" ]
-then
- exit 0
+# if --database was specified
+if [ -f "$__object/parameter/name" ]; then
+ database="$(cat "$__object/parameter/name")"
+else # otherwise use the object id as database name
+ database="$__object_id"
fi
-if [ -f "$__object/parameter/name" ]
-then
- name="$( cat "$__object/parameter/name" )"
-else
- name="$__object_id"
-fi
+cat <<-EOFF
+mysql -u root <<-EOF
+ CREATE DATABASE IF NOT EXISTS $database
+EOF
+EOFF
-case "$state_should" in
- present)
- echo "mysql -e 'create database \`$name\`'"
- echo "create database $name" >> "$__messages_out"
- ;;
- absent)
- echo "mysql -e 'drop database \`$name\`'"
- echo "drop database $name" >> "$__messages_out"
- ;;
-esac
+# if --user was specified
+if [ -f "$__object/parameter/user" ]; then
+ user="$(cat "$__object/parameter/user")"
+
+ # if --password was specified
+ if [ -f "$__object/parameter/password" ]; then
+ password="$(cat "$__object/parameter/password")"
+ cat <<-EOFF
+ mysql -u root <<-EOF
+ GRANT ALL PRIVILEGES ON $database.* to '$user'@'localhost' IDENTIFIED BY '$password';
+EOF
+EOFF
+ else
+ cat <<-EOFF
+ mysql -u root <<-EOF
+ GRANT ALL PRIVILEGES ON $database.* to '$user'@'localhost';
+EOF
+EOFF
+ fi
+fi
diff --git a/cdist/conf/type/__mysql_database/man.rst b/cdist/conf/type/__mysql_database/man.rst
index b3b56b5f..1e245a08 100644
--- a/cdist/conf/type/__mysql_database/man.rst
+++ b/cdist/conf/type/__mysql_database/man.rst
@@ -8,24 +8,24 @@ cdist-type__mysql_database - Manage a MySQL database
DESCRIPTION
-----------
+This cdist type allows you to install a MySQL database.
-Create MySQL database and optionally user with all privileges.
+REQUIRED PARAMETERS
+-------------------
+None.
OPTIONAL PARAMETERS
-------------------
name
- Name of database. Defaults to object id.
+ The name of the database to install
+ defaults to the object id
user
- Create user and give all privileges to database.
+ A user that should have access to the database
password
- Password for user.
-
-state
- Defaults to present.
- If absent and user is also set, both will be removed (with privileges).
+ The password for the user who manages the database
EXAMPLES
@@ -33,23 +33,17 @@ EXAMPLES
.. code-block:: sh
- # just create database
- __mysql_database foo
-
- # create database with respective user with all privileges to database
- __mysql_database bar \
- --user name \
- --password secret
+ __mysql_database "cdist" --name "cdist" --user "myuser" --password "mypwd"
AUTHORS
-------
-Ander Punnar
+Benedikt Koeppel
COPYING
-------
-Copyright \(C) 2020 Ander Punnar. 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.
+Copyright \(C) 2012 Benedikt Koeppel. 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.
diff --git a/cdist/conf/type/__mysql_database/manifest b/cdist/conf/type/__mysql_database/manifest
deleted file mode 100755
index a3c9ed5d..00000000
--- a/cdist/conf/type/__mysql_database/manifest
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/sh -e
-#
-# 2020 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-if [ -f "$__object/parameter/user" ]
-then
- user="$( cat "$__object/parameter/user" )"
-fi
-
-if [ -f "$__object/parameter/password" ]
-then
- password="$( cat "$__object/parameter/password" )"
-fi
-
-if [ -n "$user" ] && [ -n "$password" ]
-then
- if [ -f "$__object/parameter/name" ]
- then
- database="$( cat "$__object/parameter/name" )"
- else
- database="$__object_id"
- fi
-
- state_should="$( cat "$__object/parameter/state" )"
-
- __mysql_user "$user" \
- --password "$password" \
- --state "$state_should"
-
- # removing user should remove all user's privileges
- require="__mysql_user/$user" \
- __mysql_privileges "$database/$user" \
- --database "$database" \
- --user "$user" \
- --state "$state_should"
-fi
diff --git a/cdist/conf/type/__mysql_database/parameter/default/state b/cdist/conf/type/__mysql_database/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__mysql_database/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__mysql_database/parameter/optional b/cdist/conf/type/__mysql_database/parameter/optional
index 6c0b1e85..756afee7 100644
--- a/cdist/conf/type/__mysql_database/parameter/optional
+++ b/cdist/conf/type/__mysql_database/parameter/optional
@@ -1,4 +1,3 @@
name
user
password
-state
diff --git a/cdist/conf/type/__mysql_privileges/explorer/state b/cdist/conf/type/__mysql_privileges/explorer/state
deleted file mode 100755
index 4f13a70c..00000000
--- a/cdist/conf/type/__mysql_privileges/explorer/state
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/sh -e
-#
-# 2020 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-privileges="$( cat "$__object/parameter/privileges" )"
-
-database="$( cat "$__object/parameter/database" )"
-
-table="$( cat "$__object/parameter/table" )"
-
-user="$( cat "$__object/parameter/user" )"
-
-host="$( cat "$__object/parameter/host" )"
-
-check_privileges="$(
- mysql -B -N -e "show grants for '$user'@'$host'" \
- | grep -Ei "^grant $privileges on .$database.\..?$table.? to " || true )"
-
-if [ -n "$check_privileges" ]
-then
- echo 'present'
-else
- echo 'absent'
-fi
diff --git a/cdist/conf/type/__mysql_privileges/gencode-remote b/cdist/conf/type/__mysql_privileges/gencode-remote
deleted file mode 100755
index 0656699f..00000000
--- a/cdist/conf/type/__mysql_privileges/gencode-remote
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh -e
-#
-# 2020 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-state_is="$( cat "$__object/explorer/state" )"
-
-state_should="$( cat "$__object/parameter/state" )"
-
-if [ "$state_is" = "$state_should" ]
-then
- exit 0
-fi
-
-privileges="$( cat "$__object/parameter/privileges" )"
-
-database="$( cat "$__object/parameter/database" )"
-
-table="$( cat "$__object/parameter/table" )"
-
-user="$( cat "$__object/parameter/user" )"
-
-host="$( cat "$__object/parameter/host" )"
-
-if [ "$table" != '*' ]
-then
- # shellcheck disable=SC2016
- table="$( printf '`%s`' "$table" )"
-fi
-
-case "$state_should" in
- present)
- echo "mysql -e 'grant $privileges on \`$database\`.$table to \`$user\`@\`$host\`'"
- echo "grant $privileges on $database.$table to $user@$host" >> "$__messages_out"
- ;;
- absent)
- echo "mysql -e 'revoke $privileges on \`$database\`.$table from \`$user\`@\`$host\`'"
- echo "revoke $privileges on $database.$table from $user@$host" >> "$__messages_out"
- ;;
-esac
diff --git a/cdist/conf/type/__mysql_privileges/man.rst b/cdist/conf/type/__mysql_privileges/man.rst
deleted file mode 100644
index b72c9eba..00000000
--- a/cdist/conf/type/__mysql_privileges/man.rst
+++ /dev/null
@@ -1,57 +0,0 @@
-cdist-type__mysql_privileges(7)
-===============================
-
-NAME
-----
-cdist-type__mysql_privileges - Manage MySQL privileges
-
-
-DESCRIPTION
------------
-
-Grant and revoke privileges of MySQL user.
-
-
-REQUIRED PARAMETERS
--------------------
-database
- Name of database.
-
-user
- Name of user.
-
-
-OPTIONAL PARAMETERS
--------------------
-privileges
- Defaults to "all".
-
-table
- Defaults to "*".
-
-host
- Defaults to localhost.
-
-state
- "present" grants and "absent" revokes. Defaults to present.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __mysql_privileges user-to-db --database db --user user
-
-
-AUTHORS
--------
-Ander Punnar
-
-
-COPYING
--------
-Copyright \(C) 2020 Ander Punnar. 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.
diff --git a/cdist/conf/type/__mysql_privileges/parameter/default/host b/cdist/conf/type/__mysql_privileges/parameter/default/host
deleted file mode 100644
index 2fbb50c4..00000000
--- a/cdist/conf/type/__mysql_privileges/parameter/default/host
+++ /dev/null
@@ -1 +0,0 @@
-localhost
diff --git a/cdist/conf/type/__mysql_privileges/parameter/default/privileges b/cdist/conf/type/__mysql_privileges/parameter/default/privileges
deleted file mode 100644
index 5472efad..00000000
--- a/cdist/conf/type/__mysql_privileges/parameter/default/privileges
+++ /dev/null
@@ -1 +0,0 @@
-all privileges
diff --git a/cdist/conf/type/__mysql_privileges/parameter/default/state b/cdist/conf/type/__mysql_privileges/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__mysql_privileges/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__mysql_privileges/parameter/default/table b/cdist/conf/type/__mysql_privileges/parameter/default/table
deleted file mode 100644
index 72e8ffc0..00000000
--- a/cdist/conf/type/__mysql_privileges/parameter/default/table
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/cdist/conf/type/__mysql_privileges/parameter/optional b/cdist/conf/type/__mysql_privileges/parameter/optional
deleted file mode 100644
index d4ed5bc5..00000000
--- a/cdist/conf/type/__mysql_privileges/parameter/optional
+++ /dev/null
@@ -1,4 +0,0 @@
-privileges
-table
-host
-state
diff --git a/cdist/conf/type/__mysql_privileges/parameter/required b/cdist/conf/type/__mysql_privileges/parameter/required
deleted file mode 100644
index 152b4a1e..00000000
--- a/cdist/conf/type/__mysql_privileges/parameter/required
+++ /dev/null
@@ -1,2 +0,0 @@
-database
-user
diff --git a/cdist/conf/type/__mysql_user/explorer/state b/cdist/conf/type/__mysql_user/explorer/state
deleted file mode 100755
index 6817ee9d..00000000
--- a/cdist/conf/type/__mysql_user/explorer/state
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/sh -e
-#
-# 2020 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-if [ -f "$__object/parameter/name" ]
-then
- name="$( cat "$__object/parameter/name" )"
-else
- name="$__object_id"
-fi
-
-if [ -f "$__object/parameter/password" ]
-then
- password="$( cat "$__object/parameter/password" )"
-else
- password=''
-fi
-
-host="$( cat "$__object/parameter/host" )"
-
-check_user="$( mysql -B -N -e "select user from mysql.user where user = '$name' and host = '$host'" )"
-
-if [ -n "$check_user" ]
-then
- if [ -n "$password" ]
- then
- check_password="$( mysql -B -N -e "select user from mysql.user where user = '$name' and host = '$host' and password = password( '$password' )" )"
- fi
-
- if [ -n "$password" ] && [ -z "$check_password" ]
- then
- echo 'change-password'
- else
- echo 'present'
- fi
-else
- echo 'absent'
-fi
diff --git a/cdist/conf/type/__mysql_user/gencode-remote b/cdist/conf/type/__mysql_user/gencode-remote
deleted file mode 100755
index 5f13bc87..00000000
--- a/cdist/conf/type/__mysql_user/gencode-remote
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/bin/sh -e
-#
-# 2020 Ander Punnar (ander-at-kvlt-dot-ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-state_is="$( cat "$__object/explorer/state" )"
-
-state_should="$( cat "$__object/parameter/state" )"
-
-if [ "$state_is" = "$state_should" ]
-then
- exit 0
-fi
-
-if [ -f "$__object/parameter/name" ]
-then
- name="$( cat "$__object/parameter/name" )"
-else
- name="$__object_id"
-fi
-
-host="$( cat "$__object/parameter/host" )"
-
-if [ -f "$__object/parameter/password" ]
-then
- password="$( cat "$__object/parameter/password" )"
-else
- if [ "$state_should" = 'present' ]
- then
- echo '--password needed' >&2
- exit 1
- else
- password=''
- fi
-fi
-
-if [ "$state_is" = 'absent' ] && [ "$state_should" = 'present' ]
-then
- echo "mysql -e 'create user \`$name\`@\`$host\` identified by \"$password\"'"
- echo "create user $name@$host" >> "$__messages_out"
-
-elif [ "$state_is" != 'absent' ] && [ "$state_should" = 'absent' ]
-then
- echo "mysql -e 'drop user \`$name\`@\`$host\`'"
- echo "drop user $name@$host" >> "$__messages_out"
-
-elif [ "$state_is" = 'change-password' ]
-then
- # this only works with MySQL 5.7.6 and later or MariaDB 10.1.20 and later
- echo "mysql -e 'alter user \`$name\`@\`$host\` identified by \"$password\"'"
- echo "mysql -e 'flush privileges'"
- echo "change password $name@$host" >> "$__messages_out"
-fi
diff --git a/cdist/conf/type/__mysql_user/man.rst b/cdist/conf/type/__mysql_user/man.rst
deleted file mode 100644
index c2b222d5..00000000
--- a/cdist/conf/type/__mysql_user/man.rst
+++ /dev/null
@@ -1,48 +0,0 @@
-cdist-type__mysql_user(7)
-=========================
-
-NAME
-----
-cdist-type__mysql_user - Manage a MySQL user
-
-
-DESCRIPTION
------------
-
-Create MySQL user or change password for the user.
-
-
-OPTIONAL PARAMETERS
--------------------
-name
- Name of user. Defaults to object id.
-
-host
- Host of user. Defaults to localhost.
-
-password
- Password of user.
-
-state
- Defaults to present.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __mysql_user user --password secret
-
-
-AUTHORS
--------
-Ander Punnar
-
-
-COPYING
--------
-Copyright \(C) 2020 Ander Punnar. 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.
diff --git a/cdist/conf/type/__mysql_user/parameter/default/host b/cdist/conf/type/__mysql_user/parameter/default/host
deleted file mode 100644
index 2fbb50c4..00000000
--- a/cdist/conf/type/__mysql_user/parameter/default/host
+++ /dev/null
@@ -1 +0,0 @@
-localhost
diff --git a/cdist/conf/type/__mysql_user/parameter/default/state b/cdist/conf/type/__mysql_user/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__mysql_user/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__mysql_user/parameter/optional b/cdist/conf/type/__mysql_user/parameter/optional
deleted file mode 100644
index a286266c..00000000
--- a/cdist/conf/type/__mysql_user/parameter/optional
+++ /dev/null
@@ -1,4 +0,0 @@
-name
-host
-password
-state
diff --git a/cdist/conf/type/__openldap_server/gencode-remote b/cdist/conf/type/__openldap_server/gencode-remote
deleted file mode 100644
index b1e98f8c..00000000
--- a/cdist/conf/type/__openldap_server/gencode-remote
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-
-manager_dn=$(cat "${__object}/parameter/manager-dn")
-manager_password=$(cat "${__object}/parameter/manager-password")
-description=$(cat "${__object}/parameter/description")
-suffix=$(cat "${__object}/parameter/suffix")
-suffix_dc=$(printf "%s" "${suffix}" | awk -F',' '{print $1}' | awk -F'=' '{print $2}')
-
-SLAPD_IPC=$(tr '\n' ' ' < "${__object}/parameter/slapd-url" | awk '{ print $1}')
-
-cat <&1 > /dev/null; then
- # Already exists, use ldapmodify
- ldapmodify -xZ -D "${manager_dn}" -w "${manager_password}" -H '${SLAPD_IPC}' <
-Evilham
-
-
-COPYING
--------
-Copyright \(C) 2020 ungleich glarus ag. 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.
diff --git a/cdist/conf/type/__openldap_server/manifest b/cdist/conf/type/__openldap_server/manifest
deleted file mode 100644
index 84ba176f..00000000
--- a/cdist/conf/type/__openldap_server/manifest
+++ /dev/null
@@ -1,267 +0,0 @@
-#!/bin/sh
-
-name="${__target_host}"
-manager_dn=$(cat "${__object}/parameter/manager-dn")
-manager_password_hash=$(cat "${__object}/parameter/manager-password-hash")
-serverid=$(cat "${__object}/parameter/serverid")
-suffix=$(cat "${__object}/parameter/suffix")
-slapd_modules=$(cat "${__object}/parameter/module" 2>/dev/null || true)
-schemas=$(cat "${__object}/parameter/schema")
-slapd_urls=$(tr '\n' ' ' < "${__object}/parameter/slapd-url")
-tls_cipher_suite=$(cat "${__object}/parameter/tls-cipher-suite" 2>/dev/null || true)
-extra_config=$(cat "${__object}/parameter/extra-config" || true)
-
-
-os="$(cat "${__global}/explorer/os")"
-
-# Setup OS-dependent vars
-CONF_OWNER="root"
-CONF_GROUP="root"
-case "${os}" in
- freebsd)
- PKGS="openldap-server"
- ETC="/usr/local/etc"
- SLAPD_DIR="/usr/local/etc/openldap"
- SLAPD_DATA_DIR="/var/db/openldap-data"
- SLAPD_RUN_DIR="/var/run/openldap"
- SLAPD_MODULE_PATH="/usr/local/libexec/openldap"
- if [ -z "${slapd_modules}" ]; then
- # It looks like ppolicy and syncprov must be compiled
- slapd_modules="back_mdb back_monitor"
- fi
- CONF_OWNER="ldap"
- CONF_GROUP="ldap"
- if [ -z "${tls_cipher_suite}" ]; then
- # TODO: research default for FreeBSD. 'NORMAL' appears to not work
- tls_cipher_suite="HIGH:MEDIUM:+SSLv2"
- fi
- ;;
- debian|ubuntu|devuan)
- PKGS="slapd ldap-utils"
- ETC="/etc"
- SLAPD_DIR="/etc/ldap"
- SLAPD_DATA_DIR="/var/lib/ldap"
- SLAPD_RUN_DIR="/var/run/slapd"
- SLAPD_MODULE_PATH="/usr/lib/ldap"
- if [ -z "${slapd_modules}" ]; then
- slapd_modules="back_mdb ppolicy syncprov back_monitor"
- fi
- if [ -z "${tls_cipher_suite}" ]; then
- tls_cipher_suite="NORMAL"
- fi
- ;;
- *)
- echo "Don't know the openldap defaults for: $os" >&2
- exit 1
- ;;
-esac
-
-PKG_MAIN=$(echo "${PKGS}" | awk '{print $1;}')
-
-
-# Determine if __letsencrypt_cert is to be used and setup vars accordingly
-if [ -f "${__object}/parameter/tls-cert" ]; then
- tls_cert=$(cat "${__object}/parameter/tls-cert")
-
- if [ ! -f "${__object}/parameter/tls-privkey" ]; then
- echo "When tls-cert is defined, tls-privkey is also required." >&2
- exit 1
- fi
- tls_privkey=$(cat "${__object}/parameter/tls-privkey")
-
- if [ ! -f "${__object}/parameter/tls-ca" ]; then
- echo "When tls-cert is defined, tls-ca is also required." >&2
- exit 1
- fi
- tls_ca=$(cat "${__object}/parameter/tls-ca")
-
- _skip_letsencrypt_cert="YES"
-else
- if [ ! -f "${__object}/parameter/admin-email" ]; then
- echo "When using __letsencrypt_cert, admin-email is also required." >&2
- exit 1
- fi
- admin_email=$(cat "${__object}/parameter/admin-email")
-
- tls_cert="${SLAPD_DIR}/sasl2/cert.pem"
- tls_privkey="${SLAPD_DIR}/sasl2/privkey.pem"
- tls_ca="${SLAPD_DIR}/sasl2/chain.pem"
-fi
-
-mkdir "${__object}/files"
-ldapconf="${__object}/files/ldapconf"
-
-replication=""
-if [ -f "${__object}/parameter/replicate" ]; then
- replication=yes
-
- if [ ! -f "${__object}/parameter/syncrepl-searchbase" ]; then
- echo "Requiring the searchbase for replication" >&2
- exit 1
- fi
- syncrepl_searchbase=$(cat "${__object}/parameter/syncrepl-searchbase")
-
- if [ ! -f "${__object}/parameter/syncrepl-credentials" ]; then
- echo "Requiring credentials for replication" >&2
- exit 1
- fi
-
- syncrepl_credentials=$(cat "${__object}/parameter/syncrepl-credentials")
-
- if [ ! -f "${__object}/parameter/syncrepl-host" ]; then
- echo "Requiring host(s) for replication" >&2
- exit 1
- fi
- syncrepl_hosts=$(cat "${__object}/parameter/syncrepl-host")
-
-fi
-
-# Install required packages
-for pkg in ${PKGS}; do
- __package "${pkg}"
-done
-
-
-require="__package/${PKG_MAIN}" __start_on_boot slapd
-
-# Setup -h flag for the listeners. See man slapd (-h flag).
-case "${os}" in
- freebsd)
- require="__start_on_boot/slapd" __key_value \
- --file "/etc/rc.conf" \
- --key "slapd_flags" \
- --value "\"-h '${slapd_urls}'\"" \
- --delimiter "=" \
- --comment "# LDAP Listener URLs" \
- "${__target_host}__slapd_flags"
- ;;
- debian|ubuntu|devuan)
- require="__package/${PKG_MAIN}" __line rm_slapd_conf \
- --file ${ETC}/default/slapd \
- --regex 'SLAPD_CONF=.*' \
- --state absent
-
- require="__package/${PKG_MAIN}" __line rm_slapd_services \
- --file ${ETC}/default/slapd \
- --regex 'SLAPD_SERVICES=.*' \
- --state absent
-
- require="__line/rm_slapd_conf" __line add_slapd_conf \
- --file ${ETC}/default/slapd \
- --line "SLAPD_CONF=${SLAPD_DIR}/slapd.conf" \
- --state present
-
- require="__line/rm_slapd_services" __line add_slapd_services \
- --file ${ETC}/default/slapd \
- --line "SLAPD_SERVICES=\"${slapd_urls}\"" \
- --state present
- ;;
- *)
- # Nothing to do here, move on.
- ;;
-esac
-
-
-if [ -z "${_skip_letsencrypt_cert}" ]; then
- if [ -f "${__object}/parameter/staging" ]; then
- staging="--staging"
- else
- staging=""
- fi
-
- # shellcheck disable=SC2086
- __letsencrypt_cert "${name}" --admin-email "${admin_email}" \
- --renew-hook "cp ${ETC}/letsencrypt/live/${name}/*.pem ${SLAPD_DIR}/sasl2 && chown -R openldap:openldap ${SLAPD_DIR}/sasl2 && service slapd restart" \
- --automatic-renewal ${staging}
-fi
-
-require="__package/${PKG_MAIN}" __directory ${SLAPD_DIR}/slapd.d --state absent
-
-if [ -z "${_skip_letsencrypt_cert}" ]; then
- require="__package/${PKG_MAIN} __letsencrypt_cert/${name}" \
- __file ${SLAPD_DIR}/slapd.conf --owner ${CONF_OWNER} --group ${CONF_GROUP} --mode 644 \
- --source "${ldapconf}"
-else
- require="__package/${PKG_MAIN}" \
- __file ${SLAPD_DIR}/slapd.conf --owner ${CONF_OWNER} --group ${CONF_GROUP} --mode 644 \
- --source "${ldapconf}"
-fi
-
-# Start slapd.conf
-cat << EOF > "${ldapconf}"
-pidfile ${SLAPD_RUN_DIR}/slapd.pid
-argsfile ${SLAPD_RUN_DIR}/slapd.args
-
-TLSCipherSuite ${tls_cipher_suite}
-TLSCertificateFile ${tls_cert}
-TLSCertificateKeyFile ${tls_privkey}
-TLSCACertificateFile ${tls_ca}
-
-disallow bind_anon
-require bind
-security tls=1
-EOF
-
-# Add specified schemas
-for schema in ${schemas}; do
- echo "include ${SLAPD_DIR}/schema/${schema}.schema" >> "${ldapconf}"
-done
-
-# Add specified modules
-echo "modulepath ${SLAPD_MODULE_PATH}" >> "${ldapconf}"
-for module in ${slapd_modules}; do
- echo "moduleload ${module}.la" >> "${ldapconf}"
-done
-
-# Rest of the config
-cat << EOF >> "${ldapconf}"
-loglevel 1024
-
-database mdb
-maxsize 1073741824
-
-suffix "${suffix}"
-directory ${SLAPD_DATA_DIR}
-rootdn "${manager_dn}"
-rootpw "${manager_password_hash}"
-
-index objectClass eq,pres
-index ou,cn,mail,surname,givenname eq,pres,sub
-index uidNumber,gidNumber,loginShell eq,pres
-index uid,memberUid eq,pres,sub
-index nisMapName,nisMapEntry eq,pres,sub
-index entryCSN,entryUUID eq
-
-${extra_config}
-
-serverid ${serverid}
-EOF
-
-# Setup replication
-if [ "${replication}" ]; then
- rid=1;
- for syncrepl in ${syncrepl_hosts}; do
- cat <> "${ldapconf}"
-syncrepl rid=${rid}
- provider=ldap://${syncrepl}
- bindmethod=simple
- starttls=yes
- binddn="${manager_dn}"
- credentials=${syncrepl_credentials}
- searchbase="${syncrepl_searchbase}"
- type=refreshAndPersist
- retry="5 + 5 +"
- interval=00:00:00:05
-EOF
- rid=$((rid + 1))
- done
- cat <> "${ldapconf}"
-mirrormode true
-overlay syncprov
-syncprov-checkpoint 100 5
-syncprov-sessionlog 100
-
-database monitor
-limits dn.exact="${manager_dn}" time=unlimited size=unlimited
-EOF
-fi
diff --git a/cdist/conf/type/__openldap_server/parameter/boolean b/cdist/conf/type/__openldap_server/parameter/boolean
deleted file mode 100644
index 45056fe9..00000000
--- a/cdist/conf/type/__openldap_server/parameter/boolean
+++ /dev/null
@@ -1,2 +0,0 @@
-staging
-replicate
diff --git a/cdist/conf/type/__openldap_server/parameter/default/description b/cdist/conf/type/__openldap_server/parameter/default/description
deleted file mode 100644
index 6d8e37e1..00000000
--- a/cdist/conf/type/__openldap_server/parameter/default/description
+++ /dev/null
@@ -1 +0,0 @@
-Managed by cdist, do not edit manually.
diff --git a/cdist/conf/type/__openldap_server/parameter/default/schema b/cdist/conf/type/__openldap_server/parameter/default/schema
deleted file mode 100644
index 825bdb15..00000000
--- a/cdist/conf/type/__openldap_server/parameter/default/schema
+++ /dev/null
@@ -1,12 +0,0 @@
-corba
-core
-cosine
-duaconf
-dyngroup
-inetorgperson
-java
-misc
-nis
-openldap
-ppolicy
-collective
diff --git a/cdist/conf/type/__openldap_server/parameter/optional b/cdist/conf/type/__openldap_server/parameter/optional
deleted file mode 100644
index 71c64659..00000000
--- a/cdist/conf/type/__openldap_server/parameter/optional
+++ /dev/null
@@ -1,9 +0,0 @@
-description
-syncrepl-credentials
-syncrepl-searchbase
-admin-email
-tls-cipher-suite
-tls-cert
-tls-privkey
-tls-ca
-extra-config
diff --git a/cdist/conf/type/__openldap_server/parameter/optional_multiple b/cdist/conf/type/__openldap_server/parameter/optional_multiple
deleted file mode 100644
index 52a83d5c..00000000
--- a/cdist/conf/type/__openldap_server/parameter/optional_multiple
+++ /dev/null
@@ -1,3 +0,0 @@
-syncrepl-host
-module
-schema
diff --git a/cdist/conf/type/__openldap_server/parameter/required b/cdist/conf/type/__openldap_server/parameter/required
deleted file mode 100644
index ff58158d..00000000
--- a/cdist/conf/type/__openldap_server/parameter/required
+++ /dev/null
@@ -1,5 +0,0 @@
-manager-dn
-manager-password
-manager-password-hash
-serverid
-suffix
diff --git a/cdist/conf/type/__openldap_server/parameter/required_multiple b/cdist/conf/type/__openldap_server/parameter/required_multiple
deleted file mode 100644
index 848b8dc2..00000000
--- a/cdist/conf/type/__openldap_server/parameter/required_multiple
+++ /dev/null
@@ -1 +0,0 @@
-slapd-url
\ No newline at end of file
diff --git a/cdist/conf/type/__openldap_server/singleton b/cdist/conf/type/__openldap_server/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package/explorer/pkgng_exists b/cdist/conf/type/__package/explorer/pkgng_exists
index 6d69ba14..355c5d65 100755
--- a/cdist/conf/type/__package/explorer/pkgng_exists
+++ b/cdist/conf/type/__package/explorer/pkgng_exists
@@ -21,7 +21,7 @@
# Retrieve the status of a package - parsed dpkg output
#
-if [ "$("$__explorer/os")" = "freebsd" ]; then
+if [ "$($__explorer/os)" = "freebsd" ]; then
command -v pkg
fi
diff --git a/cdist/conf/type/__package/manifest b/cdist/conf/type/__package/manifest
index a453c32b..525691bb 100755
--- a/cdist/conf/type/__package/manifest
+++ b/cdist/conf/type/__package/manifest
@@ -1,7 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2013 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -45,7 +44,6 @@ else
suse) type="zypper" ;;
openwrt) type="opkg" ;;
openbsd) type="pkg_openbsd" ;;
- alpine) type="apk" ;;
*)
echo "Don't know how to manage packages on: $os" >&2
exit 1
@@ -57,8 +55,8 @@ state="$(cat "$__object/parameter/state")"
set -- "$@" "$__object_id" "--state" "$state"
cd "$__object/parameter"
-for property in *; do
- if [ "$property" != "type" ] && [ "$property" != "state" ]; then
+for property in $(ls .); do
+ if [ "$property" != "type" -a "$property" != "state" ]; then
set -- "$@" "--$property" "$(cat "$property")"
fi
done
diff --git a/cdist/conf/type/__package/nonparallel b/cdist/conf/type/__package/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_apk/gencode-remote b/cdist/conf/type/__package_apk/gencode-remote
deleted file mode 100755
index 79e3d2b6..00000000
--- a/cdist/conf/type/__package_apk/gencode-remote
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Nico Schottelius (nico-cdist at schottelius.org)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-# Manage packages on Debian and co.
-#
-
-if [ -f "$__object/parameter/name" ]; then
- name="$(cat "$__object/parameter/name")"
-else
- name="$__object_id"
-fi
-
-state_should="$(cat "$__object/parameter/state")"
-state_is="$(cat "$__object/explorer/state")"
-
-# Nothing to be done
-[ "$state_is" = "$state_should" ] && exit 0
-
-case "$state_should" in
- present)
- echo "apk add -q '$name'"
- echo "installed" >> "$__messages_out"
- ;;
- absent)
- echo "apk del -q '$name'"
- echo "removed" >> "$__messages_out"
- ;;
- *)
- echo "Unknown state: $state_should" >&2
- exit 1
- ;;
-esac
diff --git a/cdist/conf/type/__package_apk/man.rst b/cdist/conf/type/__package_apk/man.rst
deleted file mode 100644
index bc2408b4..00000000
--- a/cdist/conf/type/__package_apk/man.rst
+++ /dev/null
@@ -1,55 +0,0 @@
-cdist-type__package_akp(7)
-==========================
-
-NAME
-----
-cdist-type__package_akp - Manage packages with akp
-
-
-DESCRIPTION
------------
-apk is usually used on Alpine to manage packages.
-
-
-REQUIRED PARAMETERS
--------------------
-None
-
-
-OPTIONAL PARAMETERS
--------------------
-name
- If supplied, use the name and not the object id as the package name.
-
-state
- Either "present" or "absent", defaults to "present"
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # Ensure zsh in installed
- __package_apk zsh --state present
-
- # Remove package
- __package_apk apache2 --state absent
-
-
-SEE ALSO
---------
-:strong:`cdist-type__package`\ (7)
-
-
-AUTHORS
--------
-Nico Schottelius
-
-
-COPYING
--------
-Copyright \(C) 2019 Nico Schottelius. 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.
diff --git a/cdist/conf/type/__package_apk/nonparallel b/cdist/conf/type/__package_apk/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_apk/parameter/default/state b/cdist/conf/type/__package_apk/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__package_apk/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__package_apk/parameter/optional b/cdist/conf/type/__package_apk/parameter/optional
deleted file mode 100644
index 1b423dc4..00000000
--- a/cdist/conf/type/__package_apk/parameter/optional
+++ /dev/null
@@ -1,2 +0,0 @@
-name
-state
diff --git a/cdist/conf/type/__package_apt/explorer/state b/cdist/conf/type/__package_apt/explorer/state
index 7ccd6fce..04926b60 100755
--- a/cdist/conf/type/__package_apt/explorer/state
+++ b/cdist/conf/type/__package_apt/explorer/state
@@ -30,9 +30,8 @@ fi
# Except dpkg failing, if package is not known / installed
packages="$(apt-cache showpkg "$name" | sed -e "1,/Reverse Provides:/d" | cut -d ' ' -f 1) $name"
for p in $packages; do
- if dpkg -s "$p" 2>/dev/null | grep --quiet "^Status: install ok installed$" ; then
- version=$(dpkg -s "$p" 2>/dev/null | grep "^Version:" | cut -d ' ' -f 2)
- echo "present $p $version"
+ if [ -n "$(dpkg -s "$p" 2>/dev/null | grep "^Status: install ok installed$")" ]; then
+ echo "present $p"
exit 0
fi
done
diff --git a/cdist/conf/type/__package_apt/gencode-remote b/cdist/conf/type/__package_apt/gencode-remote
index e02564a2..ef313070 100755
--- a/cdist/conf/type/__package_apt/gencode-remote
+++ b/cdist/conf/type/__package_apt/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -29,24 +29,12 @@ fi
state_should="$(cat "$__object/parameter/state")"
-version_param="$__object/parameter/version"
-
-version=""
-if [ -f "$version_param" ]; then
- version="$(cat "$version_param")"
-fi
-
if [ -f "$__object/parameter/target-release" ]; then
target_release="--target-release $(cat "$__object/parameter/target-release")"
else
target_release=""
fi
-if [ -f "$__object/parameter/purge-if-absent" ]; then
- purgeparam="--purge"
-else
- purgeparam=""
-fi
# FIXME: use grep directly, state is a list, not a line!
@@ -54,43 +42,22 @@ state_is="$(cat "$__object/explorer/state")"
case "$state_is" in
present*)
name="$(echo "$state_is" | cut -d ' ' -f 2)"
- version_is="$(echo "$state_is" | cut -d ' ' -f 3)"
state_is="present"
;;
- *)
- version_is=""
- ;;
esac
# Hint if we need to avoid questions at some point:
# DEBIAN_PRIORITY=critical can reduce the number of questions
aptget="DEBIAN_FRONTEND=noninteractive apt-get --quiet --yes --no-install-recommends -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\""
-if [ "$state_is" = "$state_should" ]; then
- if [ -z "$version" ] || [ "$version" = "$version_is" ]; then
- exit 0;
- fi
-fi
+[ "$state_is" = "$state_should" ] && exit 0
case "$state_should" in
present)
- # following is bit ugly, but important hack.
- # due to how cdist config run works, there isn't
- # currently better way to do it :(
- cat << EOF
-if [ ! -f /var/cache/apt/pkgcache.bin ] || [ "\$( stat --format %Y /var/cache/apt/pkgcache.bin )" -lt "\$( date +%s -d '-1 day' )" ]
-then echo apt-get update > /dev/null 2>&1 || true
-fi
-EOF
- if [ -n "$version" ]; then
- name="${name}=${version}"
- fi
- echo "$aptget install $target_release '$name'"
- echo "installed" >> "$__messages_out"
+ echo $aptget install $target_release \"$name\"
;;
absent)
- echo "$aptget remove $purgeparam '$name'"
- echo "removed" >> "$__messages_out"
+ echo $aptget remove \"$name\"
;;
*)
echo "Unknown state: $state_should" >&2
diff --git a/cdist/conf/type/__package_apt/man.rst b/cdist/conf/type/__package_apt/man.rst
index a1691eac..0a7958d4 100644
--- a/cdist/conf/type/__package_apt/man.rst
+++ b/cdist/conf/type/__package_apt/man.rst
@@ -11,9 +11,6 @@ DESCRIPTION
apt-get is usually used on Debian and variants (like Ubuntu) to
manage packages.
-This type will also update package index, if it is older
-than one day, to avoid missing package error messages.
-
REQUIRED PARAMETERS
-------------------
@@ -32,18 +29,6 @@ target-release
Passed on to apt-get install, see apt-get(8).
Essentially allows you to retrieve packages from a different release
-version
- The version of the package to install. Default is to install the version
- chosen by the local package manager.
-
-
-BOOLEAN PARAMETERS
-------------------
-purge-if-absent
- If this parameter is given when state is `absent`, the package is
- purged from the system (using `--purge`).
-
-
EXAMPLES
--------
diff --git a/cdist/conf/type/__package_apt/nonparallel b/cdist/conf/type/__package_apt/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_apt/parameter/boolean b/cdist/conf/type/__package_apt/parameter/boolean
deleted file mode 100644
index f9a0f6b0..00000000
--- a/cdist/conf/type/__package_apt/parameter/boolean
+++ /dev/null
@@ -1 +0,0 @@
-purge-if-absent
diff --git a/cdist/conf/type/__package_dpkg/explorer/pkg_state b/cdist/conf/type/__package_dpkg/explorer/pkg_state
deleted file mode 100644
index d7487ed8..00000000
--- a/cdist/conf/type/__package_dpkg/explorer/pkg_state
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh -e
-
-package=$( basename "$__object_id" )
-
-dpkg_status="$(dpkg-query --show --showformat='${db:Status-Abbrev} ${binary:Package}_${Version}_${Architecture}.deb\n' "${package%%_*}" 2>/dev/null || true)"
-
-if echo "$dpkg_status" | grep -q '^ii'; then
- echo "${dpkg_status##* }"
-fi
-
-
diff --git a/cdist/conf/type/__package_dpkg/gencode-remote b/cdist/conf/type/__package_dpkg/gencode-remote
index 1c271748..d4186e66 100755
--- a/cdist/conf/type/__package_dpkg/gencode-remote
+++ b/cdist/conf/type/__package_dpkg/gencode-remote
@@ -1,7 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Tomas Pospisek (tpo_deb sourcepole.ch)
-# 2018 Thomas Eckert (tom at it-eckert.de)
#
# This file is based on cdist's __file/gencode-local and part of cdist.
#
@@ -27,25 +26,5 @@
# to conflict with dpkg's --force options). But currently we don't
# do any checks or --force'ing.
#
-state=$( cat "$__object/parameter/state" )
-package=$( basename "$__object_id" )
-state_is="$(cat "$__object/explorer/pkg_state")"
-state_should=""
-[ "$state" = "absent" ] || state_should="$package"
-[ "$state_is" = "$state_should" ] && exit 0
-
-case "$state" in
- present)
- echo "dpkg --install /var/cache/apt/archives/$__object_id"
- echo "installed" >> "$__messages_out"
- ;;
- absent)
- [ -f "$__object/parameter/purge-if-absent" ] \
- && action="--purge" \
- || action="--remove"
- echo "dpkg $action ${__object_id%%_*}"
- echo "removed ($action)" >> "$__messages_out"
- ;;
- *) echo "ERROR: unknown state '$state'" >&2 ;;
-esac
+echo "dpkg -i /var/cache/apt/archives/$__object_id"
diff --git a/cdist/conf/type/__package_dpkg/man.rst b/cdist/conf/type/__package_dpkg/man.rst
index 828d8cdd..df2d86a7 100644
--- a/cdist/conf/type/__package_dpkg/man.rst
+++ b/cdist/conf/type/__package_dpkg/man.rst
@@ -12,77 +12,30 @@ This type is used on Debian and variants (like Ubuntu) to
install packages that are provided locally as \*.deb files.
The object given to this type must be the name of the deb package.
-The filename of the deb package has to follow Debian naming conventions, i.e.
-`${binary:Package}_${Version}_${Architecture}.deb` (see `dpkg-query(1)` for
-details).
-OPTIONAL PARAMETERS
--------------------
-state
- `present` or `absent`, defaults to `present`.
-
REQUIRED PARAMETERS
-------------------
source
path to the \*.deb package
-
-BOOLEAN PARAMETERS
-------------------
-purge-if-absent
- If this parameter is given when state is `absent`, the package is
- purged from the system (using `--purge`).
-
-
-EXPLORER
---------
-pkg_state
- Returns the full package name if package is installed, empty otherwise.
-
-
-MESSAGES
---------
-installed
- The deb-file was installed.
-
-removed (--remove)
- The package was removed, keeping config.
-
-removed (--purge)
- The package was removed including config (purged).
-
-
EXAMPLES
--------
.. code-block:: sh
# Install foo and bar packages
- __package_dpkg foo_0.1_all.deb --source /tmp/foo_0.1_all.deb
- __package_dpkg bar_1.4.deb --source $__type/files/bar_1.4.deb
-
- # uninstall baz:
- __package_dpkg baz_1.4_amd64.deb \
- --source $__type/files/baz_1.4_amd64.deb \
- --state "absent"
- # uninstall baz and also purge config-files:
- __package_dpkg baz_1.4_amd64.deb \
- --source $__type/files/baz_1.4_amd64.deb \
- --purge-if-absent \
- --state "absent"
+ __package_dpkg --source /tmp/foo_0.1_all.deb foo_0.1_all.deb
+ __package_dpkg --source $__type/files/bar_1.4.deb bar_1.4.deb
SEE ALSO
--------
-:strong:`cdist-type__package`\ (7), :strong:`dpkg-query`\ (1)
-
+:strong:`cdist-type__package`\ (7)
AUTHORS
-------
-| Tomas Pospisek
-| Thomas Eckert
-
+Tomas Pospisek
COPYING
-------
diff --git a/cdist/conf/type/__package_dpkg/manifest b/cdist/conf/type/__package_dpkg/manifest
old mode 100755
new mode 100644
index 6d228d8e..ff477c2d
--- a/cdist/conf/type/__package_dpkg/manifest
+++ b/cdist/conf/type/__package_dpkg/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Tomas Pospisek (tpo_deb sourcepole.ch)
#
@@ -25,16 +25,10 @@
# do any checks or --force'ing.
-state=$( cat "$__object/parameter/state" )
package_path=$( cat "$__object/parameter/source" )
package=$( basename "$__object_id" )
-state_is="$(cat "$__object/explorer/pkg_state")"
-state_should=""
-
-[ "$state" = "absent" ] || state_should="$package"
-[ "$state_is" = "$state_should" ] && exit 0
__file "/var/cache/apt/archives/$package" \
- --source "$package_path" \
- --state "$state"
+ --source "$package_path" \
+ --state present
diff --git a/cdist/conf/type/__package_dpkg/nonparallel b/cdist/conf/type/__package_dpkg/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_dpkg/parameter/boolean b/cdist/conf/type/__package_dpkg/parameter/boolean
deleted file mode 100644
index f9a0f6b0..00000000
--- a/cdist/conf/type/__package_dpkg/parameter/boolean
+++ /dev/null
@@ -1 +0,0 @@
-purge-if-absent
diff --git a/cdist/conf/type/__package_dpkg/parameter/default/state b/cdist/conf/type/__package_dpkg/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__package_dpkg/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__package_dpkg/parameter/optional b/cdist/conf/type/__package_dpkg/parameter/optional
deleted file mode 100644
index ff72b5c7..00000000
--- a/cdist/conf/type/__package_dpkg/parameter/optional
+++ /dev/null
@@ -1 +0,0 @@
-state
diff --git a/cdist/conf/type/__package_emerge/explorer/pkg_version b/cdist/conf/type/__package_emerge/explorer/pkg_version
index d02b9d6b..7053eaff 100644
--- a/cdist/conf/type/__package_emerge/explorer/pkg_version
+++ b/cdist/conf/type/__package_emerge/explorer/pkg_version
@@ -32,5 +32,4 @@ else
name="$__object_id"
fi
-# shellcheck disable=SC2016
equery -q l -F '$cp $fullversion' "$name" || true
diff --git a/cdist/conf/type/__package_emerge/gencode-remote b/cdist/conf/type/__package_emerge/gencode-remote
old mode 100755
new mode 100644
index e1b85ebb..1199fc72
--- a/cdist/conf/type/__package_emerge/gencode-remote
+++ b/cdist/conf/type/__package_emerge/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Thomas Oettli (otho at sfs.biz)
#
@@ -38,13 +38,13 @@ fi
pkg_version="$(cat "$__object/explorer/pkg_version")"
if [ -z "$pkg_version" ]; then
state_is="absent"
-elif [ -z "$version" ] && [ "$(echo "$pkg_version" | wc -l)" -gt 1 ]; then
- echo "Package name is not unique! The following packages are installed:" >&2
- echo "$pkg_version" >&2
+elif [ -z "$version" -a $(echo "$pkg_version" | wc -l) -gt 1 ]; then
+ echo "Package name is not unique! The following packages are installed:"
+ echo "$pkg_version"
exit 1
-elif [ -n "$version" ] && [ "$(echo "$pkg_version" | cut -d " " -f 1 | sort | uniq | wc -l)" -gt 1 ]; then
- echo "Package name is not unique! The following packages are installed:" >&2
- echo "$pkg_version" >&2
+elif [ -n "$version" -a $(echo "$pkg_version" | cut -d " " -f 1 | sort | uniq | wc -l) -gt 1 ]; then
+ echo "Package name is not unique! The following packages are installed:"
+ echo "$pkg_version"
exit 1
else
state_is="present"
@@ -57,18 +57,16 @@ fi
# Exit if nothing is needed to be done
-[ "$state_is" = "$state_should" ] && { [ -z "$version" ] || [ "$installed_version" = "$version" ]; } && exit 0
-[ "$state_should" = "absent" ] && [ -n "$version" ] && [ "$installed_version" != "$version" ] && exit 0
+[ "$state_is" = "$state_should" ] && ( [ -z "$version" ] || [ "$installed_version" = "$version" ] ) && exit 0
+[ "$state_should" = "absent" ] && [ ! -z "$version" ] && [ "$installed_version" != "$version" ] && exit 0
case "$state_should" in
present)
- echo "emerge '$name' &>/dev/null || exit 1"
- echo "installed" >> "$__messages_out"
+ echo "emerge \"$name\" &>/dev/null || exit 1"
;;
absent)
- echo "emerge -C '$name' &>/dev/null || exit 1"
- echo "removed" >> "$__messages_out"
+ echo "emerge -C \"$name\" &>/dev/null || exit 1"
;;
*)
echo "Unknown state: $state_should" >&2
diff --git a/cdist/conf/type/__package_emerge/nonparallel b/cdist/conf/type/__package_emerge/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_emerge_dependencies/gencode-remote b/cdist/conf/type/__package_emerge_dependencies/gencode-remote
old mode 100755
new mode 100644
index f3e6f76e..0c84e53d
--- a/cdist/conf/type/__package_emerge_dependencies/gencode-remote
+++ b/cdist/conf/type/__package_emerge_dependencies/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
gentoolkit_installed="$(cat "$__object/explorer/gentoolkit_installed")"
flaggie_installed="$(cat "$__object/explorer/flaggie_installed")"
@@ -6,11 +6,10 @@ flaggie_installed="$(cat "$__object/explorer/flaggie_installed")"
if [ "${gentoolkit_installed}" != "true" ]; then
# emerge app-portage/gentoolkit
echo "emerge app-portage/gentoolkit &> /dev/null || exit 1"
- echo "installed app-portage/gentoolkit" >> "$__messages_out"
fi
if [ "${flaggie_installed}" != "true" ]; then
# emerge app-portage/flaggie
echo "emerge app-portage/flaggie &> /dev/null || exit 1"
- echo "installed app-portage/flaggie" >> "$__messages_out"
fi
+
diff --git a/cdist/conf/type/__package_emerge_dependencies/nonparallel b/cdist/conf/type/__package_emerge_dependencies/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_luarocks/explorer/pkg_status b/cdist/conf/type/__package_luarocks/explorer/pkg_status
index e83e8ce6..3eb73298 100755
--- a/cdist/conf/type/__package_luarocks/explorer/pkg_status
+++ b/cdist/conf/type/__package_luarocks/explorer/pkg_status
@@ -28,4 +28,4 @@ else
fi
# Accept luarocks failing if package is not known/installed
-luarocks list "$name" | grep -E -A1 "^$name$" || exit 0
+luarocks list "$name" | egrep -A1 "^$name$" || exit 0
diff --git a/cdist/conf/type/__package_luarocks/gencode-remote b/cdist/conf/type/__package_luarocks/gencode-remote
index d83b3c3a..1046a936 100755
--- a/cdist/conf/type/__package_luarocks/gencode-remote
+++ b/cdist/conf/type/__package_luarocks/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 SwellPath, Inc.
# Christian G. Warden
@@ -42,12 +42,10 @@ fi
case "$state_should" in
present)
- echo "luarocks install '$name'"
- echo "installed" >> "$__messages_out"
+ echo luarocks install \"$name\"
;;
absent)
- echo "luarocks remove '$name'"
- echo "removed" >> "$__messages_out"
+ echo luarocks remove \"$name\"
;;
*)
echo "Unknown state: $state_should" >&2
diff --git a/cdist/conf/type/__package_luarocks/manifest b/cdist/conf/type/__package_luarocks/manifest
old mode 100755
new mode 100644
index 7d8262ca..8e626714
--- a/cdist/conf/type/__package_luarocks/manifest
+++ b/cdist/conf/type/__package_luarocks/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 SwellPath, Inc.
# Christian G. Warden
diff --git a/cdist/conf/type/__package_luarocks/nonparallel b/cdist/conf/type/__package_luarocks/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_opkg/gencode-remote b/cdist/conf/type/__package_opkg/gencode-remote
index 269d5f49..2df31202 100755
--- a/cdist/conf/type/__package_opkg/gencode-remote
+++ b/cdist/conf/type/__package_opkg/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011,2013 Nico Schottelius (nico-cdist at schottelius.org)
# 2012 Giel van Schijndel (giel plus cdist at mortis dot eu)
@@ -43,17 +43,15 @@ esac
case "$state_should" in
present)
if [ "$present" = "notpresent" ]; then
- echo "opkg --verbosity=0 update"
+ echo opkg --verbosity=0 update
fi
- echo "opkg --verbosity=0 install '$name'"
- echo "installed" >> "$__messages_out"
+ echo opkg --verbosity=0 install \"$name\"
;;
absent)
- echo "opkg --verbosity=0 remove '$name'"
- echo "removed" >> "$__messages_out"
+ echo opkg --verbosity=0 remove \"$name\"
;;
*)
- echo "Unknown state: ${state_should}" >&2
+ echo "Unknown state: $state" >&2
exit 1
;;
esac
diff --git a/cdist/conf/type/__package_opkg/nonparallel b/cdist/conf/type/__package_opkg/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_pacman/gencode-remote b/cdist/conf/type/__package_pacman/gencode-remote
index 2e076ec3..da1ac7c2 100755
--- a/cdist/conf/type/__package_pacman/gencode-remote
+++ b/cdist/conf/type/__package_pacman/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -45,12 +45,10 @@ fi
case "$state_should" in
present)
- echo "pacman --needed --noconfirm --noprogressbar -S '$name'"
- echo "installed" >> "$__messages_out"
+ echo pacman --needed --noconfirm --noprogressbar -S \"$name\"
;;
absent)
- echo "pacman --noconfirm --noprogressbar -R '$name'"
- echo "removed" >> "$__messages_out"
+ echo pacman --noconfirm --noprogressbar -R \"$name\"
;;
*)
echo "Unknown state: $state_should" >&2
diff --git a/cdist/conf/type/__package_pacman/nonparallel b/cdist/conf/type/__package_pacman/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_pip/gencode-remote b/cdist/conf/type/__package_pip/gencode-remote
old mode 100755
new mode 100644
index dcc4fdf9..ccfdb92b
--- a/cdist/conf/type/__package_pip/gencode-remote
+++ b/cdist/conf/type/__package_pip/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
# 2016 Darko Poljak (darko.poljak at gmail.com)
@@ -53,20 +53,18 @@ case "$state_should" in
present)
if [ "$runas" ]
then
- echo "su -c '$pip install -q $name' $runas"
+ echo "su -c \"$pip install -q $name\" $runas"
else
echo $pip install -q "$name"
fi
- echo "installed" >> "$__messages_out"
;;
absent)
if [ "$runas" ]
then
- echo "su -c '$pip uninstall -q -y $name' $runas"
+ echo "su -c \"$pip uninstall -q -y $name\" $runas"
else
echo $pip uninstall -q -y "$name"
fi
- echo "removed" >> "$__messages_out"
;;
*)
echo "Unknown state: $state_should" >&2
diff --git a/cdist/conf/type/__package_pip/nonparallel b/cdist/conf/type/__package_pip/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_pkg_freebsd/explorer/pkg_version b/cdist/conf/type/__package_pkg_freebsd/explorer/pkg_version
index 0a1ab75c..1335ba79 100755
--- a/cdist/conf/type/__package_pkg_freebsd/explorer/pkg_version
+++ b/cdist/conf/type/__package_pkg_freebsd/explorer/pkg_version
@@ -30,7 +30,7 @@ fi
# Don't produce "no pkgs installed" output -- breaks things
PKG_OUTPUT=$(pkg_info 2>&1)
if [ ! "$PKG_OUTPUT" = "pkg_info: no packages installed" ]; then
- printf "%s" "$(echo "$PKG_OUTPUT" \
+ echo -n "$(echo "$PKG_OUTPUT" \
| awk '{print $1}' \
| sed 's/^\(.*\)-\([^-]*\)$/name:\1 ver:\2/g' \
| grep "name:$name ver:" \
diff --git a/cdist/conf/type/__package_pkg_freebsd/gencode-remote b/cdist/conf/type/__package_pkg_freebsd/gencode-remote
index 3f88f6bc..5866a0a8 100755
--- a/cdist/conf/type/__package_pkg_freebsd/gencode-remote
+++ b/cdist/conf/type/__package_pkg_freebsd/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Jake Guffey (jake.guffey at eprotex.com)
#
@@ -33,13 +33,12 @@ assert () # If condition false,
lineno=$2
- if [ ! "$1" ]
+ if [ ! $1 ]
then
echo "Assertion failed: \"$1\""
- # shellcheck disable=SC2039
echo "File \"$0\", line $lineno, called by $(caller 0)"
exit $E_ASSERT_FAILED
- fi
+ fi
}
# Debug
@@ -67,7 +66,7 @@ cmd=""
# FIXME: This is ugly.
execcmd(){
# Set the PACKAGESITE if we're ADDing a new package
- if [ "$1" = "add" ] && [ -n "$pkgsite" ]; then
+ if [ "$1" = "add" -a -n "$pkgsite" ]; then
# Use http.../All/ if we know the exact version we want, use .../Latest/ otherwise
pkgsite="export PACKAGESITE=${pkgsite}"
[ -n "$version" ] && pkgsite="${pkgsite}/All/" || pkgsite="${pkgsite}/Latest/"
@@ -89,7 +88,6 @@ if [ -n "$curr_version" ]; then # PKG *is* installed
cmd="${rm_cmd} ${name}-${curr_version}"
fi
execcmd "remove" "${cmd}"
- echo "removed" >> "$__messages_out"
exit 0
else # Should be installed
if [ -n "$version" ]; then # Want a specific version
@@ -97,13 +95,11 @@ if [ -n "$curr_version" ]; then # PKG *is* installed
exit 0
else # Current version is wrong, fix
#updatepkg "$name" "$version"
- # shellcheck disable=SC2039
assert "! ${version} = ${curr_version}" $LINENO
cmd="${rm_cmd} ${name}-${curr_version}"
execcmd "remove" "${cmd}"
cmd="${add_cmd} -r ${name}-${version}"
execcmd "add" "${cmd}"
- echo "installed" >> "$__messages_out"
fi
else # Don't care what version to use
exit 0
@@ -122,7 +118,6 @@ else # PKG *isn't* installed
cmd="${cmd}-${version}"
fi
execcmd "add" "${cmd}"
- echo "installed" >> "$__messages_out"
exit 0
fi
fi
diff --git a/cdist/conf/type/__package_pkg_freebsd/nonparallel b/cdist/conf/type/__package_pkg_freebsd/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_pkg_openbsd/explorer/pkg_state b/cdist/conf/type/__package_pkg_openbsd/explorer/pkg_state
deleted file mode 100755
index 9cd17787..00000000
--- a/cdist/conf/type/__package_pkg_openbsd/explorer/pkg_state
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2018, Takashi Yoshi
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-# Retrieve the status of a package - parsed pkg_info output
-#
-
-if [ -f "${__object}/parameter/name" ]
-then
- pkgid="$(cat "${__object}/parameter/name")"
-else
- pkgid="${__object_id}"
-fi
-
-if [ -f "${__object}/parameter/version" ]
-then
- pkgid="${pkgid}-$(cat "${__object}/parameter/version")"
-fi
-
-if [ -f "${__object}/parameter/flavor" ]
-then
- # If a flavor but no version is given we need to add another -,
- # otherwise pkg_info confuses the flavor with the version.
- [ -f "${__object}/parameter/version" ] || pkgid="${pkgid}-"
-
- pkgid="${pkgid}-$(cat "${__object}/parameter/flavor")"
-fi
-
-
-pkg_info -q -I "inst:${pkgid}" >/dev/null 2>&1 \
- && echo 'present' || echo 'absent'
-
-exit 0
diff --git a/cdist/conf/type/__package_apk/explorer/state b/cdist/conf/type/__package_pkg_openbsd/explorer/pkg_version
similarity index 70%
rename from cdist/conf/type/__package_apk/explorer/state
rename to cdist/conf/type/__package_pkg_openbsd/explorer/pkg_version
index b477ca7c..bc23a85d 100755
--- a/cdist/conf/type/__package_apk/explorer/state
+++ b/cdist/conf/type/__package_pkg_openbsd/explorer/pkg_version
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# 2019 Nico Schottelius (nico-cdist at schottelius.org)
+# 2011 Andi Brönnimann (andi-cdist at v-net.ch)
#
# This file is part of cdist.
#
@@ -18,7 +18,7 @@
# along with cdist. If not, see .
#
#
-# Retrieve the status of a package - parsed apk output
+# Retrieve the status of a package - parsed dpkg output
#
if [ -f "$__object/parameter/name" ]; then
@@ -27,12 +27,5 @@ else
name="$__object_id"
fi
-# Remove the @.. repo tag for finding out whether it is installed
-# f.i. pass@testing => pass
-name="$(echo "$name" | sed 's/@.*//')"
-
-if [ "$(apk list -I "$name")" ]; then
- echo present
-else
- echo absent
-fi
+#TODO: Is there a better way?
+pkg_info | grep "$name" | sed 's .*\(-[0-9.][0-9.]*\).* \1 ' | sed 's/-//'
diff --git a/cdist/conf/type/__package_pkg_openbsd/gencode-remote b/cdist/conf/type/__package_pkg_openbsd/gencode-remote
index 5a21ce12..5ba5f7ef 100755
--- a/cdist/conf/type/__package_pkg_openbsd/gencode-remote
+++ b/cdist/conf/type/__package_pkg_openbsd/gencode-remote
@@ -1,8 +1,7 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Andi Brönnimann (andi-cdist at v-net.ch)
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
-# 2018 Takashi Yoshi
#
# This file is part of cdist.
#
@@ -23,96 +22,97 @@
# Manage packages with pkg on OpenBSD
#
-os_version=$(cat "${__global}/explorer/os_version")
-machine=$(cat "${__global}/explorer/machine")
+# Debug
+# exec >&2
+# set -x
-if [ -f "${__object}/parameter/version" ]; then
- version=$(cat "${__object}/parameter/version")
+os_version="$(cat "$__global/explorer/os_version")"
+machine="$(cat "$__global/explorer/machine")"
+
+if [ -f "$__object/parameter/version" ]; then
+ version="$(cat "$__object/parameter/version")"
fi
-if [ -f "${__object}/parameter/flavor" ]; then
- flavor=$(cat "${__object}/parameter/flavor")
+if [ -f "$__object/parameter/flavor" ]; then
+ flavor="$(cat "$__object/parameter/flavor")"
fi
-# Do not show progress bar
-pkgopts='-x'
+# do not show progress bar
+pkgopts="-x"
-name="${__object_id}"
-if [ -f "${__object}/parameter/name" ]; then
- name=$(cat "${__object}/parameter/name")
-fi
-
-if [ -n "${version}" ] && [ -n "${flavor}" ]; then
- pkgid="${name}-${version}-${flavor}"
-elif [ -n "${version}" ]; then
- pkgid="${name}-${version}"
-elif [ -f "${__object}/parameter/flavor" ]; then
- pkgid="${name}--${flavor}"
+if [ -f "$__object/parameter/name" ]; then
+ name="$__object/parameter/name"
else
- pkgid="${name}"
+ name="$__object_id"
fi
-state_should=$(cat "${__object}/parameter/state")
-
-if [ -f "${__object}/parameter/pkg_path" ]; then
- pkg_path=$(cat "${__object}/parameter/pkg_path")
+if [ -n "$version" -a -n "$flavor" ]; then
+ pkgid="$name-$version-$flavor"
+elif [ -n "$version" ]; then
+ pkgid="$name-$version"
+elif [ -n "$flavor" ]; then
+ pkgid="$name--$flavor"
else
- has_installurl=$(cat "${__object}/explorer/has_installurl")
- if [ 'yes' != "${has_installurl}" ]; then
- # There is no default PKG_PATH, try to provide one
- pkg_path="ftp://ftp.openbsd.org/pub/OpenBSD/${os_version}/packages/${machine}/"
- fi
+ pkgid="$name"
fi
-state_is=$(cat "${__object}/explorer/pkg_state")
-[ "${state_is}" = "${state_should}" ] && exit 0
+state_should="$(cat "$__object/parameter/state")"
-case "${state_should}" in
- present)
- if [ -n "${pkg_path}" ]; then
- echo "export PKG_PATH='${pkg_path}'"
- fi
+pkg_version="$(cat "$__object/explorer/pkg_version")"
- # Use this because pkg_add doesn't properly handle errors
- cat <&1 || true)
+if [ -f "$__object/parameter/pkg_path" ]; then
+ pkg_path="$(cat "$__object/parameter/pkg_path")"
+else
+ pkg_path="ftp://ftp.openbsd.org/pub/OpenBSD/$os_version/packages/$machine/"
+fi
-if ! pkg_info -q -I 'inst:${pkgid}' | grep -q '^${name}-${version}.*${flavor}$' 2>/dev/null
-then
- # We didn't find the package in the list of 'installed packages', so it failed.
- # This is necessary because pkg_add doesn't return properly
-
- if [ -z "\${status}" ]; then
- status='Failed to add package, uncaught exception.'
- fi
- echo "Error: \${status}" >&2
- exit 1
+if [ "$pkg_version" ]; then
+ state_is="present"
+else
+ state_is="absent"
fi
-EOF
- echo 'installed' >> "${__messages_out}"
- ;;
- absent)
- # Use this because pkg_delete doesn't properly handle errors
- cat <&1 || true)
+[ "$state_is" = "$state_should" ] && exit 0
-if pkg_info -q -I 'inst:${pkgid}' | grep -q '^${name}-${version}.*${flavor}' 2>/dev/null
-then
- # We found the package in the list of 'installed packages'.
- # This would indicate that pkg_delete failed, send the output of pkg_delete
+case "$state_should" in
+ present)
+ # use this because pkg_add doesn't properly handle errors
+ cat << eof
+export PKG_PATH="$pkg_path"
+status=\$(pkg_add "$pkgopts" "$pkgid" 2>&1)
+pkg_info | grep "^${name}.*${version}.*${flavor}" > /dev/null 2>&1
- if [ -z "\${status}" ]; then
- status='Failed to remove package, uncaught exception.'
- fi
- echo "Error: \${status}" >&2
- exit 1
+# We didn't find the package in the list of 'installed packages', so it failed
+# This is necessary because pkg_add doesn't return properly
+if [ \$? -ne 0 ]; then
+ if [ -z "\${status}" ]; then
+ status="Failed to add package, uncaught exception."
+ fi
+ echo "Error: \$status"
+ exit 1
fi
-EOF
- echo 'removed' >> "${__messages_out}"
- ;;
- *)
- echo "Unknown state: ${state_should}" >&2
+eof
+ ;;
+
+ absent)
+ # use this because pkg_add doesn't properly handle errors
+ cat << eof
+status=\$(pkg_delete "$pkgopts" "$pkgid")
+pkg_info | grep "^${name}.*${version}.*${flavor}" > /dev/null 2>&1
+
+# We found the package in the list of 'installed packages'
+# This would indicate that pkg_delete failed, send the output of pkg_delete
+if [ \$? -eq 0 ]; then
+ if [ -z "\${status}" ]; then
+ status="Failed to remove package, uncaught exception."
+ fi
+ echo "Error: \$status"
+ exit 1
+fi
+eof
+ ;;
+ *)
+ echo "Unknown state: $state_should" >&2
exit 1
- ;;
+ ;;
esac
diff --git a/cdist/conf/type/__package_pkg_openbsd/nonparallel b/cdist/conf/type/__package_pkg_openbsd/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_pkgng_freebsd/explorer/pkg_version b/cdist/conf/type/__package_pkgng_freebsd/explorer/pkg_version
index 92ce0623..947857b9 100755
--- a/cdist/conf/type/__package_pkgng_freebsd/explorer/pkg_version
+++ b/cdist/conf/type/__package_pkgng_freebsd/explorer/pkg_version
@@ -29,7 +29,7 @@ fi
# Don't produce "no pkgs installed" output -- breaks things
PKG_OUTPUT=$(pkg info 2>&1)
-printf "%s" "$(echo "$PKG_OUTPUT" \
+echo -n "$(echo "$PKG_OUTPUT" \
| awk '{print $1}' \
| sed 's/^\(.*\)-\([^-]*\)$/name:\1 ver:\2/g' \
| grep "name:$name ver:" \
diff --git a/cdist/conf/type/__package_pkgng_freebsd/gencode-remote b/cdist/conf/type/__package_pkgng_freebsd/gencode-remote
index dd36efda..3c3e41e9 100755
--- a/cdist/conf/type/__package_pkgng_freebsd/gencode-remote
+++ b/cdist/conf/type/__package_pkgng_freebsd/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Jake Guffey (jake.guffey at eprotex.com)
#
@@ -52,20 +52,17 @@ cmd=""
# Parms: $1 -- mode, "rm", "add", or "upg"
# $2 -- the command to be echoed
execcmd(){
- _cmd=""
+ local _cmd=""
case "$1" in
add)
_cmd="${add_cmd} $2"
- echo "installed" >> "$__messages_out"
;;
rm)
_cmd="${rm_cmd} $2"
- echo "removed" >> "$__messages_out"
;;
upg)
_cmd="${upg_cmd} $2"
- echo "installed" >> "$__messages_out"
;;
*)
printf "Error. Don't understand command: %s" "$1" >&2
@@ -73,7 +70,7 @@ execcmd(){
;;
esac
- echo "$_cmd >/dev/null 2>&1" # Silence the output of the command
+ echo "$_cmd 2>&- >&-" # Silence the output of the command
echo "status=\$?"
echo "if [ \"\$status\" -ne \"0\" ]; then"
echo " echo \"Error: ${_cmd} exited nonzero with \$status\"'!' >&2"
@@ -98,7 +95,7 @@ if [ -n "$curr_version" ]; then # PKG *is* installed
if [ "$upgrade" = "true" ]; then
execcmd "upg" "${cmd}"
else
- printf 'Version %s is already installed and pkg-ng cannot upgrade directly to version %s.\nTo upgrade to the latest version, use the --upgrade flag.\n' "$curr_version" "$version" >&2
+ printf "Version %s is already installed and pkg-ng can't upgrade directly to version %s.\nTo upgrade to the latest version, use the --upgrade flag.\n" "$curr_version" "$version" >&2
exit 1
fi
# PKG is supposed to be installed to the latest version
diff --git a/cdist/conf/type/__package_pkgng_freebsd/nonparallel b/cdist/conf/type/__package_pkgng_freebsd/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_rubygem/gencode-remote b/cdist/conf/type/__package_rubygem/gencode-remote
index abb40653..dc755ad3 100755
--- a/cdist/conf/type/__package_rubygem/gencode-remote
+++ b/cdist/conf/type/__package_rubygem/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Chase Allen James
#
@@ -39,12 +39,10 @@ fi
case "$state_should" in
present)
- echo "gem install '$name' --no-ri --no-rdoc"
- echo "installed" >> "$__messages_out"
+ echo gem install \"$name\" --no-ri --no-rdoc
;;
absent)
- echo "gem uninstall '$name'"
- echo "removed" >> "$__messages_out"
+ echo gem uninstall \"$name\"
;;
*)
echo "Unknown state: $state_should" >&2
diff --git a/cdist/conf/type/__package_rubygem/nonparallel b/cdist/conf/type/__package_rubygem/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_update_index/explorer/currage b/cdist/conf/type/__package_update_index/explorer/currage
deleted file mode 100644
index 8eadaf53..00000000
--- a/cdist/conf/type/__package_update_index/explorer/currage
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/sh
-#
-# 2018 Thomas Eckert (tom at it-eckert.de)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-
-type="$("$__type_explorer/type")"
-
-case "$type" in
- apt)
- if [ -f "/var/cache/apt/pkgcache.bin" ]; then
- echo $(($(date +"%s")-$(stat --format '%Y' /var/cache/apt/pkgcache.bin)))
- else
- echo -- -1
- fi
- ;;
- pacman)
- if [ -d "/var/lib/pacman/sync" ]; then
- echo $(($(date +"%s")-$(stat --format '%Y' /var/lib/pacman/sync)))
- else
- echo -- -1
- fi
- ;;
- alpine)
- echo -- -1
- ;;
- *) echo "Your specified type ($type) is currently not supported." >&2
- echo "Please contribute an implementation for it if you can." >&2
- ;;
-esac
diff --git a/cdist/conf/type/__package_update_index/explorer/type b/cdist/conf/type/__package_update_index/explorer/type
deleted file mode 100644
index c98e1e67..00000000
--- a/cdist/conf/type/__package_update_index/explorer/type
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/sh
-#
-# 2018 Stu Zhao (z12y12l12 at gmail.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-
-if [ -f "$__object/parameter/type" ]; then
- cat "$__object/parameter/type"
-else
- # By default determine package manager based on operating system
- os="$("$__explorer/os")"
- case "$os" in
- amazon|scientific|centos|fedora|redhat) echo "yum" ;;
- debian|ubuntu|devuan) echo "apt" ;;
- archlinux) echo "pacman" ;;
- alpine) echo "apk" ;;
- *)
- echo "Don't know how to manage packages on: $os" >&2
- exit 1
- ;;
- esac
-fi
diff --git a/cdist/conf/type/__package_update_index/gencode-remote b/cdist/conf/type/__package_update_index/gencode-remote
index 803468b5..bf6a532d 100755
--- a/cdist/conf/type/__package_update_index/gencode-remote
+++ b/cdist/conf/type/__package_update_index/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Ricardo Catalinas Jiménez (jimenezrick at gmail.com)
#
@@ -21,39 +21,30 @@
# Update the package index with the appropriate package manager
#
-type=$(cat "$__object/explorer/type")
-currage="$(cat "$__object/explorer/currage")"
-if [ -f "$__object/parameter/maxage" ]; then
- maxage="$(cat "$__object/parameter/maxage")"
-fi
+type="$__object/parameter/type"
-if [ -n "$maxage" ]; then
- if [ "$type" != "apt" ] && [ "$type" != "pacman" ]; then
- echo "ERROR: \"--maxage\" only supported for \"apt\" or \"pacman\" pkg-manager." >&2
- exit 1
- # do not exit if no value found (represented as -1)
- elif [ "$currage" -ne -1 ] && [ "$currage" -lt "$maxage" ]; then
- exit 0 # no need to update
- fi
+if [ -f "$type" ]; then
+ type="$(cat "$type")"
+else
+ # By default determine package manager based on operating system
+ os="$(cat "$__global/explorer/os")"
+ case "$os" in
+ amazon|scientific|centos|fedora|redhat) type="yum" ;;
+ debian|ubuntu|devuan) type="apt" ;;
+ archlinux) type="pacman" ;;
+ *)
+ echo "Don't know how to manage packages on: $os" >&2
+ exit 1
+ ;;
+ esac
fi
-
case "$type" in
yum) ;;
- apt)
- echo "apt-get --quiet update"
- echo "apt-cache updated (age was: $currage)" >> "$__messages_out"
- ;;
- pacman)
- echo "pacman --noprogressbar --sync --refresh"
- echo "pacman package database synced (age was: $currage)" >> "$__messages_out"
- ;;
- apk)
- echo "apk update"
- echo "apk package database updated." >>"$__messages_out"
- ;;
+ apt) echo "apt-get --quiet update" ;;
+ pacman) echo "pacman --noprogressbar --sync --refresh" ;;
*)
- echo "Don't know how to manage packages for type: $type" >&2
+ echo "Don't know how to manage packages on: $os" >&2
exit 1
;;
esac
diff --git a/cdist/conf/type/__package_update_index/man.rst b/cdist/conf/type/__package_update_index/man.rst
index 3cd787b9..454aa05b 100644
--- a/cdist/conf/type/__package_update_index/man.rst
+++ b/cdist/conf/type/__package_update_index/man.rst
@@ -27,16 +27,6 @@ type
* yum for Red Hat
* pacman for Arch Linux
-maxage
- Available for package manager apt and pacman, max time in seconds since
- last update. Repo update is skipped if maxage is not reached yet.
-
-MESSAGES
---------
-apt-cache updated (age was: currage)
- apt-cache was updated (run of `apt-get update`). `currage` is the time
- in seconds since the previous run.
-
EXAMPLES
--------
@@ -49,17 +39,10 @@ EXAMPLES
# Force use of a specific package manager
__package_update_index --type apt
- # Only update every hour:
- __package_update_index --maxage 3600 --type apt
-
- # same as above (on apt-type systems):
- __package_update_index --maxage 3600
AUTHORS
-------
-| Ricardo Catalinas Jiménez
-| Thomas Eckert
-| Stu Zhao
+Ricardo Catalinas Jiménez
COPYING
diff --git a/cdist/conf/type/__package_update_index/nonparallel b/cdist/conf/type/__package_update_index/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_update_index/parameter/optional b/cdist/conf/type/__package_update_index/parameter/optional
index 7a0be716..aa80e646 100644
--- a/cdist/conf/type/__package_update_index/parameter/optional
+++ b/cdist/conf/type/__package_update_index/parameter/optional
@@ -1,2 +1 @@
type
-maxage
diff --git a/cdist/conf/type/__package_upgrade_all/gencode-remote b/cdist/conf/type/__package_upgrade_all/gencode-remote
index 38aa001e..3e25f45f 100755
--- a/cdist/conf/type/__package_upgrade_all/gencode-remote
+++ b/cdist/conf/type/__package_upgrade_all/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Ricardo Catalinas Jiménez (jimenezrick at gmail.com)
#
@@ -53,8 +53,8 @@ case "$type" in
;;
apt)
if [ -f "$apt_dist_upgrade" ]
- then echo "$aptget dist-upgrade"
- else echo "$aptget upgrade"
+ then echo $aptget dist-upgrade
+ else echo $aptget upgrade
fi
if [ -f "$apt_clean" ]
diff --git a/cdist/conf/type/__package_upgrade_all/nonparallel b/cdist/conf/type/__package_upgrade_all/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_yum/explorer/pkg_version b/cdist/conf/type/__package_yum/explorer/pkg_version
index b81b0fe9..fb3b7753 100755
--- a/cdist/conf/type/__package_yum/explorer/pkg_version
+++ b/cdist/conf/type/__package_yum/explorer/pkg_version
@@ -27,4 +27,4 @@ else
name="$__object_id"
fi
-rpm -q "$name" 2>/dev/null || rpm -q --whatprovides "$name" 2>/dev/null || true
+rpm -q --whatprovides "$name" 2>/dev/null || true
diff --git a/cdist/conf/type/__package_yum/gencode-remote b/cdist/conf/type/__package_yum/gencode-remote
index b52953f6..08c5c2b5 100755
--- a/cdist/conf/type/__package_yum/gencode-remote
+++ b/cdist/conf/type/__package_yum/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2014 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -43,15 +43,10 @@ else
opts="--assumeyes --quiet"
fi
-not_provided="^no package provides"
-not_installed='is not installed$'
+not_installed="^no package provides"
-if grep -q "$not_provided" "$__object/explorer/pkg_version"; then
- if grep -q "$not_installed" "$__object/explorer/pkg_version"; then
- state_is="absent"
- else
- state_is="present"
- fi
+if grep -q "$not_installed" "$__object/explorer/pkg_version"; then
+ state_is="absent"
else
state_is="present"
fi
@@ -60,12 +55,10 @@ fi
case "$state_should" in
present)
- echo "yum $opts install '$install_name'"
- echo "installed" >> "$__messages_out"
+ echo yum $opts install \"$install_name\"
;;
absent)
- echo "yum $opts remove '$name'"
- echo "removed" >> "$__messages_out"
+ echo yum $opts remove \"$name\"
;;
*)
echo "Unknown state: $state_should" >&2
diff --git a/cdist/conf/type/__package_yum/nonparallel b/cdist/conf/type/__package_yum/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__package_zypper/gencode-remote b/cdist/conf/type/__package_zypper/gencode-remote
old mode 100755
new mode 100644
index e45dd9ff..d9f16f8d
--- a/cdist/conf/type/__package_zypper/gencode-remote
+++ b/cdist/conf/type/__package_zypper/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
# 2013 Daniel Heule (hda at sfs.biz)
@@ -61,18 +61,15 @@ case "$state_should" in
present)
if [ -z "$version_should" ]; then
[ "$state_is" = "present" ] && exit 0 # if state is present, we dont need to do anything
- echo "zypper $globalopts install --type '$ptype' --auto-agree-with-licenses '$name' >/dev/null"
- echo "removed" >> "$__messages_out"
+ echo zypper $globalopts install --type \"$ptype\" --auto-agree-with-licenses \"$name\" ">/dev/null"
else
[ "$state_is" = "present" ] && [ "$version_should" = "$version_is" ] && exit 0 # if state is present and version is correct, we dont need to do anything
- echo "zypper $globalopts install --oldpackage --type '$ptype' --auto-agree-with-licenses '$name' = '$version_should' >/dev/null"
- echo "installed" >> "$__messages_out"
+ echo zypper $globalopts install --oldpackage --type \"$ptype\" --auto-agree-with-licenses \"$name\" = \"$version_should\" ">/dev/null"
fi
;;
absent)
[ "$state_is" = "absent" ] && exit 0 # if state is absent, we dont need to do anything
- echo "zypper $globalopts remove --type '$ptype' '$name' >/dev/null"
- echo "removed" >> "$__messages_out"
+ echo zypper $globalopts remove --type \"$ptype\" \"$name\" ">/dev/null"
;;
*)
echo "Unknown state: $state_should" >&2
diff --git a/cdist/conf/type/__package_zypper/nonparallel b/cdist/conf/type/__package_zypper/nonparallel
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__pacman_conf/manifest b/cdist/conf/type/__pacman_conf/manifest
old mode 100755
new mode 100644
index a43f18a1..b9679577
--- a/cdist/conf/type/__pacman_conf/manifest
+++ b/cdist/conf/type/__pacman_conf/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Dominique Roux (dominique.roux4 at gmail.com)
#
@@ -59,13 +59,13 @@ if [ "${file}" ]; then
if [ "${state}" = "present" ]; then
- require="__file/${sec_path}/plain_file_${file}" __key_value "${file}_${key}" \
- --file "${sec_path}/plain_file_${file}" --key "${key}" --value "${value}" --delimiter ' = '
+ require="__file/${sec_path}/plain_file_${file}" __key_value ${file}_${key}\
+ --file ${sec_path}/plain_file_${file} --key ${key} --value ${value} --delimiter ' = '
exit 0
elif [ "${state}" = "absent" ]; then
- require="__file/${sec_path}/plain_file_${file}" __key_value "${file}_${key}" \
+ require="__file/${sec_path}/plain_file_${file}" __key_value ${file}_${key}\
--state absent
exit 0
@@ -87,19 +87,19 @@ eof
if [ "${MATCH}" -eq 1 ]; then
if [ "${value}" = "on" ]; then
- require="__file/${sec_path}/${section}" __line "${key}_${value}" \
- --file "${sec_path}/${section}" --line "${key}"
+ require="__file/${sec_path}/${section}" __line ${key}_${value}\
+ --file ${sec_path}/${section} --line ${key}
elif [ "${value}" = "off" ]; then
- require="__file/${sec_path}/${section}" __line "${key}_${value}" \
- --file "${sec_path}/${section}" --line "${key}" --state absent
+ require="__file/${sec_path}/${section}" __line ${key}_${value}\
+ --file ${sec_path}/${section} --line ${key} --state absent
fi
else
contains_element "${key}" "${allowed_option_keys}"
if [ "${MATCH}" -eq 1 ]; then
- require="__file/${sec_path}/${section}" __key_value "${section}_${key}" \
- --file "${sec_path}/${section}" --key "${key}" --value "${value}" --delimiter ' = '
+ require="__file/${sec_path}/${section}" __key_value ${section}_${key}\
+ --file ${sec_path}/${section} --key ${key} --value ${value} --delimiter ' = '
else
echo "Key: ${key} is not valid. Have a look at man pacman.conf" >&2
fi
@@ -118,12 +118,12 @@ eof
exit
fi
- require="__file/${sec_path}/repo_${section}" __key_value "${section}_${key}" \
- --file "${sec_path}/repo_${section}" --key "${key}" --value "${value}" --delimiter ' = '
+ require="__file/${sec_path}/repo_${section}" __key_value ${section}_${key}\
+ --file ${sec_path}/repo_${section} --key ${key} --value ${value} --delimiter ' = '
elif [ "${state}" = "absent" ]; then
- require="__file/${sec_path}/repo_${section}" __key_value "${section}_${key}" \
+ require="__file/${sec_path}/repo_${section}" __key_value ${section}_${key}\
--state absent
else
diff --git a/cdist/conf/type/__pacman_conf_integrate/manifest b/cdist/conf/type/__pacman_conf_integrate/manifest
old mode 100755
new mode 100644
index 0ce0bee5..1d02f3b3
--- a/cdist/conf/type/__pacman_conf_integrate/manifest
+++ b/cdist/conf/type/__pacman_conf_integrate/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Dominique Roux (dominique.roux4 at gmail.com
#
@@ -18,14 +18,16 @@
# along with cdist. If not, see .
#
-state=$(cat "$__object/parameter/state" 2>/dev/null)
+state=$(cat $__object/parameter/state 2>/dev/null)
+
+path="/etc/"
if [ "${state}" = "present" ]; then
__file /etc/pacman.conf\
- --owner root --group root --mode 644 --source "$__type/files/pacman.conf.cdist"
+ --owner root --group root --mode 644 --source $__type/files/pacman.conf.cdist
__file /etc/pacman.d/options\
- --owner root --group root --mode 644 --source "$__type/files/options"
+ --owner root --group root --mode 644 --source $__type/files/options
__file /etc/pacman.d/repo_empty_placeholder\
--owner root --group root --mode 644
@@ -36,10 +38,10 @@ if [ "${state}" = "present" ]; then
elif [ "${state}" = "absent" ]; then
__file /etc/pacman.conf\
- --owner root --group root --mode 644 --source "$__type/files/pacman.conf.pacman"
+ --owner root --group root --mode 644 --source $__type/files/pacman.conf.pacman
__file /etc/pacman.d/mirrorlist\
- --owner root --group root --mode 644 --source "$__type/files/mirrorlist"
+ --owner root --group root --mode 644 --source $__type/files/mirrorlist
__file /etc/pacman.d/options\
--state absent
diff --git a/cdist/conf/type/__pf_apply/deprecated b/cdist/conf/type/__pf_apply/deprecated
deleted file mode 100644
index 36cfed90..00000000
--- a/cdist/conf/type/__pf_apply/deprecated
+++ /dev/null
@@ -1 +0,0 @@
-Consider moving to __pf_apply_anchor. Get in touch if you need __pf_apply.
diff --git a/cdist/conf/type/__pf_apply/explorer/rcvar b/cdist/conf/type/__pf_apply/explorer/rcvar
index 7c8d535f..20e9dfcc 100755
--- a/cdist/conf/type/__pf_apply/explorer/rcvar
+++ b/cdist/conf/type/__pf_apply/explorer/rcvar
@@ -29,7 +29,7 @@
RC="/etc/rc.conf"
PFCONF="$(grep '^pf_rules=' ${RC} | cut -d= -f2 | sed 's/"//g')"
-echo "${PFCONF:-"/etc/pf.conf"}"
+echo ${PFCONF:-"/etc/pf.conf"}
# Debug
#set +x
diff --git a/cdist/conf/type/__pf_apply/gencode-remote b/cdist/conf/type/__pf_apply/gencode-remote
index c8f7a25a..f7c889b4 100755
--- a/cdist/conf/type/__pf_apply/gencode-remote
+++ b/cdist/conf/type/__pf_apply/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Jake Guffey (jake.guffey at eprotex.com)
#
diff --git a/cdist/conf/type/__pf_apply_anchor/gencode-remote b/cdist/conf/type/__pf_apply_anchor/gencode-remote
deleted file mode 100755
index 36c26521..00000000
--- a/cdist/conf/type/__pf_apply_anchor/gencode-remote
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh -e
-#
-# 2016 Kamila Součková (coding at kamila.is)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-# Apply pf(4) ruleset on *BSD
-#
-
-ANCHORS_DIR="/etc/pf.d"
-
-if [ -f "${__object}/parameter/anchor_name" ]; then
- anchor_name="$(cat "${__object}/parameter/anchor_name")"
-else
- anchor_name="${__object_id}"
-fi
-anchor_file="${ANCHORS_DIR}/${anchor_name}"
-
-echo "pfctl -a \"${anchor_name}\" -f \"${anchor_file}\""
diff --git a/cdist/conf/type/__pf_apply_anchor/man.rst b/cdist/conf/type/__pf_apply_anchor/man.rst
deleted file mode 100644
index aef6cdf4..00000000
--- a/cdist/conf/type/__pf_apply_anchor/man.rst
+++ /dev/null
@@ -1,62 +0,0 @@
-cdist-type__pf_apply_anchor(7)
-==============================
-
-NAME
-----
-cdist-type__pf_apply_anchor - Apply a pf(4) anchor on $__target_host
-
-
-DESCRIPTION
------------
-This type is used on \*BSD systems to manage anchors for the pf firewall.
-
-Notice this type does not take care of copying the ruleset, that must be
-done by the user with, e.g. `__file`.
-
-
-OPTIONAL PARAMETERS
--------------------
-anchor_name
- The name of the anchor to apply. If not set, `${__object_id}` is used.
- This type requires `/etc/pf.d/${anchor_name}` to exist on
- `$__target_host`.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # Copy anchor file to ${__target_host}
- __file "/etc/pf.d/80_dns" --source - <
-Kamila Součková
-Jake Guffey
-
-
-COPYING
--------
-Copyright \(C) 2020 Evilham.
-Copyright \(C) 2016 Kamila Součková.
-Copyright \(C) 2012 Jake Guffey. 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.
diff --git a/cdist/conf/type/__pf_apply_anchor/parameter/optional b/cdist/conf/type/__pf_apply_anchor/parameter/optional
deleted file mode 100644
index b9f61e28..00000000
--- a/cdist/conf/type/__pf_apply_anchor/parameter/optional
+++ /dev/null
@@ -1 +0,0 @@
-anchor_name
diff --git a/cdist/conf/type/__pf_rdr/manifest b/cdist/conf/type/__pf_rdr/manifest
deleted file mode 100644
index 39ab4470..00000000
--- a/cdist/conf/type/__pf_rdr/manifest
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/sh -e
-#
-# 2016 Kamila Součková (coding at kamila.is)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-# TODO it would be cool to print a warning if a generated anchor is unused in pf.conf
-
-ANCHORS_DIR=/etc/pf.d
-
-proto="$(cat "${__object}/parameter/proto")"
-from="$(cat "${__object}/parameter/from")"
-to="$(cat "${__object}/parameter/to")"
-state="$(cat "${__object}/parameter/state")"
-
-# This breaks utterly with IPv6
-from="$(echo ${from} | sed 's/:/ port /')"
-to="$(echo ${to} | sed 's/:/ port /')"
-
-anchor_name="$(echo ${__object_id} | cut -d/ -f1)"
-rule="rdr pass log proto ${proto} from any to ${from} -> ${to}"
-
-__directory "${ANCHORS_DIR}" --parents
-
-require="__directory/${ANCHORS_DIR}" \
-__line __pf_rdr/${__object_id} --state ${state} --line "${rule}" --file ${ANCHORS_DIR}/${anchor_name}
diff --git a/cdist/conf/type/__pf_rdr/parameter/default/proto b/cdist/conf/type/__pf_rdr/parameter/default/proto
deleted file mode 100644
index 28a29e6f..00000000
--- a/cdist/conf/type/__pf_rdr/parameter/default/proto
+++ /dev/null
@@ -1 +0,0 @@
-tcp
diff --git a/cdist/conf/type/__pf_rdr/parameter/default/state b/cdist/conf/type/__pf_rdr/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__pf_rdr/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__pf_rdr/parameter/optional b/cdist/conf/type/__pf_rdr/parameter/optional
deleted file mode 100644
index 09ec92ca..00000000
--- a/cdist/conf/type/__pf_rdr/parameter/optional
+++ /dev/null
@@ -1,2 +0,0 @@
-proto
-state
diff --git a/cdist/conf/type/__pf_rdr/parameter/required b/cdist/conf/type/__pf_rdr/parameter/required
deleted file mode 100644
index 4a568482..00000000
--- a/cdist/conf/type/__pf_rdr/parameter/required
+++ /dev/null
@@ -1,2 +0,0 @@
-from
-to
diff --git a/cdist/conf/type/__package_pkg_openbsd/explorer/has_installurl b/cdist/conf/type/__pf_ruleset/explorer/cksum
similarity index 56%
rename from cdist/conf/type/__package_pkg_openbsd/explorer/has_installurl
rename to cdist/conf/type/__pf_ruleset/explorer/cksum
index 68337cbb..f8679836 100755
--- a/cdist/conf/type/__package_pkg_openbsd/explorer/has_installurl
+++ b/cdist/conf/type/__pf_ruleset/explorer/cksum
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright 2017, Philippe Gregoire
+# 2012 Jake Guffey (jake.guffey at eprotex.com)
#
# This file is part of cdist.
#
@@ -17,20 +17,25 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
#
-
#
-# Retrieve the installurl(5), as introduced in OpenBSD 6.1
-#
-# As of 6.1, the file is supposed to contained a single line
-# with the URL used to install from during install or upgrade.
-#
-# Allow for expansion and take the first non-commented (#) line.
+# Get the 256 bit SHA2 checksum of the pf ruleset on the target host.
#
-if [ -f /etc/installurl ]; then
- printf 'yes'
-else
- printf 'no'
+# Debug
+#exec >&2
+#set -x
+
+# Check /etc/rc.conf for pf's configuration file name. Default to /etc/pf.conf
+# See if file exists and if so, get checksum
+
+RC="/etc/rc.conf"
+TMP="$(grep '^pf_rules=' ${RC} | cut -d= -f2 | sed 's/"//g')"
+PFCONF="${TMP:-"/etc/pf.conf"}"
+
+if [ -f "${PFCONF}" ]; then # The pf config file exists, find its cksum.
+ cksum -o 1 ${PFCONF} | cut -d= -f2 | awk '{print $1}'
fi
-exit 0
+# Debug
+#set +x
+
diff --git a/cdist/conf/type/__pf_ruleset/explorer/rcvar b/cdist/conf/type/__pf_ruleset/explorer/rcvar
index 7c8d535f..20e9dfcc 100755
--- a/cdist/conf/type/__pf_ruleset/explorer/rcvar
+++ b/cdist/conf/type/__pf_ruleset/explorer/rcvar
@@ -29,7 +29,7 @@
RC="/etc/rc.conf"
PFCONF="$(grep '^pf_rules=' ${RC} | cut -d= -f2 | sed 's/"//g')"
-echo "${PFCONF:-"/etc/pf.conf"}"
+echo ${PFCONF:-"/etc/pf.conf"}
# Debug
#set +x
diff --git a/cdist/conf/type/__pf_ruleset/gencode-local b/cdist/conf/type/__pf_ruleset/gencode-local
new file mode 100644
index 00000000..2db2ae06
--- /dev/null
+++ b/cdist/conf/type/__pf_ruleset/gencode-local
@@ -0,0 +1,81 @@
+#!/bin/sh
+#
+# 2012 Jake Guffey (jake.guffey at eprotex.com)
+#
+# This file is part of cdist.
+#
+# cdist 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.
+#
+# cdist 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 cdist. If not, see .
+#
+#
+# Manage pf(4) on *BSD
+#
+
+# Debug
+#exec >&2
+#set -x
+
+# Send files to $__target_host via $__remote_copy
+
+uname=$(uname) # Need to know what the cdist host is running so we know how to compute the ruleset's checksum
+state=$(cat "$__object/parameter/state")
+
+if [ "$state" = "absent" ]; then # There is nothing more for a *local* script to do
+ exit 0
+fi
+
+if [ -f "$__object/parameter/source" ]; then
+ source=$(cat "$__object/parameter/source")
+fi
+
+rcvar=$(cat "$__object/explorer/rcvar")
+cksum=$(cat "$__object/explorer/cksum")
+
+
+cat <&2
+ exit 1
+ ;;
+esac
+
+# IPv6 fix
+if $(echo "${__target_host}" | grep -q -E '^[0-9a-fA-F:]+$')
+then
+ my_target_host="[${__target_host}]"
+else
+ my_target_host="${__target_host}"
+fi
+
+if [ -n "${cksum}" ]; then
+ if [ ! "\${currentSum}" = "${cksum}" ]; then
+ $__remote_copy "${source}" "${my_target_host}:${rcvar}.new"
+ fi
+else # File just doesn't exist yet
+ $__remote_copy "${source}" "${my_target_host}:${rcvar}.new"
+fi
+EOF
+
+# Debug
+#exec +x
+
diff --git a/cdist/conf/type/__xymon_apache/manifest b/cdist/conf/type/__pf_ruleset/gencode-remote
old mode 100755
new mode 100644
similarity index 52%
rename from cdist/conf/type/__xymon_apache/manifest
rename to cdist/conf/type/__pf_ruleset/gencode-remote
index bfd0af79..6e9030ea
--- a/cdist/conf/type/__xymon_apache/manifest
+++ b/cdist/conf/type/__pf_ruleset/gencode-remote
@@ -1,6 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
-# 2018-2019 Thomas Eckert (tom at it-eckert.de)
+# 2012 Jake Guffey (jake.guffey at eprotex.com)
#
# This file is part of cdist.
#
@@ -16,27 +16,34 @@
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
+#
+#
+# Manage pf(4) on *BSD
+#
+
+# Debug
+#exec >&2
+#set -x
+
+# Remove ${rcvar} in the case of --state absent
state=$(cat "$__object/parameter/state")
+rcvar=$(cat "$__object/explorer/rcvar")
-os=$(cat "$__global/explorer/os")
-case "$os" in
- debian|ubuntu)
- :
- ;;
- *)
- echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
- echo "Please contribute an implementation for it if you can." >&2
- exit 1
- ;;
-esac
-
-__package apache2 --state "$state"
-
-## edit xymon.conf IP-ranges
-if [ -f "$__object/parameter/ipacl" ]; then
- require="__package/xymon" __line /etc/apache2/conf-available/xymon.conf \
- --line " Require ip $(cat "$__object/parameter/ipacl")" \
- --after "^[[:space:]]*Require local" \
- --state "present"
+if [ "$state" = "present" ]; then # There is nothing more for a *remote* script to do
+ exit 0
+elif [ "$state" = "absent" ]; then
+ # --state absent, so ensure that .new doesn't exist and that conf is renamed to .old
+ cat <&2
+ exit 1
fi
+
diff --git a/cdist/conf/type/__pf_ruleset/man.rst b/cdist/conf/type/__pf_ruleset/man.rst
index db8873ac..5719e94e 100644
--- a/cdist/conf/type/__pf_ruleset/man.rst
+++ b/cdist/conf/type/__pf_ruleset/man.rst
@@ -10,9 +10,6 @@ DESCRIPTION
-----------
This type is used on \*BSD systems to manage the pf firewall's ruleset.
-It will also enable and disable the pf firewall as requested in the `state`
-parameter.
-
REQUIRED PARAMETERS
-------------------
@@ -23,8 +20,9 @@ state
OPTIONAL PARAMETERS
-------------------
source
- Required when state is "present".
- Defines the ruleset to load onto the $__target_host for `pf(4)`.
+ If supplied, use to define the ruleset to load onto the $__target_host for pf(4).
+ Note that this type is almost useless without a ruleset defined, but it's technically not
+ needed, e.g. for the case of disabling the firewall temporarily.
EXAMPLES
@@ -32,10 +30,10 @@ EXAMPLES
.. code-block:: sh
- # Remove the current ruleset in place and disable pf
+ # Remove the current ruleset in place
__pf_ruleset --state absent
- # Enable pf with the ruleset defined in $__manifest/files/pf.conf
+ # Enable the firewall with the ruleset defined in $__manifest/files/pf.conf
__pf_ruleset --state present --source $__manifest/files/pf.conf
@@ -46,13 +44,11 @@ SEE ALSO
AUTHORS
-------
-Kamila Součková
Jake Guffey
COPYING
-------
-Copyright \(C) 2016 Kamila Součková.
Copyright \(C) 2012 Jake Guffey. 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
diff --git a/cdist/conf/type/__pf_ruleset/manifest b/cdist/conf/type/__pf_ruleset/manifest
deleted file mode 100755
index 27b35328..00000000
--- a/cdist/conf/type/__pf_ruleset/manifest
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/sh -e
-#
-# 2016 Kamila Součková (coding at kamila.is)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-# Manage pf(4) on *BSD
-#
-
-rcvar="$(cat "${__object}/explorer/rcvar")"
-state="$(cat "${__object}/parameter/state")"
-if [ -f "${__object}/parameter/source" ]; then
- source="$(cat "${__object}/parameter/source")"
-fi
-
-if [ "${state}" = "absent" ]; then
- action="/etc/rc.d/pf stop"
-else
- action="/etc/rc.d/pf reload || /etc/rc.d/pf start"
-fi
-
-__key_value __pf_ruleset/rcvar \
- --state "${state}" \
- --file /etc/rc.conf \
- --delimiter "=" \
- --key "pf_enable" \
- --value "YES"
-
-require="__key_value/__pf_ruleset/rcvar" __config_file "${rcvar}" \
- --source "${source}" \
- --state "${state}" \
- --onchange "${action}"
diff --git a/cdist/conf/type/__ping/gencode-remote b/cdist/conf/type/__ping/gencode-remote
deleted file mode 100644
index 1341b954..00000000
--- a/cdist/conf/type/__ping/gencode-remote
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh -e
-#
-# Copyright (C) 2018 Olliver Schinagl
-#
-# SPDX-License-Identifier: GPL-3.0+
-#
-
-set -eu
-
-echo "echo 'pong'"
-
-exit 0
diff --git a/cdist/conf/type/__ping/man.rst b/cdist/conf/type/__ping/man.rst
deleted file mode 100644
index e08643dc..00000000
--- a/cdist/conf/type/__ping/man.rst
+++ /dev/null
@@ -1,43 +0,0 @@
-cdist-type__ping(7)
-==================================
-
-NAME
-----
-cdist-type__ping - Try to connect to host and return 'pong' on success
-
-
-DESCRIPTION
------------
-A simple type which tries to connect to a remote host and runs a simple command
-to ensure everything is working.
-
-
-REQUIRED PARAMETERS
--------------------
-None.
-
-
-OPTIONAL PARAMETERS
--------------------
-None.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __ping
-
-
-AUTHORS
--------
-Olliver Schinagl
-
-
-COPYING
--------
-Copyright \(C) 2018 Schinagl. 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.
diff --git a/cdist/conf/type/__ping/singleton b/cdist/conf/type/__ping/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__postfix/manifest b/cdist/conf/type/__postfix/manifest
index 121bba96..b425e072 100755
--- a/cdist/conf/type/__postfix/manifest
+++ b/cdist/conf/type/__postfix/manifest
@@ -1,7 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -19,4 +18,16 @@
# along with cdist. If not, see .
#
-__package postfix --state present
+
+os=$(cat "$__global/explorer/os")
+
+case "$os" in
+ ubuntu|debian|archlinux|suse|scientific|centos|devuan)
+ __package postfix --state present
+ ;;
+ *)
+ echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
+ echo "Please contribute an implementation for it if you can." >&2
+ exit 1
+ ;;
+esac
diff --git a/cdist/conf/type/__postfix_master/gencode-remote b/cdist/conf/type/__postfix_master/gencode-remote
index 7c109a69..51edc668 100755
--- a/cdist/conf/type/__postfix_master/gencode-remote
+++ b/cdist/conf/type/__postfix_master/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__postfix_master/manifest b/cdist/conf/type/__postfix_master/manifest
index 0960ea41..af71b88e 100755
--- a/cdist/conf/type/__postfix_master/manifest
+++ b/cdist/conf/type/__postfix_master/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -36,6 +36,7 @@ __postfix
# Default to object_id
service="$(cat "$__object/parameter/service" 2>/dev/null || echo "$__object_id")"
+state="$(cat "$__object/parameter/state")"
# NOTE: keep variables in sync in manifest,explorer,gencode-*
prefix="#cdist:$__object_name"
@@ -50,6 +51,7 @@ entry="$__object/files/entry"
echo "# $(cat "$__object/parameter/comment")"
fi
printf "%s " "$service"
+ printf "%s " "$type"
for parameter in type private unpriv chroot wakeup maxproc; do
printf "%s " "$(cat "$__object/parameter/$parameter")"
done
diff --git a/cdist/conf/type/__postfix_postconf/explorer/value b/cdist/conf/type/__postfix_postconf/explorer/value
index 67dacad8..17126c94 100755
--- a/cdist/conf/type/__postfix_postconf/explorer/value
+++ b/cdist/conf/type/__postfix_postconf/explorer/value
@@ -22,7 +22,7 @@
os=$("$__explorer/os")
case "$os" in
- alpine|ubuntu|debian|archlinux|suse|scientific|centos|devuan)
+ ubuntu|debian|archlinux|suse|scientific|centos|devuan)
:
;;
*)
diff --git a/cdist/conf/type/__postfix_postconf/gencode-remote b/cdist/conf/type/__postfix_postconf/gencode-remote
index 279dddd4..f886499b 100755
--- a/cdist/conf/type/__postfix_postconf/gencode-remote
+++ b/cdist/conf/type/__postfix_postconf/gencode-remote
@@ -1,7 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -22,7 +21,7 @@
os=$(cat "$__global/explorer/os")
case "$os" in
- alpine|archlinux|centos|debian|devuan|suse|scientific|ubuntu)
+ ubuntu|debian|archlinux|suse|scientific|centos|devuan)
:
;;
*)
diff --git a/cdist/conf/type/__postfix_postconf/manifest b/cdist/conf/type/__postfix_postconf/manifest
index a82e13d7..dbce5364 100755
--- a/cdist/conf/type/__postfix_postconf/manifest
+++ b/cdist/conf/type/__postfix_postconf/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__postfix_postmap/gencode-remote b/cdist/conf/type/__postfix_postmap/gencode-remote
index edb7711f..1b370001 100755
--- a/cdist/conf/type/__postfix_postmap/gencode-remote
+++ b/cdist/conf/type/__postfix_postmap/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__postfix_postmap/manifest b/cdist/conf/type/__postfix_postmap/manifest
index a82e13d7..dbce5364 100755
--- a/cdist/conf/type/__postfix_postmap/manifest
+++ b/cdist/conf/type/__postfix_postmap/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__postfix_reload/gencode-remote b/cdist/conf/type/__postfix_reload/gencode-remote
index 7720dc49..0efd6022 100755
--- a/cdist/conf/type/__postfix_reload/gencode-remote
+++ b/cdist/conf/type/__postfix_reload/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__postfix_reload/manifest b/cdist/conf/type/__postfix_reload/manifest
index a82e13d7..dbce5364 100755
--- a/cdist/conf/type/__postfix_reload/manifest
+++ b/cdist/conf/type/__postfix_reload/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__postgres_database/explorer/state b/cdist/conf/type/__postgres_database/explorer/state
index d68d4120..dc9659e2 100755
--- a/cdist/conf/type/__postgres_database/explorer/state
+++ b/cdist/conf/type/__postgres_database/explorer/state
@@ -18,25 +18,10 @@
# along with cdist. If not, see .
#
-case "$("${__explorer}/os")"
-in
- netbsd)
- postgres_user='pgsql'
- ;;
- openbsd)
- postgres_user='_postgresql'
- ;;
- *)
- postgres_user='postgres'
- ;;
-esac
-
-
name="$__object_id"
-if test -n "$(su - "$postgres_user" -c "psql postgres -twAc \"SELECT 1 FROM pg_database WHERE datname='$name'\"")"
-then
- echo 'present'
+if su - postgres -c "echo '\q' | psql '$name'" 2>/dev/null; then
+ echo "present"
else
- echo 'absent'
+ echo "absent"
fi
diff --git a/cdist/conf/type/__postgres_database/gencode-remote b/cdist/conf/type/__postgres_database/gencode-remote
index 0f11cff4..c097efce 100755
--- a/cdist/conf/type/__postgres_database/gencode-remote
+++ b/cdist/conf/type/__postgres_database/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -18,20 +18,6 @@
# along with cdist. If not, see .
#
-case "$(cat "${__global}/explorer/os")"
-in
- netbsd)
- postgres_user='pgsql'
- ;;
- openbsd)
- postgres_user='_postgresql'
- ;;
- *)
- postgres_user='postgres'
- ;;
-esac
-
-
name="$__object_id"
state_should="$(cat "$__object/parameter/state")"
state_is="$(cat "$__object/explorer/state")"
@@ -41,37 +27,12 @@ if [ "$state_should" != "$state_is" ]; then
present)
owner=""
if [ -f "$__object/parameter/owner" ]; then
- owner="-O \"$(cat "$__object/parameter/owner")\""
+ owner="-O '$(cat "$__object/parameter/owner")'"
fi
-
- template=""
- if [ -f "$__object/parameter/template" ]; then
- template="--template \"$(cat "$__object/parameter/template")\""
- fi
-
- encoding=""
- if [ -f "$__object/parameter/encoding" ]; then
- encoding="--encoding \"$(cat "$__object/parameter/encoding")\""
- fi
-
- lc_collate=""
- if [ -f "$__object/parameter/lc-collate" ]; then
- lc_collate="--lc-collate \"$(cat "$__object/parameter/lc-collate")\""
- fi
-
- lc_ctype=""
- if [ -f "$__object/parameter/lc-ctype" ]; then
- lc_ctype="--lc-ctype \"$(cat "$__object/parameter/lc-ctype")\""
- fi
-
- cat << EOF
-su - '$postgres_user' -c "createdb $owner \"$name\" $template $encoding $lc_collate $lc_ctype"
-EOF
+ echo "su - postgres -c \"createdb $owner '$name'\""
;;
absent)
- cat << EOF
-su - '$postgres_user' -c "dropdb \"$name\""
-EOF
+ echo "su - postgres -c \"dropdb '$name'\""
;;
esac
fi
diff --git a/cdist/conf/type/__postgres_database/man.rst b/cdist/conf/type/__postgres_database/man.rst
index 870b4917..acceec9b 100644
--- a/cdist/conf/type/__postgres_database/man.rst
+++ b/cdist/conf/type/__postgres_database/man.rst
@@ -14,22 +14,10 @@ This cdist type allows you to create or drop postgres databases.
OPTIONAL PARAMETERS
-------------------
state
- Either 'present' or 'absent', defaults to 'present'.
+ either 'present' or 'absent', defaults to 'present'.
owner
- Specifies the database user who will own the new database.
-
-encoding
- Specifies the character encoding scheme to be used in this database.
-
-lc-collate
- Specifies the LC_COLLATE setting to be used in this database.
-
-lc-ctype
- Specifies the LC_CTYPE setting to be used in this database.
-
-template
- Specifies the template database from which to build this database.
+ the role owning this database
EXAMPLES
diff --git a/cdist/conf/type/__postgres_database/parameter/optional b/cdist/conf/type/__postgres_database/parameter/optional
index 877fbf32..d86b6469 100644
--- a/cdist/conf/type/__postgres_database/parameter/optional
+++ b/cdist/conf/type/__postgres_database/parameter/optional
@@ -1,6 +1,2 @@
state
owner
-encoding
-lc-collate
-lc-ctype
-template
diff --git a/cdist/conf/type/__postgres_extension/gencode-remote b/cdist/conf/type/__postgres_extension/gencode-remote
index af9c97f1..3408df86 100755
--- a/cdist/conf/type/__postgres_extension/gencode-remote
+++ b/cdist/conf/type/__postgres_extension/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2013 Tomas Pospisek (tpo_deb at sourcepole.ch)
@@ -22,20 +22,6 @@
# along with cdist. If not, see .
#
-case "$(cat "${__global}/explorer/os")"
-in
- netbsd)
- postgres_user='pgsql'
- ;;
- openbsd)
- postgres_user='_postgresql'
- ;;
- *)
- postgres_user='postgres'
- ;;
-esac
-
-
dbname=$( echo "$__object_id" | cut -d":" -f1 )
extension=$( echo "$__object_id" | cut -d":" -f2 )
@@ -44,10 +30,10 @@ state_should=$( cat "$__object/parameter/state" )
case "$state_should" in
present)
cmd="CREATE EXTENSION IF NOT EXISTS $extension"
- echo "su - '$postgres_user' -c 'psql -c \"$cmd\" \"$dbname\"'"
+ echo "su - postgres -c 'psql -c \"$cmd\" \"$dbname\"'"
;;
absent)
- cmd="DROP EXTENSION IF EXISTS $extension"
- echo "su - '$postgres_user' -c 'psql -c \"$cmd\" \"$dbname\"'"
+ cmd="DROP EXTENSION IF EXISTS $extenstion"
+ echo "su - postgres -c 'psql -c \"$cmd\" \"$dbname\"'"
;;
esac
diff --git a/cdist/conf/type/__postgres_role/explorer/state b/cdist/conf/type/__postgres_role/explorer/state
index c8e1fa9d..8c102df9 100755
--- a/cdist/conf/type/__postgres_role/explorer/state
+++ b/cdist/conf/type/__postgres_role/explorer/state
@@ -18,25 +18,10 @@
# along with cdist. If not, see .
#
-case "$("${__explorer}/os")"
-in
- netbsd)
- postgres_user='pgsql'
- ;;
- openbsd)
- postgres_user='_postgresql'
- ;;
- *)
- postgres_user='postgres'
- ;;
-esac
-
-
name="$__object_id"
-if test -n "$(su - "$postgres_user" -c "psql postgres -twAc \"SELECT 1 FROM pg_roles WHERE rolname='$name'\"")"
-then
- echo 'present'
+if su - postgres -c "psql -c '\du' | grep -q '^ *$name *|'"; then
+ echo "present"
else
- echo 'absent'
+ echo "absent"
fi
diff --git a/cdist/conf/type/__postgres_role/gencode-remote b/cdist/conf/type/__postgres_role/gencode-remote
index 282294c9..0230e48e 100755
--- a/cdist/conf/type/__postgres_role/gencode-remote
+++ b/cdist/conf/type/__postgres_role/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -18,20 +18,6 @@
# along with cdist. If not, see .
#
-case "$(cat "${__global}/explorer/os")"
-in
- netbsd)
- postgres_user='pgsql'
- ;;
- openbsd)
- postgres_user='_postgresql'
- ;;
- *)
- postgres_user='postgres'
- ;;
-esac
-
-
name="$__object_id"
state_is="$(cat "$__object/explorer/state")"
state_should="$(cat "$__object/parameter/state")"
@@ -48,18 +34,16 @@ case "$state_should" in
if [ ! -f "$__object/parameter/$boolean" ]; then
boolean="no${boolean}"
fi
- upper=$(echo $boolean | tr '[:lower:]' '[:upper:]')
+ upper=$(echo $boolean | tr '[a-z]' '[A-Z]')
booleans="$booleans $upper"
done
- [ -n "$password" ] && password="PASSWORD '$password'"
- cat << EOF
-su - '$postgres_user' -c "psql postgres -wc \"CREATE ROLE \\\\\"$name\\\\\" WITH $password $booleans;\""
-EOF
+ [ -n "$password" ] && password="PASSWORD '$password'"
+
+ cmd="CREATE ROLE $name WITH $password $booleans"
+ echo "su - postgres -c \"psql -c \\\"$cmd\\\"\""
;;
absent)
- cat << EOF
-su - '$postgres_user' -c "dropuser \"$name\""
-EOF
+ echo "su - postgres -c \"dropuser \\\"$name\\\"\""
;;
esac
diff --git a/cdist/conf/type/__process/gencode-remote b/cdist/conf/type/__process/gencode-remote
index ec9691b9..639940d9 100755
--- a/cdist/conf/type/__process/gencode-remote
+++ b/cdist/conf/type/__process/gencode-remote
@@ -1,8 +1,7 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2017 Thomas Eckert (tom at it-eckert.de)
#
# This file is part of cdist.
#
@@ -46,15 +45,13 @@ case "$state_should" in
else
echo "$name"
fi
- echo "started" >> "$__messages_out"
;;
absent)
- if [ -f "$__object/parameter/stop" ]; then
+ if [ -f "$__object/parameter/stop" ]; then
cat "$__object/parameter/stop"
- else
- echo kill "$(cat "$__object/parameter/runs")"
- fi
- echo "stopped" >> "$__messages_out"
+ else
+ echo kill "${runs}"
+ fi
;;
*)
echo "Unknown state: $state_should" >&2
diff --git a/cdist/conf/type/__process/man.rst b/cdist/conf/type/__process/man.rst
index e7303c55..e439f37c 100644
--- a/cdist/conf/type/__process/man.rst
+++ b/cdist/conf/type/__process/man.rst
@@ -30,15 +30,6 @@ start
Executable to use for starting the process.
-MESSAGES
---------
-started
- The process was started.
-
-stopped
- The process was stopped.
-
-
EXAMPLES
--------
@@ -72,8 +63,7 @@ SEE ALSO
AUTHORS
-------
-| Nico Schottelius
-| Thomas Eckert
+Nico Schottelius
COPYING
diff --git a/cdist/conf/type/__prometheus_alertmanager/man.rst b/cdist/conf/type/__prometheus_alertmanager/man.rst
index 67e97eaf..ba99e7c8 100644
--- a/cdist/conf/type/__prometheus_alertmanager/man.rst
+++ b/cdist/conf/type/__prometheus_alertmanager/man.rst
@@ -10,27 +10,27 @@ DESCRIPTION
-----------
Install and configure Prometheus Alertmanager (https://prometheus.io/docs/alerting/alertmanager/).
-Note that due to significant differences between Prometheus 1.x and 2.x, only 2.x is supported. It is your responsibility to make sure that your package manager installs 2.x. (On Devuan Ascii, the parameter `--install-from-backports` helps.)
+This type create a daemontools-compatible service directory under /service/prometheus.
+Daemontools (or something compatible) must be installed (in particular, the command `svc` must be executable).
REQUIRED PARAMETERS
-------------------
config
Alertmanager configuration file. It will be saved as /etc/alertmanager/alertmanager.yml on the target.
+listen-address
+ Passed as web.listen-address.
OPTIONAL PARAMETERS
-------------------
storage-path
Where to put data. Default: /data/alertmanager. (Directory will be created if needed.)
-retention-days
- How long to retain data. Default: 90 days.
BOOLEAN PARAMETERS
------------------
-install-from-backports
- Valid on Devuan only. Will enable the backports apt source and install the package from there. Useful for getting a newer version.
+None
EXAMPLES
@@ -38,15 +38,21 @@ EXAMPLES
.. code-block:: sh
- __prometheus_alertmanager \
- --install-from-backports \
- --config "$__manifest/files/alertmanager.yml" \
- --storage-path /data/alertmanager
+ ALERTPORT=9093
+
+ __daemontools
+ __golang_from_vendor --version 1.8.1 # required for prometheus and many exporters
+
+ require="__daemontools __golang_from_vendor" __prometheus_alertmanager \
+ --with-daemontools \
+ --config "$__manifest/files/alertmanager.yml" \
+ --storage-path /data/alertmanager \
+ --listen-address "[::]:$ALERTPORT"
SEE ALSO
--------
-:strong:`cdist-type__prometheus_server`\ (7), :strong:`cdist-type__grafana_dashboard`\ (7),
+:strong:`cdist-type__prometheus_server`\ (7), :strong:`cdist-type__daemontools`\ (7),
Prometheus alerting documentation: https://prometheus.io/docs/alerting/overview/
AUTHORS
@@ -55,7 +61,7 @@ Kamila Součková
COPYING
-------
-Copyright \(C) 2018 Kamila Součková. You can redistribute it
+Copyright \(C) 2017 Kamila Součková. 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.
diff --git a/cdist/conf/type/__prometheus_alertmanager/manifest b/cdist/conf/type/__prometheus_alertmanager/manifest
old mode 100755
new mode 100644
index cf410c44..d885f2ed
--- a/cdist/conf/type/__prometheus_alertmanager/manifest
+++ b/cdist/conf/type/__prometheus_alertmanager/manifest
@@ -1,65 +1,33 @@
-#!/bin/sh -e
-
-##### HARD-CODED CONFIG #####################################################
+#!/bin/sh
+GOBIN=/opt/gocode/bin # where to find go binaries
CONF_DIR=/etc/prometheus
+LOGLEVEL=info
CONF=$CONF_DIR/alertmanager.yml
-##### GET SETTINGS ##########################################################
+### Prometheus server #######################################################
config="$(cat "$__object/parameter/config")"
-retention_days="$(cat "$__object/parameter/retention-days")"
storage_path="$(cat "$__object/parameter/storage-path")"
-# listen_address="$(cat "$__object/parameter/listen-address")"
+listen_address="$(cat "$__object/parameter/listen-address")"
-##### INSTALL THE PACKAGE ###################################################
+FLAGS="config.file '$CONF'
+storage.path '$storage_path'
+web.listen-address '$listen_address'
+log.level $LOGLEVEL"
-require_pkg="" # what to require if I want to require "the package"
-require=""
-if [ -f "$__object/parameter/install-from-backports" ]; then
- os=$(cat "$__global/explorer/os")
- os_version=$(cat "$__global/explorer/os_version")
+REAL_FLAGS="$(echo "$FLAGS" | sed -nE 's/^([^#]+).*/ --\1 \\/p')"
- case $os in
- devuan)
- [ "$os_version" = "ascii/ceres" ] && os_version='ascii' # "ascii" used in the repo URLs
- __apt_source backports --uri http://auto.mirror.devuan.org/merged --distribution $os_version-backports --component main
- require="$require __apt_source/backports" __package_apt prometheus-alertmanager --target-release $os_version-backports
- require_pkg="__package_apt/prometheus-alertmanager"
- ;;
- *)
- echo "--install-from-backports is only supported on Devuan -- ignoring." >&2
- echo "Send a pull request if you require it." >&2
- exit 1
- ;;
- esac
-else
- __package prometheus-alertmanager
- require_pkg="__package/prometheus-alertmanager"
-fi
+__go_get github.com/prometheus/alertmanager/cmd/...
-##### PREPARE PATHS AND SUCH ################################################
+__user prometheus --system
+require="__user/prometheus" __directory "$storage_path" --owner prometheus
+require="__user/prometheus" __directory "$CONF_DIR" --owner prometheus
-require="$require $require_pkg" __directory "$storage_path" --owner prometheus --parents
+__daemontools_service alertmanager --run "setuidgid prometheus $GOBIN/alertmanager $REAL_FLAGS"
-# TODO this is a bug in the init script, patching it like this is awful and it should be reported
-require="$require $require_pkg" \
-__key_value alertmanager_fix_init_script --file /etc/init.d/prometheus-alertmanager \
- --key "NAME" --value "prometheus-alertmanager" --delimiter "=" \
- --onchange "service prometheus-alertmanager restart"
-
-##### CONFIGURE #############################################################
-
-FLAGS="--storage.path $storage_path --data.retention $((retention_days*24))h --web.listen-address [::]:9093 --cluster.advertise-address [::]:9093"
-
-require="$require $require_pkg" \
-__key_value alertmanager_args --file /etc/default/prometheus-alertmanager \
- --key "ARGS" --value "\"$FLAGS\"" --delimiter "=" \
- --onchange "service prometheus-alertmanager restart"
-
-require="$require __directory/$storage_path $require_pkg" \
+require="$require __directory/$storage_path __user/prometheus" \
__config_file $CONF \
- --source "$config" \
- --group prometheus --mode 640 \
- --onchange "service prometheus-alertmanager restart" # TODO when a config-check tool is available, check config here
-
+ --source $config \
+ --group prometheus --mode 640 \
+ --onchange "$ONCHANGE"
diff --git a/cdist/conf/type/__prometheus_alertmanager/parameter/boolean b/cdist/conf/type/__prometheus_alertmanager/parameter/boolean
deleted file mode 100644
index 5d15e93d..00000000
--- a/cdist/conf/type/__prometheus_alertmanager/parameter/boolean
+++ /dev/null
@@ -1 +0,0 @@
-install-from-backports
diff --git a/cdist/conf/type/__prometheus_alertmanager/parameter/default/retention-days b/cdist/conf/type/__prometheus_alertmanager/parameter/default/retention-days
deleted file mode 100644
index d61f00d8..00000000
--- a/cdist/conf/type/__prometheus_alertmanager/parameter/default/retention-days
+++ /dev/null
@@ -1 +0,0 @@
-90
diff --git a/cdist/conf/type/__prometheus_alertmanager/parameter/optional b/cdist/conf/type/__prometheus_alertmanager/parameter/optional
index 7fe79009..f99d0d37 100644
--- a/cdist/conf/type/__prometheus_alertmanager/parameter/optional
+++ b/cdist/conf/type/__prometheus_alertmanager/parameter/optional
@@ -1,2 +1 @@
storage-path
-retention-days
diff --git a/cdist/conf/type/__prometheus_alertmanager/parameter/required b/cdist/conf/type/__prometheus_alertmanager/parameter/required
index 04204c7c..02cb49d0 100644
--- a/cdist/conf/type/__prometheus_alertmanager/parameter/required
+++ b/cdist/conf/type/__prometheus_alertmanager/parameter/required
@@ -1 +1,2 @@
config
+listen-address
diff --git a/cdist/conf/type/__prometheus_exporter/files/blackbox.yml b/cdist/conf/type/__prometheus_exporter/files/blackbox.yml
deleted file mode 100644
index e567c127..00000000
--- a/cdist/conf/type/__prometheus_exporter/files/blackbox.yml
+++ /dev/null
@@ -1,63 +0,0 @@
-modules:
- http_2xx:
- prober: http
- timeout: 3s
- http:
- method: GET
- no_follow_redirects: false
- fail_if_ssl: false
- fail_if_not_ssl: false
- # http_post_2xx:
- # prober: http
- # timeout: 5s
- # http:
- # method: POST
- # headers:
- # Content-Type: application/json
- # body: '{}'
- # tcp_connect_v4_example:
- # prober: tcp
- # timeout: 5s
- # tcp:
- # protocol: "tcp4"
- # irc_banner_example:
- # prober: tcp
- # timeout: 5s
- # tcp:
- # query_response:
- # - send: "NICK prober"
- # - send: "USER prober prober prober :prober"
- # - expect: "PING :([^ ]+)"
- # send: "PONG ${1}"
- # - expect: "^:[^ ]+ 001"
- # icmp_example:
- # prober: icmp
- # timeout: 5s
- # icmp:
- # protocol: "icmp"
- # preferred_ip_protocol: "ip4"
- # dns_udp_example:
- # prober: dns
- # timeout: 5s
- # dns:
- # query_name: "www.prometheus.io"
- # query_type: "A"
- # valid_rcodes:
- # - NOERROR
- # validate_answer_rrs:
- # fail_if_matches_regexp:
- # - ".*127.0.0.1"
- # fail_if_not_matches_regexp:
- # - "www.prometheus.io.\t300\tIN\tA\t127.0.0.1"
- # validate_authority_rrs:
- # fail_if_matches_regexp:
- # - ".*127.0.0.1"
- # validate_additional_rrs:
- # fail_if_matches_regexp:
- # - ".*127.0.0.1"
- # dns_tcp_example:
- # prober: dns
- # dns:
- # protocol: "tcp" # accepts "tcp/tcp4/tcp6/udp/udp4/udp6", defaults to "udp"
- # preferred_ip_protocol: "ip4" # used for "udp/tcp", defaults to "ip6"
- # query_name: "www.prometheus.io"
diff --git a/cdist/conf/type/__prometheus_exporter/man.rst b/cdist/conf/type/__prometheus_exporter/man.rst
deleted file mode 100644
index 3b1ee4d7..00000000
--- a/cdist/conf/type/__prometheus_exporter/man.rst
+++ /dev/null
@@ -1,70 +0,0 @@
-cdist-type__prometheus_exporter(7)
-==================================
-
-NAME
-----
-cdist-type__prometheus_exporter - install some Prometheus exporters
-
-
-DESCRIPTION
------------
-Install and configure some exporters to be used by the Prometheus monitoring system (https://prometheus.io/).
-
-This type creates a daemontools-compatible service directory under /service/$__object_id.
-Daemontools (or something compatible) must be installed (in particular, the command `svc` must be executable).
-
-This type installs and builds the latest version from git, using go get. A recent version of golang as well
-as build tools (make, g++, etc.) must be available.
-
-Currently supported exporters:
-
-- node
-- blackbox
-- ceph
-
-
-REQUIRED PARAMETERS
--------------------
-None
-
-
-OPTIONAL PARAMETERS
--------------------
-exporter
- Which exporter to install and configure. Default: $__object_id.
- Currently supported: node, blackbox, ceph.
-
-
-BOOLEAN PARAMETERS
-------------------
-add-consul-service
- Add this exporter as a Consul service for automatic service discovery.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __daemontools
- __golang_from_vendor --version 1.9 # required for prometheus and many exporters
-
- require="__daemontools __golang_from_vendor" __prometheus_exporter node
-
-
-SEE ALSO
---------
-:strong:`cdist-type__daemontools`\ (7), :strong:`cdist-type__golang_from_vendor`\ (7),
-:strong:`cdist-type__prometheus_server`\ (7),
-Prometheus documentation: https://prometheus.io/docs/introduction/overview/
-
-AUTHORS
--------
-Kamila Součková
-
-COPYING
--------
-Copyright \(C) 2017 Kamila Součková. 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.
diff --git a/cdist/conf/type/__prometheus_exporter/manifest b/cdist/conf/type/__prometheus_exporter/manifest
deleted file mode 100644
index f3930ac6..00000000
--- a/cdist/conf/type/__prometheus_exporter/manifest
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/sh
-
-export GOBIN=/opt/gocode/bin # where to find go binaries
-
-exporter="$(cat "$__object/parameter/exporter")"
-[ -z "$exporter" ] && exporter="$__object_id"
-
-__user prometheus
-require="__user/prometheus" __group prometheus
-require="__group/prometheus" __user_groups prometheus --group prometheus
-
-require="__user_groups/prometheus"
-case $exporter in
- node)
- TEXTFILES=/service/node-exporter/textfiles # path for the textfiles collector
- __directory $TEXTFILES --parents --mode 777
- require="$require __golang_from_vendor" __go_get github.com/prometheus/node_exporter
-
- port=9100
- run="setuidgid prometheus $GOBIN/node_exporter -web.listen-address :$port -collector.textfile.directory=$TEXTFILES"
- ;;
- blackbox)
- require="$require __daemontools_service/${exporter}-exporter __user/prometheus" __config_file "/service/${exporter}-exporter/blackbox.yml" \
- --source "$__type/files/blackbox.yml" \
- --group prometheus --mode 640 \
- --onchange "svc -h /service/${exporter}-exporter"
- require="$require __golang_from_vendor" __go_get github.com/prometheus/blackbox_exporter
-
- port=9115
- run="setuidgid prometheus $GOBIN/blackbox_exporter -config.file=/service/${exporter}-exporter/blackbox.yml"
- ;;
- ceph)
- __package librados-dev # dependency of ceph_exporter
- require="$require __golang_from_vendor __package/librados-dev" __go_get github.com/digitalocean/ceph_exporter
-
- port=9128
- run="setuidgid ceph $GOBIN/ceph_exporter -ceph.config /etc/ceph/ceph.conf -telemetry.addr :$port"
- ;;
- *)
- echo "Unsupported exporter: $exporter." >&2
- exit 1
- ;;
-esac
-
-require="$require __daemontools" __daemontools_service "${exporter}-exporter" --run "$run"
-if [ -f "$__object/parameter/add-consul-service" ]; then
- __consul_service "${exporter}-exporter" --port "$port" --check-http "http://localhost:$port/metrics" --check-interval 10s
-fi
-
-#__daemontools --install-init-script
-__daemontools
-__golang_from_vendor --version 1.9 # required for many exporters
diff --git a/cdist/conf/type/__prometheus_exporter/parameter/boolean b/cdist/conf/type/__prometheus_exporter/parameter/boolean
deleted file mode 100644
index 004af844..00000000
--- a/cdist/conf/type/__prometheus_exporter/parameter/boolean
+++ /dev/null
@@ -1 +0,0 @@
-add-consul-service
diff --git a/cdist/conf/type/__prometheus_exporter/parameter/default/exporter b/cdist/conf/type/__prometheus_exporter/parameter/default/exporter
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__prometheus_exporter/parameter/optional b/cdist/conf/type/__prometheus_exporter/parameter/optional
deleted file mode 100644
index 9cfaec5a..00000000
--- a/cdist/conf/type/__prometheus_exporter/parameter/optional
+++ /dev/null
@@ -1 +0,0 @@
-exporter
diff --git a/cdist/conf/type/__prometheus_server/man.rst b/cdist/conf/type/__prometheus_server/man.rst
index ab6a3c9b..fadebd3f 100644
--- a/cdist/conf/type/__prometheus_server/man.rst
+++ b/cdist/conf/type/__prometheus_server/man.rst
@@ -10,12 +10,18 @@ DESCRIPTION
-----------
Install and configure Prometheus (https://prometheus.io/).
-Note that due to significant differences between Prometheus 1.x and 2.x, only 2.x is supported. It is your responsibility to make sure that your package manager installs 2.x. (On Devuan Ascii, the parameter `--install-from-backports` helps.)
+This type creates a daemontools-compatible service directory under /service/prometheus.
+Daemontools (or something compatible) must be installed (in particular, the command `svc` must be executable).
+
REQUIRED PARAMETERS
-------------------
config
Prometheus configuration file. It will be saved as /etc/prometheus/prometheus.yml on the target.
+listen-address
+ Passed as web.listen-address.
+alertmanager-url
+ Passed as alertmanager.url
OPTIONAL PARAMETERS
@@ -26,12 +32,13 @@ rule-files
Path to rule files. They will be installed under /etc/prometheus/. You need to include `rule_files: [/etc/prometheus/]` in the config file if you use this.
storage-path
Where to put data. Default: /data/prometheus. (Directory will be created if needed.)
+target-heap-size
+ Passed as storage.local.target-heap-size. Default: 1/2 of RAM.
BOOLEAN PARAMETERS
------------------
-install-from-backports
- Valid on Devuan only. Will enable the backports apt source and install the package from there. Useful for getting a newer version.
+None
EXAMPLES
@@ -42,17 +49,22 @@ EXAMPLES
PROMPORT=9090
ALERTPORT=9093
- __prometheus_server \
- --install-from-backports \
+ __daemontools
+ __golang_from_vendor --version 1.8.1 # required for prometheus and many exporters
+
+ require="__daemontools __golang_from_vendor" __prometheus_server \
+ --with-daemontools \
--config "$__manifest/files/prometheus.yml" \
--retention-days 14 \
--storage-path /data/prometheus \
- --rule-files "$__manifest/files/*.rules"
+ --listen-address "[::]:$PROMPORT" \
+ --rule-files "$__manifest/files/*.rules" \
+ --alertmanager-url "http://monitoring1.node.consul:$ALERTPORT,http://monitoring2.node.consul:$ALERTPORT"
SEE ALSO
--------
-:strong:`cdist-type__prometheus_alertmanager`\ (7), :strong:`cdist-type__grafana_dashboard`\ (7),
+:strong:`cdist-type__prometheus_alertmanager`\ (7), :strong:`cdist-type__daemontools`\ (7),
Prometheus documentation: https://prometheus.io/docs/introduction/overview/
AUTHORS
@@ -61,7 +73,7 @@ Kamila Součková
COPYING
-------
-Copyright \(C) 2018 Kamila Součková. You can redistribute it
+Copyright \(C) 2017 Kamila Součková. 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.
diff --git a/cdist/conf/type/__prometheus_server/manifest b/cdist/conf/type/__prometheus_server/manifest
old mode 100755
new mode 100644
index 9756169e..3c5f16e3
--- a/cdist/conf/type/__prometheus_server/manifest
+++ b/cdist/conf/type/__prometheus_server/manifest
@@ -1,73 +1,52 @@
-#!/bin/sh -e
-
-##### HARD-CODED CONFIG #####################################################
+#!/bin/sh
+GOBIN=/opt/gocode/bin # where to find go binaries
CONF_DIR=/etc/prometheus
CONF=$CONF_DIR/prometheus.yml
-
-##### GET SETTINGS ##########################################################
+LOGLEVEL=info
config="$(cat "$__object/parameter/config")"
retention_days="$(cat "$__object/parameter/retention-days")"
storage_path="$(cat "$__object/parameter/storage-path")"
+listen_address="$(cat "$__object/parameter/listen-address")"
+alertmanager_url="$(cat "$__object/parameter/alertmanager-url")"
+target_heap_size="$(cat "$__object/parameter/target-heap-size")"
rule_files="$(cat "$__object/parameter/rule-files")"
# explorer in kB => convert; by default we go with 1/2 RAM
-[ "$target_heap_size" = "auto" ] && target_heap_size=$(($(cat "$__global/explorer/memory")*1024/2))
+[ "$target_heap_size" = "auto" ] && target_heap_size=$(($(cat $__global/explorer/memory)*1024/2))
-##### INSTALL THE PACKAGE ###################################################
-require_pkg="" # what to require if I want to require "the package"
-require=""
-if [ -f "$__object/parameter/install-from-backports" ]; then
- os=$(cat "$__global/explorer/os")
- os_version=$(cat "$__global/explorer/os_version")
+FLAGS="config.file '$CONF'
+storage.local.path '$storage_path'
+storage.local.target-heap-size $(($target_heap_size)) # in bytes; should be 2/3 of available memory because it may be hungry
+storage.local.retention $(($retention_days*24))h # golang doesn't have days :D
+web.listen-address '$listen_address'
+alertmanager.url '$alertmanager_url'
+log.level $LOGLEVEL"
- case $os in
- devuan)
- [ "$os_version" = "ascii/ceres" ] && os_version='ascii' # "ascii" used in the repo URLs
- __apt_source backports --uri http://auto.mirror.devuan.org/merged --distribution $os_version-backports --component main
- require="$require __apt_source/backports" __package_apt prometheus --target-release $os_version-backports
- require_pkg="__package_apt/prometheus"
- ;;
- *)
- echo "--install-from-backports is only supported on Devuan -- ignoring." >&2
- echo "Send a pull request if you require it." >&2
- exit 1
- ;;
- esac
-else
- __package prometheus
- __package prometheus-blackbox-exporter
- require_pkg="__package/prometheus __package/prometheus-blackbox-exporter"
-fi
+REAL_FLAGS="$(echo "$FLAGS" | sed -nE 's/^([^#]+).*/ --\1 \\/p')"
-##### PREPARE PATHS AND SUCH ################################################
+__go_get github.com/prometheus/prometheus/cmd/...
-require="$require $require_pkg" __directory "$storage_path" --owner prometheus --parents
+__user prometheus --system
+require="__user/prometheus" __directory "$storage_path" --owner prometheus
+require="__user/prometheus" __directory "$CONF_DIR" --owner prometheus
-##### CONFIGURE #############################################################
+__daemontools_service prometheus --run "setuidgid prometheus $GOBIN/prometheus $REAL_FLAGS"
-FLAGS="--storage.tsdb.path $storage_path --storage.tsdb.retention $((retention_days*24))h --web.listen-address [::]:9090"
-
-# TODO it would be neat to restart prometheus on change -- __key_value really should have an --onchange parameter
-require="$require $require_pkg" \
-__key_value prometheus_args --file /etc/default/prometheus \
- --key "ARGS" --value "\"$FLAGS\"" --delimiter "=" \
- --onchange "service prometheus restart"
-
-require="$require __directory/$storage_path $require_pkg" \
+require="$require __directory/$storage_path __user/prometheus" \
__config_file $CONF \
- --source "$config" \
+ --source $config \
--group prometheus --mode 640 \
- --onchange "promtool check config $CONF && service prometheus restart"
+ --onchange "$GOBIN/promtool check-config $CONF && svc -h /service/prometheus"
for file in $rule_files; do
- dest=$CONF_DIR/$(basename "$file")
- require="$require $require_pkg" \
+ dest=$CONF_DIR/$(basename $file)
+ require="$require __directory/$CONF_DIR __user/prometheus" \
__config_file "$dest" \
--source "$file" \
--owner prometheus \
- --onchange "promtool check rules '$dest' && service prometheus restart"
+ --onchange "$GOBIN/promtool check-rules '$dest' && svc -h /service/prometheus"
done
diff --git a/cdist/conf/type/__prometheus_server/parameter/boolean b/cdist/conf/type/__prometheus_server/parameter/boolean
deleted file mode 100644
index 5d15e93d..00000000
--- a/cdist/conf/type/__prometheus_server/parameter/boolean
+++ /dev/null
@@ -1 +0,0 @@
-install-from-backports
diff --git a/cdist/conf/type/__prometheus_server/parameter/default/target-heap-size b/cdist/conf/type/__prometheus_server/parameter/default/target-heap-size
new file mode 100644
index 00000000..865faf10
--- /dev/null
+++ b/cdist/conf/type/__prometheus_server/parameter/default/target-heap-size
@@ -0,0 +1 @@
+auto
diff --git a/cdist/conf/type/__prometheus_server/parameter/optional b/cdist/conf/type/__prometheus_server/parameter/optional
index cb437211..4d8d8f3e 100644
--- a/cdist/conf/type/__prometheus_server/parameter/optional
+++ b/cdist/conf/type/__prometheus_server/parameter/optional
@@ -1,3 +1,4 @@
+target-heap-size
retention-days
rule-files
storage-path
diff --git a/cdist/conf/type/__prometheus_server/parameter/required b/cdist/conf/type/__prometheus_server/parameter/required
index 04204c7c..49abf924 100644
--- a/cdist/conf/type/__prometheus_server/parameter/required
+++ b/cdist/conf/type/__prometheus_server/parameter/required
@@ -1 +1,3 @@
+alertmanager-url
config
+listen-address
diff --git a/cdist/conf/type/__pyvenv/explorer/group b/cdist/conf/type/__pyvenv/explorer/group
index a655bda7..ff072c5e 100755
--- a/cdist/conf/type/__pyvenv/explorer/group
+++ b/cdist/conf/type/__pyvenv/explorer/group
@@ -2,4 +2,4 @@
destination="/$__object_id"
-stat --print "%G" "${destination}" 2>/dev/null || exit 0
+stat --print "%G" ${destination} 2>/dev/null || exit 0
diff --git a/cdist/conf/type/__pyvenv/explorer/owner b/cdist/conf/type/__pyvenv/explorer/owner
index 8b3c7f8e..b77e3c6e 100755
--- a/cdist/conf/type/__pyvenv/explorer/owner
+++ b/cdist/conf/type/__pyvenv/explorer/owner
@@ -2,4 +2,4 @@
destination="/$__object_id"
-stat --print "%U" "${destination}" 2>/dev/null || exit 0
+stat --print "%U" ${destination} 2>/dev/null || exit 0
diff --git a/cdist/conf/type/__pyvenv/gencode-remote b/cdist/conf/type/__pyvenv/gencode-remote
index 9c7b7fab..907e0ff6 100755
--- a/cdist/conf/type/__pyvenv/gencode-remote
+++ b/cdist/conf/type/__pyvenv/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Darko Poljak (darko.poljak at gmail.com)
#
@@ -29,38 +29,28 @@ owner="$(cat "$__object/parameter/owner")"
group="$(cat "$__object/parameter/group")"
mode="$(cat "$__object/parameter/mode")"
-[ "$state_should" = "$state_is" ] && \
-[ "$owner" = "$owner_is" ] && \
-[ "$group" = "$group_is" ] && \
-[ -n "$mode" ] && exit 0
+[ "$state_should" = "$state_is" -a \
+ "$owner" = "$owner_is" -a \
+ "$group" = "$group_is" -a \
+ -n "$mode" ] && exit 0
destination="/$__object_id"
venvparams="$(cat "$__object/parameter/venvparams")"
pyvenvparam="$__object/parameter/pyvenv"
-
-os=$(cat "$__global/explorer/os")
-
if [ -f "$pyvenvparam" ]
then
pyvenv=$(cat "$pyvenvparam")
else
- case "$os" in
- alpine) # no pyvenv on alpine - I assume others will follow
- pyvenv="python3 -m venv"
- ;;
- *)
- pyvenv="pyvenv"
- ;;
- esac
+ pyvenv="pyvenv"
fi
case $state_should in
present)
if [ "$state_should" != "$state_is" ]; then
- echo "$pyvenv $venvparams $destination"
+ echo $pyvenv $venvparams "$destination"
fi
- if { [ -n "$owner" ] && [ "$owner_is" != "$owner" ]; } || \
- { [ -n "$group" ] && [ "$group_is" != "$group" ]; }; then
+ if [ \( -n "$owner" -a "$owner_is" != "$owner" \) -o \
+ \( -n "$group" -a "$group_is" != "$group" \) ]; then
echo chown -R "${owner}:${group}" "$destination"
fi
if [ -n "$mode" ]; then
diff --git a/cdist/conf/type/__pyvenv/manifest b/cdist/conf/type/__pyvenv/manifest
index 5d6a12e8..3e41ad04 100755
--- a/cdist/conf/type/__pyvenv/manifest
+++ b/cdist/conf/type/__pyvenv/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2016 Darko Poljak (darko.poljak at gmail.com)
#
diff --git a/cdist/conf/type/__qemu_img/gencode-remote b/cdist/conf/type/__qemu_img/gencode-remote
old mode 100755
new mode 100644
index 94816f58..bffedd26
--- a/cdist/conf/type/__qemu_img/gencode-remote
+++ b/cdist/conf/type/__qemu_img/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
################################################################################
# State: absent is handled by manifest - we need only to do stuff if image is
@@ -18,4 +18,4 @@ format="$(cat "$__object/parameter/format")"
size="$(cat "$__object/parameter/size")"
diskimage="/$__object_id"
-echo "qemu-img create -f '$format' '$diskimage' '$size'"
+echo qemu-img create -f \"$format\" \"$diskimage\" \"$size\"
diff --git a/cdist/conf/type/__qemu_img/manifest b/cdist/conf/type/__qemu_img/manifest
old mode 100755
new mode 100644
index 55f3bf16..e0ff6e03
--- a/cdist/conf/type/__qemu_img/manifest
+++ b/cdist/conf/type/__qemu_img/manifest
@@ -1,9 +1,10 @@
-#!/bin/sh -e
+#!/bin/sh
#
################################################################################
# Default settings
#
+format="$(cat "$__object/parameter/format")"
state_should="$(cat "$__object/parameter/state")"
diskimage="/$__object_id"
diff --git a/cdist/conf/type/__rbenv/manifest b/cdist/conf/type/__rbenv/manifest
old mode 100755
new mode 100644
index e5c3d2f8..767abdba
--- a/cdist/conf/type/__rbenv/manifest
+++ b/cdist/conf/type/__rbenv/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2014 Nico Schottelius (nico-cdist at schottelius.org)
#
diff --git a/cdist/conf/type/__rsync/gencode-local b/cdist/conf/type/__rsync/gencode-local
old mode 100755
new mode 100644
index e36ded2f..8d268d7e
--- a/cdist/conf/type/__rsync/gencode-local
+++ b/cdist/conf/type/__rsync/gencode-local
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Dominique Roux (dominique.roux4 at gmail.com)
#
@@ -29,9 +29,9 @@ fi
set --
if [ -f "$__object/parameter/rsync-opts" ]; then
- while read -r opts; do
+ while read opts; do
set -- "$@" "--$opts"
- done < "$__object/parameter/rsync-opts"
+ done < $__object/parameter/rsync-opts
fi
echo rsync -a \
diff --git a/cdist/conf/type/__rsync/gencode-remote b/cdist/conf/type/__rsync/gencode-remote
old mode 100755
new mode 100644
index 074246af..a1135ea6
--- a/cdist/conf/type/__rsync/gencode-remote
+++ b/cdist/conf/type/__rsync/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Dominique Roux (dominique.roux4 at gmail.com)
#
diff --git a/cdist/conf/type/__rsync/manifest b/cdist/conf/type/__rsync/manifest
old mode 100755
new mode 100644
index 9bd44c6d..0e4cc1f4
--- a/cdist/conf/type/__rsync/manifest
+++ b/cdist/conf/type/__rsync/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Dominique Roux (dominique.roux4 at gmail.com)
#
diff --git a/cdist/conf/type/__rvm/explorer/state b/cdist/conf/type/__rvm/explorer/state
index 74d17048..f43f5509 100755
--- a/cdist/conf/type/__rvm/explorer/state
+++ b/cdist/conf/type/__rvm/explorer/state
@@ -28,7 +28,7 @@ if [ "$user" = "root" ]; then
echo absent
fi
else
- if su - "$user" -c "[ -d \"\$HOME/.rvm\" ]" ; then
+ if su - $user -c "[ -d \"\$HOME/.rvm\" ]" ; then
echo "present"
else
echo "absent"
diff --git a/cdist/conf/type/__rvm/gencode-remote b/cdist/conf/type/__rvm/gencode-remote
index 993191c1..dbc6ba60 100755
--- a/cdist/conf/type/__rvm/gencode-remote
+++ b/cdist/conf/type/__rvm/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Evax Software
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
@@ -34,7 +34,7 @@ DONE
absent)
cat << DONE
su - $user -c "rm -Rf \"\\\$HOME/.rvm\";
-sed '/rvm\\/scripts\\/rvm/d' \"\\\$HOME/.bashrc\" > \"\\\$HOME/.bashrc.cdist-tmp\"
+sed '/rvm\/scripts\/rvm/d' \"\\\$HOME/.bashrc\" > \"\\\$HOME/.bashrc.cdist-tmp\"
mv \"\\\$HOME/.bashrc.cdist-tmp\" \"\\\$HOME/.bashrc\""
DONE
;;
diff --git a/cdist/conf/type/__rvm/manifest b/cdist/conf/type/__rvm/manifest
index 0230156b..482c0d17 100755
--- a/cdist/conf/type/__rvm/manifest
+++ b/cdist/conf/type/__rvm/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Evax Software
#
diff --git a/cdist/conf/type/__rvm_gem/gencode-remote b/cdist/conf/type/__rvm_gem/gencode-remote
index 9212de91..1fe6e78e 100755
--- a/cdist/conf/type/__rvm_gem/gencode-remote
+++ b/cdist/conf/type/__rvm_gem/gencode-remote
@@ -20,6 +20,8 @@
gem="$__object_id"
gemset="$(cat "$__object/parameter/gemset")"
+ruby="$(echo "$gemset" | cut -d '@' -f 1)"
+gemsetname="$(echo "$gemset" | cut -d '@' -f 2)"
state_is="$(cat "$__object/explorer/state")"
user="$(cat "$__object/parameter/user")"
state_should="$(cat "$__object/parameter/state")"
diff --git a/cdist/conf/type/__rvm_gemset/explorer/state b/cdist/conf/type/__rvm_gemset/explorer/state
index e300453b..fa643a6e 100755
--- a/cdist/conf/type/__rvm_gemset/explorer/state
+++ b/cdist/conf/type/__rvm_gemset/explorer/state
@@ -18,6 +18,9 @@
# along with cdist. If not, see .
#
+gemset="$__object_id"
+ruby="$(echo "$gemset" | cut -d '@' -f 1)"
+gemsetname="$(echo "$gemset" | cut -d '@' -f2)"
user="$(cat "$__object/parameter/user")"
if [ ! -e "~$user/.rvm/scripts/rvm" ] ; then
@@ -25,9 +28,7 @@ if [ ! -e "~$user/.rvm/scripts/rvm" ] ; then
exit 0
fi
-# shellcheck disable=SC2016
if su - "$user" -c 'source ~/.rvm/scripts/rvm; rvm list strings | grep -q "^$ruby\$"'; then
- # shellcheck disable=SC2016
if su - "$user" -c 'source ~/.rvm/scripts/rvm; rvm use "$ruby" > /dev/null; rvm gemset list strings | cut -f 1 -d " " | grep -q "^$gemsetname\$"'; then
echo "present"
exit 0
diff --git a/cdist/conf/type/__rvm_gemset/gencode-remote b/cdist/conf/type/__rvm_gemset/gencode-remote
index 3cdc66a6..f0c0052b 100755
--- a/cdist/conf/type/__rvm_gemset/gencode-remote
+++ b/cdist/conf/type/__rvm_gemset/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Evax Software
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
@@ -33,7 +33,7 @@ case "$state_should" in
cat << DONE
su - "$user" -c "source ~/.rvm/scripts/rvm; rvm $gemset --create"
DONE
- if [ -f "$__object/parameter/default" ]; then
+ if -f "$__object/parameter/default"; then
cat << DONE
su - "$user" -c "source ~/.rvm/scripts/rvm; rvm use --default $gemset"
DONE
diff --git a/cdist/conf/type/__rvm_ruby/gencode-remote b/cdist/conf/type/__rvm_ruby/gencode-remote
index f2fd41ef..f1de3906 100755
--- a/cdist/conf/type/__rvm_ruby/gencode-remote
+++ b/cdist/conf/type/__rvm_ruby/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Evax Software
#
@@ -21,6 +21,7 @@
ruby="$__object_id"
state_is="$(cat "$__object/explorer/state")"
user="$(cat "$__object/parameter/user")"
+default="$(cat "$__object/parameter/default" 2>/dev/null || true)"
state_should="$(cat "$__object/parameter/state")"
[ "$state_is" = "$state_should" ] && exit 0
diff --git a/cdist/conf/type/__rvm_ruby/manifest b/cdist/conf/type/__rvm_ruby/manifest
index 3f63eb11..db8fd830 100755
--- a/cdist/conf/type/__rvm_ruby/manifest
+++ b/cdist/conf/type/__rvm_ruby/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
#
diff --git a/cdist/conf/type/__sensible_editor/explorer/editor_path b/cdist/conf/type/__sensible_editor/explorer/editor_path
deleted file mode 100644
index dcf63c9b..00000000
--- a/cdist/conf/type/__sensible_editor/explorer/editor_path
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-# Check if the given editor is present on the target system and determine its
-# absolute path.
-#
-
-die() {
- echo "$@" >&2
- exit 1
-}
-
-editor_missing() { die "Editor '$1' is missing on the target system."; }
-editor_no_alternative() {
- die "Editor '$1' is not in the alternatives list of the target system." \
- "$(test -n "${editors}" && printf '\nPlease choose one of:\n\n%s\n' "${editors}")"
-}
-
-# No need to check for the path if the file is supposed to be removed.
-test "$(cat "${__object}/parameter/state")" != 'absent' || exit 0
-
-
-case $("${__explorer}/os")
-in
- debian|devuan|ubuntu)
- has_alternatives=true
-
- # NOTE: Old versions do not support `--list`, in this case ignore the errors.
- # This will require an absolute path to be provided, though.
- editors=$(update-alternatives --list editor 2>/dev/null)
- ;;
- *)
- # NOTE: RedHat has an alternatives system but it doesn't usually track
- # editors and it is a pain to extract the list.
- has_alternatives=false
- ;;
-esac
-
-# Read --editor parameter and check its value since it is "optional"
-editor=$(cat "${__object}/parameter/editor" 2>/dev/null) || true
-test -n "${editor}" || die 'Please provide an --editor to configure.'
-
-case $editor
-in
- /*)
- is_abspath=true
- ;;
- */*)
- die 'Relative editor paths are not supported'
- ;;
- *)
- is_abspath=false
- ;;
-esac
-
-
-if $has_alternatives && test -n "${editors}"
-then
- IFS='
-'
- if ! $is_abspath
- then
- # First, try to resolve the absolute path using $editors.
- while true
- do
- for e in $editors
- do
- if test "$(basename "${e}")" = "${editor}"
- then
- editor="${e}"
- break 2 # break out of both loops
- fi
- done
-
- # Iterating through alternatives did not yield a result
- editor_no_alternative "${editor}"
- break
- done
- fi
-
- # Check if editor is present
- test -f "${editor}" || editor_missing "${editor}"
-
- for e in $editors
- do
- if test "${editor}" = "${e}"
- then
- # Editor is part of the alternatives list -> use it!
- echo "${editor}"
- exit 0
- fi
- done
-
- editor_no_alternative "${editor}"
-else
- # NOTE: This branch is mostly for RedHat-based systems which do
- # not track editor alternatives. To make this type useful
- # on RedHat at all we allow an absoloute path to be provided
- # in any case.
-
- if $is_abspath
- then
- test -x "${editor}" || editor_missing "${editor}"
-
- echo "${editor}"
- exit 0
- else
- die "The target doesn't list any editor alternatives. " \
- "Please specify an absolute path or populate the alternatives list."
- fi
-fi
-
-# The script should never reach this statement!
-exit 1
diff --git a/cdist/conf/type/__sensible_editor/explorer/group b/cdist/conf/type/__sensible_editor/explorer/group
deleted file mode 100644
index 5d288189..00000000
--- a/cdist/conf/type/__sensible_editor/explorer/group
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-# Determines the primary group of the user.
-#
-
-user=$__object_id
-
-id -gn "${user}" 2>/dev/null
diff --git a/cdist/conf/type/__sensible_editor/explorer/user_home b/cdist/conf/type/__sensible_editor/explorer/user_home
deleted file mode 100644
index b88243f7..00000000
--- a/cdist/conf/type/__sensible_editor/explorer/user_home
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-# Determines the home folder of the target user.
-#
-
-user=$__object_id
-home=$(getent passwd "${user}" | cut -d':' -f6)
-
-if ! test -d "${home}"
-then
- echo "Cannot find home directory of user ${user}" >&2
- exit 1
-fi
-
-echo "${home}"
diff --git a/cdist/conf/type/__sensible_editor/man.rst b/cdist/conf/type/__sensible_editor/man.rst
deleted file mode 100644
index 9b805e06..00000000
--- a/cdist/conf/type/__sensible_editor/man.rst
+++ /dev/null
@@ -1,78 +0,0 @@
-cdist-type__sensible_editor(7)
-==============================
-
-NAME
-----
-cdist-type__sensible_editor - Select the sensible-editor
-
-
-DESCRIPTION
------------
-This cdist type allows you to select the :strong:`sensible-editor` for
-a given user.
-
-
-REQUIRED PARAMETERS
--------------------
-editor
- Name or path of the editor to be selected.
- On systems other than Debian derivatives an absolute path is required.
-
- It is permissible to omit this parameter if --state is absent.
-
-
-OPTIONAL PARAMETERS
--------------------
-state
- 'present', 'absent', or 'exists'. Defaults to 'present', where:
-
- present
- the sensible-editor is exactly what is specified in --editor.
- absent
- no sensible-editor configuration is present.
- exists
- the sensible-editor will be set to what is specified in --editor,
- unless there already is a configuration on the target system.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __sensible_editor root --editor /bin/ed # ed(1) is the standard
- __sensible_editor noob --editor nano
-
-
-LIMITATIONS
------------
-
-This type depends upon the :strong:`sensible-editor`\ (1) script which
-is part of the sensible-utils package.
-
-Therefore, the following operating systems are supported:
- * Debian 8 (jessie) or later
- * Devuan
- * Ubuntu 8.10 (intrepid) or later
- * RHEL/CentOS 7 or later (EPEL repo required)
- * Fedora 21 or later
-
-Note: on old versions of Ubuntu the sensible-* utils are part of the
-debianutils package.
-
-SEE ALSO
---------
-:strong:`select-editor`\ (1), :strong:`sensible-editor`\ (1).
-
-
-AUTHOR
--------
-Dennis Camera
-
-
-COPYING
--------
-Copyright \(C) 2019 Dennis Camera.
-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.
diff --git a/cdist/conf/type/__sensible_editor/manifest b/cdist/conf/type/__sensible_editor/manifest
deleted file mode 100644
index 1cdb0c2c..00000000
--- a/cdist/conf/type/__sensible_editor/manifest
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/sh -e
-# -*- mode: sh; indent-tabs-mode: t -*-
-#
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-version_ge() {
- awk -F '[^0-9.]' -v target="${1:?}" '
- function max(x, y) { return x > y ? x : y; }
- BEGIN {
- getline;
- nx = split($1, x, ".");
- ny = split(target, y, ".");
- for (i = 1; i <= max(nx, ny); ++i) {
- diff = int(x[i]) - int(y[i]);
- if (diff < 0) exit 1;
- else if (diff > 0) exit 0;
- else continue;
- }
- }'
-}
-
-not_supported() {
- echo "OS ${os} does not support __sensible_editor." >&2
- echo 'If it does, please provide a patch.' >&2
- exit 1
-}
-
-os=$(cat "${__global}/explorer/os")
-os_version=$(cat "${__global}/explorer/os_version")
-
-state=$(cat "${__object}/parameter/state")
-user=$__object_id
-
-if test "${state}" != 'present' && test "${state}" != 'exists' && test "${state}" != 'absent'
-then
- echo 'Only "present", "exists", and "absent" are allowed for --state' >&2
- exit 1
-fi
-
-package_name='sensible-utils'
-
-case $os
-in
- debian)
- pkg_type='apt'
- ;;
- devuan)
- pkg_type='apt'
- ;;
- ubuntu)
- (echo "${os_version}" | version_ge 10.04) || package_name='debianutils'
- pkg_type='apt'
- ;;
- centos|fedora|redhat|scientific)
- pkg_type='yum'
- ;;
- *)
- not_supported
- ;;
-esac
-
-if test "${state}" != 'absent'
-then
- __package "${package_name}" --state present \
- --type "${pkg_type}"
- export require="__package/${package_name}"
-fi
-
-editor_path=$(cat "${__object}/explorer/editor_path")
-user_home=$(cat "${__object}/explorer/user_home")
-group=$(cat "${__object}/explorer/group")
-
-__file "${user_home}/.selected_editor" --state "${state}" \
- --owner "${user}" --group "${group}" --mode 0644 \
- --source - <
-
-
-COPYING
--------
-Copyright \(C) 2019 Timothée Floure. 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.
diff --git a/cdist/conf/type/__service/manifest b/cdist/conf/type/__service/manifest
deleted file mode 100644
index cb5af234..00000000
--- a/cdist/conf/type/__service/manifest
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-manager="$(cat "$__object/explorer/service-manager")"
-
-name=$__object_id
-action="$(cat "$__object/parameter/action")"
-
-case "$manager" in
- systemd)
- __systemd_service "$name" --action "$action"
- ;;
- *)
- # Unknown: handled by `service $NAME $action` in gencode-remote.
- ;;
-esac
diff --git a/cdist/conf/type/__service/parameter/required b/cdist/conf/type/__service/parameter/required
deleted file mode 100644
index a9f84d41..00000000
--- a/cdist/conf/type/__service/parameter/required
+++ /dev/null
@@ -1 +0,0 @@
-action
diff --git a/cdist/conf/type/__ssh_authorized_key/explorer/entry b/cdist/conf/type/__ssh_authorized_key/explorer/entry
index ccab0afc..78031ab5 100755
--- a/cdist/conf/type/__ssh_authorized_key/explorer/entry
+++ b/cdist/conf/type/__ssh_authorized_key/explorer/entry
@@ -19,16 +19,8 @@
#
# extract the keytype and base64 encoded key ignoring any options and comment
-type_and_key="$(tr ' ' '\n' < "$__object/parameter/key"| awk '/^(ssh|ecdsa)-[^ ]+/ { printf $1" "; getline; printf $1 }')"
-# If type_and_key is empty, which is the case with an invalid key, do not grep $file because it results
-# in greping everything in file and all entries from file are removed.
-if [ -n "${type_and_key}" ]
-then
- file="$(cat "$__object/parameter/file")"
+type_and_key="$(cat "$__object/parameter/key" | tr ' ' '\n' | awk '/^(ssh|ecdsa)-[^ ]+/ { printf $1" "; getline; printf $1 }')"
+file="$(cat $__object/parameter/file)"
- # get any entries that match the type and key
-
- # NOTE: Do not match from the beginning of the line as there may be options
- # preceeding the key.
- grep "${type_and_key}\\([ \\n].*\\)*$" "$file" || true
-fi
+# get any entries that match the type and key
+grep ".*$type_and_key[ \n]" "$file" || true
diff --git a/cdist/conf/type/__ssh_authorized_key/gencode-remote b/cdist/conf/type/__ssh_authorized_key/gencode-remote
index f37aa565..6bbfa269 100755
--- a/cdist/conf/type/__ssh_authorized_key/gencode-remote
+++ b/cdist/conf/type/__ssh_authorized_key/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -20,15 +20,6 @@
set -u
-the_key="$(cat "$__object/parameter/key")"
-# validate key
-validated_key="$(echo "${the_key}" | tr ' ' '\n' | awk '/^(ssh|ecdsa)-[^ ]+/ { printf $1" "; getline; printf $1 }')"
-if [ -z "${validated_key}" ]
-then
- echo "Key is invalid: \"${the_key}\"" >&2
- exit 1
-fi
-
remove_line() {
file="$1"
line="$2"
@@ -48,7 +39,7 @@ add_line() {
line="$2"
# escape single quotes
line_sanitised=$(echo "$line" | sed -e "s/'/'\"'\"'/g")
- printf '%s' "printf '%s\\n' '$line_sanitised' >> $file"
+ printf '%s' "printf '%s\n' '$line_sanitised' >> $file"
}
@@ -59,16 +50,16 @@ mkdir "$__object/files"
(
if [ -f "$__object/parameter/option" ]; then
# comma seperated list of options
- options="$(tr '\n' ',' < "$__object/parameter/option")"
+ options="$(cat "$__object/parameter/option" | tr '\n' ',')"
printf '%s ' "${options%*,}"
fi
if [ -f "$__object/parameter/comment" ]; then
# extract the keytype and base64 encoded key ignoring any options and comment
- printf '%s ' "$(echo "${the_key}" | tr ' ' '\n' | awk '/^(ssh|ecdsa)-[^ ]+/ { printf $1" "; getline; printf $1 }')"
+ printf '%s ' "$(cat "$__object/parameter/key" | tr ' ' '\n' | awk '/^(ssh|ecdsa)-[^ ]+/ { printf $1" "; getline; printf $1 }')"
# override the comment with the one explicitly given
printf '%s' "$(cat "$__object/parameter/comment")"
else
- printf '%s' "${the_key}"
+ printf '%s' "$(cat "$__object/parameter/key")"
fi
printf '\n'
) > "$__object/files/should"
@@ -78,7 +69,7 @@ if [ -s "$__object/explorer/entry" ]; then
# Note that the files have to be sorted for comparison with `comm`.
sort "$__object/explorer/entry" > "$__object/files/is"
comm -13 "$__object/files/should" "$__object/files/is" | {
- while read -r entry; do
+ while read entry; do
remove_line "$file" "$entry"
done
}
@@ -88,7 +79,7 @@ fi
entry="$(cat "$__object/files/should")"
state_should="$(cat "$__object/parameter/state")"
num_existing_entries=$(grep -c -F -x "$entry" "$__object/explorer/entry" || true)
-if [ "$num_existing_entries" -eq 1 ]; then
+if [ $num_existing_entries -eq 1 ]; then
state_is="present"
else
# Posix grep does not define the -m option, so we can not remove a single
@@ -111,10 +102,8 @@ fi
case "$state_should" in
present)
add_line "$file" "$entry"
- echo "added to $file ($entry)" >> "$__messages_out"
;;
absent)
remove_line "$file" "$entry"
- echo "removed from $file ($entry)" >> "$__messages_out"
;;
esac
diff --git a/cdist/conf/type/__ssh_authorized_key/man.rst b/cdist/conf/type/__ssh_authorized_key/man.rst
index 087a3dae..b58ad879 100644
--- a/cdist/conf/type/__ssh_authorized_key/man.rst
+++ b/cdist/conf/type/__ssh_authorized_key/man.rst
@@ -36,15 +36,6 @@ state
if the given keys should be 'present' or 'absent', defaults to 'present'.
-MESSAGES
---------
-added to `file` (`entry`)
- The key `entry` (with optional comment) was added to `file`.
-
-removed from `file` (`entry`)
- The key `entry` (with optional comment) was removed from `file`.
-
-
EXAMPLES
--------
diff --git a/cdist/conf/type/__ssh_authorized_keys/explorer/file b/cdist/conf/type/__ssh_authorized_keys/explorer/file
index 017bcb38..5a02721a 100755
--- a/cdist/conf/type/__ssh_authorized_keys/explorer/file
+++ b/cdist/conf/type/__ssh_authorized_keys/explorer/file
@@ -1,7 +1,6 @@
#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -20,42 +19,9 @@
#
if [ -f "$__object/parameter/file" ]; then
- cat "$__object/parameter/file"
+ cat "$__object/parameter/file"
else
- if [ -s "$__object/parameter/owner" ]
- then
- owner=$(cat "$__object/parameter/owner")
- else
- owner="$__object_id"
- fi
-
- if command -v getent >/dev/null
- then
- owner_line=$(getent passwd "$owner")
- elif [ -f /etc/passwd ]
- then
- case $owner
- in
- [0-9][0-9]*)
- owner_line=$(awk -F: "\$3 == \"${owner}\" { print }" /etc/passwd)
- ;;
- *)
- owner_line=$(awk -F: "\$1 == \"${owner}\" { print }" /etc/passwd)
- ;;
- esac
- fi
-
- if [ "$owner_line" ]
- then
- home=$(echo "$owner_line" | cut -d':' -f6)
- fi
-
- if [ ! -d "$home" ]
- then
- # Don't know how to determine user's home directory, fall back to ~
- home="~$owner"
- command -v realpath >/dev/null && home=$(realpath "$home")
- fi
-
- [ -d "$home" ] && echo "$home/.ssh/authorized_keys"
+ owner="$(cat "$__object/parameter/owner" 2>/dev/null || echo "$__object_id")"
+ home=$(getent passwd "$owner" | cut -d':' -f 6)
+ echo "$home/.ssh/authorized_keys"
fi
diff --git a/cdist/conf/type/__ssh_authorized_keys/explorer/group b/cdist/conf/type/__ssh_authorized_keys/explorer/group
index d259050f..72a4e314 100755
--- a/cdist/conf/type/__ssh_authorized_keys/explorer/group
+++ b/cdist/conf/type/__ssh_authorized_keys/explorer/group
@@ -1,7 +1,6 @@
#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -19,28 +18,6 @@
# along with cdist. If not, see .
#
-if [ -s "$__object/parameter/owner" ]
-then
- owner=$(cat "$__object/parameter/owner")
-else
- owner="$__object_id"
-fi
-
-if command -v getent >/dev/null
-then
- gid=$(getent passwd "$owner" | cut -d':' -f4)
- getent group "$gid" || true
-else
- # Fallback to local file scanning
- case $owner
- in
- [0-9][0-9]*)
- gid=$(awk -F: "\$3 == \"${owner}\" { print \$4 }" /etc/passwd)
- ;;
- *)
- gid=$(awk -F: "\$1 == \"${owner}\" { print \$4 }" /etc/passwd)
- ;;
- esac
-
- awk -F: "\$3 == \"$gid\" { print }" /etc/group
-fi
+owner="$(cat "$__object/parameter/owner" 2>/dev/null || echo "$__object_id")"
+gid="$(getent passwd "$owner" | cut -d':' -f 4)"
+getent group "$gid" || true
diff --git a/cdist/conf/type/__ssh_authorized_keys/manifest b/cdist/conf/type/__ssh_authorized_keys/manifest
index b9f0582e..6a536e1b 100755
--- a/cdist/conf/type/__ssh_authorized_keys/manifest
+++ b/cdist/conf/type/__ssh_authorized_keys/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
@@ -23,13 +23,7 @@ owner="$(cat "$__object/parameter/owner" 2>/dev/null || echo "$__object_id")"
state="$(cat "$__object/parameter/state" 2>/dev/null)"
file="$(cat "$__object/explorer/file")"
-if [ ! -f "$__object/parameter/nofile" ] && [ -z "$file" ]
-then
- echo "Cannot determine path of authorized_keys file" >&2
- exit 1
-fi
-
-if [ ! -f "$__object/parameter/noparent" ] || [ ! -f "$__object/parameter/nofile" ]; then
+if [ ! -f "$__object/parameter/noparent" -o ! -f "$__object/parameter/nofile" ]; then
group="$(cut -d':' -f 1 "$__object/explorer/group")"
if [ -z "$group" ]; then
echo "Failed to get owners group from explorer." >&2
@@ -51,11 +45,23 @@ if [ ! -f "$__object/parameter/noparent" ] || [ ! -f "$__object/parameter/nofile
fi
fi
+# Remove legacy blocks created by old versions of this type
+# FIXME: remove me in 3.2+
+__block "$__object_name" \
+ --file "$file" \
+ --prefix "#cdist:$__object_name" \
+ --suffix "#/cdist:$__object_name" \
+ --state 'absent' \
+ --text - << DONE
+remove legacy block
+DONE
+export require="__block/$__object_name"
+
_cksum() {
echo "$1" | cksum | cut -d' ' -f 1
}
-while read -r key; do
+while read key; do
type_and_key="$(echo "$key" | tr ' ' '\n' | awk '/^(ssh|ecdsa)-[^ ]+/ { printf $1" "; getline; printf $1 }')"
object_id="$(_cksum "$file")-$(_cksum "$type_and_key")"
set -- "$object_id"
@@ -63,8 +69,7 @@ while read -r key; do
set -- "$@" --key "$key"
set -- "$@" --state "$state"
if [ -f "$__object/parameter/option" ]; then
- # shellcheck disable=SC2046
- set -- "$@" $(printf -- '--option %s ' $(cat "$__object/parameter/option"))
+ set -- "$@" --option "$(cat "$__object/parameter/option")"
fi
if [ -f "$__object/parameter/comment" ]; then
set -- "$@" --comment "$(cat "$__object/parameter/comment")"
diff --git a/cdist/conf/type/__ssh_dot_ssh/explorer/group b/cdist/conf/type/__ssh_dot_ssh/explorer/group
index faf44cb8..cdea6fe7 100755
--- a/cdist/conf/type/__ssh_dot_ssh/explorer/group
+++ b/cdist/conf/type/__ssh_dot_ssh/explorer/group
@@ -1,7 +1,6 @@
#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -19,11 +18,5 @@
# along with cdist. If not, see .
#
-gid=$("$__type_explorer/passwd" | cut -d':' -f4)
-
-if command -v getent >/dev/null
-then
- getent group "$gid" || true
-else
- awk -F: "\$3 == \"$gid\" { print }" /etc/group
-fi
+gid="$("$__type_explorer/passwd" | cut -d':' -f 4)"
+getent group "$gid" || true
diff --git a/cdist/conf/type/__ssh_dot_ssh/explorer/passwd b/cdist/conf/type/__ssh_dot_ssh/explorer/passwd
index 42686b20..3fbad06f 100755
--- a/cdist/conf/type/__ssh_dot_ssh/explorer/passwd
+++ b/cdist/conf/type/__ssh_dot_ssh/explorer/passwd
@@ -2,7 +2,6 @@
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
-# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -22,16 +21,4 @@
owner="$__object_id"
-if command -v getent >/dev/null
-then
- getent passwd "$owner" || true
-else
- case $owner in
- [0-9][0-9]*)
- awk -F: "\$3 == \"$owner\" { print }" /etc/passwd
- ;;
- *)
- grep "^$owner:" /etc/passwd || true
- ;;
- esac
-fi
+getent passwd "$owner" || true
diff --git a/cdist/conf/type/__ssh_dot_ssh/manifest b/cdist/conf/type/__ssh_dot_ssh/manifest
index bc3a3952..4b797afb 100755
--- a/cdist/conf/type/__ssh_dot_ssh/manifest
+++ b/cdist/conf/type/__ssh_dot_ssh/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
diff --git a/cdist/conf/type/__staged_file/gencode-local b/cdist/conf/type/__staged_file/gencode-local
index ba9e8798..1a236789 100755
--- a/cdist/conf/type/__staged_file/gencode-local
+++ b/cdist/conf/type/__staged_file/gencode-local
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
# 2015 Nico Schottelius (nico-cdist at schottelius.org)
@@ -23,6 +23,7 @@
destination="$__object_id"
source="$(cat "$__object/parameter/source")"
+cksum="$(cat "$__object/parameter/cksum")"
stage_dir="$(cat "$__object/parameter/stage-dir")"
state="$(cat "$__object/parameter/state")"
fetch_command="$(cat "$__object/parameter/fetch-command")"
@@ -56,30 +57,24 @@ get_file() {
}
fetch_file() {
- # shellcheck disable=SC2059
printf "$fetch_command" "$source"
printf ' > "%s"\n' "$stage_file"
}
fetch_and_prepare_file() {
- # shellcheck disable=SC2016
- printf 'tmpdir="$(mktemp -d -p "/tmp" "%s")"\n' "${__type##*/}.XXXXXXXXXX"
- # shellcheck disable=SC2016
+ printf 'tmpdir="$(mktemp -d --tmpdir="/tmp" "%s")"\n' "${__type##*/}.XXXXXXXXXX"
printf 'cd "$tmpdir"\n'
- # shellcheck disable=SC2059
- printf "$fetch_command > \"%s\"\\n" "$source" "$source_file_name"
+ printf "$fetch_command > \"%s\"\n" "$source" "$source_file_name"
prepare_command="$(cat "$__object/parameter/prepare-command")"
- # shellcheck disable=SC2059
- printf "$prepare_command > \"%s\"\\n" "$source_file_name" "$stage_file"
+ printf "$prepare_command > \"%s\"\n" "$source_file_name" "$stage_file"
printf 'cd - >/dev/null\n'
- # shellcheck disable=SC2016
printf 'rm -rf "$tmpdir"\n'
}
cat << DONE
verify_cksum() {
cksum_is="\$(cksum "$stage_file" | cut -d' ' -f1,2)"
- cksum_should="$(cut -d' ' -f1,2 "$__object/parameter/cksum")"
+ cksum_should="$(cat "$__object/parameter/cksum" | cut -d' ' -f1,2)"
if [ "\$cksum_is" = "\$cksum_should" ]; then
return 0
else
diff --git a/cdist/conf/type/__staged_file/manifest b/cdist/conf/type/__staged_file/manifest
index c8e1fbbb..454948b4 100755
--- a/cdist/conf/type/__staged_file/manifest
+++ b/cdist/conf/type/__staged_file/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -19,7 +19,11 @@
#
destination="$__object_id"
+source="$(cat "$__object/parameter/source")"
+cksum="$(cat "$__object/parameter/cksum")"
stage_dir="$(cat "$__object/parameter/stage-dir")"
+state="$(cat "$__object/parameter/state")"
+fetch_command="$(cat "$__object/parameter/fetch-command")"
stage_file="${stage_dir}/${destination}"
set -- "/${destination}"
diff --git a/cdist/conf/type/__start_on_boot/explorer/state b/cdist/conf/type/__start_on_boot/explorer/state
index b7a6cf0f..d49f01c7 100644
--- a/cdist/conf/type/__start_on_boot/explorer/state
+++ b/cdist/conf/type/__start_on_boot/explorer/state
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# 2012-2019 Nico Schottelius (nico-cdist at schottelius.org)
+# 2012-2015 Nico Schottelius (nico-cdist at schottelius.org)
# 2013 Daniel Heule (hda at sfs.biz)
#
# This file is part of cdist.
@@ -38,27 +38,12 @@ if [ "$init" = 'systemd' ]; then
else
case "$os" in
debian|openwrt|devuan)
- state="absent"
- for file in "/etc/rc$runlevel.d/S"??"$name"
- do
- if [ -f "$file" ]
- then
- state="present"
- break
- fi
- done
+ state="present"
+ [ -f "/etc/rc$runlevel.d/S"??"$name" ] || state="absent"
;;
ubuntu)
state="absent"
- for file in "/etc/rc$runlevel.d/S"??"$name"
- do
- if [ -f "$file" ]
- then
- state="present"
- break
- fi
- done
-
+ [ -f "/etc/rc$runlevel.d/S"??"$name" ] && state="present"
[ -f "/etc/init/${name}.conf" ] && state="present"
;;
@@ -75,25 +60,10 @@ else
state=$(chkconfig --check "$name" "$runlevel" || echo absent)
[ "$state" ] || state="present"
;;
- gentoo|alpine)
- state="absent"
- for d in /etc/runlevels/*; do
- if [ -f "/etc/runlevels/${d}/${name}" ];then
- state="present"
- break
- fi
- done
+ gentoo)
+ state="present"
+ [ -f "/etc/runlevels/${target_runlevel}/${name}" ] || state="absent"
;;
- freebsd)
- state="absent"
- service -e | grep "/$name$" && state="present"
- ;;
- openbsd)
- state='absent'
- # OpenBSD 5.7 and higher
- rcctl ls on | grep "^${name}$" && state='present'
- ;;
-
*)
echo "Unsupported os: $os" >&2
exit 1
diff --git a/cdist/conf/type/__start_on_boot/gencode-remote b/cdist/conf/type/__start_on_boot/gencode-remote
old mode 100755
new mode 100644
index c900933f..0ab67a1a
--- a/cdist/conf/type/__start_on_boot/gencode-remote
+++ b/cdist/conf/type/__start_on_boot/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012-2013 Nico Schottelius (nico-cdist at schottelius.org)
# 2016 Daniel Heule (hda at sfs.biz)
@@ -37,16 +37,16 @@ case "$state_should" in
if [ "$init" = 'systemd' ]; then
# this handles ALL linux distros with systemd
# e.g. archlinux, gentoo in some cases, new RHEL and SLES versions
- echo "systemctl -q enable '$name'"
+ echo "systemctl -q enable \"$name\""
else
case "$os" in
debian)
case "$os_version" in
[1-7]*)
- echo "update-rc.d '$name' defaults >/dev/null"
+ echo "update-rc.d \"$name\" defaults >/dev/null"
;;
8*)
- echo "systemctl enable '$name'"
+ echo "systemctl enable \"$name\""
;;
*)
echo "Unsupported version $os_version of $os" >&2
@@ -55,35 +55,26 @@ case "$state_should" in
esac
;;
devuan)
- echo "update-rc.d '$name' defaults >/dev/null"
+ echo "update-rc.d \"$name\" defaults >/dev/null"
;;
- alpine|gentoo)
- echo "rc-update add '$name' '$target_runlevel'"
+ gentoo)
+ echo rc-update add \"$name\" \"$target_runlevel\"
;;
amazon|scientific|centos|fedora|owl|redhat|suse)
- echo "chkconfig '$name' on"
+ echo chkconfig \"$name\" on
;;
openwrt)
# 'enable' can be successful and still return a non-zero exit
# code, deal with it by checking for success ourselves in that
# case (the || ... part).
- echo "'/etc/init.d/$name' enable || [ -f /etc/rc.d/S??'$name' ]"
+ echo "/etc/init.d/\"$name\" enable || [ -f /etc/rc.d/S??\"$name\" ]"
;;
ubuntu)
- echo "update-rc.d '$name' defaults >/dev/null"
- ;;
-
- freebsd)
- : # handled in manifest
- ;;
-
- openbsd)
- # OpenBSD 5.7 and higher
- echo "rcctl enable '$name'"
+ echo "update-rc.d \"$name\" defaults >/dev/null"
;;
*)
@@ -98,29 +89,24 @@ case "$state_should" in
if [ "$init" = 'systemd' ]; then
# this handles ALL linux distros with systemd
# e.g. archlinux, gentoo in some cases, new RHEL and SLES versions
- echo "systemctl -q disable '$name'"
+ echo "systemctl -q disable \"$name\""
else
case "$os" in
debian|ubuntu|devuan)
- echo "update-rc.d -f '$name' remove"
+ echo update-rc.d -f \"$name\" remove
;;
- alpine|gentoo)
- echo "rc-update del '$name' '$target_runlevel'"
+ gentoo)
+ echo rc-update del \"$name\" \"$target_runlevel\"
;;
centos|fedora|owl|redhat|suse)
- echo "chkconfig '$name' off"
+ echo chkconfig \"$name\" off
;;
openwrt)
- echo "'/etc/init.d/$name' disable"
- ;;
-
- openbsd)
- # OpenBSD 5.7 and higher
- echo "rcctl disable '$name'"
+ echo "\"/etc/init.d/$name\" disable"
;;
*)
diff --git a/cdist/conf/type/__start_on_boot/man.rst b/cdist/conf/type/__start_on_boot/man.rst
index f8afe94b..851d1a89 100644
--- a/cdist/conf/type/__start_on_boot/man.rst
+++ b/cdist/conf/type/__start_on_boot/man.rst
@@ -12,7 +12,7 @@ This cdist type allows you to enable or disable stuff to be started
at boot of your operating system.
Warning: This type has not been tested intensively and is not fully
-supported.
+supported (i.e. \*BSD are not implemented).
REQUIRED PARAMETERS
@@ -55,7 +55,7 @@ Nico Schottelius
COPYING
-------
-Copyright \(C) 2012-2019 Nico Schottelius. You can redistribute it
+Copyright \(C) 2012 Nico Schottelius. 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.
diff --git a/cdist/conf/type/__start_on_boot/manifest b/cdist/conf/type/__start_on_boot/manifest
deleted file mode 100644
index c1c983ec..00000000
--- a/cdist/conf/type/__start_on_boot/manifest
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh -e
-
-state_should="$(cat "$__object/parameter/state")"
-state_is=$(cat "$__object/explorer/state")
-name="$__object_id"
-
-# Short circuit if nothing is to be done
-[ "$state_should" = "$state_is" ] && exit 0
-
-os=$(cat "$__global/explorer/os")
-
-case "$os" in
- freebsd)
- if [ "$state_should" = 'present' ]; then
- value='YES'
- else
- value='NO'
- fi
- __key_value "rcconf-$name-enable" \
- --file /etc/rc.conf \
- --key "${name}_enable" \
- --value "\"$value\"" \
- --delimiter '='
- ;;
- *)
- : # handled in gencode-remote
- ;;
-esac
diff --git a/cdist/conf/type/__sysctl/gencode-remote b/cdist/conf/type/__sysctl/gencode-remote
index 711d54e5..0f3b0b40 100755
--- a/cdist/conf/type/__sysctl/gencode-remote
+++ b/cdist/conf/type/__sysctl/gencode-remote
@@ -1,7 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2018 Takashi Yoshi (takashi at yoshi.email)
#
# This file is part of cdist.
#
@@ -27,29 +26,5 @@ if [ "$value_should" = "$value_is" ]; then
exit 0
fi
-os=$(cat "$__global/explorer/os")
-case "$os" in
- # Linux
- redhat|centos|ubuntu|debian|devuan|archlinux|gentoo|coreos)
- flag='-w'
- ;;
- # BusyBox
- alpine|openwrt)
- flag='-w'
- ;;
- macosx)
- # NOTE: Older versions of Mac OS X require the -w option.
- # Even though the flag is not mentioned in new man pages anymore,
- # it still works.
- flag='-w'
- ;;
- netbsd)
- flag='-w'
- ;;
- freebsd|openbsd)
- flag=''
- ;;
-esac
-
# set the current runtime value
-printf 'sysctl %s %s="%s"\n' "$flag" "$__object_id" "$value_should"
+printf 'sysctl -w %s="%s"\n' "$__object_id" "$value_should"
diff --git a/cdist/conf/type/__sysctl/manifest b/cdist/conf/type/__sysctl/manifest
index 71dea7f7..ac9117c4 100755
--- a/cdist/conf/type/__sysctl/manifest
+++ b/cdist/conf/type/__sysctl/manifest
@@ -1,8 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2018 Takashi Yoshi (takashi at yoshi.email)
-# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -24,12 +22,7 @@
os=$(cat "$__global/explorer/os")
case "$os" in
- # Linux
- alpine|redhat|centos|ubuntu|debian|devuan|archlinux|coreos)
- :
- ;;
- # BSD
- freebsd|macosx|netbsd|openbsd)
+ redhat|centos|ubuntu|debian|devuan|archlinux)
:
;;
*)
@@ -39,10 +32,8 @@ case "$os" in
;;
esac
-conf_path=$(cat "$__object/explorer/conf-path")
-
__key_value "$__object_name" \
--key "$__object_id" \
- --file "${conf_path}" \
+ --file /etc/sysctl.conf \
--value "$(cat "$__object/parameter/value")" \
--delimiter '='
diff --git a/cdist/conf/type/__systemd_service/explorer/state b/cdist/conf/type/__systemd_service/explorer/state
deleted file mode 100755
index f5f751d4..00000000
--- a/cdist/conf/type/__systemd_service/explorer/state
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/sh -e
-# explorer/state
-#
-# 2020 Matthias Stecher
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-# Check if the service is running or stopped.
-#
-# The explorer must check before if the service exist, because 'systemctl is-active'
-# will return "inactive" even if there is no service there:
-# systemctl cat foo # does not exist
-# systemctl is-active foo # is "inactive"
-
-
-# get name of the service
-if [ -f "$__object/parameter/name" ]; then
- name="$(cat "$__object/parameter/name")"
-else
- name="$__object_id"
-fi
-
-
-# check if the service exist, else exit without output (also if systemd doesn't exist)
-# do not exit here with an error code, will be done in the gencode-remote script
-systemctl cat "$name" > /dev/null 2>&1 || exit 0
-
-# print if the service is running or not
-systemctl is-active -q "$name" && printf "running" || printf "stopped"
diff --git a/cdist/conf/type/__systemd_service/gencode-remote b/cdist/conf/type/__systemd_service/gencode-remote
deleted file mode 100755
index c867ff22..00000000
--- a/cdist/conf/type/__systemd_service/gencode-remote
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/bin/sh -e
-# gencode-remote
-#
-# 2020 Matthias Stecher
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-# Checks the given state of the service and set it to the given
-# state. Optionally, it executes the action if service running.
-
-
-# get name of the service
-name="$__object/parameter/name"
-if [ -f "$name" ]; then
- name="$(cat "$name")"
-else
- name="$__object_id"
-fi
-
-
-# read current status and parameters
-state="$(cat "$__object/explorer/state")"
-should="$(cat "$__object/parameter/state")"
-
-# if systemd/service does not exist
-if [ -z "$state" ]; then
- printf "systemd or service '%s' does not exist!\n" "$name" >&2
- exit 1
-fi
-
-
-# save the action required
-required_action=""
-
-# check the state of the service that should be
-if [ "$state" != "$should" ]; then
- # select what to do to get the $should state
- case "$should" in
- running)
- if [ "$state" = "stopped" ]; then required_action="start"; fi
- ;;
-
- stopped)
- if [ "$state" = "running" ]; then required_action="stop"; fi
- ;;
- esac
-fi
-
-# check if the action can be achieved if given
-if [ -f "$__object/parameter/action" ] \
- && [ -z "$required_action" ] && [ "$state" = "running" ]; then
-
- # there must be an action
- action="$(cat "$__object/parameter/action")"
-
- # select the action to the required element
- case "$action" in
- restart)
- required_action="restart"
- ;;
-
- reload)
- required_action="reload"
- ;;
-
- *)
- printf "action '%s' does not exist!" "$action" >&2
- exit 2
- esac
-
- # Make a special check: only do this action if a dependency did something
- # it is required that the dependencies write there action to $__messages_in
- if [ -f "$__object/parameter/if-required" ]; then
- # exit here if there are no changes from the dependencies affected (nothing to do)
- if ! grep -q -f "$__object/require" "$__messages_in"; then exit 0; fi
- fi
-fi
-
-# print the execution command if a action given
-if [ -n "$required_action" ]; then
- # also print it as message
- echo "$required_action" >> "$__messages_out"
- echo "systemctl $required_action '$name'"
-fi
diff --git a/cdist/conf/type/__systemd_service/man.rst b/cdist/conf/type/__systemd_service/man.rst
deleted file mode 100644
index 7eca398b..00000000
--- a/cdist/conf/type/__systemd_service/man.rst
+++ /dev/null
@@ -1,110 +0,0 @@
-cdist-type__systemd-service(7)
-==============================
-
-NAME
-----
-cdist-type__systemd-service - Controls a systemd service state
-
-DESCRIPTION
------------
-This type controls systemd services to define a state of the service,
-or an action like reloading or restarting. It is useful to reload a
-service after configuration applied or shutdown one service.
-
-The activation or deactivation is out of scope. Look for the
-:strong:`cdist-type__systemd_util`\ (7) type instead.
-
-REQUIRED PARAMETERS
--------------------
-
-None.
-
-OPTIONAL PARAMETERS
--------------------
-
-name
- String which will used as name instead of the object id.
-
-state
- The state which the service should be in:
-
- running
- Service should run (default)
-
- stoppend
- Service should stopped
-
-action
- Executes an action on on the service. It will only execute it if the
- service keeps the state **running**. There are following actions, where:
-
- reload
- Reloads the service
-
- restart
- Restarts the service
-
-BOOLEAN PARAMETERS
-------------------
-
-if-required
- Only execute the action if minimum one required type outputs a message to
- **$__messages_out**. Through this, the action should only executed if a
- dependency did something. The action will not executed if no dependencies
- given.
-
-MESSAGES
---------
-
-start
- Started the service
-
-stop
- Stopped the service
-
-restart
- Restarted the service
-
-reload
- Reloaded the service
-
-ABORTS
-------
-Aborts in following cases:
-
-systemd or the service does not exist
-
-EXAMPLES
---------
-.. code-block:: sh
-
- # service must run
- __systemd_service nginx
-
- # service must stopped
- __systemd_service sshd \
- --state stopped
-
- # restart the service
- __systemd_service apache2 \
- --action restart
-
- # makes sure the service exist with an alternative name
- __systemd_service foo \
- --name sshd
-
- # reload the service for a modified configuration file
- # only reloads the service if the file really changed
- require="__config_file/etc/foo.conf" __systemd_service foo \
- --action reload --if-required
-
-AUTHORS
--------
-Matthias Stecher
-
-COPYRIGHT
----------
-Copyright \(C) 2020 Matthias Stecher. 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.
diff --git a/cdist/conf/type/__systemd_service/parameter/boolean b/cdist/conf/type/__systemd_service/parameter/boolean
deleted file mode 100644
index a4bccb66..00000000
--- a/cdist/conf/type/__systemd_service/parameter/boolean
+++ /dev/null
@@ -1 +0,0 @@
-if-required
diff --git a/cdist/conf/type/__systemd_service/parameter/default/state b/cdist/conf/type/__systemd_service/parameter/default/state
deleted file mode 100644
index a2ae71b3..00000000
--- a/cdist/conf/type/__systemd_service/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-running
diff --git a/cdist/conf/type/__systemd_service/parameter/optional b/cdist/conf/type/__systemd_service/parameter/optional
deleted file mode 100644
index fc78265f..00000000
--- a/cdist/conf/type/__systemd_service/parameter/optional
+++ /dev/null
@@ -1,3 +0,0 @@
-name
-state
-action
diff --git a/cdist/conf/type/__systemd_unit/explorer/unit-status b/cdist/conf/type/__systemd_unit/explorer/unit-status
deleted file mode 100644
index b68e5169..00000000
--- a/cdist/conf/type/__systemd_unit/explorer/unit-status
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-#
-# 2017 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-systemctl is-active "${__object_id}" || true
diff --git a/cdist/conf/type/__systemd_unit/gencode-remote b/cdist/conf/type/__systemd_unit/gencode-remote
deleted file mode 100644
index 967a6c87..00000000
--- a/cdist/conf/type/__systemd_unit/gencode-remote
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/bin/sh -e
-#
-# 2017 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-name="${__object_id}"
-state=$(cat "${__object}/parameter/state")
-current_enablement_state=$(cat "${__object}/explorer/enablement-state")
-
-if [ "${state}" = "absent" ]; then
- if [ -n "${current_enablement_state}" ]; then
- echo "systemctl --now disable ${name}"
- echo "rm -f /etc/systemd/system/${name}"
- echo "systemctl daemon-reload"
- fi
-
- exit 0
-fi
-
-unit_status=$(cat "${__object}/explorer/unit-status")
-desired_enablement_state=$(cat "${__object}/parameter/enablement-state")
-
-if [ "${current_enablement_state}" = "masked" ] && \
- [ "${desired_enablement_state}" != "masked" ]; then
- echo "systemctl unmask ${name}"
-fi
-
-if [ -f "${__object}/parameter/restart" ]; then
- if [ "${desired_enablement_state}" = "masked" ]; then
- if [ "${unit_status}" = "active" ]; then
- echo "systemctl stop ${name}"
- fi
- elif grep -q "^__file/etc/systemd/system/${name}" "${__messages_in}" || \
- [ "${unit_status}" != "active" ]; then
- echo "systemctl restart ${name} || true"
- fi
-fi
-
-if [ "${current_enablement_state}" = "${desired_enablement_state}" ]; then
- exit 0
-fi
-
-case "${desired_enablement_state}" in
- "")
- # Do nothing
- :
- ;;
- enabled)
- echo "systemctl enable ${name}"
- ;;
- disabled)
- echo "systemctl disable ${name}"
- ;;
- masked)
- echo "systemctl mask ${name}"
- ;;
- *)
- echo "Unsupported unit status: ${desired_enablement_state}" >&2
- exit 1
- ;;
-esac
diff --git a/cdist/conf/type/__systemd_unit/man.rst b/cdist/conf/type/__systemd_unit/man.rst
deleted file mode 100644
index 25a4e501..00000000
--- a/cdist/conf/type/__systemd_unit/man.rst
+++ /dev/null
@@ -1,89 +0,0 @@
-cdist-type__systemd_unit(7)
-===========================
-
-NAME
-----
-
-cdist-type__systemd_unit - Install a systemd unit
-
-DESCRIPTION
------------
-
-This type manages systemd units in ``/etc/systemd/system/``. It can install,
-enable and start a systemd unit. This is particularly useful on systems which
-take advantage of systemd heavily (e.g., CoreOS). For more information about
-systemd units, see SYSTEMD.UNIT(5).
-
-REQUIRED PARAMETERS
--------------------
-
-None.
-
-OPTIONAL PARAMETERS
--------------------
-
-enablement-state
- 'enabled', 'disabled' or 'masked', where:
-
- enabled
- enables the unit
- disabled
- disables the unit
- masked
- masks the unit
-
-source
- Path to the config file. If source is '-' (dash), take what was written to
- stdin as the config file content.
-
-state
- 'present' or 'absent', defaults to 'present' where:
-
- present
- the unit (or its mask) is installed
- absent
- The unit is stopped, disabled and uninstalled. If the unit was masked,
- the mask is removed.
-
-BOOLEAN PARAMETERS
-------------------
-
-restart
- Start the unit if it was inactive. Restart the unit if the unit file
- changed. Stop the unit if new ``enablement-state`` is ``masked``.
-
-MESSAGES
---------
-
-None.
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # Installs, enables and starts foobar.service
- __systemd_unit foobar.service \
- --source "${__manifest}/files/foobar.service" \
- --enablement-state enabled \
- --restart
-
- # Disables the unit
- __systemd_unit foobar.service --enablement-state disabled
-
- # Stops, disables and uninstalls foobar.service
- __systemd_unit foobar.service --state absent
-
-
-AUTHORS
--------
-
-Ľubomír Kučera
-
-COPYING
--------
-
-Copyright \(C) 2017 Ľubomír Kučera. 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.
diff --git a/cdist/conf/type/__systemd_unit/manifest b/cdist/conf/type/__systemd_unit/manifest
deleted file mode 100644
index 688a00b1..00000000
--- a/cdist/conf/type/__systemd_unit/manifest
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/bin/sh -e
-#
-# 2017 Ľubomír Kučera
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-systemctl_present=$(cat "${__object}/explorer/systemctl-present")
-
-if [ "${systemctl_present}" -ne 0 ]; then
- echo "systemctl does not seem to be present on this system" >&2
-
- exit 1
-fi
-
-name="${__object_id}"
-source=$(cat "${__object}/parameter/source")
-state=$(cat "${__object}/parameter/state")
-enablement_state=$(cat "${__object}/parameter/enablement-state")
-
-# The unit must be disabled before removing its unit file. The unit file is
-# therefore removed by gencode-remote of this type, not here.
-if [ -z "${source}" ] || [ "${state}" = "absent" ]; then
- exit 0
-fi
-
-# stdin is not propagated automatically to sub-objects
-if [ "${source}" = "-" ]; then
- source="${__object}/stdin"
-fi
-
-unitfile_state="${state}"
-if [ "${enablement_state}" = "masked" ]; then
- # Masking creates a symlink from /etc/systemd/system/ to /dev/null.
- # This process fails with "Failed to execute operation: Invalid argument"
- # if file /etc/systemd/system/ already exists. We must therefore
- # remove it.
- unitfile_state="absent"
-fi
-
-__config_file "/etc/systemd/system/${name}" \
- --mode 644 \
- --onchange "systemctl daemon-reload" \
- --source "${source}" \
- --state "${unitfile_state}"
diff --git a/cdist/conf/type/__systemd_unit/parameter/boolean b/cdist/conf/type/__systemd_unit/parameter/boolean
deleted file mode 100644
index eea5a271..00000000
--- a/cdist/conf/type/__systemd_unit/parameter/boolean
+++ /dev/null
@@ -1 +0,0 @@
-restart
diff --git a/cdist/conf/type/__systemd_unit/parameter/default/enablement-state b/cdist/conf/type/__systemd_unit/parameter/default/enablement-state
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__systemd_unit/parameter/default/source b/cdist/conf/type/__systemd_unit/parameter/default/source
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__systemd_unit/parameter/default/state b/cdist/conf/type/__systemd_unit/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__systemd_unit/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__systemd_unit/parameter/optional b/cdist/conf/type/__systemd_unit/parameter/optional
deleted file mode 100644
index e7cc7acf..00000000
--- a/cdist/conf/type/__systemd_unit/parameter/optional
+++ /dev/null
@@ -1,3 +0,0 @@
-enablement-state
-source
-state
diff --git a/cdist/conf/type/__timezone/explorer/timezone_is b/cdist/conf/type/__timezone/explorer/timezone_is
deleted file mode 100755
index a1aa813f..00000000
--- a/cdist/conf/type/__timezone/explorer/timezone_is
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh -e
-#
-# 2017 Ander Punnar (cdist at kvlt.ee)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-[ -f /etc/timezone ] && cat /etc/timezone
-
-exit 0
diff --git a/cdist/conf/type/__timezone/gencode-remote b/cdist/conf/type/__timezone/gencode-remote
index 5299f548..c07a61cb 100755
--- a/cdist/conf/type/__timezone/gencode-remote
+++ b/cdist/conf/type/__timezone/gencode-remote
@@ -1,7 +1,6 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -21,16 +20,11 @@
#
# This type allows to configure the desired localtime timezone.
-timezone_is=$(cat "$__object/explorer/timezone_is")
-timezone_should="$__object_id"
+timezone="$__object_id"
os=$(cat "$__global/explorer/os")
-if [ "$timezone_is" = "$timezone_should" ]; then
- exit 0
-fi
-
case "$os" in
- ubuntu|debian|devuan|coreos|alpine)
- echo "echo \"$timezone_should\" > /etc/timezone"
+ ubuntu|debian|devuan)
+ echo "echo \"$timezone\" > /etc/timezone"
;;
esac
diff --git a/cdist/conf/type/__timezone/manifest b/cdist/conf/type/__timezone/manifest
index 3d28ccba..bcbe41c3 100755
--- a/cdist/conf/type/__timezone/manifest
+++ b/cdist/conf/type/__timezone/manifest
@@ -1,8 +1,8 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Ramon Salvadó (rsalvado at gnuine dot com)
# 2012-2015 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2012-2019 Nico Schottelius (nico-cdist at schottelius.org)
+# 2012 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@@ -26,7 +26,7 @@ timezone="$__object_id"
os=$(cat "$__global/explorer/os")
case "$os" in
- archlinux|debian|ubuntu|devuan|alpine)
+ archlinux|debian|ubuntu|devuan)
__package tzdata
export require="__package/tzdata"
;;
@@ -34,11 +34,7 @@ case "$os" in
__package timezone
export require="__package/timezone"
;;
- freebsd|netbsd|openbsd)
- # whitelist
- :
- ;;
- coreos)
+ freebsd|netbsd)
# whitelist
:
;;
diff --git a/cdist/conf/type/__tinydns/gencode-remote b/cdist/conf/type/__tinydns/gencode-remote
deleted file mode 100644
index 824479b6..00000000
--- a/cdist/conf/type/__tinydns/gencode-remote
+++ /dev/null
@@ -1,7 +0,0 @@
-servicename=$__object_id
-user="$(cat "$__object/parameter/user")"
-server_ip="$(cat "$__object/parameter/server-ip")"
-
-cat</dev/null || ./add-host $name $ip
-make
-EOF
diff --git a/cdist/conf/type/__tinydns_host/manifest b/cdist/conf/type/__tinydns_host/manifest
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__tinydns_host/parameter/required b/cdist/conf/type/__tinydns_host/parameter/required
deleted file mode 100644
index 93d111b2..00000000
--- a/cdist/conf/type/__tinydns_host/parameter/required
+++ /dev/null
@@ -1 +0,0 @@
-ip
diff --git a/cdist/conf/type/__tinydns_ns/gencode-remote b/cdist/conf/type/__tinydns_ns/gencode-remote
deleted file mode 100644
index 7305e605..00000000
--- a/cdist/conf/type/__tinydns_ns/gencode-remote
+++ /dev/null
@@ -1,13 +0,0 @@
-set -x
-
-servicename=$(echo $__object_id | cut -d/ -f1)
-name=$(echo $__object_id | cut -d/ -f2-)
-ip="$(cat "$__object/parameter/ip")"
-
-cat</dev/null || ./add-ns $name $ip
-make
-EOF
-
-set +x
diff --git a/cdist/conf/type/__tinydns_ns/parameter/required b/cdist/conf/type/__tinydns_ns/parameter/required
deleted file mode 100644
index 93d111b2..00000000
--- a/cdist/conf/type/__tinydns_ns/parameter/required
+++ /dev/null
@@ -1 +0,0 @@
-ip
diff --git a/cdist/conf/type/__ufw/gencode-remote b/cdist/conf/type/__ufw/gencode-remote
deleted file mode 100644
index fc62b591..00000000
--- a/cdist/conf/type/__ufw/gencode-remote
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Mark Polyakov (mark--@--markasoftware.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-state="$(cat "$__object/parameter/state")"
-
-case "$state" in
- enabled)
- echo 'ufw --force enable'
- ;;
-
- present)
- echo 'ufw --force disable'
- ;;
- # absent will be uninstalled in manifest
-esac
-
-if [ "$state" != absent ]; then
- if [ -f "$__object/parameter/logging" ]; then
- logging="$(cat "$__object/parameter/logging")"
- case "$logging" in
- off|low|medium|high|full)
- echo "ufw --force logging $logging"
- ;;
- *)
- echo 'Logging parameter must be off, low, medium, high, or full!' >&2
- exit 1
- ;;
- esac
- fi
-
- for direction in incoming outgoing routed; do
- if [ -f "$__object/parameter/default_$direction" ]; then
- treatment="$(cat "$__object/parameter/default_$direction")"
- case "$treatment" in
- allow|deny|reject)
- echo "ufw --force default $treatment $direction"
- ;;
- *)
- echo 'UFW default policies must be either "allow", "deny", or "reject".' >&2
- exit 1
- ;;
- esac
- fi
- done
-fi
diff --git a/cdist/conf/type/__ufw/man.rst b/cdist/conf/type/__ufw/man.rst
deleted file mode 100644
index cc64fbb5..00000000
--- a/cdist/conf/type/__ufw/man.rst
+++ /dev/null
@@ -1,59 +0,0 @@
-cdist-type__ufw(7)
-==================
-
-NAME
-----
-cdist-type__ufw - Install the Uncomplicated FireWall
-
-
-DESCRIPTION
------------
-Installs the Uncomplicated FireWall. Most modern distributions carry UFW in their main repositories, but on CentOS this type will automatically enable the EPEL repository.
-
-Some global configuration can also be set with this type.
-
-OPTIONAL PARAMETERS
--------------------
-state
- Either "enabled", "running", "present", or "absent". Defaults to "enabled", which registers UFW to start on boot.
-
-logging
- Either "off", "low", "medium", "high", or "full". Will be passed to `ufw logging`. If not specified, logging level is not modified.
-
-default_incoming
- Either "allow", "deny", or "reject". The default policy for dealing with ingress packets.
-
-default_outgoing
- Either "allow", "deny", or "reject". The default policy for dealing with egress packets.
-
-default_routed
- Either "allow", "deny", or "reject". The default policy for dealing with routed packets (passing through this machine).
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # Install UFW
- __ufw
- # Setup UFW with maximum logging and no restrictions on routed packets.
- __ufw --logging full --default_routed allow
-
-
-SEE ALSO
---------
-:strong:`ufw`\ (8)
-
-
-AUTHORS
--------
-Mark Polyakov
-
-
-COPYING
--------
-Copyright \(C) 2019 Mark Polyakov. 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.
diff --git a/cdist/conf/type/__ufw/manifest b/cdist/conf/type/__ufw/manifest
deleted file mode 100755
index 370b7ff5..00000000
--- a/cdist/conf/type/__ufw/manifest
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Mark Polyakov (mark--@--markasoftware.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-state="$(cat "$__object/parameter/state")"
-
-case "$state" in
- present|enabled)
- os="$(cat "$__global/explorer/os")"
-
- case "$os" in
- centos)
- # shellcheck source=/dev/null
- if (. "$__global/explorer/os_release" && [ "${VERSION_ID}" = "7" ]); then
- __package epel-release
- require='__package/epel-release' __package ufw
- else
- echo 'CentOS version 7 is required!' >&2
- exit 1
- fi
- ;;
- *)
- __package ufw
- ;;
- esac
-
- # ufw expects to always be enabled, then uses a switch in /etc to
- # determine whether to "actually start" after the init system calls it.
- # So, we have to both enable on bootup through init and run `ufw enable`
-
- # operators ae left-associative, so if !enabled it will never run
- if [ "$(cat "$__global/explorer/os")" != ubuntu ] || \
- [ "$(cat "$__global/explorer/init")" != init ] && \
- [ "$state" = enabled ]; then
- # Why don't we disable start_on_boot when state=present|absent?
- # Because UFW should always be enabled at boot -- /etc/ufw/ufw.conf
- # will stop it from "really" starting
- require='__package/ufw' __start_on_boot ufw
- fi
- ;;
-
- absent)
- __package ufw --state absent
- ;;
-
- *)
- echo 'State must be "enabled", "present", or "absent".'
- exit 1
- ;;
-esac
-
diff --git a/cdist/conf/type/__ufw/parameter/default/state b/cdist/conf/type/__ufw/parameter/default/state
deleted file mode 100644
index 26ed6c9b..00000000
--- a/cdist/conf/type/__ufw/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-enabled
\ No newline at end of file
diff --git a/cdist/conf/type/__ufw/parameter/optional b/cdist/conf/type/__ufw/parameter/optional
deleted file mode 100644
index 0a4dec97..00000000
--- a/cdist/conf/type/__ufw/parameter/optional
+++ /dev/null
@@ -1,5 +0,0 @@
-state
-logging
-default_incoming
-default_outgoing
-default_routed
\ No newline at end of file
diff --git a/cdist/conf/type/__ufw/singleton b/cdist/conf/type/__ufw/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__ufw_rule/gencode-remote b/cdist/conf/type/__ufw_rule/gencode-remote
deleted file mode 100755
index 4f1bf2c9..00000000
--- a/cdist/conf/type/__ufw_rule/gencode-remote
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Mark Polyakov (mark@markasoftware.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-
-# This type does not bother with checking the current state of the rules.
-# While it is possible to retrieve the list of rules in a consistent format from
-# `ufw status`, it is a completely different format than the one used on the
-# command line. I also do not suspect it is any faster.
-
-ufw='ufw --force rule'
-
-case "$(cat "$__object/parameter/state")" in
- present) ;;
- absent)
- ufw="$ufw delete"
- ;;
- *)
- echo 'State must be "present" or "absent".' >&2
- exit 1
- ;;
-esac
-
-if [ -f "$__object/parameter/rule" ]; then
- ufw="$ufw $(cat "$__object/parameter/rule")"
-else
- ufw="$ufw allow $__object_id"
-fi
-
-echo "$ufw"
diff --git a/cdist/conf/type/__ufw_rule/man.rst b/cdist/conf/type/__ufw_rule/man.rst
deleted file mode 100644
index 996557f8..00000000
--- a/cdist/conf/type/__ufw_rule/man.rst
+++ /dev/null
@@ -1,53 +0,0 @@
-cdist-type__ufw_rule(7)
-=======================
-
-NAME
-----
-cdist-type__ufw_rule - A single UFW rule
-
-
-DESCRIPTION
------------
-Adds or removes a single UFW rule. This type supports adding and deleting rules for port ranges or applications.
-
-Understanding what is "to" and what is "from" can be confusing. If the rule is ingress (default), then "from" is the remote machine and "to" is the local one. The opposite is true for egress traffic (--out).
-
-OPTIONAL PARAMETERS
--------------------
-state
- Either "present" or "absent". Defaults to "present". If "absent", only removes rules that exactly match the rule expected.
-
-rule
- A firewall rule in UFW syntax. This is what you would usually write after `ufw` on the command line. Defaults to "allow" followed by the object ID. You can use either the short syntax (just allow|deny|reject|limit followed by a port or application name) or the full syntax. Do not include `delete` in your command. Set `--state absent` instead.
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # open port 80 (ufw allow 80)
- __ufw_rule 80
- # Allow mosh application (if installed)
- __ufw_rule mosh
- # Allow all traffic from local network (ufw allow from 10.0.0.0/24)
- __ufw_rule local --rule 'allow from 10.0.0.0/24'
- # Block egress traffic from port 25 to 111.55.55.55 on interface eth0
- __ufw_rule block_smtp --rule 'deny out on eth0 from any port 25 to 111.55.55.55'
-
-
-SEE ALSO
---------
-:strong:`ufw`\ (8)
-
-
-AUTHORS
--------
-Mark Polyakov
-
-
-COPYING
--------
-Copyright \(C) 2019 Mark Polyakov. 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.
diff --git a/cdist/conf/type/__ufw_rule/parameter/default/state b/cdist/conf/type/__ufw_rule/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__ufw_rule/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__ufw_rule/parameter/optional b/cdist/conf/type/__ufw_rule/parameter/optional
deleted file mode 100644
index 0732d53d..00000000
--- a/cdist/conf/type/__ufw_rule/parameter/optional
+++ /dev/null
@@ -1,2 +0,0 @@
-state
-rule
diff --git a/cdist/conf/type/__update_alternatives/explorer/state b/cdist/conf/type/__update_alternatives/explorer/state
deleted file mode 100755
index 04a78aaa..00000000
--- a/cdist/conf/type/__update_alternatives/explorer/state
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh -e
-path="$(cat "$__object/parameter/path")"
-name="$__object_id"
-link="$(readlink "/etc/alternatives/$name")"
-if [ "$path" = "$link" ]
-then echo present
-else echo absent
-fi
diff --git a/cdist/conf/type/__update_alternatives/gencode-remote b/cdist/conf/type/__update_alternatives/gencode-remote
index c0b49814..19ea9968 100755
--- a/cdist/conf/type/__update_alternatives/gencode-remote
+++ b/cdist/conf/type/__update_alternatives/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
#
@@ -17,10 +17,9 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
#
-
-if [ "$(cat "$__object/explorer/state")" = 'present' ]
-then exit 0
-fi
+#
+# Setup alternative - no standard way to create, always set
+#
path="$(cat "$__object/parameter/path")"
name="$__object_id"
diff --git a/cdist/conf/type/__user/explorer/group b/cdist/conf/type/__user/explorer/group
index 0fd1471a..98ce39c6 100755
--- a/cdist/conf/type/__user/explorer/group
+++ b/cdist/conf/type/__user/explorer/group
@@ -23,9 +23,6 @@
if [ -f "$__object/parameter/gid" ]; then
gid=$(cat "$__object/parameter/gid")
- if command -v getent >/dev/null; then
- getent group "$gid" || true
- elif [ -f /etc/group ]; then
- grep -E "^(${gid}|([^:]+:){2}${gid}):" /etc/group || true
- fi
+ getent group "$gid" || true
fi
+
diff --git a/cdist/conf/type/__user/explorer/passwd b/cdist/conf/type/__user/explorer/passwd
index b8391a6f..fdbfb193 100755
--- a/cdist/conf/type/__user/explorer/passwd
+++ b/cdist/conf/type/__user/explorer/passwd
@@ -23,8 +23,5 @@
name=$__object_id
-if command -v getent >/dev/null; then
- getent passwd "$name" || true
-elif [ -f /etc/passwd ]; then
- grep "^${name}:" /etc/passwd || true
-fi
+getent passwd "$name" || true
+
diff --git a/cdist/conf/type/__user/explorer/shadow b/cdist/conf/type/__user/explorer/shadow
index 63d38f0d..1a8fd809 100755
--- a/cdist/conf/type/__user/explorer/shadow
+++ b/cdist/conf/type/__user/explorer/shadow
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -22,19 +22,14 @@
#
name=$__object_id
+os="$($__explorer/os)"
+# Default to using shadow passwords
+database="shadow"
-case $("$__explorer/os") in
- 'freebsd'|'netbsd'|'openbsd'|'alpine')
- database='passwd'
- ;;
- # Default to using shadow passwords
- *)
- database='shadow'
- ;;
+case "$os" in
+ "freebsd"|"netbsd"|"openbsd") database="passwd";;
esac
+
+
+getent "$database" "$name" || true
-if command -v getent >/dev/null; then
- getent "$database" "$name" || true
-elif [ -f /etc/shadow ]; then
- grep "^${name}:" /etc/shadow || true
-fi
diff --git a/cdist/conf/type/__user/gencode-remote b/cdist/conf/type/__user/gencode-remote
index ee18c18f..223d4d46 100755
--- a/cdist/conf/type/__user/gencode-remote
+++ b/cdist/conf/type/__user/gencode-remote
@@ -1,9 +1,8 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
# 2013 Daniel Heule (hda at sfs.biz)
-# 2018 Thomas Eckert (tom at it-eckert.de)
#
# This file is part of cdist.
#
@@ -53,7 +52,7 @@ shorten_property() {
if [ "$state" = "present" ]; then
cd "$__object/parameter"
if grep -q "^${name}:" "$__object/explorer/passwd"; then
- for property in *; do
+ for property in $(ls .); do
new_value="$(cat "$property")"
unset current_value
@@ -61,7 +60,7 @@ if [ "$state" = "present" ]; then
case "$property" in
gid)
- if echo "$new_value" | grep -q '^[0-9][0-9]*$'; then
+ if $(echo "$new_value" | grep -q '^[0-9][0-9]*$'); then
field=4
else
# We were passed a group name. Compare the gid in
@@ -98,7 +97,7 @@ if [ "$state" = "present" ]; then
fi
if [ "$new_value" != "$current_value" ]; then
- set -- "$@" "$(shorten_property "$property")" \'"$new_value"\'
+ set -- "$@" "$(shorten_property $property)" \'$new_value\'
fi
done
@@ -114,14 +113,14 @@ if [ "$state" = "present" ]; then
fi
else
echo add >> "$__messages_out"
- for property in *; do
+ for property in $(ls .); do
[ "$property" = "state" ] && continue
[ "$property" = "remove-home" ] && continue
new_value="$(cat "$property")"
if [ -z "$new_value" ];then # Boolean values have no value
- set -- "$@" "$(shorten_property "$property")"
+ set -- "$@" "$(shorten_property $property)"
else
- set -- "$@" "$(shorten_property "$property")" \'"$new_value"\'
+ set -- "$@" "$(shorten_property $property)" \'$new_value\'
fi
done
@@ -131,17 +130,13 @@ if [ "$state" = "present" ]; then
echo useradd "$@" "$name"
fi
fi
-elif [ "$state" = "absent" ]; then
+else
if grep -q "^${name}:" "$__object/explorer/passwd"; then
#user exists, but state != present, so delete it
if [ -f "$__object/parameter/remove-home" ]; then
- printf "userdel -r '%s' >/dev/null 2>&1\\n" "${name}"
- echo "userdel -r" >> "$__messages_out"
+ echo userdel -r "${name}"
else
- printf "userdel '%s' >/dev/null 2>&1\\n" "${name}"
- echo "userdel" >> "$__messages_out"
+ echo userdel "${name}"
fi
fi
-else
- echo "Invalid state $state" >&2
fi
diff --git a/cdist/conf/type/__user/man.rst b/cdist/conf/type/__user/man.rst
index ef6b77af..5001bfa4 100644
--- a/cdist/conf/type/__user/man.rst
+++ b/cdist/conf/type/__user/man.rst
@@ -60,11 +60,6 @@ mod
add
New user added
-userdel -r
- If user was deleted with homedir
-
-userdel
- If user was deleted (keeping homedir)
EXAMPLES
--------
diff --git a/cdist/conf/type/__user/manifest b/cdist/conf/type/__user/manifest
deleted file mode 100644
index 8f10b38c..00000000
--- a/cdist/conf/type/__user/manifest
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh -e
-#
-# 2019 Nico Schottelius (nico-cdist at schottelius.org)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-# Manage users.
-
-os=$(cat "$__global/explorer/os")
-
-case "$os" in
- alpine)
- __package shadow
- ;;
- *)
- :
- ;;
-esac
diff --git a/cdist/conf/type/__user_groups/gencode-remote b/cdist/conf/type/__user_groups/gencode-remote
index 8120761a..6728228c 100755
--- a/cdist/conf/type/__user_groups/gencode-remote
+++ b/cdist/conf/type/__user_groups/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
@@ -42,10 +42,10 @@ if [ -z "$changed_groups" ]; then
fi
for group in $changed_groups; do
- if [ "$os" = "netbsd" ] || [ "$os" = "openbsd" ]; then
+ if [ "$os" = "netbsd" ]; then
case "$state_should" in
present) echo "usermod -G \"$group\" \"$user\"" ;;
- absent) echo 'NetBSD and OpenBSD do not have a command to remove a user from a group' >&2 ; exit 1 ;;
+ absent) echo 'NetBSD does not have a command to remove a user from a group' >&2 ; exit 1 ;;
esac
elif [ "$os" = "freebsd" ]; then
case "$state_should" in
@@ -59,8 +59,8 @@ for group in $changed_groups; do
esac
else
case "$state_should" in
- present) echo "gpasswd -a \"$user\" \"$group\"" ;;
- absent) echo "gpasswd -d \"$user\" \"$group\"" ;;
+ present) echo "gpasswd -a \"$group\" \"$user\"" ;;
+ absent) echo "gpasswd -d \"$group\" \"$user\"" ;;
esac
fi
done
diff --git a/cdist/conf/type/__xymon_apache/explorer/active-conf b/cdist/conf/type/__xymon_apache/explorer/active-conf
deleted file mode 100755
index bd281e21..00000000
--- a/cdist/conf/type/__xymon_apache/explorer/active-conf
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh -e
-#
-# 2018-2019 Thomas Eckert (tom at it-eckert.de)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-
-if [ -d /etc/apache2/mods-enabled ]; then
- ls -1 /etc/apache2/conf-enabled/
-fi
diff --git a/cdist/conf/type/__xymon_apache/explorer/active-modules b/cdist/conf/type/__xymon_apache/explorer/active-modules
deleted file mode 100755
index 4c745ced..00000000
--- a/cdist/conf/type/__xymon_apache/explorer/active-modules
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh -e
-
-if [ -d /etc/apache2/mods-enabled ]; then
- /usr/sbin/apachectl -t -D DUMP_MODULES | awk '/.*_module/ { gsub(/_module.*$/, ""); gsub(/^ /, ""); print }'
-fi
diff --git a/cdist/conf/type/__xymon_apache/gencode-remote b/cdist/conf/type/__xymon_apache/gencode-remote
deleted file mode 100755
index e7d8e344..00000000
--- a/cdist/conf/type/__xymon_apache/gencode-remote
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh -e
-#
-# 2018-2019 Thomas Eckert (tom at it-eckert.de)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-
-state=$(cat "$__object/parameter/state")
-
-os=$(cat "$__global/explorer/os")
-case "$os" in
- debian|ubuntu)
- :
- ;;
- *)
- echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
- echo "Please contribute an implementation for it if you can." >&2
- exit 1
- ;;
-esac
-
-if [ "$state" = "present" ]; then
- if ! grep -q ^rewrite "$__object/explorer/active-modules"; then
- echo "a2enmod rewrite >/dev/null"
- echo "mod:rewrite enabled" >> "$__messages_out"
- fi
- if ! grep -q "^cgi$" "$__object/explorer/active-modules"; then
- echo "a2enmod cgi >/dev/null"
- echo "mod:cgi enabled" >> "$__messages_out"
- fi
-
- if ! grep -q ^xymon.conf "$__object/explorer/active-conf"; then
- echo "a2enconf xymon >/dev/null"
- echo "conf:xymon enabled" >> "$__messages_out"
- fi
-fi
-
-if grep -q "^mod:.* enabled" "$__messages_out"; then
- echo "systemctl restart apache2.service"
- echo "apache restarted" >> "$__messages_out"
-elif grep -q "^conf:xymon enabled" "$__messages_out"; then
- echo "systemctl reload apache2.service"
- echo "apache reloaded" >> "$__messages_out"
-fi
diff --git a/cdist/conf/type/__xymon_apache/man.rst b/cdist/conf/type/__xymon_apache/man.rst
deleted file mode 100644
index 8358c821..00000000
--- a/cdist/conf/type/__xymon_apache/man.rst
+++ /dev/null
@@ -1,79 +0,0 @@
-cdist-type__xymon_apache(7)
-===========================
-
-NAME
-----
-cdist-type__xymon_apache - Configure apache2-webserver for Xymon
-
-
-DESCRIPTION
------------
-This cdist type installs and configures apache2 to be used "exclusively" (in
-the sense that no other use is taken care of) with Xymon (the systems and
-network monitor).
-
-It depends on `__xymon_server`.
-
-
-REQUIRED PARAMETERS
--------------------
-None.
-
-
-OPTIONAL PARAMETERS
--------------------
-state
- 'present', 'absent', defaults to 'present'.
-
-ipacl
- IP(-ranges) that have access to the Xymon webpages and CGIs. Apache2-style
- syntax suitable for `Require ip ...`. Example: `192.168.1.0/24 10.0.0.0/8`
-
-
-MESSAGES
---------
-mod:rewrite enabled
- apache module enabled
-conf:xymon enabled
- apache config for xymon enabled
-apache restarted
- apache2.service was reloaded
-apache reloaded
- apache2.service was restarted
-
-
-EXPLORERS
----------
-active-conf
- lists apache2 `conf-enabled`
-active-modules
- lists active apache2-modules
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # minmal, only localhost-access:
- __xymon_apache
- # allow more IPs to access the Xymon-webinterface:
- __xymon_apache --ipacl "192.168.0.0/16 10.0.0.0/8" --state "present"
-
-
-SEE ALSO
---------
-:strong:`cdist__xymon_server`\ (7)
-
-
-AUTHORS
--------
-Thomas Eckert
-
-
-COPYING
--------
-Copyright \(C) 2018-2019 Thomas Eckert. 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.
diff --git a/cdist/conf/type/__xymon_apache/parameter/default/state b/cdist/conf/type/__xymon_apache/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__xymon_apache/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__xymon_apache/parameter/optional b/cdist/conf/type/__xymon_apache/parameter/optional
deleted file mode 100644
index d374ec41..00000000
--- a/cdist/conf/type/__xymon_apache/parameter/optional
+++ /dev/null
@@ -1,2 +0,0 @@
-state
-ipacl
diff --git a/cdist/conf/type/__xymon_apache/singleton b/cdist/conf/type/__xymon_apache/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__xymon_client/gencode-remote b/cdist/conf/type/__xymon_client/gencode-remote
deleted file mode 100755
index 49eed317..00000000
--- a/cdist/conf/type/__xymon_client/gencode-remote
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh -e
-#
-# 2018-2019 Thomas Eckert (tom at it-eckert.de)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-
-servers=$(cat "$__object/parameter/servers")
-
-if grep -q ^__key_value/CLIENTHOSTNAME "$__messages_in" || grep -q ^__key_value/XYMONSERVERS "$__messages_in" ; then
- echo "systemctl restart xymon-client"
- echo "restarted" >> "$__messages_out"
- cat <<-EOT
- echo "xymon-client xymon-client/XYMONSERVERS string $servers" | debconf-set-selections
- EOT
-fi
diff --git a/cdist/conf/type/__xymon_client/man.rst b/cdist/conf/type/__xymon_client/man.rst
deleted file mode 100644
index 05d085dc..00000000
--- a/cdist/conf/type/__xymon_client/man.rst
+++ /dev/null
@@ -1,66 +0,0 @@
-cdist-type__xymon_client(7)
-===========================
-
-NAME
-----
-cdist-type__xymon_client - Install the Xymon client
-
-
-DESCRIPTION
------------
-This cdist type installs the Xymon client and configures it to report with
-FQDN.
-
-
-REQUIRED PARAMETERS
--------------------
-None.
-
-
-OPTIONAL PARAMETERS
--------------------
-state
- 'present', 'absent', defaults to 'present'.
-
-servers
- One or more IP addresses (space separated) of the Xymon server(s) to report
- to. While DNS-names are ok it is discouraged, defaults to 127.0.0.1.
-
-
-BOOLEAN PARAMETERS
-------------------
-msgcache
- Enable xymon `msgcache`. Note: XYMONSERVER has to be `127.0.0.1` for using
- `msgcache` (see `msgcache (8)` of the xymon documentation for details).
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # minimal, report to 127.0.0.1
- __xymon_client
-
- # specify server:
- __xymon_client --servers "192.168.1.1"
-
- # activate `msgcache` for passive client:
- __xymon_client --msgcache
-
-
-SEE ALSO
---------
-:strong:`cdist__xymon_server`\ (7), :strong:`xymon`\ (7), :strong:`msgcache`\ (8)
-
-
-AUTHORS
--------
-Thomas Eckert
-
-
-COPYING
--------
-Copyright \(C) 2018-2019 Thomas Eckert. 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.
diff --git a/cdist/conf/type/__xymon_client/manifest b/cdist/conf/type/__xymon_client/manifest
deleted file mode 100755
index 88293a12..00000000
--- a/cdist/conf/type/__xymon_client/manifest
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/sh -e
-#
-# 2018-2019 Thomas Eckert (tom at it-eckert.de)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-
-state=$(cat "$__object/parameter/state")
-servers=$(cat "$__object/parameter/servers")
-
-os=$(cat "$__global/explorer/os")
-case "$os" in
- debian|ubuntu)
- :
- ;;
- *)
- echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
- echo "Please contribute an implementation for it if you can." >&2
- exit 1
- ;;
-esac
-
-__package xymon-client --state "$state"
-
-if [ -f "$__object/parameter/msgcache" ]; then
- require="__package/xymon-client" __line /etc/xymon/clientlaunch.cfg \
- --regex DISABLED --state absent
-fi
-
-require="__package/xymon-client" __key_value CLIENTHOSTNAME \
- --file /etc/default/xymon-client \
- --value "'$__target_hostname'" \
- --delimiter '=' \
- --state "$state"
-require="__package/xymon-client" __key_value XYMONSERVERS \
- --file /etc/default/xymon-client \
- --value "'$servers'" \
- --delimiter '=' \
- --state "$state"
-
-## CLI-usage often requires a shell:
-require="__package/xymon-client" __user xymon --shell "/bin/bash" --state "$state"
diff --git a/cdist/conf/type/__xymon_client/parameter/boolean b/cdist/conf/type/__xymon_client/parameter/boolean
deleted file mode 100644
index 0dd7839d..00000000
--- a/cdist/conf/type/__xymon_client/parameter/boolean
+++ /dev/null
@@ -1 +0,0 @@
-msgcache
diff --git a/cdist/conf/type/__xymon_client/parameter/default/servers b/cdist/conf/type/__xymon_client/parameter/default/servers
deleted file mode 100644
index 7b9ad531..00000000
--- a/cdist/conf/type/__xymon_client/parameter/default/servers
+++ /dev/null
@@ -1 +0,0 @@
-127.0.0.1
diff --git a/cdist/conf/type/__xymon_client/parameter/default/state b/cdist/conf/type/__xymon_client/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__xymon_client/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__xymon_client/parameter/optional b/cdist/conf/type/__xymon_client/parameter/optional
deleted file mode 100644
index 7c34489a..00000000
--- a/cdist/conf/type/__xymon_client/parameter/optional
+++ /dev/null
@@ -1,2 +0,0 @@
-state
-servers
diff --git a/cdist/conf/type/__xymon_client/singleton b/cdist/conf/type/__xymon_client/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__xymon_config/files/.keep b/cdist/conf/type/__xymon_config/files/.keep
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__xymon_config/gencode-remote b/cdist/conf/type/__xymon_config/gencode-remote
deleted file mode 100644
index b25a0fda..00000000
--- a/cdist/conf/type/__xymon_config/gencode-remote
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh -e
-#
-# 2018-2019 Thomas Eckert (tom at it-eckert.de)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-
-## to speed up config-reload we send a HUP to the server process:
-cat <<-EOT
- pkill -HUP xymond || { echo "HUPing xymond failed" >&2; exit 1; }
-EOT
diff --git a/cdist/conf/type/__xymon_config/man.rst b/cdist/conf/type/__xymon_config/man.rst
deleted file mode 100644
index 8adfbe1f..00000000
--- a/cdist/conf/type/__xymon_config/man.rst
+++ /dev/null
@@ -1,78 +0,0 @@
-cdist-type__xymon_config(7)
-===========================
-
-NAME
-----
-cdist-type__xymon_config - Deploy a Xymon configuration-directory
-
-
-DESCRIPTION
------------
-This cdist type deploys a full Xymon configuration directory from the files-dir
-to the host. This type requires an installed Xymon server, e.g. deployed by
-`__xymon_server`.
-
-WARNING: This type _replaces_ the `/etc/xymon/`-directory! The previous
-contents is replaced/deleted!
-
-
-REQUIRED PARAMETERS
--------------------
-confdir
- The directory in `./files/` that contains the `/etc/xymon/`-content to be
- deployed.
-
-
-OPTIONAL PARAMETERS
--------------------
-owner
- passed as-is as `--owner` to `__rsync`
-
-group
- passed as-is as `--group` to `__rsync`
-
-
-OPTIONAL MULTIPLE PARAMETERS
-----------------------------
-rsync-opts
- identical to __rsync type, only `--`-options are supported
-
-
-REQUIRED FILES
---------------
-The directory specified by `confdir` has to contain a valid xymon-configuration
-(`/etc/xymon/`) _plus_ the `ext/`-directory that normally resides in
-`/usr/lib/xymon/server/`.
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- __xymon_config --confdir=xymon.example.com
- # this will replace /etc/xymon/ on the target host with
- # the contents from __xymon_config/files/xymon.example.com/
-
- ## the same but set ownership to `xymon:xymon` and exclude
- ## the `netrc`-file:
- __xymon_config --confdir=xymon.example.com \
- --owner xymon --group xymon \
- --rsync-opts "exclude=netrc"
-
-
-SEE ALSO
---------
-:strong:`cdist__xymon_server`\ (7), :strong:`cdist__rsync`\ (7), :strong:`xymon`\ (7)
-
-AUTHORS
--------
-Thomas Eckert
-
-
-COPYING
--------
-Copyright \(C) 2018-2019 Thomas Eckert. 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.
diff --git a/cdist/conf/type/__xymon_config/manifest b/cdist/conf/type/__xymon_config/manifest
deleted file mode 100644
index 4a5fb6c9..00000000
--- a/cdist/conf/type/__xymon_config/manifest
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/sh -e
-#
-# 2018-2019 Thomas Eckert (tom at it-eckert.de)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-
-confdir=$(cat "$__object/parameter/confdir")
-set --
-if [ -f "$__object/parameter/owner" ]; then
- owner=$(cat "$__object/parameter/owner")
- set -- "$@" "--owner $owner"
-fi
-if [ -f "$__object/parameter/group" ]; then
- group=$(cat "$__object/parameter/group")
- set -- "$@" "--group $group"
-fi
-
-## pass `--rsync-opts` as-is to `__rsync`:
-if [ -f "$__object/parameter/rsync-opts" ]; then
- while read -r opts; do
- # shellcheck disable=SC2089
- set -- "$@" "--rsync-opts '$opts'"
- done < "$__object/parameter/rsync-opts"
-fi
-
-# shellcheck disable=SC2068,SC2090
-__rsync /etc/xymon/ \
- --source "$__type/files/$confdir/" \
- --rsync-opts "delete" \
- $@
diff --git a/cdist/conf/type/__xymon_config/parameter/optional b/cdist/conf/type/__xymon_config/parameter/optional
deleted file mode 100644
index 866b4bde..00000000
--- a/cdist/conf/type/__xymon_config/parameter/optional
+++ /dev/null
@@ -1,2 +0,0 @@
-owner
-group
diff --git a/cdist/conf/type/__xymon_config/parameter/optional_multiple b/cdist/conf/type/__xymon_config/parameter/optional_multiple
deleted file mode 100644
index fdb7cd88..00000000
--- a/cdist/conf/type/__xymon_config/parameter/optional_multiple
+++ /dev/null
@@ -1 +0,0 @@
-rsync-opts
diff --git a/cdist/conf/type/__xymon_config/parameter/required b/cdist/conf/type/__xymon_config/parameter/required
deleted file mode 100644
index 43222f13..00000000
--- a/cdist/conf/type/__xymon_config/parameter/required
+++ /dev/null
@@ -1 +0,0 @@
-confdir
diff --git a/cdist/conf/type/__xymon_config/singleton b/cdist/conf/type/__xymon_config/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__xymon_server/gencode-remote b/cdist/conf/type/__xymon_server/gencode-remote
deleted file mode 100755
index 0770e319..00000000
--- a/cdist/conf/type/__xymon_server/gencode-remote
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh -e
-#
-# 2018-2019 Thomas Eckert (tom at it-eckert.de)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-
-## "move" user-modified dirs to /etc/xymon to be managed by __xymon_config:
-cat <<-EOT
- if [ ! -L /usr/lib/xymon/server/ext ]; then
- mv /usr/lib/xymon/server/ext /etc/xymon
- ln -s /etc/xymon/ext /usr/lib/xymon/server/
- fi
-EOT
diff --git a/cdist/conf/type/__xymon_server/man.rst b/cdist/conf/type/__xymon_server/man.rst
deleted file mode 100644
index a9a180e1..00000000
--- a/cdist/conf/type/__xymon_server/man.rst
+++ /dev/null
@@ -1,87 +0,0 @@
-cdist-type__xymon_server(7)
-===========================
-
-NAME
-----
-cdist-type__xymon_server - Install a Xymon server
-
-
-DESCRIPTION
------------
-This cdist type installs a Xymon (https://www.xymon.com/) server and (optional)
-required helper packages.
-
-This includes the Xymon client as a dependency, so NO NEED to install
-`__xymon_client` separately.
-
-To access the webinterface a webserver is required. The cdist-type
-`__xymon_apache` can be used to install and configure the apache webserver for
-the use with Xymon.
-
-Further and day-to-day configuration of Xymon can either be done manually in
-`/etc/xymon/` or the directory can be deployed and managed by `__xymon_config`.
-
-
-REQUIRED PARAMETERS
--------------------
-None.
-
-
-OPTIONAL PARAMETERS
--------------------
-state
- 'present', 'absent', defaults to 'present'. If '--install_helpers' is
- specified for 'absent' the helper packages will be un-installed.
-
-
-BOOLEAN PARAMETERS
-------------------
-install_helpers
- Install helper packages used by Xymon (fping, heirloom-mailx, traceroute,
- ntpdate).
-
-
-EXAMPLES
---------
-
-.. code-block:: sh
-
- # minmal
- __xymon_server
-
- # the same
- __xymon_server --state present
-
- # also install helper packages:
- __xymon_server --install_helpers
-
- # examples to give a more complete picture: __xymon_server installed on
- # `xymon.example.com` w/ IP 192.168.1.1:
- #
- # install webserver and grant 2 private subnets access to the webinterface:
- __xymon_apache --ipacl "192.168.0.0/16 10.0.0.0/8"
- # deploy server-configuration with __xymon_config:
- __xymon_config --confdir=xymon.example.com
-
- # install xymon-client on other machines (not needed on the server):
- __xymon_client --servers "192.168.1.1"
-
-
-
-SEE ALSO
---------
-:strong:`cdist__xymon_apache`\ (7), :strong:`cdist__xymon_config`\ (7),
-:strong:`cdist__xymon_client`\ (7), :strong:`xymon`\ (7)
-
-
-AUTHORS
--------
-Thomas Eckert
-
-
-COPYING
--------
-Copyright \(C) 2018-2019 Thomas Eckert. 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.
diff --git a/cdist/conf/type/__xymon_server/manifest b/cdist/conf/type/__xymon_server/manifest
deleted file mode 100755
index 7cee0d23..00000000
--- a/cdist/conf/type/__xymon_server/manifest
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh -e
-#
-# 2018-2019 Thomas Eckert (tom at it-eckert.de)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-
-state=$(cat "$__object/parameter/state")
-if [ -f "$__object/parameter/install_helpers" ]; then
- install_helpers=1
-else
- install_helpers=0
-fi
-
-os=$(cat "$__global/explorer/os")
-case "$os" in
- debian|ubuntu)
- :
- ;;
- *)
- echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
- echo "Please contribute an implementation for it if you can." >&2
- exit 1
- ;;
-esac
-
-__package xymon --state "$state"
-
-## install helper-packages/tools used by the xymon server if requested:
-if [ "$install_helpers" = "1" ]; then
- __package fping --state "$state"
- __package heirloom-mailx --state "$state"
- __package traceroute --state "$state"
- __package ntpdate --state "$state"
-fi
-
-## CLI-usage often requires a shell:
-require="__package/xymon" __user xymon --shell "/bin/bash" --state "$state"
diff --git a/cdist/conf/type/__xymon_server/parameter/boolean b/cdist/conf/type/__xymon_server/parameter/boolean
deleted file mode 100644
index 56ebcb2c..00000000
--- a/cdist/conf/type/__xymon_server/parameter/boolean
+++ /dev/null
@@ -1 +0,0 @@
-install_helpers
diff --git a/cdist/conf/type/__xymon_server/parameter/default/state b/cdist/conf/type/__xymon_server/parameter/default/state
deleted file mode 100644
index e7f6134f..00000000
--- a/cdist/conf/type/__xymon_server/parameter/default/state
+++ /dev/null
@@ -1 +0,0 @@
-present
diff --git a/cdist/conf/type/__xymon_server/parameter/optional b/cdist/conf/type/__xymon_server/parameter/optional
deleted file mode 100644
index ff72b5c7..00000000
--- a/cdist/conf/type/__xymon_server/parameter/optional
+++ /dev/null
@@ -1 +0,0 @@
-state
diff --git a/cdist/conf/type/__xymon_server/singleton b/cdist/conf/type/__xymon_server/singleton
deleted file mode 100644
index e69de29b..00000000
diff --git a/cdist/conf/type/__yum_repo/files/repo.template b/cdist/conf/type/__yum_repo/files/repo.template
index 18ea9d2b..3e14c8b6 100755
--- a/cdist/conf/type/__yum_repo/files/repo.template
+++ b/cdist/conf/type/__yum_repo/files/repo.template
@@ -43,7 +43,7 @@ for key in baseurl gpgkey; do
if [ -f "$__object/parameter/$key" ]; then
printf '%s=' "$key"
prefix=''
- while read -r line; do
+ while read line; do
printf '%s%s\n' "$prefix" "$line"
prefix=' '
done < "$__object/parameter/$key"
diff --git a/cdist/conf/type/__yum_repo/manifest b/cdist/conf/type/__yum_repo/manifest
index 5f60d32c..950c3b7a 100755
--- a/cdist/conf/type/__yum_repo/manifest
+++ b/cdist/conf/type/__yum_repo/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
diff --git a/cdist/conf/type/__zypper_repo/explorer/all_repo_ids b/cdist/conf/type/__zypper_repo/explorer/all_repo_ids
index 7953158a..b37d8ac5 100644
--- a/cdist/conf/type/__zypper_repo/explorer/all_repo_ids
+++ b/cdist/conf/type/__zypper_repo/explorer/all_repo_ids
@@ -21,5 +21,4 @@
# Retrieve all repo id nummbers - parsed zypper output
#
#
-# shellcheck disable=SC2005,SC2046
echo $(zypper lr | cut -d'|' -f 1 | grep -E '^[0-9]')
diff --git a/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids b/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
index 261d6073..2dfb946f 100644
--- a/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
+++ b/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
@@ -23,6 +23,4 @@
#
# simpler command which works only on SLES11 SP3 or newer:
# echo $(zypper lr -E | cut -d'|' -f 1 | grep -E '^[0-9]')
-#
-# shellcheck disable=SC2005,SC2046
echo $(zypper lr | grep -E '^[0-9]([^|]+\|){3,3} Yes' | cut -d'|' -f 1)
diff --git a/cdist/conf/type/__zypper_repo/explorer/repo_id b/cdist/conf/type/__zypper_repo/explorer/repo_id
index d55a5cac..6a4791e6 100644
--- a/cdist/conf/type/__zypper_repo/explorer/repo_id
+++ b/cdist/conf/type/__zypper_repo/explorer/repo_id
@@ -26,5 +26,4 @@ if [ -f "$__object/parameter/uri" ]; then
else
uri="$__object_id"
fi
-# shellcheck disable=SC2005,SC2046
-echo $(zypper lr -u | grep -F "$uri" | cut -d'|' -f 1 | grep -E '^[0-9]')
+echo $(zypper lr -u | grep -F "$uri" | cut -d'|' -f 1 | grep -E '^[0-9]' )
diff --git a/cdist/conf/type/__zypper_repo/gencode-remote b/cdist/conf/type/__zypper_repo/gencode-remote
old mode 100755
new mode 100644
index 336488ae..26199c75
--- a/cdist/conf/type/__zypper_repo/gencode-remote
+++ b/cdist/conf/type/__zypper_repo/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Daniel Heule (hda at sfs.biz)
#
@@ -70,25 +70,25 @@ case "$state" in
fi
if [ -z "$repo_id" ]; then
# Repo not present, so we need to create it
- echo "zypper $zypper_def_opts addrepo '$uri' '$desc'"
+ echo zypper $zypper_def_opts addrepo "'$uri'" "'$desc'"
fi
;;
absent)
- if [ -n "$act_id" ]; then
+ if [ ! -z "$act_id" ]; then
# Repo present (act_id not ""), so we ned to delete it
- echo "zypper $zypper_def_opts removerepo $act_id"
+ echo zypper $zypper_def_opts removerepo "$act_id"
fi
;;
enabled)
- if [ -n "$act_id" ] && [ "$repostate" = "disabled" ]; then
+ if [ ! -z "$act_id" ] && [ "$repostate" = "disabled" ]; then
# Repo present (act_id not "") and repostate not enabled, so a enable call is needed
- echo "zypper $zypper_def_opts modifyrepo -e $act_id"
+ echo zypper $zypper_def_opts modifyrepo -e "$act_id"
fi
;;
disabled)
- if [ -n "$act_id" ] && [ "$repostate" = "enabled" ]; then
+ if [ ! -z "$act_id" ] && [ "$repostate" = "enabled" ]; then
# Repo present (act_id not "") and repostate enabled, so a disable call is needed
- echo "zypper $zypper_def_opts modifyrepo -d $act_id"
+ echo zypper $zypper_def_opts modifyrepo -d "$act_id"
fi
;;
*)
diff --git a/cdist/conf/type/__zypper_service/explorer/repo_ids b/cdist/conf/type/__zypper_service/explorer/repo_ids
index da506fea..e831b76c 100644
--- a/cdist/conf/type/__zypper_service/explorer/repo_ids
+++ b/cdist/conf/type/__zypper_service/explorer/repo_ids
@@ -24,6 +24,4 @@
# simpler command which works only on SLES11 SP3 or newer:
# echo $(zypper lr -u -E | cut -d'|' -f 1 | grep -E '^[0-9]')
# on older systems, zypper doesn't know the parameter -E
-#
-# shellcheck disable=SC2005,SC2046
echo $(zypper lr -u | grep -E '^([^|]+\|){3,3} Yes' | cut -d'|' -f 1 | grep -E '^[0-9]')
diff --git a/cdist/conf/type/__zypper_service/explorer/service_id b/cdist/conf/type/__zypper_service/explorer/service_id
index fbb983c8..bf5f0260 100644
--- a/cdist/conf/type/__zypper_service/explorer/service_id
+++ b/cdist/conf/type/__zypper_service/explorer/service_id
@@ -27,6 +27,4 @@ else
fi
# simpler command which works only on SLES11 SP3 or newer:
# echo $(zypper ls -u -E | grep -E "\<$uri\>" | cut -d'|' -f 1 )
-#
-# shellcheck disable=SC2005,SC2046
-echo $(zypper ls -u | grep -E '^([^|]+\|){3,3} Yes' | grep -E "\\<$uri\\>" | cut -d'|' -f 1)
+echo $(zypper ls -u | grep -E '^([^|]+\|){3,3} Yes' | grep -E "\<$uri\>" | cut -d'|' -f 1 )
diff --git a/cdist/conf/type/__zypper_service/explorer/service_ids b/cdist/conf/type/__zypper_service/explorer/service_ids
index 5a26740e..0f1f4186 100644
--- a/cdist/conf/type/__zypper_service/explorer/service_ids
+++ b/cdist/conf/type/__zypper_service/explorer/service_ids
@@ -22,6 +22,4 @@
#
# simpler command which works only on SLES11 SP3 or newer:
# echo $(zypper ls -u -E | cut -d'|' -f 1 | grep -E '^[0-9]')
-#
-# shellcheck disable=SC2005,SC2046
echo $(zypper ls -u | grep -E '^([^|]+\|){3,3} Yes' | cut -d'|' -f 1 | grep -E '^[0-9]')
diff --git a/cdist/conf/type/__zypper_service/explorer/service_uri b/cdist/conf/type/__zypper_service/explorer/service_uri
index 2f3d0f94..6eee47fb 100644
--- a/cdist/conf/type/__zypper_service/explorer/service_uri
+++ b/cdist/conf/type/__zypper_service/explorer/service_uri
@@ -25,5 +25,4 @@ if [ -f "$__object/parameter/uri" ]; then
else
uri="/$__object_id"
fi
-# shellcheck disable=SC2005,SC2046
-echo $(zypper ls -u | awk 'BEGIN { FS = "[ ]+\\|[ ]+" } ; $4 == "Yes" && $NF == "'"$uri"'" {print $NF}')
+echo $(zypper ls -u | awk 'BEGIN { FS = "[ ]+\\|[ ]+" } ; $4 == "Yes" && $NF == "'$uri'" {print $NF}')
diff --git a/cdist/conf/type/__zypper_service/gencode-remote b/cdist/conf/type/__zypper_service/gencode-remote
old mode 100755
new mode 100644
index 4ccfe301..d16ba8ee
--- a/cdist/conf/type/__zypper_service/gencode-remote
+++ b/cdist/conf/type/__zypper_service/gencode-remote
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Daniel Heule (hda at sfs.biz)
#
@@ -46,7 +46,7 @@ exp_uri="$(cat "$__object/explorer/service_uri")"
exp_id="$(cat "$__object/explorer/service_id")"
# we need this list to remove ids, but we must do this in reverse order
-exp_ids="$(rev "$__object/explorer/service_ids")"
+exp_ids="$(cat "$__object/explorer/service_ids" | rev)"
if [ "$uri" = "$exp_uri" ] ; then
state_is="present"
@@ -59,10 +59,10 @@ if [ -f "$__object/parameter/remove-all-other-services" ]; then
# file exists -> True
for i in $exp_ids; do
if [ "$i" != "$exp_id" ] ; then
- echo "zypper $zypper_def_opts removeservice $i &>/dev/null"
+ echo zypper $zypper_def_opts removeservice "$i" "&>/dev/null"
fi
done
- echo "zypper $zypper_def_opts refs &>/dev/null"
+ echo zypper $zypper_def_opts refs "&>/dev/null"
fi
@@ -71,14 +71,14 @@ fi
case "$state_should" in
present)
- echo "zypper $zypper_def_opts addservice -t $stype $uri '$desc'"
- echo "zypper $zypper_def_opts refs"
- echo "zypper $zypper_def_opts ref"
+ echo zypper $zypper_def_opts addservice -t "$stype" "$uri" \"$desc\"
+ echo zypper $zypper_def_opts refs
+ echo zypper $zypper_def_opts ref
;;
absent)
- echo "zypper $zypper_def_opts removeservice $exp_id"
- echo "zypper $zypper_def_opts refs"
- echo "zypper $zypper_def_opts ref"
+ echo zypper $zypper_def_opts removeservice "$service_id"
+ echo zypper $zypper_def_opts refs
+ echo zypper $zypper_def_opts ref
;;
*)
echo "Unknown state: $state_should" >&2
diff --git a/cdist/conf/type/__zypper_service/man.rst b/cdist/conf/type/__zypper_service/man.rst
index e082dc02..ea48aebb 100644
--- a/cdist/conf/type/__zypper_service/man.rst
+++ b/cdist/conf/type/__zypper_service/man.rst
@@ -46,10 +46,10 @@ EXAMPLES
# Ensure that internal SLES11 SP3 RIS is in installed and all other services and repos are discarded
__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --uri "http://path/to/your/ris/dir" --remove-all-other-services --remove-all-repos
- # Ensure that internal SLES11 SP3 RIS is in installed, no changes to other services or repos
+ # Ensure that internal SLES11 SP3 RIS is in installed, no changes to ohter services or repos
__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --uri "http://path/to/your/ris/dir"
- # Drop service by uri, no changes to other services or repos
+ # Drop service by uri, no changes to ohter services or repos
__zypper_service INTERNAL_SLES11_SP3 --state absent --uri "http://path/to/your/ris/dir"
diff --git a/cdist/conf/type/__zypper_service/manifest b/cdist/conf/type/__zypper_service/manifest
old mode 100755
new mode 100644
index 42a56830..7f853b3b
--- a/cdist/conf/type/__zypper_service/manifest
+++ b/cdist/conf/type/__zypper_service/manifest
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
#
# 2013 Daniel Heule (hda at sfs.biz)
#
@@ -47,7 +47,7 @@ fi
[ "$state_is" = "$state_should" ] && exit 0
# we need this list to remove ids, but we must do this in reverse order
-exp_repos="$(rev "$__object/explorer/repo_ids")"
+exp_repos="$(cat "$__object/explorer/repo_ids" | rev)"
# boolean parameter
if [ -f "$__object/parameter/remove-all-repos" ]; then
diff --git a/cdist/config.py b/cdist/config.py
index 97cc1da6..03a2e6ee 100644
--- a/cdist/config.py
+++ b/cdist/config.py
@@ -2,8 +2,6 @@
# -*- coding: utf-8 -*-
#
# 2010-2015 Nico Schottelius (nico-cdist at schottelius.org)
-# 2013-2017 Steven Armstrong (steven-cdist at armstrong.cc)
-# 2016-2017 Darko Poljak (darko.poljak at gmail.com)
#
# This file is part of cdist.
#
@@ -28,104 +26,44 @@ import sys
import time
import itertools
import tempfile
+import socket
import multiprocessing
-from cdist.mputil import mp_pool_run, mp_sig_handler
+from cdist.mputil import mp_pool_run
import atexit
import shutil
-import socket
+
import cdist
import cdist.hostsource
+
import cdist.exec.local
import cdist.exec.remote
import cdist.util.ipaddr as ipaddr
-import cdist.configuration
-from cdist import core, inventory
+
+from cdist import core
from cdist.util.remoteutil import inspect_ssh_mux_opts
-def graph_check_cycle(graph):
- # Start from each node in the graph and check for cycle starting from it.
- for node in graph:
- # Cycle path.
- path = [node]
- has_cycle = _graph_dfs_cycle(graph, node, path)
- if has_cycle:
- return has_cycle, path
- return False, None
-
-
-def _graph_dfs_cycle(graph, node, path):
- for neighbour in graph.get(node, ()):
- # If node is already in path then this is cycle.
- if neighbour in path:
- path.append(neighbour)
- return True
- path.append(neighbour)
- rv = _graph_dfs_cycle(graph, neighbour, path)
- if rv:
- return True
- # Remove last item from list - neighbour whose DFS path we have have
- # just checked.
- del path[-1]
- return False
-
-
class Config(object):
"""Cdist main class to hold arbitrary data"""
- # list of paths (files and/or directories) that will be removed on finish
- _paths_for_removal = []
-
- @classmethod
- def _register_path_for_removal(cls, path):
- cls._paths_for_removal.append(path)
-
- @classmethod
- def _remove_paths(cls):
- while cls._paths_for_removal:
- path = cls._paths_for_removal.pop()
- if os.path.isfile(path):
- os.remove(path)
- else:
- shutil.rmtree(path)
-
- def __init__(self, local, remote, dry_run=False, jobs=None,
- cleanup_cmds=None, remove_remote_files_dirs=False):
+ def __init__(self, local, remote, dry_run=False, jobs=None):
self.local = local
self.remote = remote
self._open_logger()
self.dry_run = dry_run
self.jobs = jobs
- if cleanup_cmds:
- self.cleanup_cmds = cleanup_cmds
- else:
- self.cleanup_cmds = []
- self.remove_remote_files_dirs = remove_remote_files_dirs
self.explorer = core.Explorer(self.local.target_host, self.local,
- self.remote, jobs=self.jobs,
- dry_run=self.dry_run)
- self.manifest = core.Manifest(self.local.target_host, self.local,
- dry_run=self.dry_run)
- self.code = core.Code(self.local.target_host, self.local, self.remote,
- dry_run=self.dry_run)
+ self.remote, jobs=self.jobs)
+ self.manifest = core.Manifest(self.local.target_host, self.local)
+ self.code = core.Code(self.local.target_host, self.local, self.remote)
def _init_files_dirs(self):
"""Prepare files and directories for the run"""
self.local.create_files_dirs()
self.remote.create_files_dirs()
- def _remove_remote_files_dirs(self):
- """Remove remote files and directories for the run"""
- self.remote.remove_files_dirs()
-
- def _remove_files_dirs(self):
- """Remove files and directories for the run"""
- if self.remove_remote_files_dirs:
- self._remove_remote_files_dirs()
- self.manifest.cleanup()
-
@staticmethod
def hosts(source):
try:
@@ -135,39 +73,6 @@ class Config(object):
"Error reading hosts from \'{}\': {}".format(
source, e))
- @staticmethod
- def construct_remote_exec_copy_patterns(args):
- # default remote cmd patterns
- args.remote_cmds_cleanup_pattern = ""
- args.remote_exec_pattern = None
- args.remote_copy_pattern = None
-
- # Determine forcing IPv4/IPv6 options if any, only for
- # default remote commands.
- if args.force_ipv:
- force_addr_opt = " -{}".format(args.force_ipv)
- else:
- force_addr_opt = ""
-
- args_dict = vars(args)
- # if remote-exec and/or remote-copy args are None then user
- # didn't specify command line options nor env vars:
- # inspect multiplexing options for default cdist.REMOTE_COPY/EXEC
- if (args_dict['remote_copy'] is None or
- args_dict['remote_exec'] is None):
- mux_opts = inspect_ssh_mux_opts()
- if args_dict['remote_exec'] is None:
- args.remote_exec_pattern = (cdist.REMOTE_EXEC +
- force_addr_opt + mux_opts)
- if args_dict['remote_copy'] is None:
- args.remote_copy_pattern = (cdist.REMOTE_COPY +
- force_addr_opt + mux_opts)
- if mux_opts:
- cleanup_pattern = cdist.REMOTE_CMDS_CLEANUP_PATTERN
- else:
- cleanup_pattern = ""
- args.remote_cmds_cleanup_pattern = cleanup_pattern
-
@classmethod
def _check_and_prepare_args(cls, args):
if args.manifest == '-' and args.hostfile == '-':
@@ -178,6 +83,7 @@ class Config(object):
if not (args.hostfile or args.host):
args.hostfile = '-'
+ initial_manifest_tempfile = None
if args.manifest == '-':
# read initial manifest from stdin
try:
@@ -192,149 +98,95 @@ class Config(object):
args.manifest = initial_manifest_temp_path
atexit.register(lambda: os.remove(initial_manifest_temp_path))
+ # default remote cmd patterns
+ args.remote_exec_pattern = None
+ args.remote_copy_pattern = None
+
+ args_dict = vars(args)
+ # if remote-exec and/or remote-copy args are None then user
+ # didn't specify command line options nor env vars:
+ # inspect multiplexing options for default cdist.REMOTE_COPY/EXEC
+ if (args_dict['remote_copy'] is None or
+ args_dict['remote_exec'] is None):
+ mux_opts = inspect_ssh_mux_opts()
+ if args_dict['remote_exec'] is None:
+ args.remote_exec_pattern = cdist.REMOTE_EXEC + mux_opts
+ if args_dict['remote_copy'] is None:
+ args.remote_copy_pattern = cdist.REMOTE_COPY + mux_opts
+
+ @classmethod
+ def _base_root_path(cls, args):
+ if args.out_path:
+ base_root_path = args.out_path
+ else:
+ base_root_path = tempfile.mkdtemp()
+ return base_root_path
+
@classmethod
def commandline(cls, args):
"""Configure remote system"""
- if (args.parallel and args.parallel != 1) or args.jobs:
- if args.timestamp:
- cdist.log.setupTimestampingParallelLogging()
- else:
- cdist.log.setupParallelLogging()
- elif args.timestamp:
- cdist.log.setupTimestampingLogging()
- log = logging.getLogger("config")
-
- # No new child process if only one host at a time.
- if args.parallel == 1:
- log.debug("Only 1 parallel process, doing it sequentially")
- args.parallel = 0
-
- if args.parallel:
- import signal
-
- signal.signal(signal.SIGTERM, mp_sig_handler)
- signal.signal(signal.SIGHUP, mp_sig_handler)
+ # FIXME: Refactor relict - remove later
+ log = logging.getLogger("cdist")
cls._check_and_prepare_args(args)
+ process = {}
failed_hosts = []
time_start = time.time()
- cls.construct_remote_exec_copy_patterns(args)
- base_root_path = cls.create_base_root_path(args.out_path)
+ base_root_path = cls._base_root_path(args)
hostcnt = 0
+ for host in itertools.chain(cls.hosts(args.host),
+ cls.hosts(args.hostfile)):
+ hostdir = cdist.str_hash(host)
+ host_base_path = os.path.join(base_root_path, hostdir)
- cfg = cdist.configuration.Configuration(args)
- configuration = cfg.get_config(section='GLOBAL')
-
- if args.tag or args.all_tagged_hosts:
- inventory.determine_default_inventory_dir(args, configuration)
- if args.all_tagged_hosts:
- inv_list = inventory.InventoryList(
- hosts=None, istag=True, hostfile=None,
- db_basedir=args.inventory_dir)
- else:
- inv_list = inventory.InventoryList(
- hosts=args.host, istag=True, hostfile=args.hostfile,
- db_basedir=args.inventory_dir,
- has_all_tags=args.has_all_tags)
- it = inv_list.entries()
- else:
- it = itertools.chain(cls.hosts(args.host),
- cls.hosts(args.hostfile))
-
- process_args = []
- if args.parallel:
- log.trace("Processing hosts in parallel")
- else:
- log.trace("Processing hosts sequentially")
- for entry in it:
- if isinstance(entry, tuple):
- # if configuring by specified tags
- host = entry[0]
- host_tags = entry[1]
- else:
- # if configuring by host then check inventory for tags
- host = entry
- inventory.determine_default_inventory_dir(args, configuration)
- inv_list = inventory.InventoryList(
- hosts=(host,), db_basedir=args.inventory_dir)
- inv = tuple(inv_list.entries())
- if inv:
- # host is present in inventory and has tags
- host_tags = inv[0][1]
- else:
- # host is not present in inventory or has no tags
- host_tags = None
- host_base_path, hostdir = cls.create_host_base_dirs(
- host, base_root_path)
log.debug("Base root path for target host \"{}\" is \"{}\"".format(
host, host_base_path))
hostcnt += 1
if args.parallel:
- pargs = (host, host_tags, host_base_path, hostdir, args, True,
- configuration)
- log.trace(("Args for multiprocessing operation "
- "for host {}: {}".format(host, pargs)))
- process_args.append(pargs)
+ log.debug("Creating child process for %s", host)
+ process[host] = multiprocessing.Process(
+ target=cls.onehost,
+ args=(host, host_base_path, hostdir, args, True))
+ process[host].start()
else:
try:
- cls.onehost(host, host_tags, host_base_path, hostdir,
- args, parallel=False,
- configuration=configuration)
- except cdist.Error:
+ cls.onehost(host, host_base_path, hostdir,
+ args, parallel=False)
+ except cdist.Error as e:
failed_hosts.append(host)
- if args.parallel and len(process_args) == 1:
- log.debug("Only 1 host for parallel processing, doing it "
- "sequentially")
- try:
- cls.onehost(*process_args[0])
- except cdist.Error:
- failed_hosts.append(host)
- elif args.parallel:
- log.trace("Multiprocessing start method is {}".format(
- multiprocessing.get_start_method()))
- log.trace(("Starting multiprocessing Pool for {} "
- "parallel host operation".format(args.parallel)))
- results = mp_pool_run(cls.onehost,
- process_args,
- jobs=args.parallel)
- log.trace(("Multiprocessing for parallel host operation "
- "finished"))
- log.trace("Multiprocessing for parallel host operation "
- "results: %s", results)
+ # Catch errors in parallel mode when joining
+ if args.parallel:
+ for host in process.keys():
+ log.debug("Joining process %s", host)
+ process[host].join()
- failed_hosts = [host for host, result in results if not result]
+ if not process[host].exitcode == 0:
+ failed_hosts.append(host)
time_end = time.time()
- log.verbose("Total processing time for %s host(s): %s", hostcnt,
- (time_end - time_start))
+ log.info("Total processing time for %s host(s): %s", hostcnt,
+ (time_end - time_start))
if len(failed_hosts) > 0:
raise cdist.Error("Failed to configure the following hosts: " +
" ".join(failed_hosts))
- elif not args.out_path:
- # If tmp out path created then remove it, but only if no failed
- # hosts.
- shutil.rmtree(base_root_path)
@classmethod
def _resolve_ssh_control_path(cls):
base_path = tempfile.mkdtemp()
- cls._register_path_for_removal(base_path)
control_path = os.path.join(base_path, "s")
+ atexit.register(lambda: shutil.rmtree(base_path))
return control_path
@classmethod
def _resolve_remote_cmds(cls, args):
- if (args.remote_exec_pattern or
- args.remote_copy_pattern or
- args.remote_cmds_cleanup_pattern):
- control_path = cls._resolve_ssh_control_path()
+ control_path = cls._resolve_ssh_control_path()
# If we constructed patterns for remote commands then there is
# placeholder for ssh ControlPath, format it and we have unique
# ControlPath for each host.
@@ -348,158 +200,68 @@ class Config(object):
remote_copy = args.remote_copy_pattern.format(control_path)
else:
remote_copy = args.remote_copy
- if args.remote_cmds_cleanup_pattern:
- remote_cmds_cleanup = args.remote_cmds_cleanup_pattern.format(
- control_path)
- else:
- remote_cmds_cleanup = ""
- return (remote_exec, remote_copy, remote_cmds_cleanup, )
-
- @staticmethod
- def _address_family(args):
- if args.force_ipv == 4:
- family = socket.AF_INET
- elif args.force_ipv == 6:
- family = socket.AF_INET6
- else:
- family = 0
- return family
-
- @staticmethod
- def resolve_target_addresses(host, family):
- try:
- return ipaddr.resolve_target_addresses(host, family)
- except: # noqa
- e = sys.exc_info()[1]
- raise cdist.Error(("Error resolving target addresses for host '{}'"
- ": {}").format(host, e))
+ return (remote_exec, remote_copy, )
@classmethod
- def onehost(cls, host, host_tags, host_base_path, host_dir_name, args,
- parallel, configuration, remove_remote_files_dirs=False):
- """Configure ONE system.
- If operating in parallel then return tuple (host, True|False, )
- so that main process knows for which host function was successful.
- """
+ def onehost(cls, host, host_base_path, host_dir_name, args, parallel):
+ """Configure ONE system"""
log = logging.getLogger(host)
try:
- remote_exec, remote_copy, cleanup_cmd = cls._resolve_remote_cmds(
- args)
+ remote_exec, remote_copy = cls._resolve_remote_cmds(args)
log.debug("remote_exec for host \"{}\": {}".format(
host, remote_exec))
log.debug("remote_copy for host \"{}\": {}".format(
host, remote_copy))
- family = cls._address_family(args)
- log.debug("address family: {}".format(family))
- target_host = cls.resolve_target_addresses(host, family)
- log.debug("target_host for host \"{}\": {}".format(
- host, target_host))
+ target_host = ipaddr.resolve_target_addresses(host)
+ log.debug("target_host: {}".format(target_host))
local = cdist.exec.local.Local(
target_host=target_host,
- target_host_tags=host_tags,
base_root_path=host_base_path,
host_dir_name=host_dir_name,
initial_manifest=args.manifest,
- add_conf_dirs=args.conf_dir,
- cache_path_pattern=args.cache_path_pattern,
- quiet_mode=args.quiet,
- configuration=configuration,
- exec_path=sys.argv[0],
- save_output_streams=args.save_output_streams)
+ add_conf_dirs=args.conf_dir)
remote = cdist.exec.remote.Remote(
target_host=target_host,
remote_exec=remote_exec,
- remote_copy=remote_copy,
- base_path=args.remote_out_path,
- quiet_mode=args.quiet,
- archiving_mode=args.use_archiving,
- configuration=configuration,
- stdout_base_path=local.stdout_base_path,
- stderr_base_path=local.stderr_base_path,
- save_output_streams=args.save_output_streams)
+ remote_copy=remote_copy)
- cleanup_cmds = []
- if cleanup_cmd:
- cleanup_cmds.append(cleanup_cmd)
- c = cls(local, remote, dry_run=args.dry_run, jobs=args.jobs,
- cleanup_cmds=cleanup_cmds,
- remove_remote_files_dirs=remove_remote_files_dirs)
+ c = cls(local, remote, dry_run=args.dry_run, jobs=args.jobs)
c.run()
- cls._remove_paths()
except cdist.Error as e:
log.error(e)
if parallel:
- return (host, False, )
+ # We are running in our own process here, need to sys.exit!
+ sys.exit(1)
else:
raise
- if parallel:
- return (host, True, )
-
- @staticmethod
- def create_base_root_path(out_path=None):
- if out_path:
- base_root_path = out_path
- else:
- base_root_path = tempfile.mkdtemp()
-
- return base_root_path
-
- @staticmethod
- def create_host_base_dirs(host, base_root_path):
- hostdir = cdist.str_hash(host)
- host_base_path = os.path.join(base_root_path, hostdir)
-
- return (host_base_path, hostdir)
+ except KeyboardInterrupt:
+ # Ignore in parallel mode, we are existing anyway
+ if parallel:
+ sys.exit(0)
+ # Pass back to controlling code in sequential mode
+ else:
+ raise
def run(self):
"""Do what is most often done: deploy & cleanup"""
start_time = time.time()
- self.log.info("Starting {} run".format(
- 'dry' if self.dry_run else 'configuration'))
-
self._init_files_dirs()
self.explorer.run_global_explorers(self.local.global_explorer_out_path)
- try:
- self.manifest.run_initial_manifest(self.local.initial_manifest)
- except cdist.Error as e:
- which = "init"
- stdout_path = os.path.join(self.local.stdout_base_path, which)
- stderr_path = os.path.join(self.local.stderr_base_path, which)
- raise cdist.InitialManifestError(self.local.initial_manifest,
- stdout_path, stderr_path, e)
+ self.manifest.run_initial_manifest(self.local.initial_manifest)
self.iterate_until_finished()
- self.cleanup()
- self._remove_files_dirs()
- self.local.save_cache(start_time)
- self.log.info("Finished {} run in {:.2f} seconds".format(
- 'dry' if self.dry_run else 'successful',
- time.time() - start_time))
-
- def cleanup(self):
- self.log.debug("Running cleanup commands")
- for cleanup_cmd in self.cleanup_cmds:
- cmd = cleanup_cmd.split()
- cmd.append(self.local.target_host[0])
- try:
- if self.log.getEffectiveLevel() <= logging.DEBUG:
- quiet_mode = False
- else:
- quiet_mode = True
- self.local.run(cmd, return_output=False, save_output=False,
- quiet_mode=quiet_mode)
- except cdist.Error as e:
- # Log warning but continue.
- self.log.warning("Cleanup command failed: %s", e)
+ self.local.save_cache()
+ self.log.info("Finished successful run in %s seconds",
+ time.time() - start_time)
def object_list(self):
"""Short name for object list retrieval"""
@@ -524,12 +286,11 @@ class Config(object):
return objects_changed
def _iterate_once_sequential(self):
- self.log.debug("Iteration in sequential mode")
+ self.log.info("Iteration in sequential mode")
objects_changed = False
for cdist_object in self.object_list():
- if cdist_object.requirements_unfinished(
- cdist_object.requirements):
+ if cdist_object.requirements_unfinished(cdist_object.requirements):
"""We cannot do anything for this poor object"""
continue
@@ -539,10 +300,9 @@ class Config(object):
self.object_prepare(cdist_object)
objects_changed = True
- if cdist_object.requirements_unfinished(
- cdist_object.autorequire):
+ if cdist_object.requirements_unfinished(cdist_object.autorequire):
"""The previous step created objects we depend on -
- wait for them
+ wait for them
"""
continue
@@ -553,7 +313,7 @@ class Config(object):
return objects_changed
def _iterate_once_parallel(self):
- self.log.debug("Iteration in parallel mode in {} jobs".format(
+ self.log.info("Iteration in parallel mode in {} jobs".format(
self.jobs))
objects_changed = False
@@ -576,39 +336,15 @@ class Config(object):
self.object_prepare(cargo[0])
objects_changed = True
elif cargo:
- self.log.trace("Multiprocessing start method is {}".format(
+ self.log.debug("Multiprocessing start method is {}".format(
multiprocessing.get_start_method()))
-
- self.log.trace("Multiprocessing cargo: %s", cargo)
-
- cargo_types = set()
- for c in cargo:
- cargo_types.add(c.cdist_type)
- self.log.trace("Multiprocessing cargo_types: %s", cargo_types)
- nt = len(cargo_types)
- if nt == 1:
- self.log.debug(("Only one type, transferring explorers "
- "sequentially"))
- self.explorer.transfer_type_explorers(cargo_types.pop())
- else:
- self.log.trace(("Starting multiprocessing Pool for {} "
- "parallel types explorers transferring".format(
- nt)))
- args = [
- (ct, ) for ct in cargo_types
- ]
- mp_pool_run(self.explorer.transfer_type_explorers, args,
- jobs=self.jobs)
- self.log.trace(("Multiprocessing for parallel transferring "
- "types' explorers finished"))
-
- self.log.trace(("Starting multiprocessing Pool for {} parallel "
+ self.log.debug(("Starting multiprocessing Pool for {} parallel "
"objects preparation".format(n)))
args = [
- (c, False, ) for c in cargo
+ (c, ) for c in cargo
]
mp_pool_run(self.object_prepare, args, jobs=self.jobs)
- self.log.trace(("Multiprocessing for parallel object "
+ self.log.debug(("Multiprocessing for parallel object "
"preparation finished"))
objects_changed = True
@@ -628,44 +364,25 @@ class Config(object):
# self.object_run(cdist_object)
# objects_changed = True
+ cargo.append(cdist_object)
- # put objects in chuncks of distinct types
- # so that there is no more than one object
- # of the same type in one chunk because there is a
- # possibility of object's process locking which
- # prevents parallel execution at remote
- # and do this only for nonparallel marked types
- for chunk in cargo:
- for obj in chunk:
- if (obj.cdist_type == cdist_object.cdist_type and
- cdist_object.cdist_type.is_nonparallel):
- break
- else:
- chunk.append(cdist_object)
- break
- else:
- chunk = [cdist_object, ]
- cargo.append(chunk)
-
- for chunk in cargo:
- self.log.trace("Running chunk: %s", chunk)
- n = len(chunk)
- if n == 1:
- self.log.debug("Only one object, running sequentially")
- self.object_run(chunk[0])
- objects_changed = True
- elif chunk:
- self.log.trace("Multiprocessing start method is {}".format(
- multiprocessing.get_start_method()))
- self.log.trace(("Starting multiprocessing Pool for {} "
- "parallel object run".format(n)))
- args = [
- (c, ) for c in chunk
- ]
- mp_pool_run(self.object_run, args, jobs=self.jobs)
- self.log.trace(("Multiprocessing for parallel object "
- "run finished"))
- objects_changed = True
+ n = len(cargo)
+ if n == 1:
+ self.log.debug("Only one object, running sequentially")
+ self.object_run(cargo[0])
+ objects_changed = True
+ elif cargo:
+ self.log.debug("Multiprocessing start method is {}".format(
+ multiprocessing.get_start_method()))
+ self.log.debug(("Starting multiprocessing Pool for {} parallel "
+ "object run".format(n)))
+ args = [
+ (c, ) for c in cargo
+ ]
+ mp_pool_run(self.object_run, args, jobs=self.jobs)
+ self.log.debug(("Multiprocessing for parallel object "
+ "run finished"))
+ objects_changed = True
return objects_changed
@@ -684,28 +401,6 @@ class Config(object):
self.__dict__.update(state)
self._open_logger()
- def _validate_dependencies(self):
- '''
- Build dependency graph for unfinished objects and
- check for cycles.
- '''
- graph = {}
- for cdist_object in self.object_list():
- obj_name = cdist_object.name
- if obj_name not in graph:
- graph[obj_name] = []
- if cdist_object.state == cdist_object.STATE_DONE:
- continue
-
- for requirement in cdist_object.requirements_unfinished(
- cdist_object.requirements):
- graph[obj_name].append(requirement.name)
-
- for requirement in cdist_object.requirements_unfinished(
- cdist_object.autorequire):
- graph[obj_name].append(requirement.name)
- return graph_check_cycle(graph)
-
def iterate_until_finished(self):
"""
Go through all objects and solve them
@@ -715,12 +410,6 @@ class Config(object):
objects_changed = True
while objects_changed:
- # Check for cycles as early as possible.
- has_cycle, path = self._validate_dependencies()
- if has_cycle:
- raise cdist.UnresolvableRequirementsError(
- "Cycle detected in object dependencies:\n{}!".format(
- " -> ".join(path)))
objects_changed = self.iterate_once()
# Check whether all objects have been finished
@@ -759,74 +448,43 @@ class Config(object):
("The requirements of the following objects could not be "
"resolved:\n%s") % ("\n".join(info_string)))
- def _handle_deprecation(self, cdist_object):
- cdist_type = cdist_object.cdist_type
- deprecated = cdist_type.deprecated
- if deprecated is not None:
- if deprecated:
- self.log.warning("Type %s is deprecated: %s", cdist_type.name,
- deprecated)
- else:
- self.log.warning("Type %s is deprecated.", cdist_type.name)
- for param in cdist_object.parameters:
- if param in cdist_type.deprecated_parameters:
- msg = cdist_type.deprecated_parameters[param]
- if msg:
- format = "%s parameter of type %s is deprecated: %s"
- args = [param, cdist_type.name, msg]
- else:
- format = "%s parameter of type %s is deprecated."
- args = [param, cdist_type.name]
- self.log.warning(format, *args)
-
- def object_prepare(self, cdist_object, transfer_type_explorers=True):
+ def object_prepare(self, cdist_object):
"""Prepare object: Run type explorer + manifest"""
- self._handle_deprecation(cdist_object)
- self.log.verbose("Preparing object {}".format(cdist_object.name))
- self.log.verbose(
- "Running manifest and explorers for " + cdist_object.name)
- self.explorer.run_type_explorers(cdist_object, transfer_type_explorers)
- try:
- self.manifest.run_type_manifest(cdist_object)
- self.log.trace("[ORDER_DEP] Removing order dep files for %s",
- cdist_object)
- cdist_object.cleanup()
- cdist_object.state = core.CdistObject.STATE_PREPARED
- except cdist.Error as e:
- raise cdist.CdistObjectError(cdist_object, e)
+ self.log.info(
+ "Running manifest and explorers for " + cdist_object.name)
+ self.explorer.run_type_explorers(cdist_object)
+ self.manifest.run_type_manifest(cdist_object)
+ cdist_object.state = core.CdistObject.STATE_PREPARED
def object_run(self, cdist_object):
"""Run gencode and code for an object"""
- try:
- self.log.verbose("Running object " + cdist_object.name)
- if cdist_object.state == core.CdistObject.STATE_DONE:
- raise cdist.Error(("Attempting to run an already finished "
- "object: %s"), cdist_object)
- # Generate
- self.log.debug("Generating code for %s" % (cdist_object.name))
- cdist_object.code_local = self.code.run_gencode_local(cdist_object)
- cdist_object.code_remote = self.code.run_gencode_remote(
- cdist_object)
+ self.log.debug("Trying to run object %s" % (cdist_object.name))
+ if cdist_object.state == core.CdistObject.STATE_DONE:
+ raise cdist.Error(("Attempting to run an already finished "
+ "object: %s"), cdist_object)
+
+ cdist_type = cdist_object.cdist_type
+
+ # Generate
+ self.log.info("Generating code for %s" % (cdist_object.name))
+ cdist_object.code_local = self.code.run_gencode_local(cdist_object)
+ cdist_object.code_remote = self.code.run_gencode_remote(cdist_object)
+ if cdist_object.code_local or cdist_object.code_remote:
+ cdist_object.changed = True
+
+ # Execute
+ if not self.dry_run:
if cdist_object.code_local or cdist_object.code_remote:
- cdist_object.changed = True
+ self.log.info("Executing code for %s" % (cdist_object.name))
+ if cdist_object.code_local:
+ self.code.run_code_local(cdist_object)
+ if cdist_object.code_remote:
+ self.code.transfer_code_remote(cdist_object)
+ self.code.run_code_remote(cdist_object)
+ else:
+ self.log.info("Skipping code execution due to DRY RUN")
- # Execute
- if cdist_object.code_local or cdist_object.code_remote:
- self.log.info("Processing %s" % (cdist_object.name))
- if not self.dry_run:
- if cdist_object.code_local:
- self.log.trace("Executing local code for %s"
- % (cdist_object.name))
- self.code.run_code_local(cdist_object)
- if cdist_object.code_remote:
- self.log.trace("Executing remote code for %s"
- % (cdist_object.name))
- self.code.transfer_code_remote(cdist_object)
- self.code.run_code_remote(cdist_object)
-
- # Mark this object as done
- self.log.trace("Finishing run of " + cdist_object.name)
- cdist_object.state = core.CdistObject.STATE_DONE
- except cdist.Error as e:
- raise cdist.CdistObjectError(cdist_object, e)
+ # Mark this object as done
+ self.log.debug("Finishing run of " + cdist_object.name)
+ cdist_object.state = core.CdistObject.STATE_DONE
diff --git a/cdist/configuration.py b/cdist/configuration.py
deleted file mode 100644
index 1011a382..00000000
--- a/cdist/configuration.py
+++ /dev/null
@@ -1,498 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# 2017 Darko Poljak (darko.poljak at gmail.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-
-
-import configparser
-import os
-import cdist
-import cdist.argparse
-import re
-import multiprocessing
-import logging
-
-
-class Singleton(type):
- instance = None
-
- def __call__(cls, *args, **kwargs):
- if 'singleton' in kwargs and not kwargs['singleton']:
- return super(Singleton, cls).__call__(*args, **kwargs)
- else:
- if not cls.instance:
- cls.instance = super(Singleton, cls).__call__(*args, **kwargs)
- return cls.instance
-
-
-_VERBOSITY_VALUES = (
- 'ERROR', 'WARNING', 'INFO', 'VERBOSE', 'DEBUG', 'TRACE', 'OFF',
-)
-_ARCHIVING_VALUES = (
- 'tar', 'tgz', 'tbz2', 'txz', 'none',
-)
-
-
-class OptionBase:
- def __init__(self, name):
- self.name = name
-
- def get_converter(self, *args, **kwargs):
- raise NotImplementedError('Subclass should implement this method')
-
- def translate(self, val):
- return val
-
- def update_value(self, currval, newval, update_appends=False):
- '''Update current option value currval with new option value newval.
- If update_appends is True and if currval and newval are lists then
- resulting list contains all values in currval plus all values in
- newval. Otherwise, newval is returned.
- '''
- if (isinstance(currval, list) and isinstance(newval, list) and
- update_appends):
- rv = []
- if currval:
- rv.extend(currval)
- if newval:
- rv.extend(newval)
- if not rv:
- rv = None
- return rv
- else:
- return newval
-
- def should_override(self, currval, newval):
- return True
-
-
-class StringOption(OptionBase):
- def __init__(self, name):
- super().__init__(name)
-
- def get_converter(self):
- def string_converter(val):
- return self.translate(str(val))
- return string_converter
-
- def translate(self, val):
- if val:
- return val
- else:
- return None
-
-
-class BooleanOption(OptionBase):
- BOOLEAN_STATES = configparser.ConfigParser.BOOLEAN_STATES
-
- # If default_overrides is False then previous config value will not be
- # overriden with default_value.
- def __init__(self, name, default_overrides=True, default_value=True):
- super().__init__(name)
- self.default_overrides = default_overrides
- self.default_value = default_value
-
- def get_converter(self):
- def boolean_converter(val):
- v = val.lower()
- if v not in self.BOOLEAN_STATES:
- raise ValueError('Invalid {} boolean value: {}'.format(
- self.name, val))
- return self.translate(v)
- return boolean_converter
-
- def translate(self, val):
- return self.BOOLEAN_STATES[val]
-
- def should_override(self, currval, newval):
- if not self.default_overrides:
- return newval != self.default_value
- return True
-
-
-class IntOption(OptionBase):
- def __init__(self, name):
- super().__init__(name)
-
- def get_converter(self):
- def int_converter(val):
- return self.translate(int(val))
- return int_converter
-
-
-class LowerBoundIntOption(IntOption):
- def __init__(self, name, lower_bound):
- super().__init__(name)
- self.lower_bound = lower_bound
-
- def get_converter(self):
- def lower_bound_converter(val):
- converted = super(LowerBoundIntOption, self).get_converter()(val)
- if converted < self.lower_bound:
- raise ValueError("Invalid {} value: {} < {}".format(
- self.name, val, self.lower_bound))
- return converted
- return lower_bound_converter
-
-
-class SpecialCasesLowerBoundIntOption(LowerBoundIntOption):
- def __init__(self, name, lower_bound, special_cases_mapping):
- super().__init__(name, lower_bound)
- self.special_cases_mapping = special_cases_mapping
-
- def translate(self, val):
- if val in self.special_cases_mapping:
- return self.special_cases_mapping[val]
- else:
- return val
-
-
-class JobsOption(SpecialCasesLowerBoundIntOption):
- def __init__(self, name):
- super().__init__(name, -1, {-1: multiprocessing.cpu_count()})
-
-
-class SelectOption(OptionBase):
- def __init__(self, name, valid_values):
- super().__init__(name)
- self.valid_values = valid_values
-
- def get_converter(self):
- def select_converter(val):
- if val in self.valid_values:
- return self.translate(val)
- else:
- raise ValueError("Invalid {} value: {}.".format(
- self.name, val))
- return select_converter
-
-
-class VerbosityOption(SelectOption):
- def __init__(self):
- super().__init__('verbosity', _VERBOSITY_VALUES)
-
- def translate(self, val):
- name = 'VERBOSE_' + val
- verbose = getattr(cdist.argparse, name)
- return verbose
-
-
-class DelimitedValuesOption(OptionBase):
- def __init__(self, name, delimiter):
- super().__init__(name)
- self.delimiter = delimiter
-
- def get_converter(self):
- def delimited_values_converter(val):
- vals = re.split(r'(?
- ('__type_name', 'the/object_id')
+ """split_name('__type_name/the/object_id') -> ('__type_name', 'the/object_id')
Split the given object name into it's type and object_id parts.
@@ -121,9 +122,7 @@ class CdistObject(object):
@staticmethod
def join_name(type_name, object_id):
- """join_name('__type_name', 'the/object_id')
- ->
- __type_name/the/object_id'
+ """join_name('__type_name', 'the/object_id') -> __type_name/the/object_id'
Join the given type_name and object_id into an object name.
@@ -146,13 +145,9 @@ class CdistObject(object):
if '//' in self.object_id:
raise IllegalObjectIdError(
self.object_id, 'object_id may not contain //')
-
- _invalid_object_ids = ('.', '/', )
- for ioid in _invalid_object_ids:
- if self.object_id == ioid:
- raise IllegalObjectIdError(
- self.object_id,
- 'object_id may not be a {}'.format(ioid))
+ if self.object_id == '.':
+ raise IllegalObjectIdError(
+ self.object_id, 'object_id may not be a .')
# If no object_id and type is not singleton => error out
if not self.object_id and not self.cdist_type.is_singleton:
@@ -166,8 +161,7 @@ class CdistObject(object):
# (parameters: %s)" % (self.cdist_type.name, self.parameters))
def object_from_name(self, object_name):
- """Convenience method for creating an object instance from an object
- name.
+ """Convenience method for creating an object instance from an object name.
Mainly intended to create objects when resolving requirements.
@@ -243,16 +237,6 @@ class CdistObject(object):
lambda obj: os.path.join(obj.base_path, obj.code_local_path))
code_remote = fsproperty.FileStringProperty(
lambda obj: os.path.join(obj.base_path, obj.code_remote_path))
- typeorder = fsproperty.FileListProperty(
- lambda obj: os.path.join(obj.absolute_path, 'typeorder'))
- typeorder_dep = fsproperty.FileListProperty(
- lambda obj: os.path.join(obj.absolute_path, 'typeorder_dep'))
-
- def cleanup(self):
- try:
- os.remove(os.path.join(self.absolute_path, 'typeorder_dep'))
- except FileNotFoundError:
- pass
@property
def exists(self):
@@ -263,11 +247,10 @@ class CdistObject(object):
"""Create this cdist object on the filesystem.
"""
try:
- for path in (self.absolute_path,
- os.path.join(self.base_path, self.parameter_path),
- self.stdout_path,
- self.stderr_path):
- os.makedirs(path, exist_ok=allow_overwrite)
+ os.makedirs(self.absolute_path, exist_ok=allow_overwrite)
+ absolute_parameter_path = os.path.join(self.base_path,
+ self.parameter_path)
+ os.makedirs(absolute_parameter_path, exist_ok=allow_overwrite)
except EnvironmentError as error:
raise cdist.Error(('Error creating directories for cdist object: '
'%s: %s') % (self, error))
diff --git a/cdist/core/cdist_type.py b/cdist/core/cdist_type.py
index 4500f50d..14865386 100644
--- a/cdist/core/cdist_type.py
+++ b/cdist/core/cdist_type.py
@@ -21,21 +21,19 @@
#
import os
+
import cdist
-import cdist.core
-import logging
-class InvalidTypeError(cdist.Error):
+class NoSuchTypeError(cdist.Error):
def __init__(self, name, type_path, type_absolute_path):
self.name = name
self.type_path = type_path
self.type_absolute_path = type_absolute_path
- self.source_path = os.path.realpath(self.type_absolute_path)
def __str__(self):
- return "Invalid type '%s' at '%s' defined at '%s'" % (
- self.type_path, self.type_absolute_path, self.source_path)
+ return "Type '%s' does not exist at %s" % (
+ self.type_path, self.type_absolute_path)
class CdistType(object):
@@ -47,15 +45,13 @@ class CdistType(object):
"""
- log = logging.getLogger("cdist-type")
-
def __init__(self, base_path, name):
self.base_path = base_path
self.name = name
self.path = self.name
self.absolute_path = os.path.join(self.base_path, self.path)
if not os.path.isdir(self.absolute_path):
- raise InvalidTypeError(self.name, self.path, self.absolute_path)
+ raise NoSuchTypeError(self.name, self.path, self.absolute_path)
self.manifest_path = os.path.join(self.name, "manifest")
self.explorer_path = os.path.join(self.name, "explorer")
self.gencode_local_path = os.path.join(self.name, "gencode-local")
@@ -69,29 +65,17 @@ class CdistType(object):
self.__optional_multiple_parameters = None
self.__boolean_parameters = None
self.__parameter_defaults = None
- self.__deprecated_parameters = None
-
- def __hash__(self):
- return hash(self.name)
@classmethod
def list_types(cls, base_path):
"""Return a list of type instances"""
for name in cls.list_type_names(base_path):
- try:
- yield cls(base_path, name)
- except InvalidTypeError as e:
- # ignore invalid type, log warning and continue
- msg = "Ignoring invalid type '%s' at '%s' defined at '%s'" % (
- e.type_path, e.type_absolute_path, e.source_path)
- cls.log.warning(msg)
- # remove invalid from runtime conf dir
- os.remove(e.type_absolute_path)
+ yield cls(base_path, name)
@classmethod
def list_type_names(cls, base_path):
"""Return a list of type names"""
- return cdist.core.listdir(base_path)
+ return os.listdir(base_path)
_instances = {}
@@ -128,30 +112,13 @@ class CdistType(object):
(if not: for configuration)"""
return os.path.isfile(os.path.join(self.absolute_path, "install"))
- @property
- def is_nonparallel(self):
- """Check whether a type is a non parallel, i.e. its objects
- cannot run in parallel."""
- return os.path.isfile(os.path.join(self.absolute_path, "nonparallel"))
-
- @property
- def deprecated(self):
- """Get type deprecation message. If message is None then type
- is not deprecated."""
- deprecated_path = os.path.join(self.absolute_path, "deprecated")
- try:
- with open(deprecated_path, 'r') as f:
- return f.read()
- except FileNotFoundError:
- return None
-
@property
def explorers(self):
"""Return a list of available explorers"""
if not self.__explorers:
try:
- self.__explorers = cdist.core.listdir(
- os.path.join(self.absolute_path, "explorer"))
+ self.__explorers = os.listdir(os.path.join(self.absolute_path,
+ "explorer"))
except EnvironmentError:
# error ignored
self.__explorers = []
@@ -167,9 +134,7 @@ class CdistType(object):
"parameter",
"required")) as fd:
for line in fd:
- line = line.strip()
- if line:
- parameters.append(line)
+ parameters.append(line.strip())
except EnvironmentError:
# error ignored
pass
@@ -187,9 +152,7 @@ class CdistType(object):
"parameter",
"required_multiple")) as fd:
for line in fd:
- line = line.strip()
- if line:
- parameters.append(line)
+ parameters.append(line.strip())
except EnvironmentError:
# error ignored
pass
@@ -207,9 +170,7 @@ class CdistType(object):
"parameter",
"optional")) as fd:
for line in fd:
- line = line.strip()
- if line:
- parameters.append(line)
+ parameters.append(line.strip())
except EnvironmentError:
# error ignored
pass
@@ -227,9 +188,7 @@ class CdistType(object):
"parameter",
"optional_multiple")) as fd:
for line in fd:
- line = line.strip()
- if line:
- parameters.append(line)
+ parameters.append(line.strip())
except EnvironmentError:
# error ignored
pass
@@ -247,9 +206,7 @@ class CdistType(object):
"parameter",
"boolean")) as fd:
for line in fd:
- line = line.strip()
- if line:
- parameters.append(line)
+ parameters.append(line.strip())
except EnvironmentError:
# error ignored
pass
@@ -265,7 +222,7 @@ class CdistType(object):
defaults_dir = os.path.join(self.absolute_path,
"parameter",
"default")
- for name in cdist.core.listdir(defaults_dir):
+ for name in os.listdir(defaults_dir):
try:
with open(os.path.join(defaults_dir, name)) as fd:
defaults[name] = fd.read().strip()
@@ -276,23 +233,3 @@ class CdistType(object):
finally:
self.__parameter_defaults = defaults
return self.__parameter_defaults
-
- @property
- def deprecated_parameters(self):
- if not self.__deprecated_parameters:
- deprecated = {}
- try:
- deprecated_dir = os.path.join(self.absolute_path,
- "parameter",
- "deprecated")
- for name in cdist.core.listdir(deprecated_dir):
- try:
- with open(os.path.join(deprecated_dir, name)) as fd:
- deprecated[name] = fd.read().strip()
- except EnvironmentError:
- pass # Swallow errors raised by open() or read()
- except EnvironmentError:
- pass # Swallow error raised by os.listdir()
- finally:
- self.__deprecated_parameters = deprecated
- return self.__deprecated_parameters
diff --git a/cdist/core/code.py b/cdist/core/code.py
index 1550880a..e9e2edf0 100644
--- a/cdist/core/code.py
+++ b/cdist/core/code.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
-# 2011-2017 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
# 2014 Daniel Heule (hda at sfs.biz)
#
@@ -21,8 +21,12 @@
#
#
+import logging
import os
-from . import util
+
+import cdist
+
+log = logging.getLogger(__name__)
'''
@@ -55,7 +59,6 @@ gencode-local
__object_fq: full qualified object id, iow: $type.name + / + object_id
__type: full qualified path to the type's dir
__files: full qualified path to the files dir
- __target_host_tags: comma spearated list of host tags
returns: string containing the generated code or None
@@ -74,7 +77,6 @@ gencode-remote
__object_fq: full qualified object id, iow: $type.name + / + object_id
__type: full qualified path to the type's dir
__files: full qualified path to the files dir
- __target_host_tags: comma spearated list of host tags
returns: string containing the generated code or None
@@ -97,7 +99,7 @@ class Code(object):
"""
# target_host is tuple (target_host, target_hostname, target_fqdn)
- def __init__(self, target_host, local, remote, dry_run=False):
+ def __init__(self, target_host, local, remote):
self.target_host = target_host
self.local = local
self.remote = remote
@@ -107,15 +109,8 @@ class Code(object):
'__target_fqdn': self.target_host[2],
'__global': self.local.base_path,
'__files': self.local.files_path,
- '__target_host_tags': self.local.target_host_tags,
- '__cdist_log_level': util.log_level_env_var_val(local.log),
- '__cdist_log_level_name': util.log_level_name_env_var_val(
- local.log),
}
- if dry_run:
- self.env['__cdist_dry_run'] = '1'
-
def _run_gencode(self, cdist_object, which):
cdist_type = cdist_object.cdist_type
script = os.path.join(self.local.type_path,
@@ -130,18 +125,8 @@ class Code(object):
'__object_name': cdist_object.name,
})
message_prefix = cdist_object.name
- if self.local.save_output_streams:
- stderr_path = os.path.join(cdist_object.stderr_path,
- 'gencode-' + which)
- with open(stderr_path, 'ba+') as stderr:
- return self.local.run_script(script, env=env,
- return_output=True,
- message_prefix=message_prefix,
- stderr=stderr)
- else:
- return self.local.run_script(script, env=env,
- return_output=True,
- message_prefix=message_prefix)
+ return self.local.run_script(script, env=env, return_output=True,
+ message_prefix=message_prefix)
def run_gencode_local(self, cdist_object):
"""Run the gencode-local script for the given cdist object."""
@@ -158,24 +143,15 @@ class Code(object):
cdist_object.code_remote_path)
destination = os.path.join(self.remote.object_path,
cdist_object.code_remote_path)
- self.remote.mkdir(os.path.dirname(destination))
+ # FIXME: BUG: do not create destination, but top level of destination!
+ self.remote.mkdir(destination)
self.remote.transfer(source, destination)
def _run_code(self, cdist_object, which, env=None):
which_exec = getattr(self, which)
script = os.path.join(which_exec.object_path,
getattr(cdist_object, 'code_%s_path' % which))
- if which_exec.save_output_streams:
- stderr_path = os.path.join(cdist_object.stderr_path,
- 'code-' + which)
- stdout_path = os.path.join(cdist_object.stdout_path,
- 'code-' + which)
- with open(stderr_path, 'ba+') as stderr, \
- open(stdout_path, 'ba+') as stdout:
- return which_exec.run_script(script, env=env, stdout=stdout,
- stderr=stderr)
- else:
- return which_exec.run_script(script, env=env)
+ return which_exec.run_script(script, env=env)
def run_code_local(self, cdist_object):
"""Run the code-local script for the given cdist object."""
diff --git a/cdist/core/explorer.py b/cdist/core/explorer.py
index 353d7681..45afc5c0 100644
--- a/cdist/core/explorer.py
+++ b/cdist/core/explorer.py
@@ -24,9 +24,7 @@ import logging
import os
import glob
import multiprocessing
-import cdist
from cdist.mputil import mp_pool_run
-from . import util
'''
common:
@@ -67,7 +65,7 @@ class Explorer(object):
"""Executes cdist explorers.
"""
- def __init__(self, target_host, local, remote, jobs=None, dry_run=False):
+ def __init__(self, target_host, local, remote, jobs=None):
self.target_host = target_host
self._open_logger()
@@ -79,15 +77,7 @@ class Explorer(object):
'__target_hostname': self.target_host[1],
'__target_fqdn': self.target_host[2],
'__explorer': self.remote.global_explorer_path,
- '__target_host_tags': self.local.target_host_tags,
- '__cdist_log_level': util.log_level_env_var_val(self.log),
- '__cdist_log_level_name': util.log_level_name_env_var_val(
- self.log),
}
-
- if dry_run:
- self.env['__cdist_dry_run'] = '1'
-
self._type_explorers_transferred = []
self.jobs = jobs
@@ -105,7 +95,7 @@ class Explorer(object):
out_path directory.
"""
- self.log.verbose("Running global explorers")
+ self.log.info("Running global explorers")
self.transfer_global_explorers()
if self.jobs is None:
self._run_global_explorers_seq(out_path)
@@ -113,35 +103,28 @@ class Explorer(object):
self._run_global_explorers_parallel(out_path)
def _run_global_explorer(self, explorer, out_path):
- try:
- path = os.path.join(out_path, explorer)
- output = self.run_global_explorer(explorer)
- with open(path, 'w') as fd:
- fd.write(output)
- except cdist.Error as e:
- local_path = os.path.join(self.local.global_explorer_path,
- explorer)
- stderr_path = os.path.join(self.local.stderr_base_path, "remote")
- raise cdist.GlobalExplorerError(explorer, local_path, stderr_path,
- e)
+ output = self.run_global_explorer(explorer)
+ path = os.path.join(out_path, explorer)
+ with open(path, 'w') as fd:
+ fd.write(output)
def _run_global_explorers_seq(self, out_path):
- self.log.debug("Running global explorers sequentially")
+ self.log.info("Running global explorers sequentially")
for explorer in self.list_global_explorer_names():
self._run_global_explorer(explorer, out_path)
def _run_global_explorers_parallel(self, out_path):
- self.log.debug("Running global explorers in {} parallel jobs".format(
+ self.log.info("Running global explorers in {} parallel jobs".format(
self.jobs))
- self.log.trace("Multiprocessing start method is {}".format(
+ self.log.debug("Multiprocessing start method is {}".format(
multiprocessing.get_start_method()))
- self.log.trace(("Starting multiprocessing Pool for global "
+ self.log.debug(("Starting multiprocessing Pool for global "
"explorers run"))
args = [
(e, out_path, ) for e in self.list_global_explorer_names()
]
mp_pool_run(self._run_global_explorer, args, jobs=self.jobs)
- self.log.trace(("Multiprocessing run for global explorers "
+ self.log.debug(("Multiprocessing run for global explorers "
"finished"))
# logger is not pickable, so remove it when we pickle
@@ -158,6 +141,7 @@ class Explorer(object):
def transfer_global_explorers(self):
"""Transfer the global explorers to the remote side."""
+ self.remote.mkdir(self.remote.global_explorer_path)
self.remote.transfer(self.local.global_explorer_path,
self.remote.global_explorer_path,
self.jobs)
@@ -179,39 +163,22 @@ class Explorer(object):
except EnvironmentError:
return []
- def run_type_explorers(self, cdist_object, transfer_type_explorers=True):
+ def run_type_explorers(self, cdist_object):
"""Run the type explorers for the given object and save their output
in the object.
"""
- self.log.verbose("Running type explorers for {}".format(
- cdist_object.cdist_type))
- if transfer_type_explorers:
- self.log.trace("Transferring type explorers for type: %s",
- cdist_object.cdist_type)
- self.transfer_type_explorers(cdist_object.cdist_type)
- else:
- self.log.trace(("No need for transferring type explorers for "
- "type: %s"),
- cdist_object.cdist_type)
- self.log.trace("Transferring object parameters for object: %s",
+ self.log.debug("Transfering type explorers for type: %s",
+ cdist_object.cdist_type)
+ self.transfer_type_explorers(cdist_object.cdist_type)
+ self.log.debug("Transfering object parameters for object: %s",
cdist_object.name)
self.transfer_object_parameters(cdist_object)
- cdist_type = cdist_object.cdist_type
- for explorer in self.list_type_explorer_names(cdist_type):
- self.log.trace("Running type explorer '%s' for object '%s'",
+ for explorer in self.list_type_explorer_names(cdist_object.cdist_type):
+ output = self.run_type_explorer(explorer, cdist_object)
+ self.log.debug("Running type explorer '%s' for object '%s'",
explorer, cdist_object.name)
- try:
- output = self.run_type_explorer(explorer, cdist_object)
- cdist_object.explorers[explorer] = output
- except cdist.Error as e:
- path = os.path.join(self.local.type_path,
- cdist_type.explorer_path,
- explorer)
- stderr_path = os.path.join(self.local.stderr_base_path,
- "remote")
- raise cdist.CdistObjectExplorerError(
- cdist_object, explorer, path, stderr_path, e)
+ cdist_object.explorers[explorer] = output
def run_type_explorer(self, explorer, cdist_object):
"""Run the given type explorer for the given object and return
@@ -236,13 +203,14 @@ class Explorer(object):
remote side."""
if cdist_type.explorers:
if cdist_type.name in self._type_explorers_transferred:
- self.log.trace(("Skipping retransfer of type explorers "
- "for: %s"), cdist_type)
+ self.log.debug("Skipping retransfer of type explorers for: %s",
+ cdist_type)
else:
source = os.path.join(self.local.type_path,
cdist_type.explorer_path)
destination = os.path.join(self.remote.type_path,
cdist_type.explorer_path)
+ self.remote.mkdir(destination)
self.remote.transfer(source, destination)
self.remote.run(["chmod", "0700", "%s/*" % (destination)])
self._type_explorers_transferred.append(cdist_type.name)
@@ -254,4 +222,5 @@ class Explorer(object):
cdist_object.parameter_path)
destination = os.path.join(self.remote.object_path,
cdist_object.parameter_path)
+ self.remote.mkdir(destination)
self.remote.transfer(source, destination)
diff --git a/cdist/core/manifest.py b/cdist/core/manifest.py
index 8aeaf860..29f96c4f 100644
--- a/cdist/core/manifest.py
+++ b/cdist/core/manifest.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
-# 2011-2013 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
@@ -24,7 +24,6 @@ import logging
import os
import cdist
-from . import util
'''
common:
@@ -43,7 +42,6 @@ common:
types are defined for use in type emulator
== local.type_path
__files: full qualified path to the files dir
- __target_host_tags: comma spearated list of host tags
initial manifest is:
script: full qualified path to the initial manifest
@@ -96,11 +94,7 @@ class Manifest(object):
"""Executes cdist manifests.
"""
-
- ORDER_DEP_STATE_NAME = 'order_dep_state'
- TYPEORDER_DEP_NAME = 'typeorder_dep'
-
- def __init__(self, target_host, local, dry_run=False):
+ def __init__(self, target_host, local):
self.target_host = target_host
self.local = local
@@ -115,14 +109,10 @@ class Manifest(object):
'__target_hostname': self.target_host[1],
'__target_fqdn': self.target_host[2],
'__files': self.local.files_path,
- '__target_host_tags': self.local.target_host_tags,
- '__cdist_log_level': util.log_level_env_var_val(self.log),
- '__cdist_log_level_name': util.log_level_name_env_var_val(
- self.log),
}
- if dry_run:
- self.env['__cdist_dry_run'] = '1'
+ if self.log.getEffectiveLevel() == logging.DEBUG:
+ self.env.update({'__cdist_debug': "yes"})
def _open_logger(self):
self.log = logging.getLogger(self.target_host[0])
@@ -155,27 +145,16 @@ class Manifest(object):
else:
user_supplied = True
+ self.log.info("Running initial manifest " + initial_manifest)
+
if not os.path.isfile(initial_manifest):
raise NoInitialManifestError(initial_manifest, user_supplied)
message_prefix = "initialmanifest"
- self.log.verbose("Running initial manifest " + initial_manifest)
- which = "init"
- if self.local.save_output_streams:
- stderr_path = os.path.join(self.local.stderr_base_path, which)
- stdout_path = os.path.join(self.local.stdout_base_path, which)
- with open(stderr_path, 'ba+') as stderr, \
- open(stdout_path, 'ba+') as stdout:
- self.local.run_script(
- initial_manifest,
- env=self.env_initial_manifest(initial_manifest),
- message_prefix=message_prefix,
- stdout=stdout, stderr=stderr)
- else:
- self.local.run_script(
- initial_manifest,
- env=self.env_initial_manifest(initial_manifest),
- message_prefix=message_prefix)
+ self.local.run_script(initial_manifest,
+ env=self.env_initial_manifest(initial_manifest),
+ message_prefix=message_prefix,
+ save_output=False)
def env_type_manifest(self, cdist_object):
type_manifest = os.path.join(self.local.type_path,
@@ -197,32 +176,8 @@ class Manifest(object):
type_manifest = os.path.join(self.local.type_path,
cdist_object.cdist_type.manifest_path)
message_prefix = cdist_object.name
- which = 'manifest'
if os.path.isfile(type_manifest):
- self.log.verbose("Running type manifest %s for object %s",
- type_manifest, cdist_object.name)
- if self.local.save_output_streams:
- stderr_path = os.path.join(cdist_object.stderr_path, which)
- stdout_path = os.path.join(cdist_object.stdout_path, which)
- with open(stderr_path, 'ba+') as stderr, \
- open(stdout_path, 'ba+') as stdout:
- self.local.run_script(
- type_manifest,
- env=self.env_type_manifest(cdist_object),
- message_prefix=message_prefix,
- stdout=stdout, stderr=stderr)
- else:
- self.local.run_script(
- type_manifest,
- env=self.env_type_manifest(cdist_object),
- message_prefix=message_prefix)
-
- def cleanup(self):
- def _rm_file(fname):
- try:
- self.log.trace("[ORDER_DEP] Removing %s", fname)
- os.remove(os.path.join(self.local.base_path, fname))
- except FileNotFoundError:
- pass
- _rm_file(Manifest.ORDER_DEP_STATE_NAME)
- _rm_file(Manifest.TYPEORDER_DEP_NAME)
+ self.local.run_script(type_manifest,
+ env=self.env_type_manifest(cdist_object),
+ message_prefix=message_prefix,
+ save_output=False)
diff --git a/cdist/core/util.py b/cdist/core/util.py
deleted file mode 100644
index 64570d34..00000000
--- a/cdist/core/util.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# 2017 Darko Poljak (darko.poljak at gmail.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-
-import os
-import logging
-
-
-def listdir(path='.', include_dot=False):
- """os.listdir but do not include entries whose names begin with a dot('.')
- if include_dot is False.
- """
- if include_dot:
- return os.listdir(path)
- else:
- return [x for x in os.listdir(path) if not _ishidden(x)]
-
-
-def _ishidden(path):
- return path[0] in ('.', b'.'[0])
-
-
-def log_level_env_var_val(log):
- return str(log.getEffectiveLevel())
-
-
-def log_level_name_env_var_val(log):
- return logging.getLevelName(log.getEffectiveLevel())
diff --git a/cdist/emulator.py b/cdist/emulator.py
index 4800e2a3..cdbe5b08 100644
--- a/cdist/emulator.py
+++ b/cdist/emulator.py
@@ -28,8 +28,6 @@ import sys
import cdist
from cdist import core
-from cdist import flock
-from cdist.core.manifest import Manifest
class MissingRequiredEnvironmentVariableError(cdist.Error):
@@ -45,7 +43,7 @@ class MissingRequiredEnvironmentVariableError(cdist.Error):
class DefaultList(list):
"""Helper class to allow default values for optional_multiple parameters.
- @see https://groups.google.com/forum/#!msg/comp.lang.python/sAUvkJEDpRc/RnRymrzJVDYJ # noqa
+ @see https://groups.google.com/forum/#!msg/comp.lang.python/sAUvkJEDpRc/RnRymrzJVDYJ
"""
def __copy__(self):
return []
@@ -83,11 +81,6 @@ class Emulator(object):
self.object_base_path = os.path.join(self.global_path, "object")
self.typeorder_path = os.path.join(self.global_path, "typeorder")
- self.typeorder_dep_path = os.path.join(self.global_path,
- Manifest.TYPEORDER_DEP_NAME)
- self.order_dep_state_path = os.path.join(self.global_path,
- Manifest.ORDER_DEP_STATE_NAME)
-
self.type_name = os.path.basename(argv[0])
self.cdist_type = core.CdistType(self.type_base_path, self.type_name)
@@ -101,33 +94,20 @@ class Emulator(object):
"""Emulate type commands (i.e. __file and co)"""
self.commandline()
- self.init_object()
-
- # locking for parallel execution
- with flock.Flock(self.flock_path):
- self.setup_object()
- self.save_stdin()
- self.record_requirements()
- self.record_auto_requirements()
- self.log.trace("Finished %s %s" % (
- self.cdist_object.path, self.parameters))
+ self.setup_object()
+ self.save_stdin()
+ self.record_requirements()
+ self.record_auto_requirements()
+ self.log.debug("Finished %s %s" % (
+ self.cdist_object.path, self.parameters))
def __init_log(self):
"""Setup logging facility"""
- if '__cdist_log_level' in self.env:
- try:
- loglevel = self.env['__cdist_log_level']
- level = int(loglevel)
- except ValueError:
- level = logging.WARNING
+ if '__cdist_debug' in self.env:
+ logging.root.setLevel(logging.DEBUG)
else:
- level = logging.WARNING
- try:
- logging.root.setLevel(level)
- except (ValueError, TypeError):
- # if invalid __cdist_log_level value
- logging.root.setLevel(logging.WARNING)
+ logging.root.setLevel(logging.INFO)
self.log = logging.getLogger(self.target_host[0])
@@ -168,10 +148,10 @@ class Emulator(object):
# And finally parse/verify parameter
self.args = parser.parse_args(self.argv[1:])
- self.log.trace('Args: %s' % self.args)
+ self.log.debug('Args: %s' % self.args)
- def init_object(self):
- # Initialize object - and ensure it is not in args
+ def setup_object(self):
+ # Setup object - and ensure it is not in args
if self.cdist_type.is_singleton:
self.object_id = ''
else:
@@ -182,43 +162,6 @@ class Emulator(object):
self.cdist_object = core.CdistObject(
self.cdist_type, self.object_base_path, self.object_marker,
self.object_id)
- lockfname = ('.' + self.cdist_type.name +
- self.object_id + '_' +
- self.object_marker + '.lock')
- lockfname = lockfname.replace(os.sep, '_')
- self.flock_path = os.path.join(self.object_base_path, lockfname)
-
- def _object_params_in_context(self):
- ''' Get cdist_object parameters dict adopted by context.
- Context consists of cdist_type boolean, optional, required,
- optional_multiple and required_multiple parameters. If parameter
- is multiple parameter then its value is a list.
- This adaptation works on cdist_object.parameters which are read from
- directory based dict where it is unknown what kind of data is in
- file. If there is only one line in the file it is unknown if this
- is a value of required/optional parameter or if it is one value of
- multiple values parameter.
- '''
- params = {}
- if self.cdist_object.exists:
- for param in self.cdist_object.parameters:
- value = ('' if param in self.cdist_type.boolean_parameters
- else self.cdist_object.parameters[param])
- if ((param in self.cdist_type.required_multiple_parameters or
- param in self.cdist_type.optional_multiple_parameters) and
- not isinstance(value, list)):
- value = [value]
- params[param] = value
- return params
-
- def setup_object(self):
- # CDIST_ORDER_DEPENDENCY state
- order_dep_on = self._order_dep_on()
- order_dep_defined = "CDIST_ORDER_DEPENDENCY" in self.env
- if not order_dep_defined and order_dep_on:
- self._set_order_dep_state_off()
- if order_dep_defined and not order_dep_on:
- self._set_order_dep_state_on()
# Create object with given parameters
self.parameters = {}
@@ -230,15 +173,15 @@ class Emulator(object):
# Make existing requirements a set so that we can compare it
# later with new requirements.
self._existing_reqs = set(self.cdist_object.requirements)
- obj_params = self._object_params_in_context()
- if obj_params != self.parameters:
+ if self.cdist_object.parameters != self.parameters:
errmsg = ("Object %s already exists with conflicting "
"parameters:\n%s: %s\n%s: %s" % (
self.cdist_object.name,
" ".join(self.cdist_object.source),
- obj_params,
+ self.cdist_object.parameters,
self.object_source,
self.parameters))
+ self.log.error(errmsg)
raise cdist.Error(errmsg)
else:
if self.cdist_object.exists:
@@ -251,20 +194,6 @@ class Emulator(object):
# record the created object in typeorder file
with open(self.typeorder_path, 'a') as typeorderfile:
print(self.cdist_object.name, file=typeorderfile)
- # record the created object in parent object typeorder file
- __object_name = self.env.get('__object_name', None)
- depname = self.cdist_object.name
- if __object_name:
- parent = self.cdist_object.object_from_name(__object_name)
- parent.typeorder.append(self.cdist_object.name)
- if self._order_dep_on():
- self.log.trace(('[ORDER_DEP] Adding %s to typeorder dep'
- ' for %s'), depname, parent.name)
- parent.typeorder_dep.append(depname)
- elif self._order_dep_on():
- self.log.trace('[ORDER_DEP] Adding %s to global typeorder dep',
- depname)
- self._add_typeorder_dep(depname)
# Record / Append source
self.cdist_object.source.append(self.object_source)
@@ -298,21 +227,20 @@ class Emulator(object):
# Raises an error, if object cannot be created
try:
cdist_object = self.cdist_object.object_from_name(requirement)
- except core.cdist_type.InvalidTypeError as e:
+ except core.cdist_type.NoSuchTypeError as e:
self.log.error(("%s requires object %s, but type %s does not"
" exist. Defined at %s" % (
self.cdist_object.name,
requirement, e.name, self.object_source)))
raise
- except core.cdist_object.MissingObjectIdError:
+ except core.cdist_object.MissingObjectIdError as e:
self.log.error(("%s requires object %s without object id."
" Defined at %s" % (self.cdist_object.name,
requirement,
self.object_source)))
raise
- self.log.debug("Recording requirement %s for %s",
- requirement, self.cdist_object.name)
+ self.log.debug("Recording requirement: %s", requirement)
# Save the sanitised version, not the user supplied one
# (__file//bar => __file/bar)
@@ -321,73 +249,30 @@ class Emulator(object):
return cdist_object.name
- def _order_dep_on(self):
- return os.path.exists(self.order_dep_state_path)
-
- def _set_order_dep_state_on(self):
- self.log.trace('[ORDER_DEP] Setting order dep state on')
- with open(self.order_dep_state_path, 'w'):
- pass
-
- def _set_order_dep_state_off(self):
- self.log.trace('[ORDER_DEP] Setting order dep state off')
- # remove order dep state file
- try:
- os.remove(self.order_dep_state_path)
- except FileNotFoundError:
- pass
- # remove typeorder dep file
- try:
- os.remove(self.typeorder_dep_path)
- except FileNotFoundError:
- pass
-
- def _add_typeorder_dep(self, name):
- with open(self.typeorder_dep_path, 'a') as f:
- print(name, file=f)
-
- def _read_typeorder_dep(self):
- try:
- with open(self.typeorder_dep_path, 'r') as f:
- return f.readlines()
- except FileNotFoundError:
- return []
-
def record_requirements(self):
"""Record requirements."""
- order_dep_on = self._order_dep_on()
-
# Inject the predecessor, but not if its an override
# (this would leed to an circular dependency)
- if (order_dep_on and 'CDIST_OVERRIDE' not in self.env):
- try:
- # __object_name is the name of the object whose type
- # manifest is currently executed
- __object_name = self.env.get('__object_name', None)
- # load object name created befor this one from typeorder
- # dep file
- if __object_name:
- parent = self.cdist_object.object_from_name(
- __object_name)
- typeorder = parent.typeorder_dep
- else:
- typeorder = self._read_typeorder_dep()
- # get the type created before this one
- lastcreatedtype = typeorder[-2].strip()
- if 'require' in self.env:
- if lastcreatedtype not in self.env['require']:
+ if ("CDIST_ORDER_DEPENDENCY" in self.env and
+ 'CDIST_OVERRIDE' not in self.env):
+ # load object name created bevor this one from typeorder file ...
+ with open(self.typeorder_path, 'r') as typecreationfile:
+ typecreationorder = typecreationfile.readlines()
+ # get the type created bevore this one ...
+ try:
+ lastcreatedtype = typecreationorder[-2].strip()
+ if 'require' in self.env:
self.env['require'] += " " + lastcreatedtype
- else:
- self.env['require'] = lastcreatedtype
- self.log.debug(("Injecting require for "
- "CDIST_ORDER_DEPENDENCY: %s for %s"),
- lastcreatedtype,
- self.cdist_object.name)
- except IndexError:
- # if no second last line, we are on the first type,
- # so do not set a requirement
- pass
+ else:
+ self.env['require'] = lastcreatedtype
+ self.log.debug(("Injecting require for "
+ "CDIST_ORDER_DEPENDENCY: %s for %s"),
+ lastcreatedtype, self.cdist_object.name)
+ except IndexError:
+ # if no second last line, we are on the first type,
+ # so do not set a requirement
+ pass
reqs = set()
if "require" in self.env:
@@ -432,6 +317,4 @@ class Emulator(object):
# But only if the user hasn't said otherwise.
# Must prevent circular dependencies.
if parent.name not in current_object.requirements:
- self.log.debug("Recording autorequirement %s for %s",
- current_object.name, parent.name)
parent.autorequire.append(current_object.name)
diff --git a/cdist/exec/local.py b/cdist/exec/local.py
index ad6c6e36..e078dbd2 100644
--- a/cdist/exec/local.py
+++ b/cdist/exec/local.py
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
#
-# 2011-2017 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2011-2015 Nico Schottelius (nico-cdist at schottelius.org)
-# 2016-2017 Darko Poljak (darko.poljak at gmail.com)
+# 2016 Darko Poljak (darko.poljak at gmail.com)
#
# This file is part of cdist.
#
@@ -21,6 +21,7 @@
#
#
+import io
import os
import sys
import re
@@ -28,13 +29,11 @@ import subprocess
import shutil
import logging
import tempfile
-import time
-import datetime
import cdist
import cdist.message
from cdist import core
-import cdist.exec.util as util
+import cdist.exec.util as exec_util
CONF_SUBDIRS_LINKED = ["explorer", "files", "manifest", "type", ]
@@ -48,42 +47,40 @@ class Local(object):
"""
def __init__(self,
target_host,
- target_host_tags,
base_root_path,
host_dir_name,
exec_path=sys.argv[0],
initial_manifest=None,
- add_conf_dirs=None,
- cache_path_pattern=None,
- quiet_mode=False,
- configuration=None,
- save_output_streams=True):
+ add_conf_dirs=None):
self.target_host = target_host
- if target_host_tags is None:
- self.target_host_tags = ""
- else:
- self.target_host_tags = ",".join(target_host_tags)
self.hostdir = host_dir_name
self.base_path = os.path.join(base_root_path, "data")
self.exec_path = exec_path
self.custom_initial_manifest = initial_manifest
- self.cache_path_pattern = cache_path_pattern
- self.quiet_mode = quiet_mode
- if configuration:
- self.configuration = configuration
- else:
- self.configuration = {}
- self.save_output_streams = save_output_streams
+ self._add_conf_dirs = add_conf_dirs
self._init_log()
self._init_permissions()
self.mkdir(self.base_path)
+ # FIXME: create dir that does not require moving later
self._init_cache_dir(None)
self._init_paths()
self._init_object_marker()
- self._init_conf_dirs(add_conf_dirs)
+ self._init_conf_dirs()
+
+ @property
+ def dist_conf_dir(self):
+ return os.path.abspath(os.path.join(os.path.dirname(cdist.__file__),
+ "conf"))
+
+ @property
+ def home_dir(self):
+ if 'HOME' in os.environ:
+ return os.path.join(os.environ['HOME'], ".cdist")
+ else:
+ return None
def _init_log(self):
self.log = logging.getLogger(self.target_host[0])
@@ -112,11 +109,9 @@ class Local(object):
"explorer")
self.object_path = os.path.join(self.base_path, "object")
self.messages_path = os.path.join(self.base_path, "messages")
- self.stdout_base_path = os.path.join(self.base_path, "stdout")
- self.stderr_base_path = os.path.join(self.base_path, "stderr")
+ self.files_path = os.path.join(self.conf_path, "files")
# Depending on conf_path
- self.files_path = os.path.join(self.conf_path, "files")
self.global_explorer_path = os.path.join(self.conf_path, "explorer")
self.manifest_path = os.path.join(self.conf_path, "manifest")
self.initial_manifest = (self.custom_initial_manifest or
@@ -130,9 +125,24 @@ class Local(object):
# Does not need to be secure - just randomly different from .cdist
self.object_marker_name = tempfile.mktemp(prefix='.cdist-', dir='')
- def _init_conf_dirs(self, add_conf_dirs):
- self.conf_dirs = util.resolve_conf_dirs(
- self.configuration, add_conf_dirs=add_conf_dirs)
+ def _init_conf_dirs(self):
+ self.conf_dirs = []
+
+ self.conf_dirs.append(self.dist_conf_dir)
+
+ # Is the default place for user created explorer, type and manifest
+ if self.home_dir:
+ self.conf_dirs.append(self.home_dir)
+
+ # Add directories defined in the CDIST_PATH environment variable
+ if 'CDIST_PATH' in os.environ:
+ cdist_path_dirs = re.split(r'(? %s", source, destination)
- # self.rmdir(destination)
+ self.log.debug("Remote transfer: %s -> %s", source, destination)
+ self.rmdir(destination)
if os.path.isdir(source):
self.mkdir(destination)
- used_archiving = False
- if self.archiving_mode:
- self.log.trace("Remote transfer in archiving mode")
- import cdist.autil as autil
-
- # create archive
- tarpath, fcnt = autil.tar(source, self.archiving_mode)
- if tarpath is None:
- self.log.trace(("Files count {} is lower than {} limit, "
- "skipping archiving").format(
- fcnt, autil.FILES_LIMIT))
- else:
- self.log.trace(("Archiving mode, tarpath: %s, file count: "
- "%s"), tarpath, fcnt)
- # get archive name
- tarname = os.path.basename(tarpath)
- self.log.trace("Archiving mode tarname: %s", tarname)
- # archive path at the remote
- desttarpath = os.path.join(destination, tarname)
- self.log.trace(
- "Archiving mode desttarpath: %s", desttarpath)
- # transfer archive to the remote side
- self.log.trace("Archiving mode: transferring")
- self._transfer_file(tarpath, desttarpath)
- # extract archive at the remote
- self.log.trace("Archiving mode: extracting")
- self.extract_archive(desttarpath, self.archiving_mode)
- # remove remote archive
- self.log.trace("Archiving mode: removing remote archive")
- self.rmfile(desttarpath)
- # remove local archive
- self.log.trace("Archiving mode: removing local archive")
- os.remove(tarpath)
- used_archiving = True
- if not used_archiving:
- self._transfer_dir(source, destination)
+ if jobs:
+ self._transfer_dir_parallel(source, destination, jobs)
+ else:
+ self._transfer_dir_sequential(source, destination)
elif jobs:
raise cdist.Error("Source {} is not a directory".format(source))
else:
- self._transfer_file(source, destination)
+ command = self._copy.split()
+ command.extend([source, '{0}:{1}'.format(
+ _wrap_addr(self.target_host[0]), destination)])
+ self._run_command(command)
- def _transfer_dir(self, source, destination):
- command = self._copy.split()
+ def _transfer_dir_sequential(self, source, destination):
for f in glob.glob1(source, '*'):
+ command = self._copy.split()
path = os.path.join(source, f)
- command.extend([path])
- command.extend(['{0}:{1}'.format(
- _wrap_addr(self.target_host[0]), destination)])
- self._run_command(command)
+ command.extend([path, '{0}:{1}'.format(
+ _wrap_addr(self.target_host[0]), destination)])
+ self._run_command(command)
- def run_script(self, script, env=None, return_output=False, stdout=None,
- stderr=None):
+ def _transfer_dir_parallel(self, source, destination, jobs):
+ """Transfer a directory to the remote side in parallel mode."""
+ self.log.info("Remote transfer in {} parallel jobs".format(
+ jobs))
+ self.log.debug("Multiprocessing start method is {}".format(
+ multiprocessing.get_start_method()))
+ self.log.debug(("Starting multiprocessing Pool for parallel "
+ "remote transfer"))
+ args = []
+ for f in glob.glob1(source, '*'):
+ command = self._copy.split()
+ path = os.path.join(source, f)
+ command.extend([path, '{0}:{1}'.format(
+ _wrap_addr(self.target_host[0]), destination)])
+ args.append((command, ))
+ mp_pool_run(self._run_command, args, jobs=jobs)
+ self.log.debug(("Multiprocessing for parallel transfer "
+ "finished"))
+
+ def run_script(self, script, env=None, return_output=False):
"""Run the given script with the given environment on the remote side.
Return the output as a string.
"""
- command = [
- self.configuration.get('remote_shell', "/bin/sh"),
- "-e"
- ]
+ command = [os.environ.get('CDIST_REMOTE_SHELL', "/bin/sh"), "-e"]
command.append(script)
- return self.run(command, env=env, return_output=return_output,
- stdout=stdout, stderr=stderr)
+ return self.run(command, env, return_output)
- def run(self, command, env=None, return_output=False, stdout=None,
- stderr=None):
+ def run(self, command, env=None, return_output=False):
"""Run the given command with the given environment on the remote side.
Return the output as a string.
@@ -244,19 +184,20 @@ class Remote(object):
cmd = self._exec.split()
cmd.append(self.target_host[0])
+ # FIXME: replace this by -o SendEnv name -o SendEnv name ... to ssh?
# can't pass environment to remote side, so prepend command with
# variable declarations
# cdist command prepended with variable assignments expects
- # POSIX shell (bourne, bash) at the remote as user default shell.
- # If remote user shell isn't POSIX shell, but for e.g. csh/tcsh
+ # posix shell (bourne, bash) at the remote as user default shell.
+ # If remote user shell isn't poxis shell, but for e.g. csh/tcsh
# then these var assignments are not var assignments for this
# remote shell, it tries to execute it as a command and fails.
# So really do this by default:
# /bin/sh -c 'export ; command'
# so that constructed remote command isn't dependent on remote
# shell. Do this only if env is not None. env breaks this.
- # Explicitly use /bin/sh, because var assignments assume POSIX
+ # Explicitly use /bin/sh, because var assignments assume poxis
# shell already.
# This leaves the posibility to write script that needs to be run
# remotely in e.g. csh and setting up CDIST_REMOTE_SHELL to e.g.
@@ -268,11 +209,9 @@ class Remote(object):
cmd.append(string_cmd)
else:
cmd.extend(command)
- return self._run_command(cmd, env=env, return_output=return_output,
- stdout=stdout, stderr=stderr)
+ return self._run_command(cmd, env=env, return_output=return_output)
- def _run_command(self, command, env=None, return_output=False, stdout=None,
- stderr=None):
+ def _run_command(self, command, env=None, return_output=False):
"""Run the given command with the given environment.
Return the output as a string.
@@ -280,19 +219,6 @@ class Remote(object):
assert isinstance(command, (list, tuple)), (
"list or tuple argument expected, got: %s" % command)
- if return_output and stdout is not subprocess.PIPE:
- self.log.debug("return_output is True, ignoring stdout")
-
- close_stdout = False
- close_stderr = False
- if self.save_output_streams:
- if not return_output and stdout is None:
- stdout = util.get_std_fd(self.stdout_base_path, 'remote')
- close_stdout = True
- if stderr is None:
- stderr = util.get_std_fd(self.stderr_base_path, 'remote')
- close_stderr = True
-
# export target_host, target_hostname, target_fqdn
# for use in __remote_{exec,copy} scripts
os_environ = os.environ.copy()
@@ -300,30 +226,17 @@ class Remote(object):
os_environ['__target_hostname'] = self.target_host[1]
os_environ['__target_fqdn'] = self.target_host[2]
- self.log.trace("Remote run: %s", command)
+ self.log.debug("Remote run: %s", command)
try:
- if self.quiet_mode:
- stderr = subprocess.DEVNULL
- close_stderr = False
+ output, errout = exec_util.call_get_output(command, env=os_environ)
+ self.log.debug("Remote stdout: {}".format(output))
+ # Currently, stderr is not captured.
+ # self.log.debug("Remote stderr: {}".format(errout))
if return_output:
- output = subprocess.check_output(command, env=os_environ,
- stderr=stderr).decode()
- else:
- subprocess.check_call(command, env=os_environ, stdout=stdout,
- stderr=stderr)
- output = None
-
- if self.save_output_streams:
- util.log_std_fd(self.log, command, stderr, 'Remote stderr')
- util.log_std_fd(self.log, command, stdout, 'Remote stdout')
-
- return output
- except (OSError, subprocess.CalledProcessError) as error:
- raise cdist.Error(" ".join(command) + ": " + str(error.args[1]))
+ return output.decode()
+ except subprocess.CalledProcessError as e:
+ exec_util.handle_called_process_error(e, command)
+ except OSError as error:
+ raise cdist.Error(" ".join(command) + ": " + error.args[1])
except UnicodeDecodeError:
raise DecodeError(command)
- finally:
- if close_stdout:
- stdout.close()
- if close_stderr:
- stderr.close()
diff --git a/cdist/exec/util.py b/cdist/exec/util.py
index 90a26ad3..864a73a3 100644
--- a/cdist/exec/util.py
+++ b/cdist/exec/util.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
-# 2016-2017 Darko Poljak (darko.poljak at gmail.com)
+# 2016 Darko Poljak (darko.poljak at gmail.com)
#
# This file is part of cdist.
#
@@ -20,12 +20,10 @@
#
import subprocess
-import os
+import sys
from tempfile import TemporaryFile
-from collections import OrderedDict
import cdist
-import cdist.configuration
# IMPORTANT:
@@ -118,18 +116,16 @@ import cdist.configuration
# return (result.stdout, result.stderr)
-# Currently not used.
-def call_get_output(command, env=None, stderr=None):
+def call_get_output(command, env=None):
"""Run the given command with the given environment.
Return the tuple of stdout and stderr output as a byte strings.
"""
assert isinstance(command, (list, tuple)), (
"list or tuple argument expected, got: {}".format(command))
- return (_call_get_stdout(command, env, stderr), None)
+ return (_call_get_stdout(command, env), None)
-# Currently not used.
def handle_called_process_error(err, command):
# Currently, stderr is not captured.
# errout = None
@@ -138,20 +134,13 @@ def handle_called_process_error(err, command):
# "stdout: {}\n"
# "stderr: {}").format(
# err.returncode, err.output, errout))
- if err.output:
- output = err.output
- else:
- output = ''
- raise cdist.Error(("Command failed: '{}'\n"
- "return code: {}\n"
- "---- BEGIN stdout ----\n"
- "{}" + ("\n" if output else "") +
- "---- END stdout ----").format(
- " ".join(command), err.returncode, output))
+ raise cdist.Error("Command failed: " + " ".join(command) +
+ (" with returncode: {}\n"
+ "stdout: {}").format(
+ err.returncode, err.output))
-# Currently not used.
-def _call_get_stdout(command, env=None, stderr=None):
+def _call_get_stdout(command, env=None):
"""Run the given command with the given environment.
Return the stdout output as a byte string, stderr is ignored.
"""
@@ -159,54 +148,8 @@ def _call_get_stdout(command, env=None, stderr=None):
"list or tuple argument expected, got: {}".format(command))
with TemporaryFile() as fout:
- subprocess.check_call(command, env=env, stdout=fout, stderr=stderr)
+ subprocess.check_call(command, env=env, stdout=fout)
fout.seek(0)
output = fout.read()
return output
-
-
-def get_std_fd(base_path, name):
- path = os.path.join(base_path, name)
- stdfd = open(path, 'ba+')
- return stdfd
-
-
-def log_std_fd(log, command, stdfd, prefix):
- if stdfd is not None and stdfd != subprocess.DEVNULL:
- stdfd.seek(0, 0)
- log.trace("Command: {}; {}: {}".format(
- command, prefix, stdfd.read().decode()))
-
-
-def dist_conf_dir():
- return os.path.abspath(os.path.join(os.path.dirname(cdist.__file__),
- "conf"))
-
-
-def resolve_conf_dirs(configuration, add_conf_dirs):
- conf_dirs = []
-
- conf_dirs.append(dist_conf_dir())
-
- home_dir = cdist.home_dir()
- if home_dir:
- conf_dirs.append(home_dir)
-
- if 'conf_dir' in configuration:
- x = configuration['conf_dir']
- if x:
- conf_dirs.extend(x)
-
- if add_conf_dirs:
- conf_dirs.extend(add_conf_dirs)
-
- # Remove duplicates.
- conf_dirs = list(OrderedDict.fromkeys(conf_dirs))
- return conf_dirs
-
-
-def resolve_conf_dirs_from_config_and_args(args):
- cfg = cdist.configuration.Configuration(args)
- configuration = cfg.get_config(section='GLOBAL')
- return resolve_conf_dirs(configuration, args.conf_dir)
diff --git a/cdist/flock.py b/cdist/flock.py
deleted file mode 100644
index d8bac916..00000000
--- a/cdist/flock.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# 2017 Darko Poljak (darko.poljak at gmail.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-
-import fcntl
-import logging
-import os
-
-
-log = logging.getLogger('cdist-flock')
-
-
-class Flock():
- def __init__(self, path):
- self.path = path
- self.lockfd = None
-
- def flock(self):
- log.debug('Acquiring lock on %s', self.path)
- self.lockfd = open(self.path, 'w+')
- fcntl.flock(self.lockfd, fcntl.LOCK_EX)
- log.debug('Acquired lock on %s', self.path)
-
- def funlock(self):
- log.debug('Releasing lock on %s', self.path)
- fcntl.flock(self.lockfd, fcntl.LOCK_UN)
- self.lockfd.close()
- self.lockfd = None
- try:
- os.remove(self.path)
- except FileNotFoundError:
- pass
- log.debug('Released lock on %s', self.path)
-
- def __enter__(self):
- self.flock()
- return self
-
- def __exit__(self, *args):
- self.funlock()
- return False
diff --git a/cdist/hostsource.py b/cdist/hostsource.py
index a7b8f0b4..9c2c0616 100644
--- a/cdist/hostsource.py
+++ b/cdist/hostsource.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
-# 2016-2017 Darko Poljak (darko.poljak at gmail.com)
+# 2016 Darko Poljak (darko.poljak at gmail.com)
#
# This file is part of cdist.
#
@@ -22,25 +22,6 @@
import fileinput
-def hostfile_process_line(line, strip_func=str.strip):
- """Return entry from read line or None if no entry present."""
- if not line:
- return None
- # remove comment if present
- comment_index = line.find('#')
- if comment_index >= 0:
- foo = line[:comment_index]
- else:
- foo = line
- # remove leading and trailing whitespaces
- foo = strip_func(foo)
- # skip empty lines
- if foo:
- return foo
- else:
- return None
-
-
class HostSource(object):
"""
Host source object.
@@ -51,7 +32,22 @@ class HostSource(object):
self.source = source
def _process_file_line(self, line):
- return hostfile_process_line(line)
+ """Return host from read line or None if no host present."""
+ if not line:
+ return None
+ # remove comment if present
+ comment_index = line.find('#')
+ if comment_index >= 0:
+ host = line[:comment_index]
+ else:
+ host = line
+ # remove leading and trailing whitespaces
+ host = host.strip()
+ # skip empty lines
+ if host:
+ return host
+ else:
+ return None
def _hosts_from_sequence(self):
for host in self.source:
diff --git a/cdist/info.py b/cdist/info.py
deleted file mode 100644
index b896a3d1..00000000
--- a/cdist/info.py
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-#
-# 2019-2020 Darko Poljak (darko.poljak at gmail.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-
-import cdist
-import cdist.configuration
-import cdist.core
-import cdist.exec.util as util
-import os
-import glob
-import fnmatch
-
-
-class Info(object):
-
- def __init__(self, conf_dirs, args):
- self.conf_dirs = conf_dirs
- self.all = args.all
- self.display_global_explorers = args.global_explorers
- self.display_types = args.types
- if not self.display_global_explorers and not self.display_types:
- self.all = True
- self.fixed_string = args.fixed_string
- self._setup_glob_pattern(args.pattern)
- self.full = args.full
-
- def _setup_glob_pattern(self, pattern):
- if pattern is None:
- self.glob_pattern = '*'
- elif ('?' in pattern or '*' in pattern or '[' in pattern or
- self.fixed_string):
- self.glob_pattern = pattern
- else:
- self.glob_pattern = '*' + pattern + '*'
-
- @classmethod
- def commandline(cls, args):
- conf_dirs = util.resolve_conf_dirs_from_config_and_args(args)
- c = cls(conf_dirs, args)
- c.run()
-
- def _get_global_explorers(self, conf_path):
- rv = []
- global_explorer_path = os.path.join(conf_path, "explorer",
- self.glob_pattern)
- if self.fixed_string:
- if os.path.exists(global_explorer_path):
- rv.append(global_explorer_path)
- else:
- for explorer in glob.glob(global_explorer_path):
- rv.append(explorer)
- return rv
-
- def _should_display_type(self, dir_entry):
- if not dir_entry.is_dir():
- return False
- if self.glob_pattern is None:
- return True
- if self.fixed_string:
- return dir_entry.name == self.glob_pattern
- else:
- return fnmatch.fnmatch(dir_entry.name, self.glob_pattern)
-
- def _get_types(self, conf_path):
- rv = []
- types_path = os.path.join(conf_path, "type")
- if not os.path.exists(types_path):
- return rv
- with os.scandir(types_path) as it:
- for entry in it:
- if self._should_display_type(entry):
- rv.append(entry.path)
- return rv
-
- def _display_details(self, title, details, default_values=None,
- deprecated=None):
- if not details:
- return
- if isinstance(details, bool):
- print("\t{}: {}".format(title, 'yes' if details else 'no'))
- elif isinstance(details, str):
- print("\t{}: {}".format(title, details))
- elif isinstance(details, list):
- dv = dict(default_values) if default_values else {}
- dp = dict(deprecated) if deprecated else {}
-
- print("\t{}:".format(title))
- for x in sorted(details):
- print("\t\t{}".format(x), end='')
- has_default = x in dv
- is_deprecated = x in dp
- need_comma = False
- if has_default or is_deprecated:
- print(" (", end='')
- if has_default:
- print("default: {}".format(dv[x]), end='')
- need_comma = True
- if is_deprecated:
- print("{}deprecated".format(', ' if need_comma else ''),
- end='')
- if has_default or is_deprecated:
- print(")", end='')
- print()
-
- def _display_type_parameters(self, cdist_type):
- self._display_details("required parameters",
- cdist_type.required_parameters,
- default_values=cdist_type.parameter_defaults,
- deprecated=cdist_type.deprecated_parameters)
- self._display_details("required multiple parameters",
- cdist_type.required_multiple_parameters,
- default_values=cdist_type.parameter_defaults,
- deprecated=cdist_type.deprecated_parameters)
- self._display_details("optional parameters",
- cdist_type.optional_parameters,
- default_values=cdist_type.parameter_defaults,
- deprecated=cdist_type.deprecated_parameters)
- self._display_details("optional multiple parameters",
- cdist_type.optional_multiple_parameters,
- default_values=cdist_type.parameter_defaults,
- deprecated=cdist_type.deprecated_parameters)
- self._display_details("boolean parameters",
- cdist_type.boolean_parameters,
- default_values=cdist_type.parameter_defaults,
- deprecated=cdist_type.deprecated_parameters)
-
- def _display_type_characteristics(self, cdist_type):
- characteristics = []
- if cdist_type.is_install:
- characteristics.append('install')
- else:
- characteristics.append('config')
- if cdist_type.is_singleton:
- characteristics.append('singleton')
- if cdist_type.is_nonparallel:
- characteristics.append('nonparallel')
- else:
- characteristics.append('parallel')
- if cdist_type.deprecated is not None:
- characteristics.append('deprecated')
- print("\t{}".format(', '.join(characteristics)))
-
- def _display_type_details(self, type_path):
- dirname, basename = os.path.split(type_path)
- cdist_type = cdist.core.CdistType(dirname, basename)
-
- self._display_type_characteristics(cdist_type)
- self._display_type_parameters(cdist_type)
-
- def run(self):
- rv = []
- for cp in self.conf_dirs:
- conf_path = os.path.expanduser(cp)
- if self.all or self.display_global_explorers:
- rv.extend((x, 'E', ) for x in self._get_global_explorers(
- conf_path))
- if self.all or self.display_types:
- rv.extend((x, 'T', ) for x in self._get_types(conf_path))
- rv = sorted(rv, key=lambda x: x[0])
- for x, t in rv:
- print(x)
- if self.full and t == 'T':
- self._display_type_details(x)
diff --git a/cdist/integration.py b/cdist/integration.py
deleted file mode 100644
index ee742cc5..00000000
--- a/cdist/integration.py
+++ /dev/null
@@ -1,155 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-#
-# 2017 Darko Poljak (darko.poljak at gmail.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-
-import cdist
-# needed for cdist.argparse
-import cdist.banner
-import cdist.config
-import cdist.install
-import cdist.shell
-import cdist.inventory
-import cdist.argparse
-import cdist.log
-import cdist.config
-import cdist.install
-import sys
-import os
-import os.path
-import collections
-import uuid
-import shutil
-
-
-def find_cdist_exec_in_path():
- """Search cdist executable in os.get_exec_path() entries.
- """
- for path in os.get_exec_path():
- cdist_path = os.path.join(path, 'cdist')
- if os.access(cdist_path, os.X_OK):
- return cdist_path
- return None
-
-
-_mydir = os.path.dirname(__file__)
-
-
-def find_cdist_exec():
- """Search cdist executable starting from local lib directory.
-
- Detect if ../scripts/cdist (from local lib direcotry) exists and
- if it is executable. If not then try to find cdist exec path in
- os.get_exec_path() entries. If no cdist path is found rasie
- cdist.Error.
- """
- cdist_path = os.path.abspath(os.path.join(_mydir, '..', 'scripts',
- 'cdist'))
- if os.access(cdist_path, os.X_OK):
- return cdist_path
- cdist_path = find_cdist_exec_in_path()
- if not cdist_path:
- raise cdist.Error('Cannot find cdist executable from local lib '
- 'directory: {}, nor in PATH: {}.'.format(
- _mydir, os.environ.get('PATH')))
- return cdist_path
-
-
-ACTION_CONFIG = 'config'
-ACTION_INSTALL = 'install'
-
-
-def _process_hosts_simple(action, host, manifest, verbose,
- cdist_path=None):
- """Perform cdist action ('config' or 'install') on hosts with specified
- manifest using default other cdist options. host parameter can be a
- string or iterbale of hosts. verbose is a desired verbosity level
- which defaults to VERBOSE_INFO. cdist_path is path to cdist executable,
- if it is None then integration lib tries to find it.
- """
- if isinstance(host, str):
- hosts = [host, ]
- elif isinstance(host, collections.Iterable):
- hosts = host
- else:
- raise cdist.Error('Invalid host argument: {}'.format(host))
-
- # Setup sys.argv[0] since cdist relies on command line invocation.
- if not cdist_path:
- cdist_path = find_cdist_exec()
- sys.argv[0] = cdist_path
-
- cname = action.title()
- module = getattr(cdist, action)
- theclass = getattr(module, cname)
-
- # Build argv for cdist and use argparse for argument parsing.
- remote_out_dir_base = os.path.join('/', 'var', 'lib', 'cdist')
- uid = str(uuid.uuid1())
- out_dir = remote_out_dir_base + uid
- cache_path_pattern = '%h-' + uid
- argv = [action, '-i', manifest, '-r', out_dir, '-C', cache_path_pattern, ]
- for i in range(verbose):
- argv.append('-v')
- for x in hosts:
- argv.append(x)
-
- parser, cfg = cdist.argparse.parse_and_configure(argv, singleton=False)
- args = cfg.get_args()
- configuration = cfg.get_config(section='GLOBAL')
-
- theclass.construct_remote_exec_copy_patterns(args)
- base_root_path = theclass.create_base_root_path(None)
-
- for target_host in args.host:
- host_base_path, hostdir = theclass.create_host_base_dirs(
- target_host, base_root_path)
- theclass.onehost(target_host, None, host_base_path, hostdir, args,
- parallel=False, configuration=configuration,
- remove_remote_files_dirs=True)
- shutil.rmtree(base_root_path)
-
-
-def configure_hosts_simple(host, manifest,
- verbose=cdist.argparse.VERBOSE_INFO,
- cdist_path=None):
- """Configure hosts with specified manifest using default other cdist
- options. host parameter can be a string or iterbale of hosts. verbose
- is a desired verbosity level which defaults to VERBOSE_INFO.
- cdist_path is path to cdist executable, if it is None then integration
- lib tries to find it.
- """
- _process_hosts_simple(action=ACTION_CONFIG, host=host,
- manifest=manifest, verbose=verbose,
- cdist_path=cdist_path)
-
-
-def install_hosts_simple(host, manifest,
- verbose=cdist.argparse.VERBOSE_INFO,
- cdist_path=None):
- """Install hosts with specified manifest using default other cdist
- options. host parameter can be a string or iterbale of hosts. verbose
- is a desired verbosity level which defaults to VERBOSE_INFO.
- cdist_path is path to cdist executable, if it is None then integration
- lib tries to find it.
- """
- _process_hosts_simple(action=ACTION_INSTALL, host=host,
- manifest=manifest, verbose=verbose,
- cdist_path=cdist_path)
diff --git a/cdist/inventory.py b/cdist/inventory.py
deleted file mode 100644
index 138a2034..00000000
--- a/cdist/inventory.py
+++ /dev/null
@@ -1,405 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-#
-# 2016 Darko Poljak (darko.poljak at gmail.com)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-
-import cdist
-import logging
-import os
-import os.path
-import itertools
-import sys
-import cdist.configuration
-from cdist.hostsource import hostfile_process_line
-
-DIST_INVENTORY_DB_NAME = "inventory"
-
-dist_inventory_db = os.path.abspath(os.path.join(
- os.path.dirname(cdist.__file__), DIST_INVENTORY_DB_NAME))
-
-
-def determine_default_inventory_dir(args, configuration):
- # The order of inventory dir setting by decreasing priority
- # 1. inventory_dir from configuration
- # 2. ~/.cdist/inventory if HOME env var is set
- # 3. distribution inventory directory
- inventory_dir_set = False
- if 'inventory_dir' in configuration:
- val = configuration['inventory_dir']
- if val:
- args.inventory_dir = val
- inventory_dir_set = True
- if not inventory_dir_set:
- home = cdist.home_dir()
- if home:
- args.inventory_dir = os.path.join(home, DIST_INVENTORY_DB_NAME)
- else:
- args.inventory_dir = dist_inventory_db
-
-
-def contains_all(big, little):
- """Return True if big contains all elements from little,
- False otherwise.
- """
- return set(little).issubset(set(big))
-
-
-def contains_any(big, little):
- """Return True if big contains any element from little,
- False otherwise.
- """
- for x in little:
- if x in big:
- return True
- return False
-
-
-def check_always_true(x, y):
- return True
-
-
-def rstrip_nl(s):
- '''str.rstrip "\n" from s'''
- return str.rstrip(s, "\n")
-
-
-class Inventory(object):
- """Inventory main class"""
-
- def __init__(self, db_basedir=dist_inventory_db, configuration=None):
- self.db_basedir = db_basedir
- if configuration:
- self.configuration = configuration
- else:
- self.configuration = {}
- self.log = logging.getLogger("inventory")
- self.init_db()
-
- def init_db(self):
- self.log.trace("Init db: {}".format(self.db_basedir))
- if not os.path.exists(self.db_basedir):
- os.makedirs(self.db_basedir, exist_ok=True)
- elif not os.path.isdir(self.db_basedir):
- raise cdist.Error(("Invalid inventory db basedir \'{}\',"
- " must be a directory").format(self.db_basedir))
-
- @staticmethod
- def strlist_to_list(slist):
- if slist:
- result = [x for x in slist.split(',') if x]
- else:
- result = []
- return result
-
- def _input_values(self, source):
- """Yield input values from source.
- Source can be a sequence or filename (stdin if '-').
- In case of filename each line represents one input value.
- """
- if isinstance(source, str):
- import fileinput
- try:
- with fileinput.FileInput(files=(source)) as f:
- for x in f:
- result = hostfile_process_line(x, strip_func=rstrip_nl)
- if result:
- yield result
- except (IOError, OSError) as e:
- raise cdist.Error("Error reading from \'{}\'".format(
- source))
- else:
- if source:
- for x in source:
- if x:
- yield x
-
- def _host_path(self, host):
- hostpath = os.path.join(self.db_basedir, host)
- return hostpath
-
- def _all_hosts(self):
- return os.listdir(self.db_basedir)
-
- def _check_host(self, hostpath):
- if not os.path.exists(hostpath):
- return False
- else:
- if not os.path.isfile(hostpath):
- raise cdist.Error(("Host path \'{}\' exists, but is not"
- " a valid file").format(hostpath))
- return True
-
- def _read_host_tags(self, hostpath):
- result = set()
- with open(hostpath, "rt") as f:
- for tag in f:
- tag = tag.rstrip("\n")
- if tag:
- result.add(tag)
- return result
-
- def _get_host_tags(self, host):
- hostpath = self._host_path(host)
- if self._check_host(hostpath):
- return self._read_host_tags(hostpath)
- else:
- return None
-
- def _write_host_tags(self, host, tags):
- hostpath = self._host_path(host)
- if self._check_host(hostpath):
- with open(hostpath, "wt") as f:
- for tag in tags:
- f.write("{}\n".format(tag))
- return True
- else:
- return False
-
- @classmethod
- def commandline(cls, args):
- """Manipulate inventory db"""
- log = logging.getLogger("inventory")
- if 'taglist' in args:
- args.taglist = cls.strlist_to_list(args.taglist)
-
- cfg = cdist.configuration.Configuration(args)
- configuration = cfg.get_config(section='GLOBAL')
- determine_default_inventory_dir(args, configuration)
-
- log.debug("Using inventory: {}".format(args.inventory_dir))
- log.trace("Inventory args: {}".format(vars(args)))
- log.trace("Inventory command: {}".format(args.subcommand))
-
- if args.subcommand == "list":
- c = InventoryList(hosts=args.host, istag=args.tag,
- hostfile=args.hostfile,
- db_basedir=args.inventory_dir,
- list_only_host=args.list_only_host,
- has_all_tags=args.has_all_tags,
- configuration=configuration)
- elif args.subcommand == "add-host":
- c = InventoryHost(hosts=args.host, hostfile=args.hostfile,
- db_basedir=args.inventory_dir,
- configuration=configuration)
- elif args.subcommand == "del-host":
- c = InventoryHost(hosts=args.host, hostfile=args.hostfile,
- all=args.all, db_basedir=args.inventory_dir,
- action="del", configuration=configuration)
- elif args.subcommand == "add-tag":
- c = InventoryTag(hosts=args.host, tags=args.taglist,
- hostfile=args.hostfile, tagfile=args.tagfile,
- db_basedir=args.inventory_dir,
- configuration=configuration)
- elif args.subcommand == "del-tag":
- c = InventoryTag(hosts=args.host, tags=args.taglist,
- hostfile=args.hostfile, tagfile=args.tagfile,
- all=args.all, db_basedir=args.inventory_dir,
- action="del", configuration=configuration)
- else:
- raise cdist.Error("Unknown inventory command \'{}\'".format(
- args.subcommand))
- c.run()
-
-
-class InventoryList(Inventory):
- def __init__(self, hosts=None, istag=False, hostfile=None,
- list_only_host=False, has_all_tags=False,
- db_basedir=dist_inventory_db, configuration=None):
- super().__init__(db_basedir, configuration)
- self.hosts = hosts
- self.istag = istag
- self.hostfile = hostfile
- self.list_only_host = list_only_host
- self.has_all_tags = has_all_tags
-
- def _print(self, host, tags):
- if self.list_only_host:
- print("{}".format(host))
- else:
- print("{} {}".format(host, ",".join(sorted(tags))))
-
- def _do_list(self, it_tags, it_hosts, check_func):
- if (it_tags is not None):
- param_tags = set(it_tags)
- self.log.trace("param_tags: {}".format(param_tags))
- else:
- param_tags = set()
- for host in it_hosts:
- self.log.trace("host: {}".format(host))
- tags = self._get_host_tags(host)
- if tags is None:
- self.log.debug("Host \'{}\' not found, skipped".format(host))
- continue
- self.log.trace("tags: {}".format(tags))
- if check_func(tags, param_tags):
- yield host, tags
-
- def entries(self):
- if not self.hosts and not self.hostfile:
- self.log.trace("Listing all hosts")
- it_hosts = self._all_hosts()
- it_tags = None
- check_func = check_always_true
- else:
- it = itertools.chain(self._input_values(self.hosts),
- self._input_values(self.hostfile))
- if self.istag:
- self.log.trace("Listing by tag(s)")
- it_hosts = self._all_hosts()
- it_tags = it
- if self.has_all_tags:
- check_func = contains_all
- else:
- check_func = contains_any
- else:
- self.log.trace("Listing by host(s)")
- it_hosts = it
- it_tags = None
- check_func = check_always_true
- for host, tags in self._do_list(it_tags, it_hosts, check_func):
- yield host, tags
-
- def host_entries(self):
- for host, tags in self.entries():
- yield host
-
- def run(self):
- for host, tags in self.entries():
- self._print(host, tags)
-
-
-class InventoryHost(Inventory):
- def __init__(self, hosts=None, hostfile=None,
- db_basedir=dist_inventory_db, all=False, action="add",
- configuration=None):
- super().__init__(db_basedir, configuration)
- self.actions = ("add", "del")
- if action not in self.actions:
- raise cdist.Error("Invalid action \'{}\', valid actions are:"
- " {}\n".format(action, self.actions.keys()))
- self.action = action
- self.hosts = hosts
- self.hostfile = hostfile
- self.all = all
-
- if not self.hosts and not self.hostfile:
- self.hostfile = "-"
-
- def _new_hostpath(self, hostpath):
- # create empty file
- with open(hostpath, "w"):
- pass
-
- def _action(self, host):
- if self.action == "add":
- self.log.debug("Adding host \'{}\'".format(host))
- elif self.action == "del":
- self.log.debug("Deleting host \'{}\'".format(host))
- hostpath = self._host_path(host)
- self.log.trace("hostpath: {}".format(hostpath))
- if self.action == "add" and not os.path.exists(hostpath):
- self._new_hostpath(hostpath)
- else:
- if not os.path.isfile(hostpath):
- raise cdist.Error(("Host path \'{}\' is"
- " not a valid file").format(hostpath))
- if self.action == "del":
- os.remove(hostpath)
-
- def run(self):
- if self.action == "del" and self.all:
- self.log.trace("Doing for all hosts")
- it = self._all_hosts()
- else:
- self.log.trace("Doing for specified hosts")
- it = itertools.chain(self._input_values(self.hosts),
- self._input_values(self.hostfile))
- for host in it:
- self._action(host)
-
-
-class InventoryTag(Inventory):
- def __init__(self, hosts=None, tags=None, hostfile=None, tagfile=None,
- db_basedir=dist_inventory_db, all=False, action="add",
- configuration=None):
- super().__init__(db_basedir, configuration)
- self.actions = ("add", "del")
- if action not in self.actions:
- raise cdist.Error("Invalid action \'{}\', valid actions are:"
- " {}\n".format(action, self.actions.keys()))
- self.action = action
- self.hosts = hosts
- self.tags = tags
- self.hostfile = hostfile
- self.tagfile = tagfile
- self.all = all
-
- if not self.hosts and not self.hostfile:
- self.allhosts = True
- else:
- self.allhosts = False
- if not self.tags and not self.tagfile:
- self.tagfile = "-"
-
- if self.hostfile == "-" and self.tagfile == "-":
- raise cdist.Error("Cannot read both, hosts and tags, from stdin")
-
- def _read_input_tags(self):
- self.input_tags = set()
- for tag in itertools.chain(self._input_values(self.tags),
- self._input_values(self.tagfile)):
- self.input_tags.add(tag)
-
- def _action(self, host):
- host_tags = self._get_host_tags(host)
- if host_tags is None:
- print("Host \'{}\' does not exist, skipping".format(host),
- file=sys.stderr)
- return
- self.log.trace("existing host_tags: {}".format(host_tags))
- if self.action == "del" and self.all:
- host_tags = set()
- else:
- for tag in self.input_tags:
- if self.action == "add":
- self.log.debug("Adding tag \'{}\' for host \'{}\'".format(
- tag, host))
- host_tags.add(tag)
- elif self.action == "del":
- self.log.debug("Deleting tag \'{}\' for host "
- "\'{}\'".format(tag, host))
- if tag in host_tags:
- host_tags.remove(tag)
- self.log.trace("new host tags: {}".format(host_tags))
- if not self._write_host_tags(host, host_tags):
- self.log.trace("{} does not exist, skipped".format(host))
-
- def run(self):
- if self.allhosts:
- self.log.trace("Doing for all hosts")
- it = self._all_hosts()
- else:
- self.log.trace("Doing for specified hosts")
- it = itertools.chain(self._input_values(self.hosts),
- self._input_values(self.hostfile))
- if not(self.action == "del" and self.all):
- self._read_input_tags()
- for host in it:
- self._action(host)
diff --git a/cdist/log.py b/cdist/log.py
index 5d431130..2341c282 100644
--- a/cdist/log.py
+++ b/cdist/log.py
@@ -21,120 +21,19 @@
#
import logging
-import sys
-import datetime
-# Define additional cdist logging levels.
-logging.OFF = logging.CRITICAL + 10 # disable logging
-logging.addLevelName(logging.OFF, 'OFF')
-
-logging.VERBOSE = logging.INFO - 5
-logging.addLevelName(logging.VERBOSE, 'VERBOSE')
-
-
-def _verbose(msg, *args, **kwargs):
- logging.log(logging.VERBOSE, msg, *args, **kwargs)
-
-
-logging.verbose = _verbose
-
-logging.TRACE = logging.DEBUG - 5
-logging.addLevelName(logging.TRACE, 'TRACE')
-
-
-def _trace(msg, *args, **kwargs):
- logging.log(logging.TRACE, msg, *args, **kwargs)
-
-
-logging.trace = _trace
-
-
-class DefaultLog(logging.Logger):
-
- FORMAT = '%(levelname)s: %(message)s'
-
- class StdoutFilter(logging.Filter):
- def filter(self, rec):
- return rec.levelno != logging.ERROR
-
- class StderrFilter(logging.Filter):
- def filter(self, rec):
- return rec.levelno == logging.ERROR
+class Log(logging.Logger):
def __init__(self, name):
+
+ self.name = name
super().__init__(name)
-
- formatter = logging.Formatter(self.FORMAT)
-
self.addFilter(self)
- stdout_handler = logging.StreamHandler(sys.stdout)
- stdout_handler.addFilter(self.StdoutFilter())
- stdout_handler.setLevel(logging.TRACE)
- stdout_handler.setFormatter(formatter)
-
- stderr_handler = logging.StreamHandler(sys.stderr)
- stderr_handler.addFilter(self.StderrFilter())
- stderr_handler.setLevel(logging.ERROR)
- stderr_handler.setFormatter(formatter)
-
- self.addHandler(stdout_handler)
- self.addHandler(stderr_handler)
-
def filter(self, record):
"""Prefix messages with logger name"""
record.msg = self.name + ": " + str(record.msg)
return True
-
- def verbose(self, msg, *args, **kwargs):
- self.log(logging.VERBOSE, msg, *args, **kwargs)
-
- def trace(self, msg, *args, **kwargs):
- self.log(logging.TRACE, msg, *args, **kwargs)
-
-
-class TimestampingLog(DefaultLog):
-
- def filter(self, record):
- """Add timestamp to messages"""
-
- super().filter(record)
- now = datetime.datetime.now()
- timestamp = now.strftime("%Y%m%d%H%M%S.%f")
- record.msg = "[" + timestamp + "] " + str(record.msg)
-
- return True
-
-
-class ParallelLog(DefaultLog):
- FORMAT = '%(levelname)s: [%(process)d]: %(message)s'
-
-
-class TimestampingParallelLog(TimestampingLog, ParallelLog):
- pass
-
-
-def setupDefaultLogging():
- del logging.getLogger().handlers[:]
- logging.setLoggerClass(DefaultLog)
-
-
-def setupTimestampingLogging():
- del logging.getLogger().handlers[:]
- logging.setLoggerClass(TimestampingLog)
-
-
-def setupTimestampingParallelLogging():
- del logging.getLogger().handlers[:]
- logging.setLoggerClass(TimestampingParallelLog)
-
-
-def setupParallelLogging():
- del logging.getLogger().handlers[:]
- logging.setLoggerClass(ParallelLog)
-
-
-setupDefaultLogging()
diff --git a/cdist/message.py b/cdist/message.py
index 450fc3c3..98a6e8cf 100644
--- a/cdist/message.py
+++ b/cdist/message.py
@@ -24,6 +24,8 @@ import os
import shutil
import tempfile
+import cdist
+
log = logging.getLogger(__name__)
diff --git a/cdist/mputil.py b/cdist/mputil.py
index 56fcfe39..e564d749 100644
--- a/cdist/mputil.py
+++ b/cdist/mputil.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
-# 2016-2017 Darko Poljak (darko.poljak at gmail.com)
+# 2016 Darko Poljak (darko.poljak at gmail.com)
#
# This file is part of cdist.
#
@@ -21,26 +21,14 @@
import multiprocessing
-import concurrent.futures as cf
import itertools
-import os
-import signal
-import logging
-
-
-log = logging.getLogger("cdist-mputil")
-
-
-def mp_sig_handler(signum, frame):
- log.trace("signal %s, SIGKILL whole process group", signum)
- os.killpg(os.getpgrp(), signal.SIGKILL)
def mp_pool_run(func, args=None, kwds=None, jobs=multiprocessing.cpu_count()):
- """Run func using concurrent.futures.ProcessPoolExecutor with jobs jobs
- and supplied iterables of args and kwds with one entry for each
- parallel func instance.
- Return list of results.
+ """ Run func using multiprocessing.Pool with jobs jobs and supplied
+ iterable of args and kwds with one entry for each parallel func
+ instance.
+ Return list of results.
"""
if args and kwds:
fargs = zip(args, kwds)
@@ -51,15 +39,10 @@ def mp_pool_run(func, args=None, kwds=None, jobs=multiprocessing.cpu_count()):
else:
return [func(), ]
- retval = []
- with cf.ProcessPoolExecutor(jobs) as executor:
- try:
- results = [
- executor.submit(func, *a, **k) for a, k in fargs
- ]
- for f in cf.as_completed(results):
- retval.append(f.result())
- return retval
- except KeyboardInterrupt:
- mp_sig_handler(signal.SIGINT, None)
- raise
+ with multiprocessing.Pool(jobs) as pool:
+ results = [
+ pool.apply_async(func, a, k)
+ for a, k in fargs
+ ]
+ retval = [r.get() for r in results]
+ return retval
diff --git a/cdist/preos.py b/cdist/preos.py
deleted file mode 100644
index bf2a8e60..00000000
--- a/cdist/preos.py
+++ /dev/null
@@ -1,130 +0,0 @@
-import os
-import os.path
-import sys
-import inspect
-import argparse
-import cdist
-import logging
-import cdist.argparse
-import cdist.configuration
-import cdist.exec.util as util
-
-
-_PREOS_CALL = "commandline"
-_PREOS_NAME = "_preos_name"
-_PREOS_MARKER = "_cdist_preos"
-_PLUGINS_DIR = "preos"
-_PLUGINS_PATH = [os.path.join(os.path.dirname(__file__), _PLUGINS_DIR), ]
-log = logging.getLogger("PreOS")
-
-
-def extend_plugins_path(dirs):
- for dir in dirs:
- preos_dir = os.path.expanduser(os.path.join(dir, "preos"))
- if os.path.isdir(preos_dir):
- _PLUGINS_PATH.append(preos_dir)
-
-
-def preos_plugin(obj):
- """It is preos if _PREOS_MARKER is True and has _PREOS_CALL."""
- if hasattr(obj, _PREOS_MARKER):
- is_preos = getattr(obj, _PREOS_MARKER)
- else:
- is_preos = False
-
- if is_preos and hasattr(obj, _PREOS_CALL):
- yield obj
-
-
-def scan_preos_dir_plugins(dir):
- for fname in os.listdir(dir):
- if os.path.isfile(os.path.join(dir, fname)):
- fname = os.path.splitext(fname)[0]
- module_name = fname
- try:
- module = __import__(module_name)
- yield from preos_plugin(module)
- clsmembers = inspect.getmembers(module, inspect.isclass)
- for cm in clsmembers:
- c = cm[1]
- yield from preos_plugin(c)
- except ImportError as e:
- log.warning("Cannot import '{}': {}".format(module_name, e))
-
-
-def find_preos_plugins():
- for dir in _PLUGINS_PATH:
- yield from scan_preos_dir_plugins(dir)
-
-
-def find_preoses():
- preoses = {}
- for preos in find_preos_plugins():
- if hasattr(preos, _PREOS_NAME):
- preos_name = getattr(preos, _PREOS_NAME)
- else:
- preos_name = preos.__name__.lower()
- preoses[preos_name] = preos
- return preoses
-
-
-def check_root():
- if os.geteuid() != 0:
- raise cdist.Error("Must be run with root privileges")
-
-
-def get_available_preoses_string(cls):
- preoses = [' - {}'.format(x) for x in sorted(set(cls.preoses))]
- return "Available PreOS-es:\n{}".format("\n".join(preoses))
-
-
-class PreOS(object):
- preoses = None
-
- @classmethod
- def commandline(cls, argv):
- cdist_parser = cdist.argparse.get_parsers()
- parser = argparse.ArgumentParser(
- description="Create PreOS", prog="cdist preos",
- parents=[cdist_parser['loglevel'], ])
- parser.add_argument('preos', help='PreOS to create',
- nargs='?', default=None)
- parser.add_argument('-c', '--conf-dir',
- help=('Add configuration directory (one that '
- 'contains "preos" subdirectory)'),
- action='append')
- parser.add_argument('-g', '--config-file',
- help='Use specified custom configuration file.',
- dest="config_file", required=False)
- parser.add_argument('-L', '--list-preoses',
- help='List available PreOS-es',
- action='store_true', default=False)
- parser.add_argument('remainder_args', nargs=argparse.REMAINDER)
- args = parser.parse_args(argv[1:])
- cdist.argparse.handle_loglevel(args)
- log.debug("preos args : {}".format(args))
-
- conf_dirs = util.resolve_conf_dirs_from_config_and_args(args)
-
- extend_plugins_path(conf_dirs)
- sys.path.extend(_PLUGINS_PATH)
- cls.preoses = find_preoses()
-
- if args.list_preoses or not args.preos:
- print(get_available_preoses_string(cls))
- sys.exit(0)
-
- preos_name = args.preos
- if preos_name in cls.preoses:
- preos = cls.preoses[preos_name]
- func = getattr(preos, _PREOS_CALL)
- if inspect.ismodule(preos):
- func_args = [preos, args.remainder_args, ]
- else:
- func_args = [args.remainder_args, ]
- log.info("Running preos : {}".format(preos_name))
- func(*func_args)
- else:
- raise cdist.Error(
- "Invalid PreOS {}. {}".format(
- preos_name, get_available_preoses_string(cls)))
diff --git a/cdist/preos/debootstrap/__init__.py b/cdist/preos/debootstrap/__init__.py
deleted file mode 100644
index 6d340b4a..00000000
--- a/cdist/preos/debootstrap/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from debootstrap.debootstrap import Debian, Ubuntu, Devuan
diff --git a/cdist/preos/debootstrap/debootstrap.py b/cdist/preos/debootstrap/debootstrap.py
deleted file mode 100644
index f53dd4a7..00000000
--- a/cdist/preos/debootstrap/debootstrap.py
+++ /dev/null
@@ -1,239 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-#
-# 2016 Darko Poljak (darko.poljak at ungleich.ch)
-#
-# This file is part of cdist.
-#
-# cdist 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.
-#
-# cdist 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 cdist. If not, see .
-#
-#
-
-import cdist
-import cdist.config
-import cdist.core
-import cdist.preos
-import argparse
-import cdist.argparse
-import logging
-import os
-import subprocess
-
-
-class Debian(object):
- _preos_name = 'debian'
- _cdist_preos = True
-
- _files_dir = os.path.join(os.path.dirname(__file__), "files")
-
- @classmethod
- def default_args(cls):
- default_remote_exec = os.path.join(cls._files_dir, "remote-exec.sh")
- default_remote_copy = os.path.join(cls._files_dir, "remote-copy.sh")
- default_init_manifest = os.path.join(
- cls._files_dir, "init-manifest-{}".format(cls._preos_name))
-
- defargs = argparse.Namespace()
- defargs.arch = 'amd64'
- defargs.bootstrap = False
- defargs.configure = False
- defargs.cdist_params = '-v'
- defargs.rm_bootstrap_dir = False
- defargs.suite = 'stable'
- defargs.remote_exec = default_remote_exec
- defargs.remote_copy = default_remote_copy
- defargs.manifest = default_init_manifest
-
- return defargs
-
- @classmethod
- def get_parser(cls):
- defargs = cls.default_args()
- cdist_parser = cdist.argparse.get_parsers()
- parser = argparse.ArgumentParser(
- prog='cdist preos {}'.format(cls._preos_name),
- parents=[cdist_parser['loglevel'], cdist_parser['beta']])
- parser.add_argument('target_dir', nargs=1,
- help=("target directory where PreOS will be "
- "bootstrapped"))
- parser.add_argument(
- '-a', '--arch',
- help="target debootstrap architecture, by default '{}'".format(
- defargs.arch), dest='arch', default=defargs.arch)
- parser.add_argument(
- '-B', '--bootstrap',
- help='do bootstrap step',
- dest='bootstrap', action='store_true', default=defargs.bootstrap)
- parser.add_argument(
- '-C', '--configure',
- help='do configure step',
- dest='configure', action='store_true', default=defargs.configure)
- parser.add_argument(
- '-c', '--cdist-params',
- help=("parameters that will be passed to cdist config, by default"
- " '{}' is used".format(defargs.cdist_params)),
- dest='cdist_params', default=defargs.cdist_params)
- parser.add_argument(
- '-D', '--drive-boot',
- help='create bootable PreOS on specified drive',
- dest='drive')
- parser.add_argument(
- '-e', '--remote-exec',
- help=("remote exec that cdist config will use, by default "
- "internal script is used"),
- dest='remote_exec', default=defargs.remote_exec)
- parser.add_argument(
- '-i', '--init-manifest',
- help=("init manifest that cdist config will use, by default "
- "internal init manifest is used"),
- dest='manifest', default=defargs.manifest)
- parser.add_argument(
- '-k', '--keyfile', action="append",
- help=("ssh key files that will be added to cdist config; "
- "'__ssh_authorized_keys root ...' type is appended to "
- "initial manifest"),
- dest='keyfile')
- parser.add_argument(
- '-m', '--mirror',
- help='use specified mirror for debootstrap',
- dest='mirror')
- parser.add_argument(
- '-P', '--root-password',
- help='Set specified password for root, generated by default',
- dest='root_password')
- parser.add_argument('-p', '--pxe-boot-dir', help='PXE boot directory',
- dest='pxe_boot_dir')
- parser.add_argument(
- '-r', '--rm-bootstrap-dir',
- help='remove target directory after finishing',
- dest='rm_bootstrap_dir', action='store_true',
- default=defargs.rm_bootstrap_dir)
- parser.add_argument(
- '-S', '--script',
- help='use specified script for debootstrap',
- dest='script')
- parser.add_argument('-s', '--suite',
- help="suite used for debootstrap, "
- "by default '{}'".format(defargs.suite),
- dest='suite', default=defargs.suite)
- parser.add_argument(
- '-y', '--remote-copy',
- help=("remote copy that cdist config will use, by default "
- "internal script is used"),
- dest='remote_copy', default=defargs.remote_copy)
- parser.epilog = cdist.argparse.EPILOG
-
- return parser
-
- @classmethod
- def update_env(cls, env):
- pass
-
- @classmethod
- def commandline(cls, argv):
- log = logging.getLogger(cls.__name__)
-
- parser = cls.get_parser()
- args = parser.parse_args(argv)
- if args.script and not args.mirror:
- raise cdist.Error("script option cannot be used without "
- "mirror option")
-
- args.command = cls._preos_name
- cdist.argparse.check_beta(vars(args))
-
- cdist.preos.check_root()
-
- args.target_dir = os.path.realpath(args.target_dir[0])
- args.os = cls._preos_name
- args.remote_exec = os.path.realpath(args.remote_exec)
- args.remote_copy = os.path.realpath(args.remote_copy)
- args.manifest = os.path.realpath(args.manifest)
- if args.keyfile:
- new_keyfile = [os.path.realpath(x) for x in args.keyfile]
- args.keyfile = new_keyfile
- if args.pxe_boot_dir:
- args.pxe_boot_dir = os.path.realpath(args.pxe_boot_dir)
-
- cdist.argparse.handle_loglevel(args)
- log.debug("preos: {}, args: {}".format(cls._preos_name, args))
- try:
- env = vars(args)
- new_env = {}
- for key in env:
- if key == 'verbose' and env[key]:
- if env[key] >= 3:
- new_env['debug'] = "yes"
- elif env[key] == 2:
- new_env['verbose'] = "yes"
- elif not env[key]:
- new_env[key] = ''
- elif isinstance(env[key], bool) and env[key]:
- new_env[key] = "yes"
- elif isinstance(env[key], list):
- val = env[key]
- new_env[key + "_cnt"] = str(len(val))
- for i, v in enumerate(val):
- new_env[key + "_" + str(i)] = v
- else:
- new_env[key] = str(env[key])
- env = new_env
- env.update(os.environ)
- cls.update_env(env)
- log.debug("preos: {} env: {}".format(cls._preos_name, env))
- cmd = os.path.join(cls._files_dir, "code")
- info_msg = ["Running preos: {}, suite: {}, arch: {}".format(
- cls._preos_name, args.suite, args.arch), ]
- if args.mirror:
- info_msg.append("mirror: {}".format(args.mirror))
- if args.script:
- info_msg.append("script: {}".format(args.script))
- if args.bootstrap:
- info_msg.append("bootstrapping")
- if args.configure:
- info_msg.append("configuring")
- if args.pxe_boot_dir:
- info_msg.append("creating PXE")
- if args.drive:
- info_msg.append("creating bootable drive")
- log.info(info_msg)
- log.debug("cmd={}".format(cmd))
- subprocess.check_call(cmd, env=env, shell=True)
- except subprocess.CalledProcessError as e:
- log.error("preos {} failed: {}".format(cls._preos_name, e))
-
-
-class Ubuntu(Debian):
- _preos_name = "ubuntu"
-
- @classmethod
- def default_args(cls):
- defargs = super().default_args()
- defargs.suite = 'xenial'
- return defargs
-
-
-class Devuan(Debian):
- _preos_name = "devuan"
-
- @classmethod
- def default_args(cls):
- defargs = super().default_args()
- defargs.suite = 'jessie'
- return defargs
-
- @classmethod
- def update_env(cls, env):
- env['DEBOOTSTRAP_DIR'] = os.path.join(cls._files_dir,
- 'devuan-debootstrap')
diff --git a/cdist/preos/debootstrap/files/code b/cdist/preos/debootstrap/files/code
deleted file mode 100755
index 9e37003b..00000000
--- a/cdist/preos/debootstrap/files/code
+++ /dev/null
@@ -1,274 +0,0 @@
-#!/bin/sh
-##
-## 2016 Darko Poljak (darko.poljak at ungleich.ch)
-##
-## This file is part of cdist.
-##
-## cdist 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.
-##
-## cdist 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 cdist. If not, see .
-
-set -e
-
-if [ "${debug}" ]
-then
- set -x
- cdist_params="${cdist_params} -d"
-fi
-
-bootstrap_dir="${target_dir}"
-
-case "${os}" in
- ubuntu|debian|devuan)
- # nothing, those are valid values
- ;;
- *)
- echo "ERROR: invalid os value: ${os}" >&2
- exit 1
- ;;
-esac
-
-check_bootstrap_dir() {
- if [ ! -e "$1" ]
- then
- echo "ERROR: bootstrap directory $1 does not exist" >&2
- exit 1
- fi
-}
-
-# bootstrap
-if [ "${bootstrap}" ]
-then
- if [ "${DEBOOTSTRAP_DIR}" ]
- then
- debootstrap_cmd="${DEBOOTSTRAP_DIR}/debootstrap"
- else
- command -v debootstrap 2>&1 > /dev/null || {
- echo "ERROR: debootstrap not found" >&2
- exit 1
- }
- debootstrap_cmd="debootstrap"
- fi
-
- # If PreOS on drive then do not check for directory emptiness.
- # Partition can at least contain 'lost+found' directory.
- if [ ! "${drive}" ]
- then
- if [ -e "${bootstrap_dir}" ]
- then
- dir_content=$(ls -A "${bootstrap_dir}" | wc -l)
- else
- dir_content=0
- fi
- if [ "${dir_content}" -ne 0 ]
- then
- echo "ERROR: "${bootstrap_dir}" not empty " >&2
- exit 1
- fi
- fi
-
- if [ "${verbose}" -o "${debug}" ]
- then
- echo "bootstrapping..."
- fi
- mkdir -p "${bootstrap_dir}"
- "${debootstrap_cmd}" --include=openssh-server --arch=${arch} ${suite} ${bootstrap_dir} \
- ${mirror} ${script}
- if [ "${verbose}" -o "${debug}" ]
- then
- echo "bootstrap finished"
- fi
-fi
-
-chroot_mount() {
- mount -t proc none "${bootstrap_dir}/proc" || true
- mount -t sysfs none "${bootstrap_dir}/sys" || true
- mount -o bind /dev "${bootstrap_dir}/dev" || true
- mount -t devpts none "${bootstrap_dir}/dev/pts" || true
-}
-
-chroot_umount() {
- umount "${bootstrap_dir}/dev/pts" || true
- umount "${bootstrap_dir}/dev" || true
- umount "${bootstrap_dir}/sys" || true
- umount "${bootstrap_dir}/proc" || true
-}
-
-TRAPFUNC="umount \"${bootstrap_dir}/dev/pts\" || true; \
-umount \"${bootstrap_dir}/dev\" || true; \
-umount \"${bootstrap_dir}/sys\" || true; \
-umount \"${bootstrap_dir}/proc\" || true;"
-
-# config
-if [ "${configure}" ]
-then
- if [ ! -f "${manifest}" ]
- then
- echo "ERROR: ${manifest} does not exist" >&2
- exit 1
- fi
- if [ ! -f "${remote_exec}" ]
- then
- echo "ERROR: ${remote_exec} does not exist" >&2
- exit 1
- fi
- if [ ! -f "${remote_copy}" ]
- then
- echo "ERROR: ${remote_copy} does not exist" >&2
- exit 1
- fi
-
- if [ "${keyfile_cnt}" -a "${keyfile_cnt}" -gt 0 ]
- then
- i="$((keyfile_cnt - 1))"
- keyfiles=""
- while [ "${i}" -ge 0 ]
- do
- kf_var="keyfile_${i}"
- eval kf='$'"${kf_var}"
- if [ ! -f "${kf}" ]
- then
- echo "ERROR: ${kf} does not exist" >&2
- exit 1
- fi
- key=$(cat "${kf}")
- keyfiles="${keyfiles} --key '${key}'"
- i=$((i - 1))
- done
- ssh_auth_keys_line="__ssh_authorized_keys root ${keyfiles}\n"
- else
- ssh_auth_keys_line=""
- fi
-
- check_bootstrap_dir "${bootstrap_dir}"
-
- if [ "${verbose}" -o "${debug}" ]
- then
- echo "configuring..."
- fi
-
- trap "${TRAPFUNC}" 0 1 2 3 15
-
- chroot_mount
-
- chroot "${bootstrap_dir}" /usr/bin/apt-get update
-
- if [ "${drive}" ]
- then
- grub_manifest_line="__package grub-pc --state present\n"
- grub_kern_params_line="__line linux_kernel_params \
---file /etc/default/grub \
---line 'GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash net.ifnames=0\"'\n"
- else
- grub_manifest_line=""
- grub_kern_params_line=""
- fi
- grub_lines="${grub_manifest_line}${grub_kern_params_line}"
-
- printf "${ssh_auth_keys_line}${grub_lines}" \
- | cat "${manifest}" - |\
- cdist config \
- ${cdist_params} -i - \
- --remote-exec "${remote_exec}" \
- --remote-copy "${remote_copy}" \
- "${bootstrap_dir}"
-
- # __hostname with systmed uses hostnamectl which needs dbus running
- # set hostname explicitly here instead
- printf "preos\n" > "${bootstrap_dir}/etc/hostname"
-
- chroot "${bootstrap_dir}" /usr/bin/apt-get autoclean
- chroot "${bootstrap_dir}" /usr/bin/apt-get clean
- chroot "${bootstrap_dir}" /usr/bin/apt-get autoremove
-
- chroot_umount
-
- trap - 0 1 2 3 15
-
- if [ "${verbose}" -o "${debug}" ]
- then
- echo "configuring finished"
- fi
-fi
-
-if [ "${pxe_boot_dir}" ]
-then
- check_bootstrap_dir "${bootstrap_dir}"
-
- if [ "${verbose}" -o "${debug}" ]
- then
- echo "creating pxe..."
- fi
-
- mkdir -p "${pxe_boot_dir}"
- cp "${bootstrap_dir}"/boot/vmlinuz-* "${pxe_boot_dir}/kernel"
- cd "${bootstrap_dir}"
- find . -print0 | cpio --null -o --format=newc | gzip -9 > "${pxe_boot_dir}/initramfs"
-
- mkdir -p "${pxe_boot_dir}/pxelinux.cfg"
- cat < "${pxe_boot_dir}/pxelinux.cfg/default"
- DEFAULT preos
- LABEL preos
- KERNEL kernel
- APPEND utf8 load_ramdisk=1 root=/dev/ram nofb initrd=initramfs console=ttyS1,115200 net.ifnames=0
-EOPXEF
-
- cp "${bootstrap_dir}/usr/lib/PXELINUX/pxelinux.0" "${pxe_boot_dir}/pxelinux.0"
- cp "${bootstrap_dir}/usr/lib/syslinux/modules/bios/ldlinux.c32" \
- "${pxe_boot_dir}/ldlinux.c32"
- # network boot need all files world readable
- chmod -R 644 "${pxe_boot_dir}"/*
-
- if [ "${verbose}" -o "${debug}" ]
- then
- echo "pxe creation finished"
- fi
-fi
-
-if [ "${drive}" ]
-then
- trap "${TRAPFUNC}" 0 1 2 3 15
- chroot_mount
- chroot "${bootstrap_dir}" grub-install ${drive}
- chroot "${bootstrap_dir}" /bin/sh -c "GRUB_DISABLE_OS_PROBER=true update-grub"
- # set root password
- if [ ! "${root_password}" ]
- then
- if ! which strings >/dev/null 2>&1
- then
- printf "strings is missing\n" >&2
- exit 1
- fi
- root_password="$(head -n 1000 /dev/urandom | strings | \
- grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n')"
- printf "Generated root password (without quotes):'${root_password}'\n"
- fi
- chroot "${bootstrap_dir}" /bin/sh -c "echo \"root:${root_password}\" | \
- chpasswd"
- # /etc/securetty must not be world writeable.
- chmod 644 "${bootstrap_dir}"/etc/securetty
- chroot_umount
- trap - 0 1 2 3 15
-fi
-
-if [ "${rm_bootstrap_dir}" ]
-then
- if [ "${verbose}" -o "${debug}" ]
- then
- echo "removing bootstrap dir..."
- fi
- rm -r -f "${bootstrap_dir}"
- if [ "${verbose}" -o "${debug}" ]
- then
- echo "removing bootstrap dir finished"
- fi
-fi
diff --git a/cdist/preos/debootstrap/files/devuan-debootstrap/Makefile b/cdist/preos/debootstrap/files/devuan-debootstrap/Makefile
deleted file mode 100644
index 85168031..00000000
--- a/cdist/preos/debootstrap/files/devuan-debootstrap/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# avoid dpkg-dev dependency; fish out the version with sed
-VERSION := $(shell sed 's/.*(\(.*\)).*/\1/; q' debian/changelog)
-
-all:
-
-clean:
-
-DSDIR=$(DESTDIR)/usr/share/debootstrap
-install:
- mkdir -p $(DSDIR)/scripts
- mkdir -p $(DESTDIR)/usr/sbin
-
- cp -a scripts/* $(DSDIR)/scripts/
- install -o root -g root -m 0644 functions $(DSDIR)/
-
- sed 's/@VERSION@/$(VERSION)/g' debootstrap >$(DESTDIR)/usr/sbin/debootstrap
- chown root:root $(DESTDIR)/usr/sbin/debootstrap
- chmod 0755 $(DESTDIR)/usr/sbin/debootstrap
diff --git a/cdist/preos/debootstrap/files/devuan-debootstrap/README b/cdist/preos/debootstrap/files/devuan-debootstrap/README
deleted file mode 100644
index 4d8c3049..00000000
--- a/cdist/preos/debootstrap/files/devuan-debootstrap/README
+++ /dev/null
@@ -1,65 +0,0 @@
-README for debootstrap
-======================
-
-See the manpage for (some) documentation.
-
-Running debootstrap from source
--------------------------------
-
-You can run debootstrap from its source tree without installing it. This
-can be useful if you want a quick way to make a Debian chroot on another
-system, or if you are testing modifications to debootstrap.
-
-First, get the source.
-
-* Either by using git
- git clone https://anonscm.debian.org/git/d-i/debootstrap.git
-
-* Or by visiting
- and downloading the tar.gz file
-
-Then in the debootstrap source directory:
-
- export DEBOOTSTRAP_DIR=`pwd`
- sudo ./debootstrap stable my-stable-dir
-
-If you are running a multi-stage boot strap (for example for a QEMU
-rootfs) you don't even need root:
-
- export DEBOOTSTRAP_DIR=`pwd`
- fakeroot ./debootstrap --foreign --arch=armhf testing my-testing-dir http://deb.debian.org/debian
-
-Of course you will need to execute the second stage as root to finish the bootstrap:
-
- (on foreign hardware)
- /debootstrap/debootstrap --second-stage
-
-
-Future
-------
-
- * Cross-strap support - so you can bootstrap a filesystem to the
- point where it will successfully boot, and finish installing itself
- without having to be running the target architecture or OS yourself.
-
- debootstrap --arch powerpc sarge ./sarge-ppc-chroot ...
-
- on an i386 system, boot a powerpc box with sarge-ppc-chroot as its
- root files system, and have it "work". The cross-hurd package does
- something similar, and should be replaced by this feature.
-
- * There should be some (better) way of telling debootstrap what "base"
- packages you want to install -- this varies between making a chroot,
- doing an install, and doing a buildd. Also, some installs want
- different base packages (to setup networking, or kernels, eg)
-
-
-NMUing
-------
-
-If there's a problem with debootstrap that you need fixed, feel free to do
-an NMU to fix it. Usual rules: try not to break anything, and mail the
-patch to the BTS. Don't worry about asking first though.
-
-However, note that debootstrap is now team maintained. Anyone in d-i can do
-a release without the bother of a NMU.
diff --git a/cdist/preos/debootstrap/files/devuan-debootstrap/TODO b/cdist/preos/debootstrap/files/devuan-debootstrap/TODO
deleted file mode 100644
index e5fde0e4..00000000
--- a/cdist/preos/debootstrap/files/devuan-debootstrap/TODO
+++ /dev/null
@@ -1,11 +0,0 @@
-
-Features:
- ++ second stage via chroot debootstrap/debootstrap
- ++ debootstrap/deb file to record deb destinations/information
-
- -- configuration file
- -- versus command line
- -- support for sources (vs mirrors)
- -- faux-pinning for packages
-
- ++ makedev in second stage
diff --git a/cdist/preos/debootstrap/files/devuan-debootstrap/debian/.gitignore b/cdist/preos/debootstrap/files/devuan-debootstrap/debian/.gitignore
deleted file mode 100644
index 39638d97..00000000
--- a/cdist/preos/debootstrap/files/devuan-debootstrap/debian/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-debootstrap
-debootstrap-udeb
-files
-*.debhelper.log
-*.substvars
-
diff --git a/cdist/preos/debootstrap/files/devuan-debootstrap/debian/README.DevuanSource b/cdist/preos/debootstrap/files/devuan-debootstrap/debian/README.DevuanSource
deleted file mode 100644
index 6446a088..00000000
--- a/cdist/preos/debootstrap/files/devuan-debootstrap/debian/README.DevuanSource
+++ /dev/null
@@ -1,15 +0,0 @@
-To sync up with debians source for inspiration you should run the following:
-
- `git remote add alioth-git git://anonscm.debian.org/d-i/debootstrap.git`
- `git fetch alioth-git`
-
-After that you can either cherry-pick or merge releases from debian. To
-merge a release, it's do:
- `git tag` to list the release tags
-and
- `git merge `
-followed by all the fixups and then commit with an appropriate message like
- "Merging Release from debian"
-
-Copyright 2016 Daniel Reurich
-
diff --git a/cdist/preos/debootstrap/files/devuan-debootstrap/debian/changelog b/cdist/preos/debootstrap/files/devuan-debootstrap/debian/changelog
deleted file mode 100644
index 8688197d..00000000
--- a/cdist/preos/debootstrap/files/devuan-debootstrap/debian/changelog
+++ /dev/null
@@ -1,2655 +0,0 @@
-debootstrap (1.0.87+devuan1.1) unstable; urgency=medium
-
- * add git to builddeps
-
- -- Daniel Reurich Fri, 13 Jan 2017 23:12:50 +1300
-
-debootstrap (1.0.87+devuan1.0) unstable; urgency=high
-
- [ Julien Cristau ]
- * Default to split /usr again, as merged-/usr breaks dpkg-shlibdeps
- (closes: #844221).
-
- [ Riku Voipio ]
- * remove scratchbox2 support (closes: #796189)
-
- -- Christian Perrier Wed, 16 Nov 2016 06:47:27 +0100
-
-debootstrap (1.0.86+devuan1.0) unstable; urgency=high
-
- [ Daniel Reurich ]
- * Restore Devuan Jessie version
- * switch to 3.0 (git) source format
- * set git-depth
- * Add directions for inspiration from debians source
- * removed file so we can build using git source format
- * merge 1.0.86 for jessie
-
- -- Daniel Reurich Fri, 13 Jan 2017 15:58:19 +1300
-
-debootstrap (1.0.86) unstable; urgency=high
-
- * Rework split_inline_sig by using shell built-ins instead of trying to
- mix sed and tr together, which might work on regular systems but not
- from inside the Debian Installer (Closes: #842591). Thanks to Ansgar
- Burchardt for the proof of concept!
-
- -- Cyril Brulebois Sun, 30 Oct 2016 23:35:45 +0100
-
-debootstrap (1.0.85-1+devuan1) unstable; urgency=medium
-
- * sync with debian upstream package
- * add right keyrings with the new schema on devuan-keyring package
-
- -- Franco (nextime) Lanza Sat, 29 Oct 2016 23:21:57 +0200
-
-
-debootstrap (1.0.85) unstable; urgency=medium
-
- [ Julien Cristau ]
- * Add support for downloading and validating InRelease files, by splitting
- up detached signature from signed data.
- * Switch default mirror to deb.debian.org.
-
- [ Colin Watson ]
- * Add (Ubuntu) zesty as a symlink to gutsy.
-
- [ Ansgar Burchardt ]
- * Add jessie-kfreebsd to merged-/usr blacklist.
- * No longer Build-Depend on makedev. The code using it was already
- removed in debootstrap 1.0.82.
- * Do not use `tar -k` for older releases which might have file
- conflicts between the packages to be installed. (Closes: #838388)
- * Error out when seeing short options. (Closes: #548880)
- * Add oldoldstable -> sid script symlink. (Closes: #792734)
- * Add buster -> sid and bullseye -> sid script symlinks.
- * Only unpack and configure the base system when there are actually
- packages to install. (Closes: #825034)
- * debootstrap.8: Use stretch instead of wheezy in examples.
-
- [ Marco d'Itri ]
- * Enable merged-/usr by default. (Closes: #839046)
-
- -- Julien Cristau Fri, 21 Oct 2016 20:22:49 +0200
-
-debootstrap (1.0.84) unstable; urgency=medium
-
- [ Ansgar Burchardt ]
- * Add support for xz-compressed Packages indices. (Closes: #837649)
-
- -- Christian Perrier Thu, 06 Oct 2016 06:59:38 +0200
-
-debootstrap (1.0.83) unstable; urgency=medium
-
- [ Ansgar Burchardt ]
- * functions: Validate that the requested suite is listed in the
- Release file's Suite or Codename field. (Closes: #837075)
- * Add support for merged-/usr, enabled by a new --merged-usr option.
- (Closes: #810301)
- * Feign install of dpkg in second stage. This avoids problems when
- using dpkg-deb together with busybox' tar. (Closes: #837185)
- * README: Use https://.
-
- [ Steve McIntyre ]
- * Update Standards-Version to 3.9.8 (no changes needed)
-
- -- Steve McIntyre <93sam@debian.org> Tue, 13 Sep 2016 13:16:41 +0100
-
-debootstrap (1.0.82) unstable; urgency=medium
-
- [ Alex Bennée ]
- * Excise all devices.tar.gz code. Closes: #830869
-
- -- Christian Perrier Thu, 08 Sep 2016 07:09:56 +0200
-
-debootstrap (1.0.81) unstable; urgency=medium
-
- [ Luca Falavigna ]
- * Add (Ubuntu) yakkety as a symlink to gutsy.
-
- -- Christian Perrier Tue, 03 May 2016 06:51:57 +0200
-
-debootstrap (1.0.80-1+devuan1) unstable; urgency=medium
-
- * sync with debian upstream package.
-
- -- Franco (nextime) Lanza Sun, 24 Apr 2016 06:16:29 +0200
-
-debootstrap (1.0.80) unstable; urgency=medium
-
- [ Jon Boden ]
- * scripts/gutsy: Support kfreebsd & hurd arches on Ubuntu targets
- (closes: #818748)
-
- -- Christian Perrier Tue, 22 Mar 2016 19:27:45 +0100
-
-debootstrap (1.0.79) unstable; urgency=medium
-
- [ Samuel Thibault ]
- * hurd: move setting up dev and servers firmlink to setup_proc stage. Also
- firmlink proc there. Thanks Gabriele Giacone for all the investigation!
- (Closes: #768102)
-
- -- Christian Perrier Fri, 19 Feb 2016 07:23:59 +0100
-
-debootstrap (1.0.78+nmu1) unstable; urgency=medium
-
- * Non-maintainer upload.
- * Split setup_devices in setup_devices (which now only deals with static
- device nodes) and setup_dynamic_devices, and move the calls to
- setup_devices from the beginning of the second stage to the end of the
- first stage.
- setup_dynamic_devices mounts the appropriate filesystems which provide
- dynamic device nodes for the architectures which need one in
- debootstrap (kfreebsd and hurd).
- This fixes a bug in --second-stage introduced in 1.0.34 and exposed
- by the devices-related changes of 1.0.76: the second stage debootstrap
- runs "dpkg --print-architecture >/dev/null" at the very beginning of
- the program when /dev is still empty, so it creates an empty regular
- file in place of /dev/null and this will cause mknod to fail later.
- (Closes: #813232)
-
- -- Marco d'Itri Wed, 17 Feb 2016 01:23:23 +0100
-
-debootstrap (1.0.78) unstable; urgency=high
-
- * Use HTTPS for Vcs-* URLs, and link to cgit rather than gitweb.
- * Don't call mknod with the --mode option, it's not supported in
- busybox. Use -m instead - fixes the broken fix for #812811.
- Closes: #813124. Urgency high to get this fix propagated quickly -
- it's breaking d-i installs right now. Adding myself to uploaders and
- uploading.
-
- -- Steve McIntyre <93sam@debian.org> Fri, 29 Jan 2016 16:36:00 +0000
-
-debootstrap (1.0.77) unstable; urgency=medium
-
- [ Marco d'Itri ]
- * Fix permissions on device nodes (Closes: #812811).
-
- -- Cyril Brulebois Wed, 27 Jan 2016 20:22:05 +0100
-
-debootstrap (1.0.76) unstable; urgency=medium
-
- [ Marco d'Itri ]
- * Stop creating useless device nodes (Closes: #571136).
-
- -- Cyril Brulebois Sun, 24 Jan 2016 08:55:18 +0100
-
-debootstrap (1.0.75-1+devuan1) unstable; urgency=medium
-
- * sync with debian upstream package
-
- -- Franco (nextime) Lanza Wed, 02 Dec 2015 04:05:36 +0100
-
-debootstrap (1.0.75) unstable; urgency=medium
-
- * Stop cleaning KEEP_DEBOOTSTRAP_DIR twice, as spotted by Chris Lamb
- (Closes: #804415).
- * Add Tanglu support (Closes: #771687), thanks to Matthias Klumpp. At
- the moment, the following extra suites are recognized:
- - aequorea
- - bartholomea
- - chromodoris
- - dasyatis
-
- -- Cyril Brulebois Wed, 11 Nov 2015 18:49:28 +0100
-
-debootstrap (1.0.74) unstable; urgency=medium
-
- [ Colin Watson ]
- * Add (Ubuntu) xenial as a symlink to gutsy.
-
- -- Christian Perrier Tue, 03 Nov 2015 07:09:23 +0100
-
-debootstrap (1.0.73) unstable; urgency=medium
-
- * Generate a deburis file with (package, version, uri) tuples, similar
- to the existing debpaths.
-
- -- Cyril Brulebois Thu, 22 Oct 2015 12:43:35 +0200
-
-debootstrap (1.0.72-1+devuan1) unstable; urgency=medium
-
- * Rebase on debian 1.0.70 debootstrap version
- * Added Daniel Reurich in Uploaders
- * Integrating Daniel Reurich patches for d-i
- * Updated manpage with Daniel Reurich changes
-
- -- Franco (nextime) Lanza Thu, 21 May 2015 05:45:36 +0200
-
-debootstrap (1.0.72) unstable; urgency=medium
-
- [ Iain Lane ]
- * Add (Ubuntu) wily as a symlink to gutsy (closes: #787117).
-
- [ Colin Watson ]
- * Fix resolve_deps and setup_available to work in the --foreign case
- (closes: #757819, LP: #1450980).
-
- -- Colin Watson Tue, 28 Jul 2015 14:32:19 +0100
-
-debootstrap (1.0.71-1+devuan1) unstable; urgency=medium
-
- * make devuan-baseconf and devuan-keyring requireds packages
- * make sure we have sysvinit-core and not systemd in the chroot
-
- -- Franco (nextime) Lanza Fri, 01 May 2015 02:13:04 +0200
-
-debootstrap (1.0.71) unstable; urgency=medium
-
- * Adjust sed call to render it more portable (missing ';'), making it
- work with FreeBSD sed. Thanks to Nikolai Lifanov for the report and
- the patch (Closes: #791802).
-
- -- Cyril Brulebois Fri, 10 Jul 2015 01:29:52 +0200
-
-debootstrap (1.0.70-1+devuan1) unstable; urgency=medium
-
- * Debianization of debootstrap.
- * added ceres script and link jessie and ascii to it
-
- -- Franco (nextime) Lanza Sat, 11 Apr 2015 08:03:36 +0200
-
-debootstrap (1.0.70) unstable; urgency=medium
-
- * Use tr instead of (missing in d-i) xargs (Closes: #785693). Thanks,
- Julian Schauder!
-
- -- Cyril Brulebois Tue, 19 May 2015 11:38:27 +0200
-
-debootstrap (1.0.69-1+devuan1) unstable; urgency=medium
-
- * Fix package description.
-
- -- Franco (nextime) Lanza Sat, 07 Mar 2015 21:31:07 +0100
-
-debootstrap (1.0.69) unstable; urgency=medium
-
- [ Cyril Brulebois ]
- * Make sure to deduplicate package list in download_release to avoid
- issues while counting downloaded packages. The failure path could lead
- to printing some strange integer (Closes: #709751, #768445, #785276,
- #774752).
- This was reported to mostly happen whenever --no-resolve-deps is used.
- * Add support for --force-check-gpg so that one can programmatically
- make sure keyring checks are used and that no fallback to an https
- mirror happens (Closes: #661501, #733179, #775454).
- * Switch default mirror from ftp.us.debian.org to the new, official
- http redirector service: httpredir.debian.org
- * Make it possible to override the MAKEDEV variable (Closes: #734743).
- Thanks, Wookey!
-
- [ Christian Perrier ]
- * Update Standards to 3.9.6 (checked)
-
- -- Christian Perrier Mon, 18 May 2015 14:07:43 +0200
-
-debootstrap (1.0.68-2+devuan1) unstable; urgency=medium
-
- * Added missing symlink.
-
- -- Franco (nextime) Lanza Sat, 07 Mar 2015 21:18:26 +0100
-
-debootstrap (1.0.68-1+devuan1) unstable; urgency=medium
-
- * Added script for ascii.
-
- -- Franco (nextime) Lanza Sat, 07 Mar 2015 11:47:02 +0100
-debootstrap (1.0.68) unstable; urgency=medium
-
- [ Steven Chamberlain ]
- * Support the jessie-kfreebsd suite, by using the same script as
- jessie (a symlink to sid) (Closes: #784927).
-
- -- Christian Perrier Mon, 11 May 2015 07:46:19 +0200
-
-debootstrap (1.0.67-1+devuan2) unstable; urgency=medium
-
- * Switch to quilt format
-
- -- Franco (nextime) Lanza Tue, 03 Mar 2015 07:44:11 +0100
-
-debootstrap (1.0.67+devuan1) unstable; urgency=medium
-
- * Applied init freedom patch (debian bug 668001)
- * moved to devuan
-
- -- Franco (nextime) Lanza Tue, 03 Mar 2015 07:09:36 +0100
-
-debootstrap (1.0.67) unstable; urgency=medium
-
- [ Cyril Brulebois ]
- * Apply patch by Jérémy Bobbio to support reproducible builds: specify
- a modification time on the tar side, and add the -n option to gzip
- (Closes: #774069). Thanks, Jérémy!
- * Update setup_apt_sources to look at USE_COMPONENTS if COMPONENTS is
- empty, fixing the empty sources.list bug with foreign architectures
- (Closes: #732255, #773867).
-
- -- Christian Perrier Wed, 14 Jan 2015 07:03:17 +0100
-
-debootstrap (1.0.66) unstable; urgency=low
-
- [ Cyril Brulebois ]
- * Specify gzip compression in debian/source/options to allow for better
- portability on other platforms (Closes: #770214). Thanks, Joey Hess!
- * Specify gzip compression for debootstrap, and xz for debootstrap-udeb,
- to mitigate the need for xz on non-Debian platforms (see: #770217).
-
- -- Christian Perrier Mon, 24 Nov 2014 09:15:50 +0100
-
-debootstrap (1.0.65) unstable; urgency=medium
-
- [ Julien Cristau ]
- * Add support for stretch.
-
- -- Christian Perrier Mon, 10 Nov 2014 09:24:56 +0100
-
-debootstrap (1.0.64) unstable; urgency=medium
-
- * Add (Ubuntu) vivid as a symlink to gutsy.
-
- -- Colin Watson Mon, 20 Oct 2014 16:48:49 +0100
-
-debootstrap (1.0.63) unstable; urgency=medium
-
- [ Joey Hess ]
- * Move set -e out of shebang line. Closes: #762713
-
- -- Christian Perrier Thu, 25 Sep 2014 06:44:16 +0200
-
-debootstrap (1.0.62) unstable; urgency=medium
-
- [ Cyril Brulebois ]
- * Fix reporting of package version in retrieval and validation steps
- to cope with epochs.
-
- -- Christian Perrier Mon, 15 Sep 2014 11:40:54 +0200
-
-debootstrap (1.0.61) unstable; urgency=medium
-
- * Fix "possibly the package $pkg is at fault" warnings to account for
- changed error output in dpkg 1.17.2.
-
- -- Colin Watson Sun, 31 Aug 2014 22:07:49 +0100
-
-debootstrap (1.0.60) unstable; urgency=medium
-
- [ Adam Conrad ]
- * Add (Ubuntu) utopic as a symlink to gutsy.
-
- [ Guillem Jover ]
- * Sync deb support with latest dpkg-deb (closes: #739136):
- - Add uncompressed data.tar deb member support.
- - Add uncompressed and xz control.tar deb member support.
-
- -- Colin Watson Tue, 06 May 2014 09:37:34 +0100
-
-debootstrap (1.0.59) unstable; urgency=medium
-
- * Install ca-certificates as well as apt-transport-https for HTTPS
- installations. This makes it possible to copy certificates that were
- built into the installer to /usr/local/share/ca-certificates/ and thus
- have them continue to be trusted after installation.
-
- -- Colin Watson Thu, 13 Feb 2014 13:42:54 +0000
-
-debootstrap (1.0.58) unstable; urgency=medium
-
- * Policy version 3.9.5: no changes required.
- * Install apt-transport-https if installing from an HTTPS mirror
- (LP: #1135163). It may still be necessary to copy certificates into
- place, but there's at least a reasonable chance that somebody installing
- from HTTPS may want to keep using it, and we have to install
- apt-transport-https at this point otherwise they won't be able to do
- that end-to-end.
-
- -- Colin Watson Tue, 11 Feb 2014 17:46:41 +0000
-
-debootstrap (1.0.57) unstable; urgency=medium
-
- * pkgdetails_perl: Only interpret percentages following whitespace, to
- cope with GNU wget outputting the local file name (which may contain "%"
- due to URL-encoding) after it finishes the download (LP: #1172101).
-
- -- Colin Watson Fri, 07 Feb 2014 16:12:23 +0000
-
-debootstrap (1.0.56) unstable; urgency=low
-
- [ Tollef Fog Heen ]
- * Install base-passwd and base-files in two calls rather than one to
- avoid problems with home-built media with different ordering in
- Packages. Thanks to Jo Shields for pointing this out and providing
- the workaround. Closes: #601670. LP: #1001131.
-
- [ Joey Hess ]
- * When deboostrapping Debian, and the debian-archive-keyring is not
- available, switch the default mirror to a https url. This way at
- least the CA level of security is available even for users who
- have no way to check gpg keys in the WoT. The https mirror is
- currently https://mirrors.kernel.org/debian.
- * Avoid writing https urls into sources.list, as apt does not support https.
-
- -- Christian Perrier Mon, 30 Dec 2013 08:00:41 +0100
-
-debootstrap (1.0.55) unstable; urgency=low
-
- [ Matthias Klose ]
- * Add (Ubuntu) trusty as a symlink to gutsy.
-
- -- Christian Perrier Tue, 22 Oct 2013 13:43:23 +0200
-
-debootstrap (1.0.53) unstable; urgency=low
-
- [ Dmitrijs Ledkovs ]
- * Set debian source format to '3.0 (native)'.
- * Bump debhelper compat level to 9.
- * Set Vcs-* to canonical format.
-
- [ Christian Perrier ]
- * Update Standards to 3.9.4 (checked)
-
- -- Christian Perrier Sun, 14 Jul 2013 13:06:33 +0200
-
-debootstrap (1.0.52) unstable; urgency=low
-
- * scripts/gutsy: Make the fake initctl pass through "initctl version"
- calls, used by such things as invoke-rc.d to figure out whether it's
- running under Upstart (LP: #1182540).
- * scripts/sid, scripts/gutsy: Add a policy-rc.d, matching that in
- debian-installer-utils. This is the primary way to disable daemon
- startup.
-
- -- Colin Watson Wed, 22 May 2013 16:55:59 +0100
-
-debootstrap (1.0.51) unstable; urgency=low
-
- [ Scott Kitterman ]
- * Add (Ubuntu) saucy as a symlink to gutsy (closes: #706989).
-
- [ Colin Watson ]
- * Clarify location of pkgdetails.c in error message (closes: #708771).
- * Resolve mount point symlinks relative to the target chroot before
- unmounting them (closes: #702861, #703037, #704744).
-
- -- Colin Watson Sat, 18 May 2013 23:18:08 +0100
-
-debootstrap (1.0.50) unstable; urgency=low
-
- [ Hector Oron ]
- * Report package version information on package retrieve and validation.
- Closes: #697675
-
- -- Christian Perrier Fri, 17 May 2013 13:34:34 +0200
-
-debootstrap (1.0.49) unstable; urgency=medium
-
- * Add support for jessie. Closes: #706788
-
- -- Joey Hess Sat, 04 May 2013 23:37:52 -0400
-
-debootstrap (1.0.48) unstable; urgency=low
-
- * Team upload
-
- [ Julien Cristau ]
- * Disable InRelease support. gpgv won't give us back the signed data, and
- full gpg is not available inside d-i (closes: #703889).
- * Move extract_release_components to after signature verification.
- Suggested by Ansgar Burchardt.
-
- -- Didier Raboud Thu, 04 Apr 2013 16:17:57 +0200
-
-debootstrap (1.0.47) unstable; urgency=low
-
- * Team upload
- * Properly decrypt the InRelease file when downloading from an archive
- where InRelease is used. This longstanding bug was masked by former
- APT behaviour and was revealed only with recent APT versions
- Closes: #703146
- Thanks to Michael Vogt for the analysis and patch
- * Add a dependency on gpg because of the above change.
-
- -- Christian Perrier Wed, 20 Mar 2013 21:34:29 +0100
-
-debootstrap (1.0.46) unstable; urgency=low
-
- * Team upload.
- * Use `which` to find out sh only if /bin/sh does not exist.
-
- -- Samuel Thibault Thu, 27 Dec 2012 15:47:16 +0100
-
-debootstrap (1.0.45) unstable; urgency=low
-
- [ Joey Hess ]
- * Better support use on Android by not hardcoding /bin/sh
- in a test file that's created, and instead putting in the
- actual path to sh. Closes: #694310 Thanks, Shawn Landden
-
- -- Christian Perrier Sat, 22 Dec 2012 12:56:32 +0100
-
-debootstrap (1.0.44) unstable; urgency=low
-
- * Remove double quotes to fix for loop on GNU/kFreeBSD, thanks to
- Oleg Ginzburg (Closes: #693718).
-
- -- Cyril Brulebois Tue, 20 Nov 2012 23:55:53 +0100
-
-debootstrap (1.0.43) unstable; urgency=low
-
- [ Joey Hess ]
- * Fix "arc" typo. Closes: #686680
-
- [ Colin Watson ]
- * Add (Ubuntu) raring as a symlink to gutsy.
-
- [ Christian Perrier ]
- * Add myself to Uploaders and drop Anthony Towns who is no
- longer active in debootstrap maintenance for a few years. Thanks
- for your work, Anthony.
- * Bump Standards to 3.9.3 (checked)
- * Replace XC-Package-Type by Package-Type in debian/control
-
- -- Christian Perrier Sat, 27 Oct 2012 12:46:46 +0200
-
-debootstrap (1.0.42) unstable; urgency=low
-
- * Downgrade the absence of an InRelease file from a warning to an info
- message. For now, debootstrap can cope fine without, and it's possible
- there are Debian mirrors that don't have InRelease; Ubuntu doesn't quite
- have InRelease support yet either (LP: #1017398).
-
- -- Colin Watson Tue, 03 Jul 2012 15:34:57 +0100
-
-debootstrap (1.0.41) unstable; urgency=low
-
- [ Mehdi Dogguy ]
- * Add support for InRelease files (Closes: #638682)
-
- -- Joey Hess Thu, 21 Jun 2012 13:16:22 -0400
-
-debootstrap (1.0.40) unstable; urgency=low
-
- [ Joey Hess ]
- * When installation or configuration of a package fails, output a message
- that points the user to the log file. Attempt to grep out the first
- package that dpkg failed on and show its name too. Closes: #472704
-
- [ Colin Watson ]
- * Add (Ubuntu) quantal as a symlink to gutsy.
-
- -- Colin Watson Thu, 26 Apr 2012 17:44:44 +0100
-
-debootstrap (1.0.39) unstable; urgency=low
-
- * Retry corrupted downloads rather than carrying on almost regardless.
- Patch mostly due to Michael Gilbert, rearranged somewhat by me (closes:
- #618920).
- * Stop at the end of the retrieval phase if any packages failed to
- download.
-
- -- Colin Watson Tue, 13 Mar 2012 17:21:13 +0000
-
-debootstrap (1.0.38) unstable; urgency=low
-
- [ Joey Hess ]
- * Improve error message when a decompressor is not available,
- to indicate which package has been built with bzip today.
- Closes: #644719
-
- [ Otavio Salvador ]
- * Fix --print-debs support when using --foreign param. Closes:
- #551837.
-
- [ Colin Watson ]
- * pkgdetails_perl: Use the last of a sequence of stanzas for the same
- package name, rather than the first (closes: #649319).
-
- -- Colin Watson Mon, 21 Nov 2011 13:20:53 +0000
-
-debootstrap (1.0.37) unstable; urgency=low
-
- * Add (Ubuntu) precise as a symlink to gutsy.
-
- -- Colin Watson Wed, 05 Oct 2011 21:58:37 +0100
-
-debootstrap (1.0.36) unstable; urgency=low
-
- * Guess host OS based on uname for non-Debian systems. Closes: #637363
- * Clarify "target" in usage message.
- * Fix support for running debootstrap on a FreeBSD host to create a kFreeBSD
- chroot or jail. Thanks, Arno Toell.
- * Search PATH for programs, rather than checking hardcoded locations.
- * Support using md5 and shaN programs, as found on FreeBSD, in addition
- to md5sum and shaNsum.
- * When FreeBSD (not kfreebsd) is the host, don't chroot to mount special
- filesystems.
- * When debootstrapping on FreeBSD, warn if necessary modules are not
- loaded. Thanks, Arno Toell.
- * Workaround for umount bug #634107, which broke pbuilder and "debootstrap ."
- Closes: #631087
-
- -- Joey Hess Sun, 21 Aug 2011 18:39:26 -0400
-
-debootstrap (1.0.35) unstable; urgency=low
-
- [ Robert Millan ]
- * Don't build devices.tar.gz if building on GNU/kFreeBSD (closes:
- #637297).
- * Don't use --arch when we specifically care about the host architecture
- (closes: #637298).
-
- -- Colin Watson Wed, 10 Aug 2011 13:04:41 +0100
-
-debootstrap (1.0.34) unstable; urgency=low
-
- * Add more information regarding the version and architecture in case
- a download fails. Closes: #633625.
- * add /usr/sbin and /sbin to PATH for fakechroot variant. Closes:
- #588773
- * Move setup_devices to second stage of bootstrap. Closes: #498731,
- #531316
-
- -- Otavio Salvador Thu, 28 Jul 2011 19:13:10 +0200
-
-debootstrap (1.0.33) unstable; urgency=low
-
- [ Joey Hess ]
- * Mention minbase variant in --help. Closes: #632418
- * Use md5sums for sarge, which did not consistently have sha1sums
- everywhere. Closes: #633158
-
- [ Colin Watson ]
- * Improve text of error message when decompression command is not
- available.
-
- -- Otavio Salvador Sun, 24 Jul 2011 10:33:56 +0200
-
-debootstrap (1.0.32) unstable; urgency=low
-
- * Use md5sums for woody and potato, which only had those checksums
- in the Packages files. Closes: #627365
-
- -- Joey Hess Mon, 30 May 2011 13:57:46 -0400
-
-debootstrap (1.0.31) unstable; urgency=low
-
- [ Mark Hymers ]
- * Don't use the Build-Essential: yes field in Debian, use the
- build-essential package. Closes: #619700.
-
- [ Colin Watson ]
- * If ubuntu-keyring is installed, check Release signatures against it when
- bootstrapping Ubuntu gutsy and later.
- * Recommend ubuntu-keyring rather than debian-archive-keyring on
- Ubuntu-derived systems.
-
- -- Colin Watson Fri, 20 May 2011 09:45:48 +0100
-
-debootstrap (1.0.30) unstable; urgency=low
-
- [ Joey Hess ]
- * Recommend debian-archive-keyring, and if it is installed,
- default to checking gpg signatures of the Release file against it
- when bootstrapping sid, squeeze, wheezy, etch, and lenny.
- Closes: #560038
- * Add --no-check-gpg option that can be used to disable release file
- verification. Closes: #624229
- * Needs base-installer 1.117.
- * Add a warning message if the keyring file is not available, and
- --no-check-gpg is not specified.
- * Clear all global variables used for options, so that unclean
- environment doesn't break debootstrap. Closes: #621657
- * Removed the --boot-floppies switch and mode. Assuming this has
- not been used in 10 years.
-
- [ Colin Watson ]
- * Resolve dependencies from all requested components (LP: #740167).
-
- -- Joey Hess Tue, 26 Apr 2011 17:10:00 -0400
-
-debootstrap (1.0.29) unstable; urgency=low
-
- [ Joey Hess ]
- * Support bootstrapping oldstable. (Lenny could already be bootstrapped
- using that suite name.)
-
- [ Colin Watson ]
- * Add (Ubuntu) oneiric as a symlink to gutsy.
-
- -- Colin Watson Tue, 22 Mar 2011 10:58:49 +0000
-
-debootstrap (1.0.28) unstable; urgency=low
-
- [ Miguel Figueiredo ]
- * Fix for ar usage, thanks to Guillem Jover. Closes: #598729
-
- [ Joey Hess ]
- * Remove 5 second sleeps when debootstrap finds additional required
- dependencies. d-i just got that much faster.
- * Use SHA checksums. Defaulting to SHA256, and configurable by
- SHA_SIZE environment variable. Closes: #614315
- * If a sha256sum program is not available, fall back to sha1sum.
- This is to support debootstrap use on embedded systems, which are more
- likely to have the latter.
- * Avoid new(?) warning from dpkg about missing Maintainer field when
- feigning install of a package.
-
- -- Joey Hess Mon, 21 Feb 2011 20:48:46 -0400
-
-debootstrap (1.0.27) unstable; urgency=low
-
- [ Miguel Figueiredo ]
- * Fix bug and typo on --private-key
- Patch by Jonathan Klee.
-
- [ Jeremie Koenig ]
- * Hurd support:
- - Use the newer setup-translators script and firmlink
- $TARGET/{dev,servers} in setup_devices_hurd;
- - Don't attempt to build devices.tar.gz, which is not needed.
-
- -- Otavio Salvador Mon, 07 Feb 2011 19:40:24 -0200
-
-debootstrap (1.0.26) unstable; urgency=low
-
- [ Christian Perrier ]
- * Consistently use tab indenting in scripts/gutsy and scripts/sid
- Patch by Karl Goetz. Closes: #601821
- * Fix a typo in the debootstrap script
- Patch by Karl Goetz. Closes: #601822
-
- [ Joey Hess ]
- * sid: Remove old workaround for etch era coreutils/textutils md5sum
- diversion problem. (#329394)
-
- -- Otavio Salvador Fri, 12 Nov 2010 10:07:41 -0200
-
-debootstrap (1.0.25) unstable; urgency=low
-
- * Remove debug statement that slipped in.
- * Add test to guard against devices.tar.gz being empty.
- * /dev/MAKEDEV cannot be relied on (udev likes to make it a symlink to
- true). Always use /sbin/MAKEDEV. Closes: #598080
-
- -- Joey Hess Sun, 26 Sep 2010 13:18:31 -0400
-
-debootstrap (1.0.24) unstable; urgency=low
-
- [ Miguel Figueiredo ]
- * Apply patches from by Jonathan Klee and Guillaume Chauvel
- to add support to https (closes: #521196).
-
- [ Colin Watson ]
- * Add (Ubuntu) natty as a symlink to gutsy.
-
- [ Joey Hess ]
- * Add support for wheezy. Closes: #597461
-
- -- Joey Hess Sun, 19 Sep 2010 21:40:00 -0400
-
-debootstrap (1.0.23) unstable; urgency=low
-
- * Add (Ubuntu) maverick as a symlink to gutsy.
- * Add ${misc:Depends}.
-
- -- Colin Watson Wed, 19 May 2010 13:35:34 +0100
-
-debootstrap (1.0.22) unstable; urgency=low
-
- * Redo release since it ended up with testing directory in tar.gz.
-
- -- Otavio Salvador Mon, 22 Feb 2010 16:52:49 -0300
-
-debootstrap (1.0.21) unstable; urgency=low
-
- [ Otavio Salvador ]
- * Apply patch from Clint Adams to add support for
- gz/bz2/xz data.tar (closes: #458663).
-
- [ Guillem Jover ]
- * Refactor deb extractors into two new functions.
- * Use dpkg-deb if available instead of ar (closes: #557296).
- * Add an --extractor option to override the automatic extractor selection.
-
- [ Otavio Salvador ]
- * Document new --extractor option in manpage.
- * Apply patch from Vagrant Cascadian not
- fail if resolv.conf is a broken symlink (closes: #390647).
-
- [ Frans Pop ]
- * Use tab indentation in scripts/debian/sid to reduce its size (relevant
- for Debian Installer).
- * Add apt to base packages for the buildd variant as it is no longer marked
- Build-Essential.
-
- [ Otavio Salvador ]
- * Apply patch from Andres Salomon to honor
- --components when using mirror_style 'main' (closes: #561283).
- * Apply patch from Andres Salomon to fix
- iteration through components in download_main (closes: #561298).
-
- [ Joey Hess ]
- * Allow the suite to be stable, testing, or unstable when debootstrapping
- Debian. Closes: #288109
- * Make scripts directory in source tree look like installed directory,
- and add a section to README explaining an easy way to run
- debootstrap w/o installing it. Closes: #345762
- * Convert rules file to use dh with overrides.
- * Remove binary-basedebs target from debian/rules.
- This target has been broken in multiple ways since 2007. While I
- accidentially partially fixed it with the above changes, this is evidence
- it's dead code that can be safely removed.
-
- -- Otavio Salvador Sun, 21 Feb 2010 23:11:06 -0300
-
-debootstrap (1.0.20) unstable; urgency=low
-
- * For recent Ubuntu versions, move $TARGET/sbin/initctl aside in the same
- way we do start-stop-daemon, so that attempts to control Upstart jobs
- won't inadvertently affect jobs in the host system.
- * Rename EXAMPLE section in debootstrap(8) to EXAMPLES (closes: #548458).
-
- -- Colin Watson Sun, 04 Oct 2009 21:23:07 +0100
-
-debootstrap (1.0.19) unstable; urgency=low
-
- * Ignore failures from dpkg --predep-package. It exits 1 if there are no
- suitable packages available, which isn't an error for us, but in_target
- complains anyway, so just use in_target_nofail; the termination
- condition is handled immediately afterwards anyway.
-
- -- Colin Watson Thu, 24 Sep 2009 19:57:05 +0100
-
-debootstrap (1.0.18) unstable; urgency=low
-
- * Only use dpkg from the chroot, as there is no guarantee dpkg is
- available outside of the chroot (d-i installation for example).
-
- -- Aurelien Jarno Wed, 23 Sep 2009 11:37:01 +0200
-
-debootstrap (1.0.17) unstable; urgency=low
-
- * Remove boneheaded use of sudo left over from testing (closes: #547949).
-
- -- Colin Watson Tue, 22 Sep 2009 20:10:19 +0100
-
-debootstrap (1.0.16) unstable; urgency=low
-
- [ Colin Watson ]
- * Cope with pre-dependencies of included packages that aren't in Priority:
- required (closes: #487908).
- * Upgrade to debhelper v7. (Override rules get pretty hairy for this
- package, so I haven't switched to dh(1).)
- * Use ports.ubuntu.com as default mirror on sparc for Ubuntu hardy and
- beyond (LP: #431145).
- * Add (Ubuntu) lucid as a symlink to gutsy.
-
- [ Frans Pop ]
- * Makefile: remove unused ARCH variable.
-
- -- Colin Watson Mon, 21 Sep 2009 16:28:40 +0100
-
-debootstrap (1.0.15) unstable; urgency=low
-
- * On Linux, clear out /etc/mtab on exit if it's not a symlink. Should fix
- problems Wouter Verhelst and Martin Michlmayr are seeing with
- initramfs-tools MODULES=dep, although it probably isn't a perfect
- solution.
-
- -- Colin Watson Thu, 23 Jul 2009 16:45:00 +0100
-
-debootstrap (1.0.14) unstable; urgency=low
-
- * Apply patch from Felix Zielcke to use "dpkg
- --print-architecture" to avoid deprecation warning. Closes: #531680.
- * Reference squeeze instead of sarge in manpage. Based on a patch from
- Geoff Simmons . Closes: #534575.
- * Apply patch from Riku Voipio to add support for
- scratchbox variant. Closes: #536820.
-
- -- Otavio Salvador Wed, 22 Jul 2009 12:34:54 -0300
-
-debootstrap (1.0.13) unstable; urgency=low
-
- [ Otavio Salvador ]
- * Apply patch from Luca Favatella to improve
- coding style.
-
- [ Colin Watson ]
- * Add (Ubuntu) karmic as a symlink to gutsy.
-
- -- Colin Watson Fri, 24 Apr 2009 20:08:24 +0100
-
-debootstrap (1.0.12) unstable; urgency=low
-
- [ Otavio Salvador ]
- * Improve code to choose between libc packages. Thanks to Luca Favatella
- for first version of the patch.
-
- [ Colin Watson ]
- * Remove partial support for emitting translated progress messages with
- gettext. Don't panic; d-i still has all the support necessary for this.
- debootstrap's own support for doing this outside d-i with gettext's
- shell bindings has been completely broken ever since it was added in
- 2003, though, and nobody has complained. Fixing it would require a big
- pile of infrastructure and some non-trivial patches, plus arranging to
- copy all the translations over from base-installer, and it just doesn't
- seem worth it, so lose the cruft (LP: #188690).
- * Export PATH, just to make sure. It isn't necessarily exported by shells
- running from init=/bin/sh or similar, and the upstream bash maintainer
- is unwilling to export it by default; it's easy enough to do so here
- (LP: #320188).
-
- -- Colin Watson Tue, 17 Mar 2009 16:38:46 +0000
-
-debootstrap (1.0.11) unstable; urgency=low
-
- * Add (Ubuntu) jaunty as a symlink to gutsy.
- * Clarify that --second-stage is needed to complete the bootstrapping
- process after --foreign.
- * Fix --make-tarball= option (closes: #484869).
- * Fix old Debian scripts and all Ubuntu scripts to cope with Anthony's
- change in 1.0.8 to make --second-stage not bother recalculating required
- and base.
- * Rename 'repeat' to 'repeatn', since 'repeat' is a reserved word in zsh;
- although strictly speaking this seems like an incompatibility in zsh
- when linked to /bin/sh (closes: #340058).
- * Fix --unpack-tarball= option (thanks, Torsten Landschoff; closes:
- #500759).
- * Fix handling of relative DEBOOTSTRAP_DIR (thanks, Mikhail Gusarov;
- closes: #503460).
- * Cope with ancient versions of chroot(8) that don't call chdir() (thanks,
- Patrik Arvhult; closes: #350635).
- * Recommend gnupg for --keyring option (thanks, Robert Millan; closes:
- #467571).
- * Note that you can't --include packages with non-required Pre-Depends
- (see #487908).
- * Mention /sys in EXAMPLE section of manual page, and use "defaults"
- rather than "none" as the mount options for /proc (thanks, Raúl Sánchez
- Siles; closes: #410787).
- * Add /dev/console to devices.tar.gz (after all, MAKEDEV's 'consoleonly'
- was added for boot-floppies in the first place; see
- https://lists.ubuntu.com/archives/ubuntu-devel/2009-January/027230.html).
- * Add support for squeeze (closes: #513488).
-
- -- Colin Watson Wed, 18 Feb 2009 23:46:12 +0000
-
-debootstrap (1.0.10) unstable; urgency=low
-
- [ Joey Hess ]
- * Avoid "broken pipe" errors in bootstrap.log from the the smallyes function.
- The errors themselves are inherent to how the function is used, so just
- suppress them. Closes: #480560.
-
- [ Frans Pop ]
- * Do not cache Release and Release.gpg files. Closes: #488424.
- * Abort if a Packages file failed to verify.
- * Update standards version to 3.8.0; no other changes needed.
-
- -- Frans Pop Wed, 02 Jul 2008 17:44:25 +0200
-
-debootstrap (1.0.9) unstable; urgency=low
-
- [ Frans Pop ]
- * Error out on unrecognized options to avoid invalid options to be
- recognized as arguments.
-
- [ Colin Watson ]
- * Use 'chown 0:0' in all scripts rather than deprecated 'chown 0.0'
- (thanks, Evan Klitzke).
- * Add (Ubuntu) intrepid as a symlink to gutsy.
-
- -- Colin Watson Tue, 29 Apr 2008 19:36:19 +0100
-
-debootstrap (1.0.8) unstable; urgency=low
-
- [ Frans Pop ]
- * Change Priority for the udeb to extra in line with overrides file.
-
- [ Colin Watson ]
- * Partially revert r50134; there are people who depend on being able to
- use the "upstream" Makefile on non-Debian systems. Create necessary
- directories in the Makefile rather than relying on dh_installdirs to do
- it (LP: #172645).
- * Use ftp.us.debian.org rather than ftp.debian.org
- (http://lists.debian.org/debian-devel-announce/2007/12/msg00002.html).
-
- [ Anthony Towns ]
- * Add minbase variant for the sid script that only install apt (and
- its dependencies) instead of all of base. (Closes: Bug#351912,
- Bug#452654)
- * Make --second-stage not bother recalculating required and base as
- it's not needed.
- * Make --arch and other arguments accept both "--arch i386" and
- "--arch=i386" forms of specifying a parameter to avoid the
- inconsistency.
-
- [ Stephen R. Marenka ]
- * Allow installation of etch-m68k. (Closes: Bug#458965)
-
- [ Colin Watson ]
- * Add minbase variant for Ubuntu gutsy/hardy; see Anthony's change above.
- * Minor manual page formatting improvements.
-
- -- Colin Watson