揭开smartcmp的数据库为我所用
起因
原因是某些人要求有更多的IP地址信息,而我不想要登录那个平台的web进行操作。想要直接更新数据库的方式实现这个请求。
经过
ssh到这个平台的主机,这个平台可以说完全是开源组件构建起来的,但是好像是在卖钱,个人不觉得这个产品的技术价值有多大,但是可能让一些懒惰的人觉得有用。我是不会为它付钱的。
至于这个产品的结构不提了,底层用了一些python,terrform,ansible这样的自动化部署脚本,网络上用networkx这样的东西,然后通讯用celery和amq这样的,web用nginx,监控用了gafana和prometheus,dashborad是自己的java写的,部署用了tomcat。看起来整的还挺多的。。。。。。
吐槽到此为止,进入正题。
- 进入它的/opt/manager目录,读取cloudchef-rest.conf文件
- 里面的mysql的用户名和密码是明文的,哦哦,太好了
- 直接mysql -uaccount -p进入数据库
- 凭经验直接打开SmartCMP数据库
- show tables; 里面有一个network_ip_address表;
- show columns in network_ip_address; +———————+—————+——+—–+———+——-+ | Field | Type | Null | Key | Default | Extra | +———————+—————+——+—–+———+——-+ | id | varchar(64) | NO | PRI | NULL | | | created_by | varchar(64) | NO | | NULL | | | created_at | datetime(6) | NO | | NULL | | | deleted | bit(1) | NO | | NULL | | | deleted_timestamp | bigint(20) | NO | | NULL | | | exts | varchar(1024) | NO | | NULL | | | lock_version | bigint(20) | NO | | NULL | | | updated_by | varchar(64) | NO | | NULL | | | updated_at | datetime(6) | NO | | NULL | | | tenant_id | varchar(64) | NO | | NULL | | | deployment_id | varchar(64) | YES | | NULL | | | vm_external_id | varchar(512) | YES | | NULL | | | ip_address | varchar(32) | NO | | NULL | | | port_name | varchar(256) | YES | | NULL | | | status | varchar(16) | YES | | NULL | | | vm_name | varchar(512) | YES | | NULL | | | network_ip_range_id | varchar(64) | YES | MUL | NULL | | | recycled_at | datetime(6) | YES | | NULL | | | epg_name | varchar(128) | YES | | NULL | | | network_profile_id | varchar(128) | YES | | NULL | | | description | varchar(1024) | YES | | NULL | | | cooldown_at | datetime(6) | YES | | NULL | | +———————+—————+——+—–+———+——-+
找一个没有使用过的ip地址select下看看,发现, | id | created_by | created_at | deleted | deleted_timestamp | exts | lock_version | updated_by | updated_at | tenant_id | deployment_id | vm_external_id | ip_address | port_name | status | vm_name | network_ip_range_id | recycled_at | epg_name | network_profile_id | description | cooldown_at | | 0ec505ff-4dc2-4e6c-ba60-26bee8066e9d | sysadmin | 2019-10-21 09:59:17.128000 | | 0 | {} | 1 | sysadmin | 2019-10-21 09:59:17.238000 | default | NULL | NULL | 10.214.14.90 | NULL | Available | NULL | 5919ff6a-5a49-48ca-ba06-14b836885538 | NULL | NULL | 708b8305-aa0d-4ce9-b912-b9712d4b20b6 | NULL | NULL |
找个没有用过的ip,select下看看,这里的updated_by: ce0858e2-14f7-4588-9150-dc13c61ab310 (这个是我的id号)。
43be24d5-93fc-4245-b9f8-357828d68d5f | sysadmin | 2019-10-21 09:59:17.124000 | 0 | {} | 2 | ce0858e2-14f7-4588-9150-dc13c61ab310 | 2020-11-30 16:44:18.340000 | default | NULL | NULL | 10.214.14.71 | NULL | Occupied | demo demo | 5919ff6a-5a49-48ca-ba06-14b836885538 | NULL | NULL | 708b8305-aa0d-4ce9-b912-b9712d4b20b6 | NULL | NULL |
那就明显了,只要更新需要更新的,以及自己想要更新的数据段就好了。
更新语句如下:
update network_ip_address set lock_version=2,updated_by="ce0858e2-14f7-4588-9150-dc13c61ab310",updated_at="2021-01-06 16:44:18.340000",status="Occupied",vm_name="just a test" where ip_address="10.214.14.129";
刷新下web就能看到,这个地址被标记为占用了。
为了能够给出可以使用的前十个地址,可以这么查询一下:
select ip_address from network_ip_address where status="Available" order by created_at limit 10;
+--------------+
| ip_address |
+--------------+
| 10.214.14.77 |
| 10.214.14.78 |
| 10.214.14.81 |
| 10.214.14.79 |
| 10.214.14.84 |
| 10.214.14.82 |
| 10.214.14.85 |
| 10.214.14.83 |
| 10.214.14.87 |
| 10.214.14.90 |
+--------------+
10 rows in set (0.00 sec)
这样脱离web,直接操作数据库感觉好了点。
重要的是,这样,做个前端的web,用户想要自己申请ip可以自己去做。
这样:
- 当一个虚拟机从一个vlan迁移到这个测试vlan的时候,用户自己去申请ip
- 用govc工具,直接将这个ip绑定到对应的虚拟机
- 开机
就不需要用户做什么变ip地址,申请ip地址的事情了。
今天早上就干了个这。。。。。
总结
smartcmp这个产品能解决一些问题,但是不是我所设想的,因为它并没有给我带来什么启发的东西。我自己做的web也能实现它的功能,当然仅仅是vmware,没有它的那么全面。
小型企业用不上,大型企业看不上。对于有钱的行政事业机关可能有用。
很久没有用sql语句了,基本的语法都忘了。还得search。。。。