PreAdd.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <div>
  3. <mode-select :decorators="decorators" />
  4. <template v-if="isSingle">
  5. <a-form-item :label="$t('compute.text_385')" :extra="$t('compute.text_783')">
  6. <a-input v-decorator="decorators.mac" />
  7. </a-form-item>
  8. <a-form-item :label="$t('compute.text_772')" :extra="$t('compute.text_773')">
  9. <a-input v-decorator="decorators.name" :placeholder="$t('validator.serverName')" />
  10. </a-form-item>
  11. <a-form-item :label="$t('common.description')">
  12. <a-textarea :auto-size="{ minRows: 1, maxRows: 3 }" v-decorator="decorators.description" :placeholder="$t('common_367')" />
  13. </a-form-item>
  14. <a-form-item :wrapper-col="offsetWrapperCol">
  15. <a-checkbox v-decorator="decorators.no_bmc">{{$t('compute.no_bmc')}}</a-checkbox>
  16. </a-form-item>
  17. <template v-if="!noBMC">
  18. <a-form-item :label="$t('compute.text_774')" :extra="$t('compute.text_784')">
  19. <a-input v-decorator="decorators.ipmi_ip_addr" />
  20. </a-form-item>
  21. <a-form-item :label="$t('compute.text_776')" :extra="$t('compute.text_785')">
  22. <a-input v-decorator="decorators.ipmi_username" />
  23. </a-form-item>
  24. <a-form-item :label="$t('compute.text_777')" :extra="$t('compute.text_782', [ ipmiPassword ])">
  25. <a-input-password v-decorator="decorators.ipmi_password" />
  26. </a-form-item>
  27. </template>
  28. <template v-if="noBMC">
  29. <a-form-item :label="$t('compute.text_778')">
  30. <net-select v-decorator="decorators.net" :project-domain="fd.project_domain" />
  31. <template #extra>
  32. {{ $t('compute.text_779') }} <help-link href="/network/create">{{$t('common.create')}}</help-link>
  33. </template>
  34. </a-form-item>
  35. </template>
  36. <a-form-item :label="$t('common.text00012')" class="mb-0">
  37. <tag
  38. v-decorator="decorators.__meta__" />
  39. </a-form-item>
  40. </template>
  41. <template v-if="isBatch">
  42. <a-form-item :wrapper-col="offsetWrapperCol">
  43. <a-alert type="warning">
  44. <template v-slot:message>
  45. <div>{{$t('compute.text_786')}}</div>
  46. <div>{{$t('compute.text_787')}}</div>
  47. <div>{{$t('compute.text_788')}}</div>
  48. <div>{{$t('compute.text_789')}}</div>
  49. <div>{{$t('compute.text_790')}}</div>
  50. <div>{{$t('compute.text_793')}}</div>
  51. <div>{{$t('compute.text_794')}}</div>
  52. <div>{{$t('compute.text_795')}}</div>
  53. <div>{{$t('compute.text_796', [ ipmiPassword ])}}</div>
  54. </template>
  55. </a-alert>
  56. </a-form-item>
  57. <a-form-item :wrapper-col="offsetWrapperCol">
  58. <a-textarea v-decorator="decorators.content" :placeholder="$t('compute.text_797')" :autosize="{ minRows: 5, maxRows: 10 }" />
  59. <div class="text-right">
  60. <span class="text-color-help">{{$t('compute.text_798', [ total ])}}</span> | <a-button class="pl-0 pr-0" type="link" @click="handleClearContent">{{$t('compute.text_799')}}</a-button>
  61. </div>
  62. </a-form-item>
  63. </template>
  64. <template v-if="isFile">
  65. <file-select
  66. :offset-wrapper-col="offsetWrapperCol"
  67. :decorators="decorators"
  68. download-url="/v1/downloads/BatchHostRegister" />
  69. </template>
  70. </div>
  71. </template>
  72. <script>
  73. import ModeSelect from '../components/ModeSelect'
  74. import FileSelect from '../components/FileSelect'
  75. import NetSelect from '../components/NetSelect'
  76. import Tag from '@/sections/Tag'
  77. export default {
  78. name: 'PhysicalmachinePreAdd',
  79. components: {
  80. ModeSelect,
  81. FileSelect,
  82. NetSelect,
  83. Tag,
  84. },
  85. inject: ['form'],
  86. props: {
  87. offsetWrapperCol: {
  88. type: Object,
  89. required: true,
  90. },
  91. decorators: {
  92. type: Object,
  93. required: true,
  94. },
  95. fd: {
  96. type: Object,
  97. required: true,
  98. },
  99. },
  100. data () {
  101. return {
  102. ipmiPassword: '-',
  103. }
  104. },
  105. computed: {
  106. isSingle () {
  107. return this.fd.mode === 'single'
  108. },
  109. isBatch () {
  110. return this.fd.mode === 'batch'
  111. },
  112. isFile () {
  113. return this.fd.mode === 'file'
  114. },
  115. total () {
  116. const lines = (this.fd.content && this.fd.content.split(/\r*\n/).filter((item) => item.length > 0)) || []
  117. return lines.length || 0
  118. },
  119. noBMC () {
  120. return this.fd.no_bmc
  121. },
  122. },
  123. created () {
  124. this.fetchDefaultIpmiPassword()
  125. },
  126. methods: {
  127. handleClearContent () {
  128. this.form.fc.setFieldsValue({
  129. content: undefined,
  130. })
  131. },
  132. async fetchDefaultIpmiPassword () {
  133. let manager = new this.$Manager('services', 'v1')
  134. try {
  135. const listResponse = await manager.list({
  136. params: {
  137. type: ['baremetal'],
  138. },
  139. })
  140. const data = (listResponse.data.data || [])[0]
  141. const serviceId = data && data.id
  142. if (!serviceId) return
  143. const configResponse = await manager.getSpecific({
  144. id: serviceId,
  145. spec: 'config',
  146. })
  147. const config = (configResponse.data.config && configResponse.data.config.default) || {}
  148. this.ipmiPassword = config.default_ipmi_password
  149. } catch (error) {
  150. throw error
  151. } finally {
  152. manager = null
  153. }
  154. },
  155. },
  156. }
  157. </script>