cmdb-资产管理
1、新建一个app(资产管理的)
python manage.py startapp asset
新建modles.py(数据表)
1、python manage.py makemigrations #看是否有数据更新
2、python manage.py migrate #生成表
3、
新建数据库(当执行python manage.py migrate(自动创建生产数据表))
定义了
自动获取:
name(主机名)、ip、mac地址、os系统、arch(架构,64还是32位)
内存、cpu、磁盘
sn号
user(负责人)
remark(备注)
purchase_time(服务器采购时间)
over_insurance_time(服务器过保时间)
created_time 添加时间(第一次添加到数据库的时间)
last_time 最后更新时间 这个是自己修改后,然后更新的时间
4、新建一个自定义的命令
在asset下新建一个management的包(带有__init__.py),在management目录下新建一个commands的包(带有__init__.py)
cmdb/asset/management/commands/collect_host.py
必须得带有Command、handle固定格式
from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
def handle(self, *args, **options):
print('hello, django!')
collect_host.py:获取主机信息,然后保存到数据库中
5、多个任务则写多个elif (collect_host则是个函数)
def v2_runner_on_ok(self, result, **kwargs):
if result.task_name == 'collect_host':
self.collect_host(result._result)
写ansible的playbook,执行setup 功能
play_source = {
'name' : "cmdb",
'hosts' : 'all',
'gather_facts' : 'no',
'tasks' : [
{
'name' : 'collect_host',
'setup' : ''
}
]
}
主机信息:在当前目录下的 etc/hosts 里面
inventory = InventoryManager(loader=loader, sources=os.path.join(settings.BASE_DIR, 'etc', 'hosts'))
[root@test-01 etc]# cat hosts
localhost ansible_connection=local
#test ansible_connection=smart ansible_host=192.168.1.69 ansible_user=root ansible_ssh_pass=123456
test-03
test-04
test-05
执行:python manage.py collect_host (自定义的)
执行成功后,到数据库查看是否有数据
2、开始写index.html
可以先写一个模板base.html,然后继承它
{% extends "base.html" %} {#继承base.html的模板#}
{% block title %}资产管理{% endblock %}{#标题#}
jQuery('#form-view').find('[name=name]').val(result['result']['name']);
jQuery('#form-view').find('[name=id]').val(result['result']['id']);
jQuery('#form-view').find('[name=remark]').val(result['result']['remark']);
{# <input type="hidden" class="form-control" name="id" value=""/>,找到name=id(find('[name=id]')),value= result['result']['id']#}
3、这个是获取id=form-view 中的字典元素 {'id':1,'name':2}
var data = jQuery('#form-view').serializeArray();
4、/*刷新table*/ 这个只是刷新当前页面的
table.ajax.reload(null, false);
jQuery.get 如果ajax请求的是get,则访问路径会带上token地址,post 则不会