Skip to content
Snippets Groups Projects
Commit 3164c6cb authored by Recolic's avatar Recolic :house_with_garden:
Browse files

update

parent a160577a
No related branches found
No related tags found
No related merge requests found
需求:
我有一个简单的脚本,可以给定 cpu cores+RAM size+disk size+port forward, 从ubuntu的cloudimg创建一个VM出来。
我需要一个稳定的软件,它可以自动帮我管理正在运行的VM. 它需要能够:
1. 有一个容易使用的命令行工具. 运行它之后就可以一键创建VM,删除vm.
参考用法(具体语法按照你的喜好来):
vm create #然后interactive的方式询问名字,CPU核心数,RAM,disk。然后自动帮忙选择一个空闲的端口 forward 22,自动用默认用户名密码。
vm create MY_VM1 cpu=2 ram=1G disk=40G port=30222:22 port=80 port=443 username=recolic password=fuck #就是non-interactive mode. 如果port/username/password不设置,就默认转发22端口,默认用户名密码。如果没有说要转发到哪一个端口,就自动选一个
vm info #显示所有的VM信息,例如名字,cpu,ram size,disk size,forwarded ports
vm delete MY_VM1
(可选)如果再支持一个vm copy MY_VM1 new_vm就更好了!注意端口要自动改一下
2. 会以daemon process的形式,或crontab的形式,在后台经常检查。发现有VM关机了(或崩溃了),就自动帮我重启。
3. 最好是用脚本语言(因为方便我修改逻辑),编译型语言也可以。拒绝python,因为它在系统升级后往往会dependency炸掉。拒绝java/csharp这类需要runtime的语言。偏好bash或fish或perl
4. 留出一个类似配置文件的东西(可以在代码里面),方便我偶尔修改port range,修改默认的用户名密码, 修改cloudimg镜像。自动选择空闲端口的时候就假设这个port range没有别人在用,不用特意检查。
5. 最好是程序+所有的VM+数据文件+下载好的cloudimage镜像都放在同一个目录里 (例如/var/myvps/里面有programs, disks, metadata, images, logs几个子目录), 并且整个大文件夹移动到其他位置也能正常工作(也就是不准hardcode)。我有bash和fish的代码告诉你怎样获取自己被执行时所在的目录。
部署方式:
把整个程序目录放在任何一个地方,提供一个命令/脚本/程序,例如/.../programs/on_start.sh。我通过我喜欢的方式保证开机时这个程序被执行到一次(如果你喜欢,也可以要求被用crontab的形式执行。我作为用户都可以)
然后它会启动一个后台的process,自动帮我开机所有的VM,并且发现有VM关机了就自动重启,发现需要cloudimage就从预定的url下载,发现VM被删除了就把东西都删掉,etc。
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment