【问题标题】:Ansible - Install package pinned to major versionsAnsible - 安装固定到主要版本的包
【发布时间】:2017-05-13 12:50:56
【问题描述】:

repo 中的实际包名是package-2.6.12-3.el7.x86_64

目标是使用 Ansible 安装一个包,以:

  • 确保安装了point release,比如package-2.6
  • 不安装主要版本,例如 package-3.0
  • 次要版本的更新,例如 package-2.6.13-4

repo 可以不定时更新包,但不知道什么时候更新。

我的想法是安装这样的包;

- name: Install package
  yum:
    name: package-2.6
    state: present

但是任务失败了,因为package-2.6 不在repo 中。而简单的package 有效,但它不是未来的证明。


更新:

似乎通配符* do 有效,例如package-2.6*

【问题讨论】:

  • 尝试使用完整版的包名:"name: package-2.6.12-3.el7.x86_64"
  • @YuriyZhigulskiy 写的很清楚,OP不想指定次要版本。
  • 您想要某种版本范围。我认为不存在。
  • 你提到通配符的工作,这解决了你的问题吗?如果是这样,请接受答案,否则更新更多信息,我们可以尝试深入了解它。
  • 我如何接受答案

标签: ansible packages


【解决方案1】:

简短的通用答案:

您应该可以只使用通配符*

就这样:

- name: Install package
  yum:
    name: package-2.6*
    state: latest 

长案例的具体答案:

我在 AWS 中为您的具体情况创建了一个测试服务器,发现通配符确实有效(运行 CentOS 7 的 EC2 实例,安装 `mongodb-org-server-3.4.0*)。

您确实需要首先确保您已正确配置 mongo 存储库,但您在 cmets 中说,如果您提供完整版本号,您就可以下载该软件包,这是不寻常的。无论如何,这是我制作并运行的最小剧本:

play.yml:

- hosts: all
  remote_user: centos
  tasks:
    - name: Add MongoDB repo for CentOS
      become: true
      copy:
        src: ./files/mongodb-org-3.4.repo
        dest: /etc/yum.repos.d/mongodb-org-3.4.repo
    - name: Install mongodb
      become: true
      yum:
        name: mongodb-org-server-3.4.0*
        state: latest # Works with 'present' too, but won't update versions

这个 playbook 为 repo 配置复制了一个本地文件,如下所示(路径相对于 play.yml 文件):

files/mongod-org-3.4.repo:

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

【讨论】:

  • 它只是给出相同的错误(找不到包)还是其他什么? apt 包通过通配符,但曾经有一个错误,它没有,所以可能在 yum 上发生了类似的事情。
  • 确实找不到包。
  • 嗯,好吧。当我回到家时,我会启动一个 CentOS 盒子,看看我是否可以让某些东西工作。我认为您要安装的实际软件包是mongodb-2.6.12-3.el7.x86_64 是否正确?您在节点上使用什么操作系统和版本?
  • 是的,所需的包是用于 mongo 的。但这只是一个简单的用例。使用 CentOS 7.1,ansible 2.1.2.0。谢谢 :)
  • 酷,谢谢。同时,您是否尝试安装该特定软件包版本作为测试以确保它在您的系统上可用?我并不是建议将其作为解决方案,但排除它绝对是件好事。
【解决方案2】:

不确定是否适用于您的 Yum 套餐。但是对于 Java Open JDK 安装,其中 java-1.7.0 和 java-1.8.0 包都可以从我配置的 yum 存储库安装。

这将确保 1.7.x 版本是最新版本,而无需安装 1.8.x。

- name: Install latest 1.7.x jdk
  yum:
    name: java-1.7.0-openjdk.x86_64
    state: latest

从上面安装的实际版本是:

$ rpm -q java-1.7.0-openjdk.x86_64
  java-1.7.0-openjdk-1.7.0.121-2.6.8.1.el6_8.x86_64

对于 MongoDB,2.x 版本和 3.x 版本的包名称相同。

但是对于 2.x 版本和 3.x 版本有一个 Yum repo 文件。 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

因此,为了确保您获得最新的 2.x 版本而无需迁移到 3.x,请将 2.x 存储库文件添加到您的目标主机,并在您的 ansible 任务中使用 disableenablerepo 参数进行安装/更新操作。

 - name: Ensure latest 2.x mongodb version is installed
   yum:
     name: mongodb-org
     disablerepo: "*"
     enablerepo: mongodb-org-2.6
     state: latest

注意:使用 disablerepo: "*" 作为 mongodb 包也存在于其他 repos 中,例如 epel。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2022-10-07
    • 2016-09-26
    相关资源
    最近更新 更多