Search code examples
devopssalt-projectsystem-administration

Salt Stack: Requiring packages installed before formula executed


This is more of a clarification request.

I have two formulas that rely on a bunch of packages being installed by the init.sls formula before they're run.

At the moment I have something like the below. I was wondering if anyone could confirm this is the correct approach, or whether someone could indeed offer a better approach.

init.sls

install_packages:
  pkg.installed:
    - pkgs:
        - foo
        - bar
    - require_in:
      - sls: brrap
      - sls: blah

So would doing this ensure that the above packages are installed before brrap.sls and blah.sls are executed?

Thanks


Solution

  • Yes, using the require_in requisite in your example will ensure the packages are installed before brrap.sls and blah.sls are executed.

    All of the _in requisites work in the same way: they result in a normal requisite in the targeted state. The require_in statement is particularly useful when assigning a require in separate sls files.

    As long as the brrap.sls and blah.sls states do not need to be aware of the additional components (the foo and bar packages) that require it when it is set up, your configuration is fine. If the brrap.sls and blah.sls states do require the foo and bar packages to be installed in all the cases, it might be a more straightforward solution to create a require requisite from the brrap.sls and blah.sls states.

    Take for instance the following state http.sls:

    httpd:
      pkg.installed:
        - name: httpd
      service.running:
        - name: httpd
    

    On some of your minions you might want to use the http.sls, and on others you might want to use the http.sls and the php.sls states:

    include:
      - http
    
    php:
      pkg.installed:
        - name: php
        - require_in:
          - service: httpd   
    

    Now the httpd server will only start if php is verified to be installed.

    Take a look at the requisites and other global state arguments documentation for the full example.