如何从同时动态创建salt状态的循环中要求动态创建salt状态?

2024-10-01 09:29:59 发布

您现在位置:Python中文网/ 问答频道 /正文

这就是我要做的。在

我有一个salt状态,它管理linux中的用户和组,/etc/skel模板,稍后将管理许多其他与用户相关的模板。在

简而言之:

有些状态是通过读取for循环中包含用户和属性的支柱而创建的。在

有些状态是通过读取带有组和属性的支柱而创建的。在

将存在作为用户的主要组的组,并非所有组都有一个主用户,并且所有创建的用户都将创建一个以该用户命名的主组。在创建用户之前,似乎必须使用salt创建组。因此,对于每个用户状态(状态是由循环创建的,而用户是由该状态创建的)需要一个相应的组。然而,组状态不是静态存在的,它们也是从组支柱动态创建的。所以,salt不一定每次都以相同的顺序呈现每个状态,就像它按字母顺序排序一样,但是顺序是在所有必要条件都得到解决之后确定的。(顺便说一句,我试着把这类总结保持简短,而不是对salt渲染的话题大惊小怪。)

我认为我遇到的问题是组状态在创建用户状态时还没有被创建。在

我已经在下面发布了生成错误的所需配置的状态。当需求存在时,它不创建用户,但创建组;当需求被删除时,它创建组和用户。在

如果我删除require行,我当前就得到了预期的结果,但不确定随着时间的增长,我是否总能得到预期的结果。在

另外,我非常感兴趣的是找到一种方法,在另一个动态创建的状态中从一个动态创建的状态中要求一些东西。在

如有任何修改本文件以解决该问题的想法,我们将一如既往地予以感谢:)

以下是状态文件:

/etc/skel:
  file.directory:
    - name: /etc/skel
    - user: root
    - group: root
    - dir_mode: 755
/etc/skel/.bash_logout:
  file.managed:
    - name: /etc/skel/.bash_logout
    - user: root
    - group: root
    - mode: 644
    - source: salt://user_management/templates/etc/skel/bash_logout.sls
/etc/skel/.bash_profile:
  file.managed:
    - name: /etc/skel/.bash_profile
    - user: root
    - group: root
    - mode: 644
    - source: salt://user_management/templates/etc/skel/bash_profile.sls
/etc/skel/.bashrc:
  file.managed:
    - name: /etc/skel/.bashrc
    - user: root
    - group: root
    - mode: 644
    - source: salt://user_management/templates/etc/skel/bashrc.sls
{% for group in pillar['user_management']['groups'] %}
{{- group }}:
  group.present:
    - name: "{{ pillar['user_management']['groups'][group]['name'] }}"
    - gid: "{{ pillar['user_management']['groups'][group]['gid'] }}"
    - system: "{{ pillar['user_management']['groups'][group]['system'] }}"
  {%- if pillar['user_management']['groups'][group]['addusers'] %}
    - addusers:
    {%- for add_user_name in pillar['user_management']['groups'][group]['addusers'] %}
      - {{ add_user_name }}
    {%- endfor %}
  {%- endif %}
  {%- if pillar['user_management']['groups'][group]['delusers'] %}
    - delusers:
    {%- for del_user_name in pillar['user_management']['groups'][group]['delusers'] %}
      - {{ del_user_name }}
    {%- endfor %}
  {%- endif %}
  {%- if pillar['user_management']['groups'][group]['members'] %}
    - members:
    {%- for member_name in pillar['user_management']['groups'][user]['members'] %}
      - {{ member_name }}
    {%- endfor %}
  {%- endif %}
{% endfor %}
{% for user in pillar['user_management']['users'] %}
{{- user }}:
  user.present:
    - name: "{{ pillar['user_management']['users'][user]['name'] }}"
    - uid: "{{ pillar['user_management']['users'][user]['uid'] }}"
    - gid: "{{ pillar['user_management']['users'][user]['gid'] }}"
    - gid_from_name: "{{ pillar['user_management']['users'][user]['gid_from_name'] }}"
  {%- if pillar['user_management']['users'][user]['groups'] %}
    - groups:
    {%- for group_name in pillar['user_management']['users'][user]['groups'] %}
      - {{ group_name }}
    {%- endfor %}
  {%- endif %}
  {%- if pillar['user_management']['users'][user]['optional_groups'] %}
    - optional_groups:
    {%- for optional_group_name in pillar['user_management']['users'][user]['optional_groups'] %}
      - {{ optional_group_name }}
    {%- endfor %}
  {%- endif %}
  {%- if pillar['user_management']['users'][user]['remove_groups'] %}
    - remove_groups:
    {%- for remove_group_name in pillar['user_management']['users'][user]['remove_groups'] %}
      - {{ remove_group_name }}
    {%- endfor %}
  {%- endif %}
    - home: "{{ pillar['user_management']['users'][user]['home'] }}"
    - createhome: "{{ pillar['user_management']['users'][user]['createhome'] }}"
    - password: "{{ pillar['user_management']['users'][user]['password'] }}"
    - enforce_password: "{{ pillar['user_management']['users'][user]['enforce_password'] }}"
    - empty_password: "{{ pillar['user_management']['users'][user]['empty_password'] }}"
    - shell: "{{ pillar['user_management']['users'][user]['shell'] }}"
    - unique: "{{ pillar['user_management']['users'][user]['unique'] }}"
    - system: "{{ pillar['user_management']['users'][user]['system'] }}"
    - fullname: "{{ pillar['user_management']['users'][user]['fullname'] }}"
    - require:
      - group: {{ user|replace("user", "group") }}
{% endfor %}

以下是用户支柱文件:

^{pr2}$

以下是集团支柱文件:

user_management:
  groups:
    group_mdresden:
      name: mdresden
      gid: 10000
      system: False
      addusers:
        # - list
        # - list
      delusers:
        # - list
        # - list
      members:
    group_csunderarajulu:
      name: csunderarajulu
      gid: 10001
      system: False
      addusers:
        # - list
        # - list
      delusers:
        # - list
        # - list
      members:

错误似乎只发生在实际运行中,而不是在启用测试的情况下。 以下是用户的错误:

user_|-user_csunderarajulu_|-csunderarajulu_|-present:
    ----------
    __run_num__:
        7
    __sls__:
        user_management.users.manage
    changes:
        ----------
    comment:
        One or more requisite failed: user_management.users.manage.group_csunderarajulu
    result:
        False
user_|-user_mdresden_|-mdresden_|-present:
    ----------
    __run_num__:
        6
    __sls__:
        user_management.users.manage
    changes:
        ----------
    comment:
        One or more requisite failed: user_management.users.manage.group_mdresden
    result:
        False

以下是我删除要求时的结果:

user_|-user_csunderarajulu_|-csunderarajulu_|-present:
    ----------
    __run_num__:
        7
    changes:
        ----------
        fullname:
            Chandrasekaran Sunderarajulu
        gid:
            10001
        groups:
            - csunderarajulu
            - users
        home:
            /home/csunderarajulu
        homephone:
        name:
            csunderarajulu
        passwd:
            x
        roomnumber:
        shell:
            /bin/bash
        uid:
            10001
        workphone:
    comment:
        New user csunderarajulu created
    duration:
        106.136
    name:
        csunderarajulu
    result:
        True
    start_time:
        20:55:32.687433
user_|-user_mdresden_|-mdresden_|-present:
    ----------
    __run_num__:
        6
    changes:
        ----------
        fullname:
            Matthew Dresden
        gid:
            10000
        groups:
            - mdresden
            - users
            - wheel
        home:
            /home/mdresden
        homephone:
        name:
            mdresden
        passwd:
            x
        roomnumber:
        shell:
            /bin/bash
        uid:
            10000
        workphone:
    comment:
        New user mdresden created
    duration:
        153.671
    name:
        mdresden
    result:
        True
    start_time:
        20:55:32.532969

虽然组的创建看起来很成功,但是组create的输出也显示了一个错误。在

下面是显示错误的组的输出:

group_|-group_csunderarajulu_|-csunderarajulu_|-present:
        ----------
        __run_num__:
            5
        changes:
            ----------
            Failed:
                ----------
                gid:
                    10001
        comment:
            Group {0} has been created but, some changes could not be applied
        duration:
            34.491
        name:
            csunderarajulu
        result:
            False
        start_time:
            13:40:14.615013
    group_|-group_mdresden_|-mdresden_|-present:
        ----------
        __run_num__:
            4
        changes:
            ----------
            Failed:
                ----------
                gid:
                    10000
        comment:
            Group {0} has been created but, some changes could not be applied
        duration:
            168.642
        name:
            mdresden
        result:
            False
        start_time:
            13:40:14.445528

以下是输出: 盐召——本地状态显示用户_管理.用户.管理在

local:
    ----------
    /etc/skel:
        ----------
        __env__:
            base
        __sls__:
            user_management.users.manage
        file:
            |_
              ----------
              name:
                  /etc/skel
            |_
              ----------
              user:
                  root
            |_
              ----------
              group:
                  root
            |_
              ----------
              dir_mode:
                  755
            - directory
            |_
              ----------
              order:
                  10000
    /etc/skel/.bash_logout:
        ----------
        __env__:
            base
        __sls__:
            user_management.users.manage
        file:
            |_
              ----------
              name:
                  /etc/skel/.bash_logout
            |_
              ----------
              user:
                  root
            |_
              ----------
              group:
                  root
            |_
              ----------
              mode:
                  644
            |_
              ----------
              source:
                  salt://user_management/templates/etc/skel/bash_logout.sls
            - managed
            |_
              ----------
              order:
                  10001
    /etc/skel/.bash_profile:
        ----------
        __env__:
            base
        __sls__:
            user_management.users.manage
        file:
            |_
              ----------
              name:
                  /etc/skel/.bash_profile
            |_
              ----------
              user:
                  root
            |_
              ----------
              group:
                  root
            |_
              ----------
              mode:
                  644
            |_
              ----------
              source:
                  salt://user_management/templates/etc/skel/bash_profile.sls
            - managed
            |_
              ----------
              order:
                  10002
    /etc/skel/.bashrc:
        ----------
        __env__:
            base
        __sls__:
            user_management.users.manage
        file:
            |_
              ----------
              name:
                  /etc/skel/.bashrc
            |_
              ----------
              user:
                  root
            |_
              ----------
              group:
                  root
            |_
              ----------
              mode:
                  644
            |_
              ----------
              source:
                  salt://user_management/templates/etc/skel/bashrc.sls
            - managed
            |_
              ----------
              order:
                  10003
    group_csunderarajulu:
        ----------
        __env__:
            base
        __sls__:
            user_management.users.manage
        group:
            |_
              ----------
              name:
                  csunderarajulu
            |_
              ----------
              gid:
                  10001
            |_
              ----------
              system:
                  False
            - present
            |_
              ----------
              order:
                  10005
    group_mdresden:
        ----------
        __env__:
            base
        __sls__:
            user_management.users.manage
        group:
            |_
              ----------
              name:
                  mdresden
            |_
              ----------
              gid:
                  10000
            |_
              ----------
              system:
                  False
            - present
            |_
              ----------
              order:
                  10004
    user_csunderarajulu:
        ----------
        __env__:
            base
        __sls__:
            user_management.users.manage
        user:
            |_
              ----------
              name:
                  csunderarajulu
            |_
              ----------
              uid:
                  10001
            |_
              ----------
              gid:
                  10001
            |_
              ----------
              gid_from_name:
                  True
            |_
              ----------
              optional_groups:
                  - users
            |_
              ----------
              home:
                  /home/csunderarajulu
            |_
              ----------
              createhome:
                  True
            |_
              ----------
              password:
                  $6$wBMXk1u6Jxapb5GR$o4YckBYhVjZZ28vyOkcPwBLMH2tcgWAPqdqzLLOGGY5DCM1aaz/rNfnjpMdcmE4GFt/5dzwu8z3YXViptLTMT/
            |_
              ----------
              enforce_password:
                  True
            |_
              ----------
              empty_password:
                  False
            |_
              ----------
              shell:
                  /bin/bash
            |_
              ----------
              unique:
                  True
            |_
              ----------
              system:
                  False
            |_
              ----------
              fullname:
                  Chandrasekaran Sunderarajulu
            |_
              ----------
              require:
                  |_
                    ----------
                    group:
                        group_csunderarajulu
            - present
            |_
              ----------
              order:
                  10007
    user_mdresden:
        ----------
        __env__:
            base
        __sls__:
            user_management.users.manage
        user:
            |_
              ----------
              name:
                  mdresden
            |_
              ----------
              uid:
                  10000
            |_
              ----------
              gid:
                  10000
            |_
              ----------
              gid_from_name:
                  True
            |_
              ----------
              groups:
                  - wheel
            |_
              ----------
              optional_groups:
                  - users
            |_
              ----------
              home:
                  /home/mdresden
            |_
              ----------
              createhome:
                  True
            |_
              ----------
              password:
                  $6$wrBLmNvzyQcHsunt$N6qAv4QR/9A4oPb07zeBbdMQTG7dhxMt.5nXUYY3STwqyRlYvGi5G/GmItOu2M.wLzAOz0ClhEsQIUXMGwIwp1
            |_
              ----------
              enforce_password:
                  True
            |_
              ----------
              empty_password:
                  False
            |_
              ----------
              shell:
                  /bin/bash
            |_
              ----------
              unique:
                  True
            |_
              ----------
              system:
                  False
            |_
              ----------
              fullname:
                  Matthew Dresden
            |_
              ----------
              require:
                  |_
                    ----------
                    group:
                        group_mdresden
            - present
            |_
              ----------
              order:
                  10006

它生成预期的require组名。 例如,group是状态生成的组的名称


Tags: 用户name状态groupetcrootmanagementusers
1条回答
网友
1楼 · 发布于 2024-10-01 09:29:59

谢谢克里斯托夫·德雷维特·德罗格

我的状态文件中的gid和uid用双引号括起来。 这导致它被解释为字符串,而不是它所期望的整数。这个问题引起了所有其他问题。在

所以对最初的问题的答案是,我发布的例子已经足够完成了我在问题中提出的问题。在

相关问题 更多 >