使用 saltstack 安装特定版本的 postgres

Install specific version of postgres using saltstack

我想要一个真正基本的 postgres 安装,postgres-formula/postgres 太疯狂了。我只想在单个 minion 上安装 postgres 版本 9.5.1。

这是我试过的方法,但我知道它不起作用。

/srv/salt/top.sls

base:
  '*':
    - postgresql

/srv/salt/postgresql/init.sls

postgresql:
  pkg.installed:
      - version: 9.5.1

根据文档 here,这是正确的格式。我想也许我应该使用不同格式的 9.5.3,但我找不到从哪里弄清楚。


更新 1

我在 minion 和 master 上使用 ubuntu 14.04。

apt-cache policy postgresql的输出是

postgresql:
  Installed: (none)
  Candidate: 9.3+154ubuntu1
  Version table:
     9.3+154ubuntu1 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
     9.3+154 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

为了使用 saltstack 安装 Postgresql 9.5。

首先确保按照 this article 在您的 ubuntu minion 中所说的进行操作,以便您的系统可以安装 postgresql 9.5。或者您甚至可以编写一个 state 来自动执行整个步骤。添加存储库并安装 postgresql 9.5

这应该使用 pkgrepo.managed 通过 salt 来完成。解决方案如下。

init.sls

 postgresql:
  pkgrepo.managed:
    - name: deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main
    - dist: trusty-pgdg
    - file: /etc/apt/sources.list.d/psql.list
    - key_url: https://www.postgresql.org/media/keys/ACCC4CF8.asc
    - require_in:
      - pkg: postgresql
  pkg.installed:
    - name: postgresql-9.5
    - refresh: True
  service:
    - running

我通过结合使用 saltstack irc 和 salt docs 得到了这个答案。

@trueCamelType 提供的答案似乎不适用于基于 CentOS 7 的 minion。以下确实有效:

init.sls

install-postgresql96-repository:
  cmd.run:
    - name: rpm -U --force https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

install-postgresql96-server:
  cmd.run:
    - name: yum --disablerepo=postgresql -y install postgresql96-server

postgresql-first-run-init:
  cmd.run:
    - name: /usr/pgsql-9.6/bin/postgresql96-setup initdb
    - unless: stat /var/lib/pgsql/9.6/data/postgresql.conf
    - runas: root

start-postgresql96-server:
  cmd.run:
    - name: systemctl start postgresql-9.6

enable-postgresql96-autostart:
  cmd.run:
    - name: systemctl enable postgresql-9.6

rpm 命令是 运行 和 --force,这样它就可以重复执行,而不会发出 'error' 指示软件包已经安装。使盐输出更漂亮。

yum 命令是 运行 和 --disablerepo=postgresql 以防止 salt 尝试使用外部存储库。

它是程序化的,并不优雅,但我发现用 pkgrepo.managed 乱搞麻烦多于它的价值。也就是说,很想看到使用“pkgrepo.managed”在 Centos 7 上安装 postgresql 的解决方案。

如果您想要真正基本的 Postgres 安装,只需执行以下操作从 https://www.postgresql.org/ 安装 9.5。这样的东西开箱即用。

$ sudo -s
$ cd /srv/salt/
$ git clone https://github.com/saltstack-formulas/postgres-formula.git postgres
$ ln -s /srv/salt/postgres/postgres /srv/salt/postgres
$ vi /srv/salt/top.sls && cat /srv/salt/top.sls 
#format: YAML

base:
  '*':
    - postgres

$ salt-call state.highstate --local

如果您想要不同的行为设置支柱(即在 /srv/pillar/postgres.sls 中),请先相应设置。

postgres:
  use_upstream_repo: True
  version: '9.6'