devtoolcronjob.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  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 devtool
  15. import (
  16. "fmt"
  17. "yunion.io/x/jsonutils"
  18. "yunion.io/x/log"
  19. "yunion.io/x/pkg/util/printutils"
  20. "yunion.io/x/onecloud/pkg/mcclient"
  21. "yunion.io/x/onecloud/pkg/mcclient/modules/ansible"
  22. modules "yunion.io/x/onecloud/pkg/mcclient/modules/devtool"
  23. "yunion.io/x/onecloud/pkg/mcclient/options"
  24. )
  25. func paramValidator(param jsonutils.JSONObject) (bool, error) {
  26. // TODO 移到 server 端
  27. log.Infof("paramValidator: param: %+v", param)
  28. interval, err := param.Int("interval")
  29. if err != nil {
  30. return true, nil
  31. }
  32. day, err := param.Int("day")
  33. if err != nil {
  34. return true, nil
  35. }
  36. if interval == 0 && day == 0 {
  37. return false, fmt.Errorf("interval and day can not be 0 at the same time")
  38. }
  39. return true, nil
  40. }
  41. func init() {
  42. type CronjobListOptions struct {
  43. options.BaseListOptions
  44. Name string `help:"cloud region ID or Name" json:"-"`
  45. }
  46. R(&CronjobListOptions{}, "devtoolcronjob-list", "List Devtool Cronjobs", func(s *mcclient.ClientSession, args *CronjobListOptions) error {
  47. params, err := options.ListStructToParams(args)
  48. if err != nil {
  49. return err
  50. }
  51. var result *printutils.ListResult
  52. result, err = modules.DevToolCronjobs.List(s, params)
  53. printList(result, modules.DevToolCronjobs.GetColumns(s))
  54. return nil
  55. })
  56. type CronjobCreateOptions struct {
  57. NAME string `help:"Ansible Playbook ID or Name" json:"-"`
  58. Day int `help:"Cronjob runs at given day" default:"0"`
  59. Hour int `help:"Cronjob runs at given hour" default:"0"`
  60. Min int `help:"Cronjob runs at given min" default:"0"`
  61. Sec int `help:"Cronjob runs at given sec" default:"0"`
  62. Interval int64 `help:"Cronjob runs at given interval" default:"0"`
  63. Start bool `help:"start job when created" default:"false"`
  64. Enabled bool `help:"Set job status enabled" default:"false"`
  65. }
  66. R(
  67. &CronjobCreateOptions{},
  68. "devtoolcronjob-create",
  69. "Create a cronjob repo component",
  70. func(s *mcclient.ClientSession, args *CronjobCreateOptions) error {
  71. result, err := ansible.AnsiblePlaybooks.Get(s, args.NAME, nil)
  72. if err != nil {
  73. return err
  74. }
  75. ansiblePlaybookName, err := result.GetString("name")
  76. if err != nil {
  77. return err
  78. }
  79. ansiblePlaybookID, err := result.GetString("id")
  80. if err != nil {
  81. return err
  82. }
  83. params := jsonutils.NewDict()
  84. params.Add(jsonutils.NewString(ansiblePlaybookName), "name")
  85. params.Add(jsonutils.NewString(ansiblePlaybookID), "ansible_playbook_id")
  86. if args.Start {
  87. params.Add(jsonutils.JSONTrue, "start")
  88. }
  89. if args.Enabled {
  90. params.Add(jsonutils.JSONTrue, "enabled")
  91. } else if args.Interval > 0 {
  92. params.Add(jsonutils.NewInt(int64(args.Interval)), "interval")
  93. } else {
  94. params.Add(jsonutils.NewInt(int64(0)), "interval")
  95. params.Add(jsonutils.NewInt(int64(args.Day)), "day")
  96. params.Add(jsonutils.NewInt(int64(args.Hour)), "hour")
  97. params.Add(jsonutils.NewInt(int64(args.Min)), "min")
  98. params.Add(jsonutils.NewInt(int64(args.Sec)), "sec")
  99. }
  100. ok, err := paramValidator(params)
  101. if err != nil || !ok {
  102. log.Infof("paramValidator error %s", err)
  103. return err
  104. }
  105. cronjob, err := modules.DevToolCronjobs.Create(s, params)
  106. if err != nil {
  107. log.Errorf("modules.DevToolCronjobs.Create error %s", err)
  108. return err
  109. }
  110. printObject(cronjob)
  111. return nil
  112. },
  113. )
  114. type DevToolCronjobShowOptions struct {
  115. ID string `help:"ID or Name of the DevToolCronjob to show"`
  116. }
  117. R(&DevToolCronjobShowOptions{}, "devtoolcronjob-show", "Show cronjob details", func(s *mcclient.ClientSession, args *DevToolCronjobShowOptions) error {
  118. result, err := modules.DevToolCronjobs.Get(s, args.ID, nil)
  119. if err != nil {
  120. return err
  121. }
  122. printObject(result)
  123. return nil
  124. })
  125. type DevToolCronjobUpdateOptions struct {
  126. ID string `help:"ID or Name of DevToolCronjob to update"`
  127. Day int `help:"Cronjob runs at given day" json:"-" default:"-1"`
  128. Hour int `help:"Cronjob runs at given hour" json:"-" default:"-1"`
  129. Min int `help:"Cronjob runs at given min" default:"-1"`
  130. Sec int `help:"Cronjob runs at given sec" default:"-1"`
  131. Interval int `help:"Cronjob runs at given interval" default:"-1"`
  132. Start bool `help:"start job when created"`
  133. Stop bool `help:"start job when created"`
  134. Enable bool `help:"Set job status enabled"`
  135. Disable bool `help:"Set job status enabled"`
  136. }
  137. R(&DevToolCronjobUpdateOptions{}, "devtoolcronjob-update", "Update DevToolCronjob", func(s *mcclient.ClientSession, args *DevToolCronjobUpdateOptions) error {
  138. result, err := modules.DevToolCronjobs.Get(s, args.ID, nil)
  139. if err != nil {
  140. return err
  141. }
  142. params := jsonutils.NewDict()
  143. interval, _ := result.Int("interval")
  144. day, _ := result.Int("day")
  145. params.Add(jsonutils.NewString(args.ID), "id")
  146. params.Add(jsonutils.NewInt(int64(interval)), "interval")
  147. params.Add(jsonutils.NewInt(int64(day)), "day")
  148. log.Infof("DevToolCronjobUpdateOptions args: %+v", args)
  149. if args.Interval >= 0 {
  150. params.Add(jsonutils.NewInt(int64(args.Interval)), "interval")
  151. if args.Interval > 0 {
  152. params.Add(jsonutils.NewInt(0), "day")
  153. }
  154. } else if args.Day >= 0 {
  155. params.Add(jsonutils.NewInt(int64(args.Day)), "day")
  156. if args.Day > 0 {
  157. params.Add(jsonutils.NewInt(0), "interval")
  158. }
  159. }
  160. if args.Hour >= 0 {
  161. params.Add(jsonutils.NewInt(int64(args.Hour)), "hour")
  162. }
  163. if args.Min >= 0 {
  164. params.Add(jsonutils.NewInt(int64(args.Min)), "min")
  165. }
  166. if args.Sec >= 0 {
  167. params.Add(jsonutils.NewInt(int64(args.Sec)), "sec")
  168. }
  169. ok, err := paramValidator(params)
  170. if err != nil || !ok {
  171. return err
  172. }
  173. if args.Start && args.Stop {
  174. return fmt.Errorf("can not set job start and stop at the same time")
  175. } else if args.Start {
  176. params.Add(jsonutils.JSONTrue, "start")
  177. } else if args.Stop {
  178. params.Add(jsonutils.JSONFalse, "start")
  179. }
  180. if args.Enable && args.Disable {
  181. return fmt.Errorf("can not set job enabled and disabled at the same time")
  182. } else if args.Enable {
  183. params.Add(jsonutils.JSONTrue, "enabled")
  184. } else if args.Disable {
  185. params.Add(jsonutils.JSONFalse, "enabled")
  186. }
  187. result, err = modules.DevToolCronjobs.Update(s, args.ID, params)
  188. if err != nil {
  189. return err
  190. }
  191. printObject(result)
  192. return nil
  193. })
  194. R(&DevToolCronjobShowOptions{}, "devtoolcronjob-delete", "Delete DevToolCronjob", func(s *mcclient.ClientSession, args *DevToolCronjobShowOptions) error {
  195. result, err := modules.DevToolCronjobs.Delete(s, args.ID, nil)
  196. if err != nil {
  197. return err
  198. }
  199. printObject(result)
  200. return nil
  201. })
  202. }