我是暑期公司的实习生。我被分配了一个必须在 Django 中完成的项目。我有一个粗略的设置,我需要一些关于我应该如何进一步设置的反馈。techops 团队的人在开发人员破坏某些东西时会花费太多时间为开发人员重启虚拟机。解决方案是允许用户自己执行此操作。
项目大纲
- 用户使用 ldap 凭据登录
- 服务器获取个人所在的 ldap 组 ['techops', 'staff']
- 仅显示这些 ldap 组之外的服务器
- 然后,用户将能够重新启动这些虚拟机
- 服务器将通过 SSH 密钥 ssh 进入指定的虚拟机域并触发虚拟机重启
我目前可以让用户通过 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 组进行比较,然后仅在 /reboot 页面上显示这些服务器。
请随时提出问题或索取任何其他文件。我感谢你们为我提供的所有时间和帮助。
以下是我现在的文件:
服务器模型.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
reboot 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 %}