Я пытаюсь заставить Ansible установить пакет rpm, чтобы перезаписать существующий.
Это работает:
- name: RPM force install nodesource and yum clean all
shell: rpm -i --nosignature --force "https://rpm.nodesource.com/{{ nodejs_rhel_rpm_dir }}/el/{{ ansible_distribution_major_version }}/{{ ansible_architecture }}/nodesource-release-el{{ ansible_distribution_major_version }}-1.noarch.rpm" && yum clean all
args:
executable: /bin/bash
tags:
- nodejs
Я бы ПРЕДПОЧТИТЕЛЬНО сделал это так, а не использовал shell
модуль:
- name: Install nodesource npm/node packages
yum:
name: "https://rpm.nodesource.com/{{ nodejs_rhel_rpm_dir }}/el/{{ ansible_distribution_major_version }}/{{ ansible_architecture }}/nodesource-release-el{{ ansible_distribution_major_version }}-1.noarch.rpm"
state: latest
update_cache: yes
tags:
- nodejs
Однако я не могу заставить перезаписать существующую установленную версию без прямого использования rpm. Какой лучший способ сделать это в Ansible без использования shell
что противоречит передовой практике с настройкой mgmt.
Мне придется удалить и переустановить пакет в два этапа?
РЕДАКТИРОВАТЬ:
Чтобы прояснить это, устанавливаемый .rpm ОТЛИЧАЕТСЯ от установленного в данный момент.
На данный момент установлено одно: https://rpm.nodesource.com/pub_8.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm
НОВЫЙ: https://rpm.nodesource.com/pub_10.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm
Причина, по которой это происходит, заключается в том, что поставщик апстрима не создал пакеты с разумной информацией о версии.
Это файлы RPM выпуска nodeource для NodeJS 8.x и 10.x соответственно, которые устанавливают соответствующий репозиторий yum.
Я загрузил каждого из них и просмотрел предоставленную ими информацию. Оба они имели одинаковое название, версию и выпуск:
Name : nodesource-release
Version : el7
Release : 1
Architecture: noarch
Для rpm или yum нет способа отличить эти пакеты друг от друга. Их метаданные делают их похожими.
Сначала я бы пожаловался на это производителю, так что, надеюсь, они перепакуют эти файлы, чтобы придать им отличительные характеристики. Было бы логично использовать соответствующую версию NodeJS. А пока я думаю, что вы застряли в своем обходном пути. Модули упаковки Ansible не предусматривают «переустановку» пакета.
Это противоречит принципу работы Ansible. Ansible распознает, что нужный пакет уже установлен, поэтому пропускает его. Для модуля yum нет опции форсировки.
Лучше всего удалить пакет и переустановить. Это можно сделать в рамках одного сценария.
Есть ли конкретная причина, по которой вы пытаетесь это заставить?