saltstack / saltstack/salt

[Bug]: state.requisite_in() evaluates same states too many times

Open
#68,408 0 comments 0 reactions 0 assignees View on GitHub

@gpernot-celeste is already working on this.

Since Oct 17, 2025.

  • #68409 by @gpernot-celeste — open
bug
Dominant language
Python
Stars
15.7k
Forks
5.6k
Avg merge
2d 44m
Merged PRs (30d)
80

Description

What happened?

Considering the following sls:

foo:
  file.managed:
    - name: /tmp/foo
    - contents: foo
    - require_in:
      - /tmp/bar
      - /tmp/baz
      - /tmp/quux
bar:
  file.managed:
    - name: /tmp/bar
    - contents: bar

baz:
  file.managed:
    - name: /tmp/baz
    - contents: baz

quux:
  file.managed:
    - name: /tmp/quux
    - contents: quux

Running a state.apply (with custom debug message in check_requisite ):

[DEBUG   ] check_requisite({'state': 'file', 'name': '/tmp/bar', '__sls__': 'test.foo', '__env__': 'base', '__id__': 'bar', 'contents': 'bar', 'order': 10001, 'require': [{'file': 'foo'}, {'file': 'foo'}, {'file': 'foo'}], 'fun': 'managed'})

[DEBUG   ] check_requisite({'state': 'file', 'name': '/tmp/baz', '__sls__': 'test.foo', '__env__': 'base', '__id__': 'baz', 'contents': 'baz', 'order': 10002, 'require': [{'file': 'foo'}, {'file': 'foo'}], 'fun': 'managed'})

[DEBUG   ] check_requisite({'state': 'file', 'name': '/tmp/quux', '__sls__': 'test.foo', '__env__': 'base', '__id__': 'quux', 'contents': 'quux', 'order': 10003, 'require': [{'file': 'foo'}], 'fun': 'managed'})

The require list run once then twice then 3 times the same state 'file': 'foo', that is not what we really want.

I believe there is a bug in requisite_in() that should uniquify extend[name][_state][ind][rkey].

Type of salt install

Official deb

Major version

3006.x

What supported OS are you seeing the problem on? Can select multiple. (If bug appears on an unsupported OS, please open a GitHub Discussion instead)

debian-12, debian-11

salt --versions-report output
Salt Version:
          Salt: 3006.16
 
Python Version:
        Python: 3.10.18 (main, Sep  5 2025, 22:48:51) [GCC 11.2.0]
 
Dependency Versions:
          cffi: 1.14.6
      cherrypy: 18.10.0
  cryptography: 42.0.5
      dateutil: 2.8.1
     docker-py: Not Installed
         gitdb: Not Installed
     gitpython: Not Installed
        Jinja2: 3.1.6
       libgit2: Not Installed
  looseversion: 1.0.2
      M2Crypto: Not Installed
          Mako: Not Installed
       msgpack: 1.0.2
  msgpack-pure: Not Installed
  mysql-python: Not Installed
     packaging: 24.0
     pycparser: 2.21
      pycrypto: Not Installed
  pycryptodome: 3.19.1
        pygit2: Not Installed
  python-gnupg: 0.4.8
        PyYAML: 6.0.1
         PyZMQ: 23.2.0
        relenv: 0.20.6
         smmap: Not Installed
       timelib: 0.3.0
       Tornado: 4.5.3
           ZMQ: 4.3.4
 
System Versions:
          dist: debian 13 trixie
        locale: utf-8
       machine: x86_64
       release: 6.12.48+deb13-cloud-amd64
        system: Linux
       version: Debian GNU/Linux 13 trixie

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the shown SLS with state.apply and inspect requisite_in() alongside the check_requisite debug output. Trace how extend[name][_state][ind][rkey] is populated, then add or update regression coverage so repeated requisite entries are deduplicated and each state is evaluated only once.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
infrastructure
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.