我是夏天的公司实习生。我被分配了一个必须在Django中完成的项目。我有一个粗略的设置,我需要一些反馈,我应该如何进一步设置。 techops团队中的人们花费太多时间为开发人员重新启动虚拟机时会破坏某些东西。解决方案是允许用户自己执行此操作。
项目大纲
我目前能够让用户通过ldap登录管理面板,但不能在网站的单独身份验证页面上登录。有没有办法自动填充用户的LDAP组?
# Populate the Django user from the LDAP directory.
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
我需要帮助了解LDAP如何工作(使用Django),以及如何检索登录的当前用户,运行我的get_Ldapgroups函数,将这些组与服务器ldap组进行比较,然后仅在/上显示这些服务器重启页面。
请随时提出问题或要求提供任何其他文件。我感谢你们给我的所有时间和帮助。
以下是我的文件:
servers models.py
class Team(models.Model):
name = models.CharField(max_length=64)
email = models.EmailField(max_length=254, default='@business.com')
ldap_group = models.CharField(max_length=64)
def __unicode__(self):
return '"' + self.name + '" <' + self.email + '>'
class Site(models.Model):
name = models.CharField(max_length=254)
def __unicode__(self):
return self.name
class Server(models.Model):
hostname = models.CharField(max_length=254)
fqdn = models.CharField(max_length=254)
owner = models.ForeignKey(Team)
site = models.ForeignKey(Site)
def __unicode__(self):
return self.hostname
重启views.py 列出服务器,当你点击服务器时,它让你知道它是否“活着”
from django.template import Context, loader
from django.http import HttpResponse
from servers.models import Server
import paramiko
import socket
def index(request):
t = loader.get_template('reboot/index.html')
servers = Server.objects.all()
c = Context( {
'servers': servers,
})
return HttpResponse(t.render(c))
def test_ssh_liveness(ssh, name):
try:
ssh.connect(name, timeout='1')
return True
except socket.timeout:
# server is down
return False
except socket.gaierror:
# invalid server name
return False
except paramiko.SSHException:
# unknown host key
return True
def server(request, name):
ssh = paramiko.SSHClient()
is_alive = test_ssh_liveness(ssh, name)
return HttpResponse("You selected server "+name+" and it is "+str(is_alive))
重启模板
{% block title %}Server{% endblock %}
{% block content %}
<h1>Server</h1>
<ul>
{% for server in servers %}
<li><a href="{% url 'server' server.hostname %}">{{ server.hostname }}
{% endfor %}
</ul>
{% endblock %}
答案 0 :(得分:1)
django有一个可插拔的身份验证系统,具有不同后端的概念。 django带有两个后端;一个使用数据库,另一个可以使用外部用户系统。
利用这种灵活性的是django-auth-ldap,这是一个设计用于LDAP目录的自定义后端。它是替代品。
您进行了设置,然后它会自动填充用户组,也可以执行其他操作(有关详细信息,请参阅documentation)。
example configuration详细介绍了大部分配置和设置细节。
作为最后一个提示,考虑卸载重启服务器。否则,如果出现网络问题或其他延迟,您的应用程序将无法阻止。要从django离线安排任务,请使用celery。