做了个申请iscsi存储的页面
问题
有了新的存储了,这里使用存储的大概有这么几个部分,一部分是对服务器的磁盘进行添加,一部分是有人希望他的个人或者他的部门的存储能够增加,目前还没有人有备份的需求希望有额外的磁盘(可见所有人还处于个人电脑的时代)。
以前分配存储是需要我来参与的,但是我现在不想了。为了省事,就做个页面,自己去申请,自己去挂载好了。
解决
- 其实就是将iscsi的创建targetportal,创建磁盘,创建映射给封装了下,然后从web中获得一些相关参数,然后服务器端制作完后,发送邮件给申请者,申请者根据邮件的内容,下载用于激活的客户端小程序,运行下,然后到磁盘里面去初始化新的盘就可以了。
- 整个的代码在github我的私有库里面
- 需要提到的是这个小项目里面用到了gomail的邮件模版功能。这个功能是比较实用的,特别是发邮件的时候,可以做的比较好看一些。
- 还有就是用到了golang在做需要管理员权限的命令行程序的时候,需要用到rsrc,等一会我贴下怎么用的。
- 还有就是怎么在批处理里面来判定和执行自己想要的程序
netstat -an |findstr "8888" | find "LISTENING"
if errorlevel 1 (d:\goweb.exe)
if errorlevel 0 (....)
上面就是golang的web的页面侦听8888端口,如果这个端口是listening状态的话,说明golang的这个web本地服务是ok的,如果不ok那就执行goweb.exe(我将小程序build成了windows的可执行程序,只需要创建对应的template和templates文件夹即可)
- 还有就是更深刻的回顾了下iscsi target和initinator在windows下的使用。
- 还有就是使用了golang引用本地的其他的golang的文件中的函数的用法
- 还有就是golang在web开发方面我个人的skill还很差,虽然在页面里面做到了输入的判定,以及反馈等等,但是整个的测试还是历经很多次,比如忘记了return,导致即使错误的输入还是走到了下一步这样的低级错误。
小记
由于在客户端电脑上添加逻辑磁盘的动作需要管理员权限,而普通的可执行文件,不会直接要求用户的权限,所以当执行需要特殊权限的时候,会出错,或者直接退出,导致执行失败。
golang中有一个run as admin的类似的东西。参见下面的页面:
还有更重要的是需要一个manifest文件来声明我们需要管理权限才能执行。
我下面贴出个例子,这里假设我们最后要生成的程序位addspace.exe,这个xml文件名为addspace.txt.(习惯了,一般以manifest结尾比较好认)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="9.0.0.0"
processorArchitecture="amd64"
name="addspace.exe"
type="win32"
/>
<description>My App</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
我还为这个exe增加了一个ico,这个需要将ico文件,golang文件都放在一个目录下,这样便于操作。
golang的文件名为addspace.go
manifest的文件名为addspace.txt
ico的文件名为002.ico
准备就绪,开始:
-
生成syso文件
rsrc -manifest addspace.txt -ico 002.ico -o addspace.syso
至于rsrc是什么,自己去查下就好了,我的测试电脑上面因为python的原因早已经安装了。可以看看我以前写的关于python生成exe的那条。
-
利用syso文件生成需要admin权限的exe文件
(我这个是在windows下执行的,如果在其他系统下,注意GOOS,GOARCH的设定)
go build -o addspace.exe
然后就有了啊。
然后申请在webpage上操作完成后,收到邮件,邮件里面包含有这个exe的下载链接,然后下载后执行即可了。