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 則不會