Date: Wed, 12 May 2021 18:45:42 GMT From: Mateusz Piotrowski <0mp@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Subject: git: efbcca36ecd1 - main - sysutils/ansible2: New port Message-ID: <202105121845.14CIjgne064642@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by 0mp: URL: https://cgit.FreeBSD.org/ports/commit/?id=efbcca36ecd1a10560535b2700e541794cbfb404 commit efbcca36ecd1a10560535b2700e541794cbfb404 Author: Mateusz Piotrowski <0mp@FreeBSD.org> AuthorDate: 2021-05-12 18:44:57 +0000 Commit: Mateusz Piotrowski <0mp@FreeBSD.org> CommitDate: 2021-05-12 18:45:51 +0000 sysutils/ansible2: New port This port is meant to track the legacy 2.X branch of Ansible as sysutils/ansible is about to switch to 3.X. --- sysutils/Makefile | 1 + sysutils/ansible/Makefile | 2 +- sysutils/ansible2/Makefile | 96 ++++++++++++++++++++++++++++++++ sysutils/ansible2/distinfo | 3 + sysutils/ansible2/files/extra-patch-27 | 84 ++++++++++++++++++++++++++++ sysutils/ansible2/files/extra-patch-sesu | 59 ++++++++++++++++++++ sysutils/ansible2/files/pkg-message.in | 30 ++++++++++ sysutils/ansible2/pkg-descr | 4 ++ 8 files changed, 278 insertions(+), 1 deletion(-) diff --git a/sysutils/Makefile b/sysutils/Makefile index d586c47450fb..de2f2cd5f37e 100644 --- a/sysutils/Makefile +++ b/sysutils/Makefile @@ -45,6 +45,7 @@ SUBDIR += ansible-kld SUBDIR += ansible-sshjail SUBDIR += ansible-sysrc + SUBDIR += ansible2 SUBDIR += ansible27 SUBDIR += ansible28 SUBDIR += anvil diff --git a/sysutils/ansible/Makefile b/sysutils/ansible/Makefile index 43befaa18907..2c7924f66b52 100644 --- a/sysutils/ansible/Makefile +++ b/sysutils/ansible/Makefile @@ -59,7 +59,7 @@ PLIST_FILES?= man/man1/ansible-config.1.gz \ man/man1/ansible.1.gz PORTEXAMPLES= ansible.cfg hosts -_ANSIBLE_VERSIONS= 1 23 24 25 26 27 28 +_ANSIBLE_VERSIONS= 1 2 23 24 25 26 27 28 _ANSIBLE_PACKAGES= ${PYTHON_PKGNAMEPREFIX}ansible-* .for version in ${_ANSIBLE_VERSIONS} _ANSIBLE_PACKAGES+= ${PYTHON_PKGNAMEPREFIX}ansible${version}-* diff --git a/sysutils/ansible2/Makefile b/sysutils/ansible2/Makefile new file mode 100644 index 000000000000..6ad2fe6e3ccc --- /dev/null +++ b/sysutils/ansible2/Makefile @@ -0,0 +1,96 @@ +PORTNAME= ansible +PORTVERSION?= 2.9.21 +PORTREVISION?= 0 +CATEGORIES= sysutils python +MASTER_SITES= http://releases.ansible.com/ansible/ +PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} +PKGNAMESUFFIX= 2 + +MAINTAINER= 0mp@FreeBSD.org +COMMENT= Radically simple IT automation + +LICENSE= GPLv3+ +LICENSE_FILE= ${WRKSRC}/COPYING + +RUN_DEPENDS?= ${PYTHON_PKGNAMEPREFIX}cryptography>0:security/py-cryptography@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}Jinja2>0:devel/py-Jinja2@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}jmespath>0:devel/py-jmespath@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}netaddr>0:net/py-netaddr@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}paramiko>0:security/py-paramiko@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}yaml>0:devel/py-yaml@${PY_FLAVOR} +TEST_DEPENDS?= ${PYTHON_PKGNAMEPREFIX}boto3>0:www/py-boto3@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}mock>0:devel/py-mock@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}nose>0:devel/py-nose@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}packaging>=0:devel/py-packaging@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}passlib>0:security/py-passlib@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pycrypto>=0:security/py-pycrypto@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pytest-mock>0:devel/py-pytest-mock@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pytest-xdist>0:devel/py-pytest-xdist@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pytest>0:devel/py-pytest@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}requests>0:www/py-requests@${PY_FLAVOR} + +USES?= cpe gmake python:3.6+ shebangfix +CPE_VENDOR= ansibleworks +USE_PYTHON= autoplist concurrent distutils + +SHEBANG_REGEX?= [.]/test/.*[.]py + +TEST_ARGS= VERSION=${PORTVERSION} \ + PYTHON=${PYTHON_CMD} \ + DATE= +TEST_ENV= PYTHON_VERSION=${PYTHON_VER} +TEST_TARGET= tests + +CONFLICTS_INSTALL= ${_ANSIBLE_PACKAGES:N${PKGBASE}-*} + +EXTRA_PATCHES?= +NO_ARCH= yes +SUB_FILES= pkg-message +SUB_LIST= MAJMINVER=${PORTVERSION:R} \ + PYTHON_PKGNAMEPREFIX=${PYTHON_PKGNAMEPREFIX} \ + PKGBASE=${PKGBASE} + +PLIST_FILES?= man/man1/ansible-config.1.gz \ + man/man1/ansible-console.1.gz \ + man/man1/ansible-doc.1.gz \ + man/man1/ansible-galaxy.1.gz \ + man/man1/ansible-inventory.1.gz \ + man/man1/ansible-playbook.1.gz \ + man/man1/ansible-pull.1.gz \ + man/man1/ansible-vault.1.gz \ + man/man1/ansible.1.gz +PORTEXAMPLES= ansible.cfg hosts + +_ANSIBLE_VERSIONS= 1 2 23 24 25 26 27 28 +_ANSIBLE_PACKAGES= ${PYTHON_PKGNAMEPREFIX}ansible-* +.for version in ${_ANSIBLE_VERSIONS} +_ANSIBLE_PACKAGES+= ${PYTHON_PKGNAMEPREFIX}ansible${version}-* +.endfor + +OPTIONS_DEFINE= DOCS EXAMPLES + +post-patch: + ${FIND} ${WRKSRC} -type f -print0 | ${XARGS} -0 ${REINPLACE_CMD} \ + -e 's|/etc/ansible|${ETCDIR:S/${PY_FLAVOR}-//}|g' \ + -e 's|/usr/share/ansible|${DATADIR}|g' + ${FIND} ${WRKSRC} -type f -name "*.bak" -delete + + ${REINPLACE_CMD} 's|"/etc"|"${PREFIX}/etc/"|g' ${WRKSRC}/test/units/playbook/test_helpers.py + +post-install: + @${MKDIR} ${STAGEDIR}${MAN1PREFIX}/man/man1 + ${INSTALL_MAN} ${WRKSRC}/docs/man/man1/*.1 \ + ${STAGEDIR}${MAN1PREFIX}/man/man1 + +post-install-EXAMPLES-on: + @${MKDIR} ${STAGEDIR}${EXAMPLESDIR} + ${INSTALL_DATA} ${WRKSRC}/examples/ansible.cfg ${STAGEDIR}${EXAMPLESDIR} + ${INSTALL_DATA} ${WRKSRC}/examples/hosts ${STAGEDIR}${EXAMPLESDIR} + +post-stage: + ${FIND} ${STAGEDIR}${PREFIX}/bin -type l -name ansible-\* -lname ansible \ + -execdir ${RLN} ansible-${PYTHON_VER} {} \; +# python autoplist doesn't add this file in plist + ${RM} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/ansible_test/_data/injector/ansible-inventory + +.include <bsd.port.mk> diff --git a/sysutils/ansible2/distinfo b/sysutils/ansible2/distinfo new file mode 100644 index 000000000000..7a1b3c1a7f07 --- /dev/null +++ b/sysutils/ansible2/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1620220411 +SHA256 (ansible-2.9.21.tar.gz) = 4098246b67aa143e1e3af79d99346419e0545d5405d1cdf6e7fd389beab6de5a +SIZE (ansible-2.9.21.tar.gz) = 14277062 diff --git a/sysutils/ansible2/files/extra-patch-27 b/sysutils/ansible2/files/extra-patch-27 new file mode 100644 index 000000000000..bd077f558e36 --- /dev/null +++ b/sysutils/ansible2/files/extra-patch-27 @@ -0,0 +1,84 @@ +--- lib/ansible/module_utils/facts/virtual/freebsd.py.orig 2020-04-17 14:07:09 UTC ++++ lib/ansible/module_utils/facts/virtual/freebsd.py +@@ -19,9 +19,11 @@ __metaclass__ = type + import os + + from ansible.module_utils.facts.virtual.base import Virtual, VirtualCollector ++# Rudimentary detection of the virtual platforms, more through version is coming. Catches VMWare at minimum. ++from ansible.module_utils.facts.virtual.sysctl import VirtualSysctlDetectionMixin + + +-class FreeBSDVirtual(Virtual): ++class FreeBSDVirtual(Virtual, VirtualSysctlDetectionMixin): + """ + This is a FreeBSD-specific subclass of Virtual. It defines + - virtualization_type +@@ -34,6 +36,9 @@ class FreeBSDVirtual(Virtual): + # Set empty values as default + virtual_facts['virtualization_type'] = '' + virtual_facts['virtualization_role'] = '' ++ ++ virtual_product_facts = self.detect_virt_product('hw.hv_vendor') ++ virtual_facts.update(virtual_product_facts) + + if os.path.exists('/dev/xen/xenstore'): + virtual_facts['virtualization_type'] = 'xen' +--- lib/ansible/modules/packaging/os/pkgng.py.orig 2020-04-17 14:07:10 UTC ++++ lib/ansible/modules/packaging/os/pkgng.py +@@ -201,13 +201,17 @@ def install_packages(module, pkgng_path, packages, cac + + # This environment variable skips mid-install prompts, + # setting them to their default values. +- batch_var = 'env BATCH=yes' ++ # There is at least one case, when upgrading from 11.1 to 11.2 when pkg asks extra ++ # question about OS version mismatch in the repository. As this isn't handled, playbook ++ # hangs forever. Adding ASSUME_ALWAYS_YES to the environment addresses that, and ++ # possibly other potential issues. ++ batch_var = 'env BATCH=yes ASSUME_ALWAYS_YES=yes' + + if not module.check_mode and not cached: + if old_pkgng: +- rc, out, err = module.run_command("%s %s update" % (pkgsite, pkgng_path)) ++ rc, out, err = module.run_command("%s %s %s update" % (batch_var, pkgsite, pkgng_path)) + else: +- rc, out, err = module.run_command("%s %s update" % (pkgng_path, dir_arg)) ++ rc, out, err = module.run_command("%s %s %s update" % (batch_var, pkgng_path, dir_arg)) + if rc != 0: + module.fail_json(msg="Could not update catalogue") + +--- lib/ansible/modules/storage/zfs/zfs.py.orig 2020-04-17 14:07:11 UTC ++++ lib/ansible/modules/storage/zfs/zfs.py +@@ -102,7 +102,15 @@ class Zfs(object): + self.changed = False + self.zfs_cmd = module.get_bin_path('zfs', True) + self.zpool_cmd = module.get_bin_path('zpool', True) +- self.pool = name.split('/')[0] ++ # - name: Create a new file system by cloning a snapshot ++ # zfs: ++ # name: rpool/cloned_fs ++ # state: present ++ # origin: rpool@mysnapshot ++ # ++ # doesn't work properly, as code assumes that there is at least one level of hierarchy ++ # in zpool. But that's not always the case - pool may be dataset as well and have a snapshot. ++ self.pool = name.split('@')[0].split('/')[0] + self.is_solaris = os.uname()[0] == 'SunOS' + self.is_openzfs = self.check_openzfs() + self.enhanced_sharing = self.check_enhanced_sharing() +--- lib/ansible/playbook/play_context.py.orig 2020-04-17 14:07:10 UTC ++++ lib/ansible/playbook/play_context.py +@@ -528,8 +528,13 @@ class PlayContext(Base): + becomecmd = cmd + + elif self.become_method == 'doas': ++ # `doas` support in ansible is broken ATM, doesn't handle password ++ # authentication properly, cause assumes only challenge-respond auth. ++ # This patch should handle both ways properly. ++ def detect_doas_prompt(b_data): ++ return re.match(b"[Pp]assword:", b_data) + +- prompt = 'doas (%s@' % self.remote_user ++ prompt = detect_doas_prompt + exe = self.become_exe or 'doas' + + if not self.become_pass: diff --git a/sysutils/ansible2/files/extra-patch-sesu b/sysutils/ansible2/files/extra-patch-sesu new file mode 100644 index 000000000000..845594ee16bc --- /dev/null +++ b/sysutils/ansible2/files/extra-patch-sesu @@ -0,0 +1,59 @@ +--- lib/ansible/constants.py.orig 2018-06-28 23:30:34 UTC ++++ lib/ansible/constants.py +@@ -59,8 +59,9 @@ def set_constant(name, value, export=var + + + # CONSTANTS ### yes, actual ones +-BECOME_METHODS = ['sudo', 'su', 'pbrun', 'pfexec', 'doas', 'dzdo', 'ksu', 'runas', 'pmrun', 'enable', 'machinectl'] ++BECOME_METHODS = ['sesu', 'sudo', 'su', 'pbrun', 'pfexec', 'doas', 'dzdo', 'ksu', 'runas', 'pmrun', 'enable', 'machinectl'] + BECOME_ERROR_STRINGS = { ++ 'sesu': '', + 'sudo': 'Sorry, try again.', + 'su': 'Authentication failure', + 'pbrun': '', +@@ -73,6 +74,7 @@ BECOME_ERROR_STRINGS = { + 'machinectl': '', + } # FIXME: deal with i18n + BECOME_MISSING_STRINGS = { ++ 'sesu': '', + 'sudo': 'sorry, a password is required to run sudo', + 'su': '', + 'pbrun': '', +--- lib/ansible/modules/commands/command.py.orig 2018-06-28 23:30:34 UTC ++++ lib/ansible/modules/commands/command.py +@@ -142,7 +142,7 @@ def check_command(module, commandline): + 'mount': 'mount', 'rpm': 'yum, dnf or zypper', 'yum': 'yum', 'apt-get': 'apt', + 'tar': 'unarchive', 'unzip': 'unarchive', 'sed': 'replace, lineinfile or template', + 'dnf': 'dnf', 'zypper': 'zypper'} +- become = ['sudo', 'su', 'pbrun', 'pfexec', 'runas', 'pmrun', 'machinectl'] ++ become = ['sesu', 'sudo', 'su', 'pbrun', 'pfexec', 'runas', 'pmrun', 'machinectl'] + if isinstance(commandline, list): + command = commandline[0] + else: +--- lib/ansible/modules/web_infrastructure/ansible_tower/tower_credential.py.orig 2018-06-28 23:30:34 UTC ++++ lib/ansible/modules/web_infrastructure/ansible_tower/tower_credential.py +@@ -96,7 +96,7 @@ options: + become_method: + description: + - Become method to Use for privledge escalation. +- choices: ["None", "sudo", "su", "pbrun", "pfexec", "pmrun"] ++ choices: ["None", "sesu", "sudo", "su", "pbrun", "pfexec", "pmrun"] + become_username: + description: + - Become username. Use ASK for prompting. +--- lib/ansible/playbook/play_context.py.orig 2018-06-28 23:30:34 UTC ++++ lib/ansible/playbook/play_context.py +@@ -562,6 +562,13 @@ class PlayContext(Base): + exe = self.become_exe or 'machinectl' + becomecmd = '%s shell -q %s %s@ %s' % (exe, flags, self.become_user, command) + ++ elif self.become_method == 'sesu': ++ ++ exe = self.become_exe or 'sesu' ++ ++ prompt = 'Please enter your password:' ++ becomecmd = '%s %s %s -c %s' % (exe, flags, self.become_user, shlex_quote(command)) ++ + else: + raise AnsibleError("Privilege escalation method not found: %s" % self.become_method) + diff --git a/sysutils/ansible2/files/pkg-message.in b/sysutils/ansible2/files/pkg-message.in new file mode 100644 index 000000000000..e8606df34687 --- /dev/null +++ b/sysutils/ansible2/files/pkg-message.in @@ -0,0 +1,30 @@ +[ +{ +message: <<EOD +To use Ansible, you need at least a host database. +If you installed examples, you will have a sample +inventory and a sample configuration file: + + %%EXAMPLESDIR%%/hosts + %%EXAMPLESDIR%%/ansible.cfg + +EOD +type: install +} +{ +message: <<EOD +Ansible has been updated to %%MAJMINVER%%. Please follow the porting guide +to update the rulesets: + + https://docs.ansible.com/ansible/devel/porting_guides/porting_guide_%%MAJMINVER%%.html + +In order to stay with an older version instead, e.g., 2.7, use pkg-set(8). +For example: + + # pkg set -n %%PKGBASE%%:%%PYTHON_PKGNAMEPREFIX%%ansible27 + +EOD +maximum_version: "%%MAJMINVER%%" +type: upgrade +} +] diff --git a/sysutils/ansible2/pkg-descr b/sysutils/ansible2/pkg-descr new file mode 100644 index 000000000000..1ecc93bba0cf --- /dev/null +++ b/sysutils/ansible2/pkg-descr @@ -0,0 +1,4 @@ +Ansible is a radically simple configuration-management, deployment, +task-execution, and multinode orchestration framework. + +WWW: https://www.ansible.com/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202105121845.14CIjgne064642>