For循环只取列表中的最后一个元素?
For loop only takes last element in list?
目前,我正尝试在 Ubuntu 20.04 下使用 SaltStack 禁用和屏蔽几个与网络相关的系统服务。现在,事情变得有点混乱了。最后,我需要禁用几个服务,所以我相应地构建了一个for循环,请看下面:
init.sls:
stop_netplan_services:
service.disabled:
{% for services in [ 'systemd-resolved', 'systemd-networkd.socket', 'systemd-networkd', 'systemd-networkd-wait-online', 'networkd-dispatcher' ] %}
- name: {{ services }}
{% endfor %}
- require:
- dead_netplan_services
如果我触发我的高状态,只有列表中的最后一个服务得到尊重,在这里谈论网络调度程序。其他一切都不会得到应用。为什么 'systemd-resolved'、'systemd-networkd.socket' 等...在此 for 循环中被忽略?
yaml 状态中的重复参数将被忽略。
您需要为每个服务生成单独的状态。此外,service.dead
状态有一个 enable
参数,因此您不需要 service.disabled
.
{% for service in [ 'systemd-resolved', 'systemd-networkd.socket', 'systemd-networkd', 'systemd-networkd-wait-online', 'networkd-dispatcher' ] %}
stop and disable {{ service }}:
service.dead:
- name: {{ service }}
- enabled: false
{% endfor %}
这是一般的解决方案,尽管有些州有明确的 names
或 pkgs
或类似的论点。您可以将列表传递给它,而不是生成多个状态。
编辑:正如评论中指出的那样,names
should work for every state:
disable_netplan_services:
service.dead:
- names:
- systemd-resolved
- systemd-networkd.socket
- systemd-networkd
- systemd-networkd-wait-online
- networkd-dispatcher
- enabled: false
目前,我正尝试在 Ubuntu 20.04 下使用 SaltStack 禁用和屏蔽几个与网络相关的系统服务。现在,事情变得有点混乱了。最后,我需要禁用几个服务,所以我相应地构建了一个for循环,请看下面:
init.sls:
stop_netplan_services:
service.disabled:
{% for services in [ 'systemd-resolved', 'systemd-networkd.socket', 'systemd-networkd', 'systemd-networkd-wait-online', 'networkd-dispatcher' ] %}
- name: {{ services }}
{% endfor %}
- require:
- dead_netplan_services
如果我触发我的高状态,只有列表中的最后一个服务得到尊重,在这里谈论网络调度程序。其他一切都不会得到应用。为什么 'systemd-resolved'、'systemd-networkd.socket' 等...在此 for 循环中被忽略?
yaml 状态中的重复参数将被忽略。
您需要为每个服务生成单独的状态。此外,service.dead
状态有一个 enable
参数,因此您不需要 service.disabled
.
{% for service in [ 'systemd-resolved', 'systemd-networkd.socket', 'systemd-networkd', 'systemd-networkd-wait-online', 'networkd-dispatcher' ] %}
stop and disable {{ service }}:
service.dead:
- name: {{ service }}
- enabled: false
{% endfor %}
这是一般的解决方案,尽管有些州有明确的 names
或 pkgs
或类似的论点。您可以将列表传递给它,而不是生成多个状态。
编辑:正如评论中指出的那样,names
should work for every state:
disable_netplan_services:
service.dead:
- names:
- systemd-resolved
- systemd-networkd.socket
- systemd-networkd
- systemd-networkd-wait-online
- networkd-dispatcher
- enabled: false