loadbalancer_const.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  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 compute
  15. import (
  16. "yunion.io/x/cloudmux/pkg/apis"
  17. "yunion.io/x/cloudmux/pkg/apis/compute"
  18. "yunion.io/x/onecloud/pkg/util/choices"
  19. )
  20. // Load balancer status transition (for spec status)
  21. //
  22. // create start stop delete
  23. // init running - - -
  24. // running - - stopped stopped
  25. // stopped - running - -
  26. //
  27. // Each entity will have spec and runtime version. Spec version will increment
  28. // on entity attribute update. Runtime version will be filled by the scheduler
  29. // to the newest spec it has seen and committed
  30. //
  31. // When spec and runtime version differ, scheduler will set runtime version to
  32. // "configuring", "stopping" and will finally transition to a terminal state.
  33. //
  34. // In the case of instance has PendingDeleted marked, it is also the
  35. // scheduler's duty to make the runtime status to stopped and finally the
  36. // entity in question
  37. const (
  38. LB_STATUS_ENABLED = compute.LB_STATUS_ENABLED
  39. LB_STATUS_DISABLED = compute.LB_STATUS_DISABLED
  40. LB_STATUS_INIT = compute.LB_STATUS_INIT
  41. LB_CREATING = apis.STATUS_CREATING
  42. LB_CREATE_FAILED = apis.STATUS_CREATE_FAILED
  43. LB_SYNC_CONF = compute.LB_SYNC_CONF
  44. LB_SYNC_CONF_FAILED = "sync_conf_failed"
  45. LB_STATUS_DELETING = apis.STATUS_DELETING
  46. LB_STATUS_DELETE_FAILED = apis.STATUS_DELETE_FAILED
  47. LB_STATUS_DELETED = compute.LB_STATUS_DELETED
  48. LB_STATUS_START_FAILED = compute.LB_STATUS_START_FAILED
  49. LB_STATUS_STOP_FAILED = "stop_failed"
  50. LB_UPDATE_TAGS = "update_tags"
  51. LB_UPDATE_TAGS_FAILED = "update_tags_fail"
  52. LB_STATUS_UNKNOWN = compute.LB_STATUS_UNKNOWN
  53. )
  54. var LB_STATUS_SPEC = choices.NewChoices(
  55. LB_STATUS_ENABLED,
  56. LB_STATUS_DISABLED,
  57. )
  58. const (
  59. //默认后端服务器组
  60. LB_BACKENDGROUP_TYPE_DEFAULT = compute.LB_BACKENDGROUP_TYPE_DEFAULT
  61. //普通后端服务器组
  62. LB_BACKENDGROUP_TYPE_NORMAL = compute.LB_BACKENDGROUP_TYPE_NORMAL
  63. //主备后端服务器组
  64. LB_BACKENDGROUP_TYPE_MASTER_SLAVE = compute.LB_BACKENDGROUP_TYPE_MASTER_SLAVE
  65. )
  66. var LB_BACKENDGROUP_TYPE = choices.NewChoices(
  67. LB_BACKENDGROUP_TYPE_DEFAULT,
  68. LB_BACKENDGROUP_TYPE_NORMAL,
  69. LB_BACKENDGROUP_TYPE_MASTER_SLAVE,
  70. )
  71. const (
  72. LB_ALIYUN_SPEC_SHAREABLE = "" //性能共享型
  73. LB_ALIYUN_SPEC_S1_SMALL = "slb.s1.small"
  74. LB_ALIYUN_SPEC_S2_SMALL = "slb.s2.small"
  75. LB_ALIYUN_SPEC_S3_SMALL = "slb.s3.small"
  76. LB_ALIYUN_SPEC_S2_MEDIUM = "slb.s2.medium"
  77. LB_ALIYUN_SPEC_S3_MEDIUM = "slb.s3.medium"
  78. LB_ALIYUN_SPEC_S3_LARGE = "slb.s3.large"
  79. LB_AWS_SPEC_APPLICATION = "application"
  80. LB_AWS_SPEC_NETWORK = "network"
  81. )
  82. const (
  83. LB_MbpsMin = 0
  84. LB_MbpsMax = 10000
  85. )
  86. var LB_ALIYUN_SPECS = []string{
  87. LB_ALIYUN_SPEC_SHAREABLE,
  88. LB_ALIYUN_SPEC_S1_SMALL,
  89. LB_ALIYUN_SPEC_S2_SMALL,
  90. LB_ALIYUN_SPEC_S3_SMALL,
  91. LB_ALIYUN_SPEC_S2_MEDIUM,
  92. LB_ALIYUN_SPEC_S3_MEDIUM,
  93. LB_ALIYUN_SPEC_S3_LARGE,
  94. }
  95. var LB_AWS_SPECS = []string{
  96. LB_AWS_SPEC_APPLICATION,
  97. LB_AWS_SPEC_NETWORK,
  98. }
  99. // Load Balancer network type (vpc or classic) determines viable backend
  100. // servers (they should be from the same network type as the load balancer).
  101. //
  102. // Load Balancer address type (intranet or internet) determins the scope the
  103. // service provided by load balancer can be accessed. If it's intranet, then
  104. // it will only be accessible from the specified network. If it's internet,
  105. // then it's public and can be accessed from outside the cloud region
  106. const (
  107. LB_ADDR_TYPE_INTRANET = compute.LB_ADDR_TYPE_INTRANET
  108. LB_ADDR_TYPE_INTERNET = compute.LB_ADDR_TYPE_INTERNET
  109. )
  110. var LB_ADDR_TYPES = choices.NewChoices(
  111. LB_ADDR_TYPE_INTERNET,
  112. LB_ADDR_TYPE_INTRANET,
  113. )
  114. const (
  115. LB_NETWORK_TYPE_CLASSIC = compute.LB_NETWORK_TYPE_CLASSIC
  116. LB_NETWORK_TYPE_VPC = compute.LB_NETWORK_TYPE_VPC
  117. )
  118. var LB_NETWORK_TYPES = choices.NewChoices(
  119. LB_NETWORK_TYPE_CLASSIC,
  120. LB_NETWORK_TYPE_VPC,
  121. )
  122. // TODO https_direct sni
  123. const (
  124. LB_LISTENER_TYPE_TCP = compute.LB_LISTENER_TYPE_TCP
  125. LB_LISTENER_TYPE_UDP = compute.LB_LISTENER_TYPE_UDP
  126. LB_LISTENER_TYPE_TCP_UDP = compute.LB_LISTENER_TYPE_TCP_UDP
  127. LB_LISTENER_TYPE_HTTP = compute.LB_LISTENER_TYPE_HTTP
  128. LB_LISTENER_TYPE_HTTPS = compute.LB_LISTENER_TYPE_HTTPS
  129. LB_LISTENER_TYPE_TERMINATED_HTTPS = compute.LB_LISTENER_TYPE_TERMINATED_HTTPS
  130. )
  131. var LB_LISTENER_TYPES = []string{
  132. LB_LISTENER_TYPE_TCP,
  133. LB_LISTENER_TYPE_UDP,
  134. LB_LISTENER_TYPE_HTTP,
  135. LB_LISTENER_TYPE_HTTPS,
  136. }
  137. // aws_network_lb_listener
  138. var AWS_NETWORK_LB_LISTENER_TYPES = choices.NewChoices(
  139. LB_LISTENER_TYPE_TCP,
  140. LB_LISTENER_TYPE_UDP,
  141. // LB_LISTENER_TYPE_TCP_UDP
  142. )
  143. // aws_application_lb_listener
  144. var AWS_APPLICATION_LB_LISTENER_TYPES = choices.NewChoices(
  145. LB_LISTENER_TYPE_HTTP,
  146. LB_LISTENER_TYPE_HTTPS,
  147. )
  148. // huawei backend group protocal choices
  149. var HUAWEI_LBBG_PROTOCOL_TYPES = choices.NewChoices(
  150. LB_LISTENER_TYPE_TCP,
  151. LB_LISTENER_TYPE_UDP,
  152. LB_LISTENER_TYPE_HTTP,
  153. )
  154. var HUAWEI_LBBG_SCHDULERS = choices.NewChoices(
  155. LB_SCHEDULER_WLC,
  156. LB_SCHEDULER_RR,
  157. LB_SCHEDULER_SCH,
  158. )
  159. const (
  160. LB_ACL_TYPE_BLACK = compute.LB_ACL_TYPE_BLACK
  161. LB_ACL_TYPE_WHITE = compute.LB_ACL_TYPE_WHITE
  162. )
  163. var LB_ACL_TYPES = []string{
  164. LB_ACL_TYPE_BLACK,
  165. LB_ACL_TYPE_WHITE,
  166. }
  167. const (
  168. LB_TLS_CERT_FINGERPRINT_ALGO_SHA1 = compute.LB_TLS_CERT_FINGERPRINT_ALGO_SHA1
  169. LB_TLS_CERT_FINGERPRINT_ALGO_SHA256 = compute.LB_TLS_CERT_FINGERPRINT_ALGO_SHA256
  170. )
  171. const (
  172. LB_TLS_CERT_PUBKEY_ALGO_RSA = "RSA"
  173. LB_TLS_CERT_PUBKEY_ALGO_ECDSA = "ECDSA"
  174. )
  175. var LB_TLS_CERT_PUBKEY_ALGOS = choices.NewChoices(
  176. LB_TLS_CERT_PUBKEY_ALGO_RSA,
  177. LB_TLS_CERT_PUBKEY_ALGO_ECDSA,
  178. )
  179. // TODO may want extra for legacy apps
  180. const (
  181. LB_TLS_CIPHER_POLICY_1_0 = "tls_cipher_policy_1_0"
  182. LB_TLS_CIPHER_POLICY_1_1 = "tls_cipher_policy_1_1"
  183. LB_TLS_CIPHER_POLICY_1_2 = "tls_cipher_policy_1_2"
  184. LB_TLS_CIPHER_POLICY_1_2_strict = "tls_cipher_policy_1_2_strict"
  185. LB_TLS_CIPHER_POLICY_deault = ""
  186. )
  187. var LB_TLS_CIPHER_POLICIES = []string{
  188. LB_TLS_CIPHER_POLICY_1_0,
  189. LB_TLS_CIPHER_POLICY_1_1,
  190. LB_TLS_CIPHER_POLICY_1_2,
  191. LB_TLS_CIPHER_POLICY_1_2_strict,
  192. LB_TLS_CIPHER_POLICY_deault,
  193. }
  194. const (
  195. LB_STICKY_SESSION_TYPE_INSERT = compute.LB_STICKY_SESSION_TYPE_INSERT
  196. LB_STICKY_SESSION_TYPE_SERVER = compute.LB_STICKY_SESSION_TYPE_SERVER
  197. )
  198. var LB_STICKY_SESSION_TYPES = []string{
  199. LB_STICKY_SESSION_TYPE_INSERT,
  200. LB_STICKY_SESSION_TYPE_SERVER,
  201. }
  202. // TODO maybe https check when field need comes ;)
  203. const (
  204. LB_HEALTH_CHECK_PING = compute.LB_HEALTH_CHECK_PING
  205. LB_HEALTH_CHECK_TCP = compute.LB_HEALTH_CHECK_TCP
  206. LB_HEALTH_CHECK_UDP = compute.LB_HEALTH_CHECK_UDP
  207. LB_HEALTH_CHECK_HTTP = compute.LB_HEALTH_CHECK_HTTP
  208. LB_HEALTH_CHECK_HTTPS = compute.LB_HEALTH_CHECK_HTTPS
  209. )
  210. var LB_HEALTH_CHECK_TYPES = []string{
  211. LB_HEALTH_CHECK_TCP,
  212. LB_HEALTH_CHECK_UDP,
  213. LB_HEALTH_CHECK_HTTP,
  214. LB_HEALTH_CHECK_PING,
  215. }
  216. var LB_HEALTH_CHECK_TYPES_TCP = choices.NewChoices(
  217. LB_HEALTH_CHECK_TCP,
  218. LB_HEALTH_CHECK_HTTP,
  219. )
  220. var LB_HEALTH_CHECK_TYPES_UDP = choices.NewChoices(
  221. LB_HEALTH_CHECK_UDP,
  222. )
  223. const (
  224. LB_HEALTH_CHECK_HTTP_CODE_1xx = compute.LB_HEALTH_CHECK_HTTP_CODE_1xx
  225. LB_HEALTH_CHECK_HTTP_CODE_2xx = compute.LB_HEALTH_CHECK_HTTP_CODE_2xx
  226. LB_HEALTH_CHECK_HTTP_CODE_3xx = compute.LB_HEALTH_CHECK_HTTP_CODE_3xx
  227. LB_HEALTH_CHECK_HTTP_CODE_4xx = compute.LB_HEALTH_CHECK_HTTP_CODE_4xx
  228. LB_HEALTH_CHECK_HTTP_CODE_5xx = compute.LB_HEALTH_CHECK_HTTP_CODE_5xx
  229. LB_HEALTH_CHECK_HTTP_CODE_DEFAULT = compute.LB_HEALTH_CHECK_HTTP_CODE_DEFAULT
  230. )
  231. var LB_HEALTH_CHECK_HTTP_CODES = []string{
  232. LB_HEALTH_CHECK_HTTP_CODE_1xx,
  233. LB_HEALTH_CHECK_HTTP_CODE_2xx,
  234. LB_HEALTH_CHECK_HTTP_CODE_3xx,
  235. LB_HEALTH_CHECK_HTTP_CODE_4xx,
  236. LB_HEALTH_CHECK_HTTP_CODE_5xx,
  237. }
  238. const (
  239. LB_REDIRECT_OFF = compute.LB_REDIRECT_OFF
  240. LB_REDIRECT_RAW = compute.LB_REDIRECT_RAW
  241. )
  242. var LB_REDIRECT_TYPES = []string{
  243. LB_REDIRECT_OFF,
  244. LB_REDIRECT_RAW,
  245. }
  246. const (
  247. LB_REDIRECT_CODE_301 = compute.LB_REDIRECT_CODE_301 // Moved Permanently
  248. LB_REDIRECT_CODE_302 = compute.LB_REDIRECT_CODE_302 // Found
  249. LB_REDIRECT_CODE_307 = compute.LB_REDIRECT_CODE_307 // Temporary Redirect
  250. )
  251. var LB_REDIRECT_CODES = []int64{
  252. LB_REDIRECT_CODE_301,
  253. LB_REDIRECT_CODE_302,
  254. LB_REDIRECT_CODE_307,
  255. }
  256. const (
  257. LB_REDIRECT_SCHEME_IDENTITY = ""
  258. LB_REDIRECT_SCHEME_HTTP = "http"
  259. LB_REDIRECT_SCHEME_HTTPS = "https"
  260. )
  261. var LB_REDIRECT_SCHEMES = []string{
  262. LB_REDIRECT_SCHEME_IDENTITY,
  263. LB_REDIRECT_SCHEME_HTTP,
  264. LB_REDIRECT_SCHEME_HTTPS,
  265. }
  266. const (
  267. LB_BOOL_ON = compute.LB_BOOL_ON
  268. LB_BOOL_OFF = compute.LB_BOOL_OFF
  269. )
  270. var LB_BOOL_VALUES = choices.NewChoices(
  271. LB_BOOL_ON,
  272. LB_BOOL_OFF,
  273. )
  274. // TODO
  275. //
  276. // - qch, quic connection id
  277. // - mh, maglev consistent hash
  278. const (
  279. LB_SCHEDULER_RR = compute.LB_SCHEDULER_RR // round robin
  280. LB_SCHEDULER_WRR = compute.LB_SCHEDULER_WRR // weighted round robin
  281. LB_SCHEDULER_WLC = compute.LB_SCHEDULER_WLC // weighted least connection
  282. LB_SCHEDULER_SCH = compute.LB_SCHEDULER_SCH // source-ip-based consistent hash
  283. LB_SCHEDULER_TCH = compute.LB_SCHEDULER_TCH // 4-tuple-based consistent hash
  284. LB_SCHEDULER_QCH = compute.LB_SCHEDULER_QCH
  285. LB_SCHEDULER_MH = compute.LB_SCHEDULER_MH // maglev consistent hash
  286. LB_SCHEDULER_NOP = "nop" // aws noop
  287. )
  288. var LB_SCHEDULER_TYPES = []string{
  289. LB_SCHEDULER_RR,
  290. LB_SCHEDULER_WRR,
  291. LB_SCHEDULER_WLC,
  292. LB_SCHEDULER_SCH,
  293. LB_SCHEDULER_TCH,
  294. LB_SCHEDULER_NOP,
  295. }
  296. const (
  297. LB_SENDPROXY_OFF = "off"
  298. LB_SENDPROXY_V1 = "v1"
  299. LB_SENDPROXY_V2 = "v2"
  300. LB_SENDPROXY_V2_SSL = "v2-ssl"
  301. LB_SENDPROXY_V2_SSL_CN = "v2-ssl-cn"
  302. )
  303. var LB_SENDPROXY_CHOICES = []string{
  304. LB_SENDPROXY_OFF,
  305. LB_SENDPROXY_V1,
  306. LB_SENDPROXY_V2,
  307. LB_SENDPROXY_V2_SSL,
  308. LB_SENDPROXY_V2_SSL_CN,
  309. }
  310. var LB_ALIYUN_UDP_SCHEDULER_TYPES = choices.NewChoices(
  311. LB_SCHEDULER_RR,
  312. LB_SCHEDULER_WRR,
  313. LB_SCHEDULER_WLC,
  314. LB_SCHEDULER_SCH,
  315. LB_SCHEDULER_TCH,
  316. LB_SCHEDULER_QCH,
  317. )
  318. var LB_ALIYUN_COMMON_SCHEDULER_TYPES = choices.NewChoices(
  319. LB_SCHEDULER_RR,
  320. LB_SCHEDULER_WRR,
  321. LB_SCHEDULER_WLC,
  322. )
  323. // TODO raw type
  324. const (
  325. LB_BACKEND_GUEST = compute.LB_BACKEND_GUEST
  326. LB_BACKEND_HOST = compute.LB_BACKEND_HOST
  327. LB_BACKEND_IP = compute.LB_BACKEND_IP
  328. LB_BACKEND_ADDRESS = compute.LB_BACKEND_ADDRESS
  329. )
  330. var LB_BACKEND_TYPES = []string{
  331. LB_BACKEND_GUEST,
  332. LB_BACKEND_HOST,
  333. LB_BACKEND_IP,
  334. }
  335. const (
  336. LB_BACKEND_ROLE_DEFAULT = compute.LB_BACKEND_ROLE_DEFAULT
  337. LB_BACKEND_ROLE_MASTER = compute.LB_BACKEND_ROLE_MASTER
  338. LB_BACKEND_ROLE_SLAVE = compute.LB_BACKEND_ROLE_SLAVE
  339. )
  340. var LB_BACKEND_ROLES = choices.NewChoices(
  341. LB_BACKEND_ROLE_MASTER,
  342. LB_BACKEND_ROLE_DEFAULT,
  343. LB_BACKEND_ROLE_SLAVE,
  344. )
  345. const (
  346. LB_CHARGE_TYPE_BY_TRAFFIC = compute.LB_CHARGE_TYPE_BY_TRAFFIC
  347. LB_CHARGE_TYPE_BY_BANDWIDTH = compute.LB_CHARGE_TYPE_BY_BANDWIDTH
  348. )
  349. var LB_CHARGE_TYPES = choices.NewChoices(
  350. LB_CHARGE_TYPE_BY_TRAFFIC,
  351. LB_CHARGE_TYPE_BY_BANDWIDTH,
  352. )
  353. const (
  354. LB_HA_STATE_MASTER = "MASTER"
  355. LB_HA_STATE_BACKUP = "BACKUP"
  356. LB_HA_STATE_FAULT = "FAULT"
  357. LB_HA_STATE_STOP = "STOP"
  358. LB_HA_STATE_UNKNOWN = "UNKNOWN"
  359. )
  360. var LB_HA_STATES = choices.NewChoices(
  361. LB_HA_STATE_MASTER,
  362. LB_HA_STATE_BACKUP,
  363. LB_HA_STATE_FAULT,
  364. LB_HA_STATE_STOP,
  365. LB_HA_STATE_UNKNOWN,
  366. )
  367. const (
  368. LBAGENT_QUERY_ORIG_KEY = "_orig"
  369. LBAGENT_QUERY_ORIG_VAL = "lbagent"
  370. )
  371. const (
  372. LB_ASSOCIATE_TYPE_LISTENER = "listener"
  373. LB_ASSOCIATE_TYPE_RULE = "rule"
  374. )