如何在salt文件服务器中检查文件是否存在

时间:2014-03-22 19:32:49

标签: salt-stack

我想自动为用户复制ssh密钥,有些用户没有密钥。

我现在拥有的是:

ssh_auth:                                                                                                                                                                      
  - present                                                                                                                                                                    
  - user: {{ usr }}                                                                                                                                                            
  - source: salt://users/keys/{{usr}}.id_rsa.pub 

当salt:// fileserver上不存在用户的密钥时,出现错误。是否有一些函数来检查salt:// fileserver中是否存在文件?

2 个答案:

答案 0 :(得分:2)

我不知道jinja或salt函数可以检查主文件服务器中的特定文件。我建议您将这些密钥作为密钥包含在包含您的用户的支柱文件中,并使用jinja检测该密钥的存在并在必要时创建密钥。例如:

支柱文件:

# Name of file : user_pillar.sls
users:
  root:
    ssh_key: some_key_value
    home : /root
    createhome: True

州档案:

# Name of file : users_salt_state_file.sls
{% for user,args in salt['pillar.get']('users',{}).iteritems() %}
# Ensure user is present
{{ user }}_user:
  user.present:
    - name: {{ user }}

# Home Creation
{% if args and 'home' in args %} 
    - home: {{ args['home'] }}
{% endif %}
{% if args and 'createhome' in args %} 
    - createhome: {{ args['createhome'] }}
{% endif %}

# SSH_auth
{% if args and 'ssh_key' in args %}
{{ args['ssh_key'] }}
  ssh_auth:                                                                                                                                                                      
    - present                                                                                                                                                                    
    - user: {{ user }}  
{% endfor %}

答案 1 :(得分:2)

如果您觉得必须学习如何仅使用状态来执行此操作,则可以通过指定源列表来使用回退机制:

来自文档:

ssh_auth:                                                                        
  - present
  - user:{{usr}}
  - source:
    - salt://users/keys/{{usr}}.id_rsa.pub
    - salt://users/keys/null.id_rsa.pub

cat /dev/null > /srv/salt/users/keys/null.id_dsa.pub

专业上,用户密钥应存储在支柱中。这提供了在执行时从主服务器存储和检索支柱的附加功能 - 这意味着您可以根据原始请求测试文件是否存在。我为openvpn证书做了类似的事情:

http://garthwaite.org/virtually-secure-with-openvpn-pillars-and-salt.html