首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SLES上的Ansible : zypper插件无法安装PostgreSQL 14

SLES上的Ansible : zypper插件无法安装PostgreSQL 14
EN

Stack Overflow用户
提问于 2022-08-10 09:35:00
回答 1查看 104关注 0票数 1

在进行了很好的训练之后,我正在试着把手放在Ansible身上。目前,我的任务是创建一个设置PostgreSQL集群的剧本(使用Patroni和etcd)。

然而,虽然安装PostgreSQL应该是一个相当容易的任务,但是使用zypper插件进行安装会引发一个错误。首先,应该安装PostgreSQL的剧本部分:

代码语言:javascript
复制
- name: Installation PostgreSQL 14 Latest ohne Recommendations
  become: true
  zypper:
    disable_recommends: true
    name:
      postgresql14-server
      postgresql14-contrib
      postgresql14-devel
    update_cache: true
  when: ansible_host in pgservers

给出的错误消息如下:

代码语言:javascript
复制
fatal: [goeccdb22l]: FAILED! => {"changed": false, "cmd": ["/usr/bin/zypper", "--quiet", "--non-interactive", "--xmlout", "install", "--type", "package", "--auto-agree-with-licenses", "--no-recommends", "--", "+postgresql14-server postgresql14-contrib postgresql14-devel"], "msg": "No provider of '+postgresql14-server postgresql14-contrib postgresql14-devel' found.", "rc": 104, "stderr": "", "stderr_lines": [], "stdout": "<?xml version='1.0'?>\n<stream>\n<message type=\"error\">No provider of &apos;+postgresql14-server postgresql14-contrib postgresql14-devel&apos; found.</message>\n</stream>\n", "stdout_lines": ["<?xml version='1.0'?>", "<stream>", "<message type=\"error\">No provider of &apos;+postgresql14-server postgresql14-contrib postgresql14-devel&apos; found.</message>", "</stream>"]}

让我们提取错误消息:

代码语言:javascript
复制
"msg": "No provider of '+postgresql14-server postgresql14-contrib postgresql14-devel' found."

我试图在目标服务器上使用shell复制这个问题。但是,运行命令似乎能够安装包:

代码语言:javascript
复制
ansible@goeccdb22l:~> sudo /usr/bin/zypper install --type package --auto-agree-with-licenses --no-recommends -- +postgresql14-server postgresql14-contrib postgresql14-devel
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 12 NEW packages are going to be installed:
  libecpg6 libopenssl-1_1-devel libpq5 postgresql postgresql14 postgresql14-contrib postgresql14-devel postgresql14-server postgresql-contrib postgresql-devel postgresql-server zlib-devel

The following package needs additional customer contract to get support:
  postgresql14

12 new packages to install.
Overall download size: 8.0 MiB. Already cached: 0 B. After the operation, additional 35.4 MiB will be used.
Continue? [y/n/v/...? shows all options] (y):

我只从命令中删除了--quiet--non-interactive选项,但保留了所有其他给定选项。

我的最佳想法是,用户/权限提升工作可能与我以Ansible用户身份登录到目标并在命令之前使用sudo不同。

编辑1:我已经想出了一个问题可能是什么。正如我前面提到的,在测试命令时,我删除了两个选项:--quiet--non-interactive。使用这两个选项测试命令会给出如下消息:

代码语言:javascript
复制
The flag --quiet is not known.

但是,使用man zypper,我可以清楚地看到,--quiet是一个有文档记录的选项:

代码语言:javascript
复制
   -q, --quiet
       Suppress normal output. Brief (esp. result notification) messages and error messages will still be printed, though. If used together with conflicting --verbose option, the --verbose option takes preference.

现在,我的想法是,Ansible调用它在返回XML中文档的命令,但是由于不知何故不理解--quiet,它将其解释为没有提供所请求的包列表。因此,这将留下两个问题:

  • 为什么--quiet没有被理解,却被记录在案?这是SLES和OpenSuse?
  • How之间的问题吗?

由于Ansible zypper模块没有禁止--quiet选项的选项,所以我看不到有任何可能使用参数来处理它。最后一种选择是将zypper任务拆分为更小的shell任务,如果可能的话,我想避免这种情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-15 07:33:02

因此,在一位知识渊博的系统管理员的帮助下,我能够诊断出问题。

上面记录的软件包清单实际上不是一个清单。由于我错过了包前面的破折号,Ansible接受了带有换行符和所有内容的包,并尝试安装它。

解决方案是通过在包前面加上破折号/减号,将包更改为包列表。

--quiet的问题是它是一个位置参数,我在测试它时使用了错误的位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73303961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档