Postgresql SaltStack:在特定更改时重新启动服务器(而不仅仅是重新加载)

Postgresql SaltStack:在特定更改时重新启动服务器(而不仅仅是重新加载),postgresql,salt-stack,Postgresql,Salt Stack,在大多数情况下,只需重新加载PostgreSQL server即可: postgresql_service: service.running: - name: postgresql - enable: True - reload: True - watch: - file: postgresql.conf - file: pg_hba.conf - require: - pkg: postgresql - f

在大多数情况下,只需重新加载PostgreSQL server即可:

postgresql_service:
  service.running:
    - name: postgresql
    - enable: True
    - reload: True
    - watch:
      - file: postgresql.conf
      - file: pg_hba.conf
    - require:
      - pkg: postgresql
    - failhard: True
但对于某些特定的更改,重新加载是不够的,需要重新启动

例如,如果将此行添加到postgresql.conf,则需要重新启动:

shared_preload_libraries = 'pglogical'
如果上述行被添加到配置文件中,我如何告诉Salt使用restart

例如:

  • salt运行和“pglogical”在salt运行之前和之后都不在配置中。服务器应该重新加载
  • 配置更改并添加“pglogical”。现在服务器应该重新启动了
  • 配置已更改,“pglogical”已在文件中。服务器应该重新加载

  • 这取决于您的sls体系结构。例如,如果您的支柱中有一个变量,并且您有一个map.jinja,那么您可以使用类似于bellow snippet的东西来处理它

    {% from "postgresql/map.jinja" import pillars with context %}
    
    postgresql_service:
      service.running:
        - name: postgresql
        - enable: True
    {% if pillars.shared_preload_libraries=='pglogical' %}
        - reload: True
    {% endif %}
        - watch:
          - file: postgresql.conf
          - file: pg_hba.conf
        - require:
          - pkg: postgresql
        - failhard: True
    

    事实上,使用特定支柱触发完全重启而不是重新加载只能在指定该支柱一次而不是每次运行时使用

    一个选项是在命令行上指定此支柱,类似于salt'minion'state.sls postgrestart'”{restart':true}“。然后在您所在的州验证是否存在该支柱


    其他选项也是可能的(比如运行主状态+需要时重新启动的状态),但我所想的都是在请求重新启动时需要salt用户知道。

    这真的有效吗。我希望这样:如果添加了pglogical,那么需要重新启动。如果它是在以前的盐运行中添加的,则应重新加载。您的“如果”是否检测到更改?如果您在支柱中设置pglogical。每次salt运行时,它都会重新启动服务。我更新了问题,使之更准确。如果问题不够清楚,请告诉我。非常感谢。