Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The status changed should be false if a package state equals to present #6

Open
strboul opened this issue Mar 2, 2022 · 1 comment

Comments

@strboul
Copy link

strboul commented Mar 2, 2022

yay module doesn't keep track of the packages installed, it re-installs them because of the default behavior of yay (see below for the explanation).

I ran this example playbook on Vagrant.

# test.yml
---
- name: Test
  hosts: all
  gather_facts: true
  tasks:
    - name: Install ntp
      pacman:
        name: extra/ntp
        state: present
      become: true

    - name: Install git
      yay:
        name: extra/git
        state: present

1st run:

ansible-playbook -v -i tests/vagrant/vagrant.inventory playbooks/test.yml

PLAY [Test] ***************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************
ok: [192.168.56.2]

TASK [Install ntp] ********************************************************************************************************************************************
changed: [192.168.56.2] => {"changed": true, "msg": "installed 1 package(s). ", "stderr": "", "stderr_lines": [], "stdout": "resolving dependencies.."]}

TASK [Install git] ********************************************************************************************************************************************
changed: [192.168.56.2] => {"changed": true, "msg": "installed 1 package(s). ", "stderr": "", "stderr_lines": [], "stdout": "resolving dependencies.."]}

PLAY RECAP ****************************************************************************************************************************************************
192.168.56.2               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Result: 2 changed
Expected: 2 changed

2nd run:

ansible-playbook -v -i tests/vagrant/vagrant.inventory playbooks/test.yml

PLAY [Test] ***************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************
ok: [192.168.56.2]

TASK [Install ntp] ********************************************************************************************************************************************
ok: [192.168.56.2] => {"changed": false, "msg": "package(s) already installed. "}

TASK [Install git] ********************************************************************************************************************************************
changed: [192.168.56.2] => {"changed": true, "msg": "Installed 1 package(s). "}

PLAY RECAP ****************************************************************************************************************************************************
192.168.56.2               : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Result: 1 changed
Expected: 0 changed


I think the solution is to add the --needed tag to the default install command.

--needed Do not reinstall the targets that are already up-to-date.

https://archlinux.org/pacman/pacman.8.html#_upgrade_options_apply_to_em_s_em_and_em_u_em_a_id_uo_a

$ yay -S extra/git
warning: git-2.35.1-1 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...

Packages (1) git-2.35.1-1

Total Installed Size:  33,31 MiB
Net Upgrade Size:       0,00 MiB

:: Proceed with installation? [Y/n] ^C
Interrupt signal received


$ yay -S extra/git --needed
warning: git-2.35.1-1 is up to date -- skipping
 there is nothing to do


$ echo $?
0
@mnussbaum
Copy link
Owner

The code attempts to check if a package is already installed, and if it's installed and at the most up to date version then it refrains from re-installing the package. This logic is here. I wonder if there's a bug checking the version info? Does anything in the code look incorrect to you?

FWIW in my usage I haven't seen ansible-yay attempt to reinstall up-to-date packages, so I'm curious if there's something about the installation mechanism or package data that's triggering the problem in your case

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants