guestos.go 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package esxi
  15. type TOSType string
  16. type TOSArch string
  17. const (
  18. LINUX = TOSType("Linux")
  19. WINDOWS = TOSType("Windows")
  20. MACOS = TOSType("macOS")
  21. FREEBSD = TOSType("FreeBSD")
  22. SOLARIS = TOSType("Solaris")
  23. VMWARE = TOSType("VMware")
  24. X86 = TOSArch("x86")
  25. X86_64 = TOSArch("x86_64")
  26. )
  27. type SOsInfo struct {
  28. OsType TOSType
  29. OsDistribution string
  30. OsVersion string
  31. OsArch TOSArch
  32. }
  33. func asian(ver string, arch TOSArch) SOsInfo {
  34. return SOsInfo{LINUX, "Asianux Server", ver, arch}
  35. }
  36. func centos4_5(arch TOSArch) SOsInfo {
  37. return centos("4/5", arch)
  38. }
  39. func centos(ver string, arch TOSArch) SOsInfo {
  40. return SOsInfo{LINUX, "CentOS", ver, arch}
  41. }
  42. func coreos(ver string, arch TOSArch) SOsInfo {
  43. return SOsInfo{LINUX, "CoreOS Linux", ver, arch}
  44. }
  45. func macos(ver string, arch TOSArch) SOsInfo {
  46. return SOsInfo{MACOS, "Mac OS", ver, arch}
  47. }
  48. func debian(ver string, arch TOSArch) SOsInfo {
  49. return SOsInfo{LINUX, "Debian", ver, arch}
  50. }
  51. func eComStationGuest(ver string, arch TOSArch) SOsInfo {
  52. return SOsInfo{"", "eComStationGuest", ver, arch}
  53. }
  54. func fedora(ver string, arch TOSArch) SOsInfo {
  55. return SOsInfo{LINUX, "Fedora", ver, arch}
  56. }
  57. func freebsd(arch TOSArch) SOsInfo {
  58. return SOsInfo{FREEBSD, "FreeBSD", "", arch}
  59. }
  60. func rhel(ver string, arch TOSArch) SOsInfo {
  61. return SOsInfo{LINUX, "RedHat Enterprise Linux", ver, arch}
  62. }
  63. func suse(ver string, arch TOSArch) SOsInfo {
  64. return SOsInfo{LINUX, "SuSE", ver, arch}
  65. }
  66. func opensuse(arch TOSArch) SOsInfo {
  67. return SOsInfo{LINUX, "OpenSuSE", "?", arch}
  68. }
  69. func oracle(ver string, arch TOSArch) SOsInfo {
  70. return SOsInfo{LINUX, "Oracle", ver, arch}
  71. }
  72. func linux(ver string, arch TOSArch) SOsInfo {
  73. return SOsInfo{LINUX, "Generic", ver, arch}
  74. }
  75. func windows(dist string, arch TOSArch) SOsInfo {
  76. return SOsInfo{WINDOWS, dist, "", arch}
  77. }
  78. func solaris(ver string, arch TOSArch) SOsInfo {
  79. return SOsInfo{SOLARIS, "Solaris", ver, arch}
  80. }
  81. func turbo(arch TOSArch) SOsInfo {
  82. return SOsInfo{LINUX, "Turbo Linux", "?", arch}
  83. }
  84. func ubuntu(arch TOSArch) SOsInfo {
  85. return SOsInfo{LINUX, "Ubuntu", "?", arch}
  86. }
  87. func mandriva(arch TOSArch) SOsInfo {
  88. return SOsInfo{LINUX, "Mandriva", "?", arch}
  89. }
  90. func mandrake(arch TOSArch) SOsInfo {
  91. return SOsInfo{LINUX, "Mandrake", "?", arch}
  92. }
  93. func vmware(ver string) SOsInfo {
  94. return SOsInfo{VMWARE, "ESX", ver, X86_64}
  95. }
  96. var (
  97. // https://vdc-repo.vmware.com/vmwb-repository/dcr-public/da47f910-60ac-438b-8b9b-6122f4d14524/16b7274a-bf8b-4b4c-a05e-746f2aa93c8c/doc/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html
  98. GuestOsInfo = map[string]SOsInfo{
  99. "asianux3_64Guest": asian("3", X86_64),
  100. "asianux3Guest": asian("3", X86),
  101. "asianux4_64Guest": asian("4", X86_64),
  102. "asianux4Guest": asian("4", X86),
  103. "asianux5_64Guest": asian("5", X86_64),
  104. "asianux7_64Guest": asian("7", X86_64),
  105. "centos6_64Guest": centos("6", X86_64),
  106. "centos64Guest": centos4_5(X86_64),
  107. "centos6Guest": centos("6", X86),
  108. "centos7_64Guest": centos("7", X86_64),
  109. "centos7Guest": centos("7", X86),
  110. "centos8_64Guest": centos("8", X86),
  111. "centosGuest": centos4_5(X86),
  112. "coreos64Guest": coreos("", X86_64),
  113. "darwin10_64Guest": macos("10.6", X86_64),
  114. "darwin10Guest": macos("10.6", X86),
  115. "darwin11_64Guest": macos("10.7", X86_64),
  116. "darwin11Guest": macos("10.7", X86),
  117. "darwin12_64Guest": macos("10.8", X86_64),
  118. "darwin13_64Guest": macos("10.9", X86_64),
  119. "darwin14_64Guest": macos("10.10", X86_64),
  120. "darwin15_64Guest": macos("10.11", X86_64),
  121. "darwin16_64Guest": macos("10.12", X86_64),
  122. "darwin17_64Guest": macos("10.13", X86_64),
  123. "darwin18_64Guest": macos("10.14", X86_64),
  124. "darwin64Guest": macos("10.5", X86_64),
  125. "darwinGuest": macos("10.5", X86),
  126. "debian10_64Guest": debian("10", X86_64),
  127. "debian10Guest": debian("10", X86),
  128. "debian4_64Guest": debian("4", X86_64),
  129. "debian4Guest": debian("4", X86),
  130. "debian5_64Guest": debian("5", X86_64),
  131. "debian5Guest": debian("5", X86),
  132. "debian6_64Guest": debian("6", X86_64),
  133. "debian6Guest": debian("6", X86),
  134. "debian7_64Guest": debian("7", X86_64),
  135. "debian7Guest": debian("7", X86),
  136. "debian8_64Guest": debian("8", X86_64),
  137. "debian8Guest": debian("8", X86),
  138. "debian9_64Guest": debian("9", X86_64),
  139. "debian9Guest": debian("9", X86),
  140. "eComStation2Guest": eComStationGuest("2.0", X86),
  141. "eComStationGuest": eComStationGuest("1.x", X86),
  142. "fedora64Guest": fedora("?", X86_64),
  143. "fedoraGuest": fedora("?", X86),
  144. "freebsd64Guest": freebsd(X86_64),
  145. "freebsdGuest": freebsd(X86),
  146. //"genericLinuxGuest": linux("?", X86),
  147. "mandrakeGuest": mandrake(X86),
  148. "mandriva64Guest": mandriva(X86_64),
  149. "mandrivaGuest": mandriva(X86),
  150. "opensuse64Guest": opensuse(X86_64),
  151. "opensuseGuest": opensuse(X86),
  152. "oracleLinux6_64Guest": oracle("6", X86_64),
  153. "oracleLinux64Guest": oracle("4/5", X86_64),
  154. "oracleLinux6Guest": oracle("6", X86),
  155. "oracleLinux7_64Guest": oracle("7", X86_64),
  156. "oracleLinux7Guest": oracle("7", X86),
  157. "oracleLinuxGuest": oracle("4/5", X86),
  158. //"other24xLinux64Guest": linux("2.4", X86_64),
  159. //"other24xLinuxGuest": linux("2.4", X86),
  160. //"other26xLinux64Guest": linux("2.6", X86_64),
  161. //"other26xLinuxGuest": linux("2.6", X86),
  162. //"other3xLinux64Guest": linux("3.x", X86_64),
  163. //"other3xLinuxGuest": linux("3.x", X86_64),
  164. //"otherLinux64Guest": linux("2.2", X86_64),
  165. //"otherLinuxGuest": linux("2.2", X86),
  166. "redhatGuest": rhel("2.1", X86),
  167. "rhel2Guest": rhel("2", X86),
  168. "rhel3_64Guest": rhel("3", X86_64),
  169. "rhel3Guest": rhel("3", X86),
  170. "rhel4_64Guest": rhel("4", X86_64),
  171. "rhel4Guest": rhel("4", X86),
  172. "rhel5_64Guest": rhel("5", X86_64),
  173. "rhel5Guest": rhel("5", X86),
  174. "rhel6_64Guest": rhel("6", X86_64),
  175. "rhel6Guest": rhel("6", X86),
  176. "rhel7_64Guest": rhel("7", X86_64),
  177. "rhel7Guest": rhel("7", X86),
  178. "sles10_64Guest": suse("10", X86_64),
  179. "sles10Guest": suse("10", X86),
  180. "sles11_64Guest": suse("11", X86_64),
  181. "sles11Guest": suse("11", X86),
  182. "sles12_64Guest": suse("12", X86_64),
  183. "sles12Guest": suse("12", X86),
  184. "sles64Guest": suse("9", X86_64),
  185. "slesGuest": suse("9", X86),
  186. "solaris10_64Guest": solaris("10", X86_64),
  187. "solaris10Guest": solaris("10", X86),
  188. "solaris11_64Guest": solaris("11", X86_64),
  189. "solaris6Guest": solaris("6", X86),
  190. "solaris7Guest": solaris("7", X86),
  191. "solaris8Guest": solaris("8", X86),
  192. "solaris9Guest": solaris("9", X86),
  193. "suse64Guest": suse("?", X86_64),
  194. "suseGuest": suse("?", X86),
  195. "turboLinux64Guest": turbo(X86_64),
  196. "turboLinuxGuest": turbo(X86),
  197. "ubuntu64Guest": ubuntu(X86_64),
  198. "ubuntuGuest": ubuntu(X86),
  199. "vmkernel5Guest": vmware("5"),
  200. "vmkernel65Guest": vmware("6.5"),
  201. "vmkernel6Guest": vmware("6"),
  202. "vmkernelGuest": vmware("4"),
  203. "win2000AdvServGuest": windows("Windows 2000 Advanced Server", X86),
  204. "win2000ProGuest": windows("Windows 2000 Professional", X86),
  205. "win2000ServGuest": windows("Windows 2000 Server", X86),
  206. "win31Guest": windows("Windows 3.1", X86),
  207. "win95Guest": windows("Windows 95", X86),
  208. "win98Guest": windows("Windows 98", X86),
  209. "windows7_64Guest": windows("Windows 7", X86_64),
  210. "windows7Guest": windows("Windows 7", X86_64),
  211. "windows7Server64Guest": windows("Windows Server 2008 R2", X86_64),
  212. "windows8_64Guest": windows("Windows 8", X86_64),
  213. "windows8Guest": windows("Windows 8", X86),
  214. "windows8Server64Guest": windows("Windows 8 Server", X86_64),
  215. "windows9_64Guest": windows("Windows 10", X86_64),
  216. "windows9Guest": windows("Windows 10", X86),
  217. "windows9Server64Guest": windows("Windows 10 Server", X86_64),
  218. "windowsHyperVGuest": windows("Windows Hyper-V", X86_64),
  219. "winLonghorn64Guest": windows("Windows Longhorn", X86_64),
  220. "winLonghornGuest": windows("Windows Longhorn", X86),
  221. "winMeGuest": windows("Windows Millenium Edition", X86),
  222. "winNetBusinessGuest": windows("Windows Small Business Server 2003", X86),
  223. "winNetDatacenter64Guest": windows("Windows Server 2003 Datacenter Edition", X86_64),
  224. "winNetDatacenterGuest": windows("Windows Server 2003 Datacenter Edition", X86),
  225. "winNetEnterprise64Guest": windows("Windows Server 2003 Enterprise Edition", X86_64),
  226. "winNetEnterpriseGuest": windows("Windows Server 2003 Enterprise Edition", X86),
  227. "winNetStandard64Guest": windows("Windows Server 2003 Standard Edition", X86_64),
  228. "winNetStandardGuest": windows("Windows Server 2003 Standard Edition", X86),
  229. "winNetWebGuest": windows("Windows Server 2003 Web Edition", X86),
  230. "winNTGuest": windows("Windows NT 4", X86),
  231. "winVista64Guest": windows("Windows Vista", X86_64),
  232. "winVistaGuest": windows("Windows Vista", X86),
  233. "winXPHomeGuest": windows("Windows XP Home Edition", X86),
  234. "winXPPro64Guest": windows("Windows XP Professional Edition", X86_64),
  235. "winXPProGuest": windows("Windows XP Professional", X86),
  236. }
  237. )