1112 字
6 分钟
揭开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。。。。

揭开smartcmp的数据库为我所用
https://dididudu998.github.io/posts/解密smartcmp数据库/
作者
滴滴嘟嘟
发布于
2021-01-08
许可协议
CC BY-NC-SA 4.0