我正在尝试使用Ansible在远程主机上安装postgresql。我有两个解决方案,但这两个方案只工作一半,我希望他们工作/结果。
1.解决方案1(使用apt模块);
- name: Get Postgres latest repository release
become: yes
apt_repository:
repo: deb https://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main
state: present
filename: pgdg.list该选项首先看起来在执行时是成功的,但最终给出了一个错误(apt缓存更新失败):

2.解决方案2(使用壳模块)
- name: Get Postgres latest repository release
become: yes
shell: sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'这完成了完全相同的操作(如果我错了,请纠正我),然后给出一些其他异常(没有包匹配):

所以我不会再拿我的剧本了,有什么建议吗?
我要安装PostgreSQL13(或14)的游戏:
- name: Install Postgres dependencies (if not installed)
become: yes
apt:
name:
- postgresql-{{ postgres_version }}
- postgresql-doc-{{ postgres_version }}
- postgresql-contrib
- zabbix-sql-scripts
when:
- "not 'postgresql-13' in ansible_facts.packages"
- "not 'postgresql-doc-13' in ansible_facts.packages"
- "not 'postgresql-contrib' in ansible_facts.packages"
- "not 'zabbix-sql-scripts' in ansible_facts.packages"存储库键在另一个剧本中提供,并且执行时没有错误。
这是在带有Ubuntu20.04LTS、AnbleVersion2.9.6、PythonVersion3.8.10的主机上执行的。
我已经寻找了这两个问题,但没有找到一个具体的答案解决了我的问题。
如果手动执行与Ansible相同的操作,则它都会安装很好的命令(使用的命令):
sudo sh -c ‘echo “deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main” > /etc/apt/sources.list.d/pgdg.list’
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql-13 postgresql-doc-13编辑:似乎在回购链接的开头(在deb https://..之前)也缺少了一个引号(")。
我有过:repo: deb https://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main"
应该是:"repo: deb https://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main"
发布于 2022-08-18 12:53:35
基本上,必须说,像apt_repository这样的不可访问模块通常比shell模块更可取。
然而,在您的方法中有一些错误。
如您所见,apt_repository自动更新包源,即存储库密钥必须已经存在。您可以将存储库密钥与apt_key模块一起添加,但是您需要安装gpg包,首先应该确保安装这个包。
如下所述:
gpg - name:确保gpg被安装apt: name: gpg使用apt_repository时,您的问题之一是保持了$(lsb_release -cs)不变,但这只能通过shell工作,而必须在使用Ansible时使用变量ansible_distribution_release。此外,filename参数不需要扩展(.list),因为文档告诉您:“将自动添加.list扩展。”您的规范创建了文件pgdg.list.list。
再一次,作为一个整体,剧本:
- name: Database Server
hosts: databaseserver
become: yes
tasks:
- name: Ensure gpg is installed
apt:
name: gpg
- name: Add repository signing key
apt_key:
url: "https://www.postgresql.org/media/keys/ACCC4CF8.asc"
state: present
- name: Add postgresql repository
apt_repository:
repo: "deb https://apt.postgresql.org/pub/repos/apt/ {{ ansible_distribution_release }}-pgdg main"
state: present
filename: pgdg现在,如果包是由包含的存储库提供的,那么您应该能够安装所需的包。
发布于 2022-08-18 11:38:49
https://stackoverflow.com/questions/73401069
复制相似问题