1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

Add executable option to cargo (#7352)

* Add `executable` option to cargo

Add `executable` option to cargo to make the module easier to use with
cargo installed by rustup.

* Add changelog fragment

* Add license to integration test

* Do not test on CentOS 6

CentOS 6 cannot even validate the certificate in https://sh.rustup.rs.

* Fix condition to skip tests on CentOS 6

* Add version_added to path

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/cargo.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* shell → command

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
radek-sprta 2023-10-06 07:41:02 +02:00 committed by GitHub
parent 6c9713b36c
commit 0ca07b0b05
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 51 additions and 6 deletions

View file

@ -0,0 +1,2 @@
minor_changes:
- "cargo - add option ``executable``, which allows user to specify path to the cargo binary (https://github.com/ansible-collections/community.general/pull/7352)."

View file

@ -25,6 +25,12 @@ attributes:
diff_mode: diff_mode:
support: none support: none
options: options:
executable:
description:
- Path to the C(cargo) installed in the system.
- If not specified, the module will look C(cargo) in E(PATH).
type: path
version_added: 7.5.0
name: name:
description: description:
- The name of a Rust package to install. - The name of a Rust package to install.
@ -60,7 +66,7 @@ options:
default: present default: present
choices: [ "present", "absent", "latest" ] choices: [ "present", "absent", "latest" ]
requirements: requirements:
- cargo installed in bin path (recommended /usr/local/bin) - cargo installed
""" """
EXAMPLES = r""" EXAMPLES = r"""
@ -103,14 +109,13 @@ from ansible.module_utils.basic import AnsibleModule
class Cargo(object): class Cargo(object):
def __init__(self, module, **kwargs): def __init__(self, module, **kwargs):
self.module = module self.module = module
self.executable = [kwargs["executable"] or module.get_bin_path("cargo", True)]
self.name = kwargs["name"] self.name = kwargs["name"]
self.path = kwargs["path"] self.path = kwargs["path"]
self.state = kwargs["state"] self.state = kwargs["state"]
self.version = kwargs["version"] self.version = kwargs["version"]
self.locked = kwargs["locked"] self.locked = kwargs["locked"]
self.executable = [module.get_bin_path("cargo", True)]
@property @property
def path(self): def path(self):
return self._path return self._path
@ -176,6 +181,7 @@ class Cargo(object):
def main(): def main():
arg_spec = dict( arg_spec = dict(
executable=dict(default=None, type="path"),
name=dict(required=True, type="list", elements="str"), name=dict(required=True, type="list", elements="str"),
path=dict(default=None, type="path"), path=dict(default=None, type="path"),
state=dict(default="present", choices=["present", "absent", "latest"]), state=dict(default="present", choices=["present", "absent", "latest"]),
@ -185,10 +191,8 @@ def main():
module = AnsibleModule(argument_spec=arg_spec, supports_check_mode=True) module = AnsibleModule(argument_spec=arg_spec, supports_check_mode=True)
name = module.params["name"] name = module.params["name"]
path = module.params["path"]
state = module.params["state"] state = module.params["state"]
version = module.params["version"] version = module.params["version"]
locked = module.params["locked"]
if not name: if not name:
module.fail_json(msg="Package name must be specified") module.fail_json(msg="Package name must be specified")
@ -198,7 +202,7 @@ def main():
LANG="C", LC_ALL="C", LC_MESSAGES="C", LC_CTYPE="C" LANG="C", LC_ALL="C", LC_MESSAGES="C", LC_CTYPE="C"
) )
cargo = Cargo(module, name=name, path=path, state=state, version=version, locked=locked) cargo = Cargo(module, **module.params)
changed, out, err = False, None, None changed, out, err = False, None, None
installed_packages = cargo.get_installed() installed_packages = cargo.get_installed()
if state == "present": if state == "present":

View file

@ -18,3 +18,5 @@
- import_tasks: test_version.yml - import_tasks: test_version.yml
environment: "{{ cargo_environment }}" environment: "{{ cargo_environment }}"
when: has_cargo | default(false) when: has_cargo | default(false)
- import_tasks: test_rustup_cargo.yml
when: rustup_cargo_bin | default(false)

View file

@ -26,3 +26,17 @@
has_cargo: true has_cargo: true
when: when:
- ansible_system == 'FreeBSD' and ansible_distribution_version is version('13.0', '>') - ansible_system == 'FreeBSD' and ansible_distribution_version is version('13.0', '>')
- block:
- name: Download rustup
get_url:
url: https://sh.rustup.rs
dest: /tmp/sh.rustup.rs
mode: "0750"
force: true
- name: Install rustup cargo
command: /tmp/sh.rustup.rs -y
- set_fact:
rustup_cargo_bin: "{{ lookup('env', 'HOME') }}/.cargo/bin/cargo"
when:
- ansible_distribution != 'CentOS' or ansible_distribution_version is version('7.0', '>=')

View file

@ -0,0 +1,23 @@
---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
#
- name: Install application helloworld
community.general.cargo:
executable: "{{ rustup_cargo_bin }}"
name: helloworld
register: rustup_install_absent_helloworld
- name: Uninstall application helloworld
community.general.cargo:
executable: "{{ rustup_cargo_bin }}"
state: absent
name: helloworld
register: rustup_uninstall_present_helloworld
- name: Check assertions helloworld
assert:
that:
- rustup_install_absent_helloworld is changed
- rustup_uninstall_present_helloworld is changed