git: efbcca36ecd1 - main - sysutils/ansible2: New port

Mateusz Piotrowski 0mp at FreeBSD.org
Wed May 12 18:45:42 UTC 2021


The branch main has been updated by 0mp:

URL: https://cgit.FreeBSD.org/ports/commit/?id=efbcca36ecd1a10560535b2700e541794cbfb404

commit efbcca36ecd1a10560535b2700e541794cbfb404
Author:     Mateusz Piotrowski <0mp at FreeBSD.org>
AuthorDate: 2021-05-12 18:44:57 +0000
Commit:     Mateusz Piotrowski <0mp at 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 at 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 at 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/


More information about the dev-commits-ports-all mailing list