compatibility.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package amazon
  2. import (
  3. "fmt"
  4. "github.com/aws/aws-sdk-go/service/ecs"
  5. "github.com/compose-spec/compose-go/types"
  6. )
  7. type FargateCompatibilityChecker struct {
  8. errors []error
  9. }
  10. func (c *FargateCompatibilityChecker) error(message string, args ...interface{}) {
  11. c.errors = append(c.errors, fmt.Errorf(message, args...))
  12. }
  13. func (c *FargateCompatibilityChecker) Errors() []error {
  14. return c.errors
  15. }
  16. func (c *FargateCompatibilityChecker) CheckService(service *types.ServiceConfig) {
  17. c.CheckCapAdd(service)
  18. c.CheckDNS(service)
  19. c.CheckDNSOpts(service)
  20. c.CheckDNSSearch(service)
  21. c.CheckDomainName(service)
  22. c.CheckExtraHosts(service)
  23. c.CheckHostname(service)
  24. c.CheckIpc(service)
  25. c.CheckLabels(service)
  26. c.CheckLinks(service)
  27. c.CheckLogging(service)
  28. c.CheckMacAddress(service)
  29. c.CheckNetworkMode(service)
  30. c.CheckPid(service)
  31. c.CheckSysctls(service)
  32. c.CheckTmpfs(service)
  33. c.CheckUserNSMode(service)
  34. }
  35. func (c *FargateCompatibilityChecker) CheckNetworkMode(service *types.ServiceConfig) {
  36. if service.NetworkMode != "" && service.NetworkMode != ecs.NetworkModeAwsvpc {
  37. c.error("'network_mode' %q is not supported", service.NetworkMode)
  38. }
  39. service.NetworkMode = ecs.NetworkModeAwsvpc
  40. }
  41. func (c *FargateCompatibilityChecker) CheckLinks(service *types.ServiceConfig) {
  42. if len(service.Links) != 0 {
  43. c.error("'links' is not supported")
  44. service.Links = nil
  45. }
  46. }
  47. func (c *FargateCompatibilityChecker) CheckLogging(service *types.ServiceConfig) {
  48. c.CheckLoggingDriver(service)
  49. }
  50. func (c *FargateCompatibilityChecker) CheckLoggingDriver(service *types.ServiceConfig) {
  51. if service.LogDriver != "" && service.LogDriver != ecs.LogDriverAwslogs {
  52. c.error("'log_driver' %q is not supported", service.LogDriver)
  53. service.LogDriver = ecs.LogDriverAwslogs
  54. }
  55. }
  56. func (c *FargateCompatibilityChecker) CheckPid(service *types.ServiceConfig) {
  57. if service.Pid != "" {
  58. c.error("'pid' is not supported")
  59. service.Pid = ""
  60. }
  61. }
  62. func (c *FargateCompatibilityChecker) CheckUserNSMode(service *types.ServiceConfig) {
  63. if service.UserNSMode != "" {
  64. c.error("'userns_mode' is not supported")
  65. service.UserNSMode = ""
  66. }
  67. }
  68. func (c *FargateCompatibilityChecker) CheckIpc(service *types.ServiceConfig) {
  69. if service.Ipc != "" {
  70. c.error("'ipc' is not supported")
  71. service.Ipc = ""
  72. }
  73. }
  74. func (c *FargateCompatibilityChecker) CheckMacAddress(service *types.ServiceConfig) {
  75. if service.MacAddress != "" {
  76. c.error("'mac_address' is not supported")
  77. service.MacAddress = ""
  78. }
  79. }
  80. func (c *FargateCompatibilityChecker) CheckHostname(service *types.ServiceConfig) {
  81. if service.Hostname != "" {
  82. c.error("'hostname' is not supported")
  83. service.Hostname = ""
  84. }
  85. }
  86. func (c *FargateCompatibilityChecker) CheckDomainName(service *types.ServiceConfig) {
  87. if service.DomainName != "" {
  88. c.error("'domainname' is not supported")
  89. service.DomainName = ""
  90. }
  91. }
  92. func (c *FargateCompatibilityChecker) CheckDNSSearch(service *types.ServiceConfig) {
  93. if len(service.DNSSearch) > 0 {
  94. c.error("'dns_search' is not supported")
  95. service.DNSSearch = nil
  96. }
  97. }
  98. func (c *FargateCompatibilityChecker) CheckDNS(service *types.ServiceConfig) {
  99. if len(service.DNS) > 0 {
  100. c.error("'dns' is not supported")
  101. service.DNS = nil
  102. }
  103. }
  104. func (c *FargateCompatibilityChecker) CheckDNSOpts(service *types.ServiceConfig) {
  105. if len(service.DNSOpts) > 0 {
  106. c.error("'dns_opt' is not supported")
  107. service.DNSOpts = nil
  108. }
  109. }
  110. func (c *FargateCompatibilityChecker) CheckExtraHosts(service *types.ServiceConfig) {
  111. if len(service.ExtraHosts) > 0 {
  112. c.error("'extra_hosts' is not supported")
  113. service.ExtraHosts = nil
  114. }
  115. }
  116. func (c *FargateCompatibilityChecker) CheckCapAdd(service *types.ServiceConfig) {
  117. for i, v := range service.CapAdd {
  118. if v != "SYS_PTRACE" {
  119. c.error("'cap_add' %s is not supported", v)
  120. l := len(service.CapAdd)
  121. service.CapAdd[i] = service.CapAdd[l-1]
  122. service.CapAdd = service.CapAdd[:l-1]
  123. }
  124. }
  125. }
  126. func (c *FargateCompatibilityChecker) CheckTmpfs(service *types.ServiceConfig) {
  127. if len(service.Tmpfs) > 0 {
  128. c.error("'tmpfs' is not supported")
  129. service.Tmpfs = nil
  130. }
  131. }
  132. func (c *FargateCompatibilityChecker) CheckSysctls(service *types.ServiceConfig) {
  133. if len(service.Sysctls) > 0 {
  134. c.error("'sysctls' is not supported")
  135. service.Sysctls = nil
  136. }
  137. }
  138. func (c *FargateCompatibilityChecker) CheckLabels(service *types.ServiceConfig) {
  139. for k, v := range service.Labels {
  140. if v == "" {
  141. c.error("'labels' with an empty value is not supported")
  142. delete(service.Labels, k)
  143. }
  144. }
  145. }
  146. var _ CompatibilityChecker = &FargateCompatibilityChecker{}