From 7e6650361eb06b12073561fbc9a931c7542f14e3 Mon Sep 17 00:00:00 2001 From: zhangdahai112 Date: Fri, 24 Sep 2021 11:11:22 +0800 Subject: [PATCH 1/9] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E9=95=9C=E5=83=8F=E4=B8=8D=E6=B8=85=E7=A9=BA=20profile=20?= =?UTF-8?q?=E5=92=8C=20=E5=AE=89=E8=A3=85=E8=84=9A=E6=9C=AC=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rackshift-web/src/rackparams/Graph.InstallCentOS.vue | 4 ++++ rackshift-web/src/rackparams/Graph.InstallRHEL.vue | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/rackshift-web/src/rackparams/Graph.InstallCentOS.vue b/rackshift-web/src/rackparams/Graph.InstallCentOS.vue index 6a31ae57..63efde53 100644 --- a/rackshift-web/src/rackparams/Graph.InstallCentOS.vue +++ b/rackshift-web/src/rackparams/Graph.InstallCentOS.vue @@ -767,9 +767,13 @@ export default { this.payLoad.options.defaults.repo = centosImage.url; if (centosImage.pName) { this.payLoad.options.defaults.profile = centosImage.pName; + } else { + delete this.payLoad.options.defaults.profile; } if (centosImage.tName) { this.payLoad.options.defaults.installScript = centosImage.tName; + } else { + delete this.payLoad.options.defaults.installScript; } if (centosImage.pName || centosImage.tName) { this.$message.info(this.$t("not_support_validate")); diff --git a/rackshift-web/src/rackparams/Graph.InstallRHEL.vue b/rackshift-web/src/rackparams/Graph.InstallRHEL.vue index f2c1f017..3dfe1d7f 100644 --- a/rackshift-web/src/rackparams/Graph.InstallRHEL.vue +++ b/rackshift-web/src/rackparams/Graph.InstallRHEL.vue @@ -767,9 +767,13 @@ export default { this.payLoad.options.defaults.repo = centosImage.url; if (centosImage.pName) { this.payLoad.options.defaults.profile = centosImage.pName; + } else { + delete this.payLoad.options.defaults.profile; } if (centosImage.tName) { this.payLoad.options.defaults.installScript = centosImage.tName; + } else { + delete this.payLoad.options.defaults.installScript; } if (centosImage.pName || centosImage.tName) { this.$message.info(this.$t("not_support_validate")); From 98dee7b4a51e53cbc4c41c9614c064b6c4b5c982 Mon Sep 17 00:00:00 2001 From: zhangdahai112 Date: Fri, 24 Sep 2021 11:44:47 +0800 Subject: [PATCH 2/9] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E9=95=9C=E5=83=8F=E4=B8=8D=E6=B8=85=E7=A9=BA=20profile=20?= =?UTF-8?q?=E5=92=8C=20=E5=AE=89=E8=A3=85=E8=84=9A=E6=9C=AC=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=982?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rackshift-web/src/rackparams/Graph.InstallCentOS.vue | 1 + rackshift-web/src/rackparams/Graph.InstallRHEL.vue | 1 + 2 files changed, 2 insertions(+) diff --git a/rackshift-web/src/rackparams/Graph.InstallCentOS.vue b/rackshift-web/src/rackparams/Graph.InstallCentOS.vue index 63efde53..bd13becf 100644 --- a/rackshift-web/src/rackparams/Graph.InstallCentOS.vue +++ b/rackshift-web/src/rackparams/Graph.InstallCentOS.vue @@ -498,6 +498,7 @@ export default { } if (customPXE) this.$message.info(this.$t("not_support_validate")); + this.payLoad.options.defaults.repo = url; }, receiveValue(val) { this.payLoad.options.defaults.postInstallCommands = val; diff --git a/rackshift-web/src/rackparams/Graph.InstallRHEL.vue b/rackshift-web/src/rackparams/Graph.InstallRHEL.vue index 3dfe1d7f..74675ab7 100644 --- a/rackshift-web/src/rackparams/Graph.InstallRHEL.vue +++ b/rackshift-web/src/rackparams/Graph.InstallRHEL.vue @@ -498,6 +498,7 @@ export default { } if (customPXE) this.$message.info(this.$t("not_support_validate")); + this.payLoad.options.defaults.repo = url; }, receiveValue(val) { this.payLoad.options.defaults.postInstallCommands = val; From d284305379e1652a324784e00b7769f207fde0fd Mon Sep 17 00:00:00 2001 From: zhangdahai112 Date: Fri, 24 Sep 2021 14:44:29 +0800 Subject: [PATCH 3/9] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8Dcentos-ks=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E8=84=9A=E6=9C=ACip=E9=85=8D=E7=BD=AE=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/db/migration/V37__fix_centos_ks.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 rackshift-server/src/main/resources/db/migration/V37__fix_centos_ks.sql diff --git a/rackshift-server/src/main/resources/db/migration/V37__fix_centos_ks.sql b/rackshift-server/src/main/resources/db/migration/V37__fix_centos_ks.sql new file mode 100644 index 00000000..4b2d0380 --- /dev/null +++ b/rackshift-server/src/main/resources/db/migration/V37__fix_centos_ks.sql @@ -0,0 +1 @@ +update template set content = '# Copyright 2016-2018, DELL EMC, Inc.\ninstall\n#text\ngraphical\nunsupported_hardware\nurl --url=<%=repo%>\n# eula --agreed\nlang en_US.UTF-8\nkeyboard ''us''\ntimezone America/Los_Angeles --isUtc\nfirewall --enabled --http --ssh\nselinux --permissive\n<% if (version === \"6.5\") \{ %>\n bootloader --location=mbr --driveorder=<%=installDisk%> --append=\"crashkernel=auth rhgb\"\n<% \} else \{ %>\n bootloader --location=mbr --driveorder=<%=installDisk%> --boot-drive=<%=installDisk%> --append=\"crashkernel=auth rhgb\"\n<% \} %>\nservices --enabled=NetworkManager,sshd\n#network --device=<%=macaddress%> --noipv6 --activate\n\n# enable syslog\n<% if (typeof remoteLogging !== \'undefined\' && remoteLogging) \{ %>\n logging --host=<%=server%> --level=info\n<% \} %>\n\nauthconfig --enableshadow --passalgo=sha512 --enablefingerprint\n\n#Set the root account\nrootpw --iscrypted <%-rootEncryptedPassword%>\n\n#create all users\n<% if (typeof users !== \'undefined\') \{ %>\n<% users.forEach(function(user) \{ %>\n<%_ if( typeof user.uid !== \'undefined\' ) \{ _%>\n user --name=<%=user.name%> --uid=<%=user.uid%> --iscrypted --password <%-user.encryptedPassword%>\n<%_ \} else \{ _%>\n user --name=<%=user.name%> --iscrypted --password <%-user.encryptedPassword%>\n<%_ }}) _%>\n<% \} %>\n\n# Disk Partitioning\nzerombr\nclearpart --all --drives=<%=installDisk%>\n\n<% exist = false;%>\n\n<% if (typeof installPartitions !== \'undefined\' && installPartitions.length > 0) \{ %>\n <% installPartitions.forEach(function(partition) \{ %>\n <% if(partition.deviceType === ''lvm'')\{ %>\n <% exist = true;%>\n <%\}%>\n <%\})%>\n<%\}%>\n\n<% if (exist) \{%>\n # Create an LVM partition on sda\n part pv.01 --size=1 --ondisk=sda --grow --asprimary\n volgroup rootvg --pesize=4096 pv.01\n<%\}%>\n\n\n<% if (typeof installPartitions !== \'undefined\' && installPartitions.length > 0) \{ %>\n <% installPartitions.forEach(function(partition) \{ %>\n # mountPoint and size is required\n <% if(partition.mountPoint !== undefined && partition.size !== undefined) \{ %>\n \n # lvm support\n <% if(partition.deviceType === ''standard'' || partition.deviceType === undefined)\{ %>\n\n <% if(partition.fsType !== undefined) \{ %>\n <% if(partition.size === ''auto'') \{ %>\n partition <%=partition.mountPoint%> --size=250 --grow --fstype=<%=partition.fsType%>\n <% \} else \{ %>\n partition <%=partition.mountPoint%> --size=<%=partition.size%> --fstype=<%=partition.fsType%>\n <% \} %>\n <% \} else \{ %>\n # fsType is optional\n <% if(partition.size === ''auto'') \{ %>\n partition <%=partition.mountPoint%> --size=250 --grow\n <% \} else \{ %>\n partition <%=partition.mountPoint%> --size=<%=partition.size%>\n <% \} %>\n <% \} %>\n\n <% \} else \{%>\n # Create an LVM partition on sda\n #part pv.01 --size=1 --ondisk=sda --grow --asprimary\n #volgroup rootvg --pesize=4096 pv.01\n\n <% if(partition.fsType !== undefined) \{ %>\n <% if(partition.size === ''auto'') \{ %>\n logvol <%=partition.mountPoint%> --size=250 --grow --fstype=<%=partition.fsType%> --vgname=\"rootvg\" --name=<%=partition.lvmName%> \n <% \} else \{ %>\n logvol <%=partition.mountPoint%> --size=<%=partition.size%> --fstype=<%=partition.fsType%> --vgname=\"rootvg\" --name=<%=partition.lvmName%> \n <% \} %>\n <% \} else \{ %>\n # fsType is optional\n <% if(partition.size === ''auto'') \{ %>\n logvol <%=partition.mountPoint%> --size=250 --grow --vgname=\"rootvg\" --name=<%=partition.lvmName%> \n <% \} else \{ %>\n logvol <%=partition.mountPoint%> --size=<%=partition.size%> --vgname=\"rootvg\" --name=<%=partition.lvmName%>\n <% \} %>\n <% \} %>\n \n <% \} %>\n\n\n <% \} %>\n <% \}) %>\n<% \} else \{ %>\n # auto partitioning if no partitions are specified\n autopart\n<% \} %>\n\n# END of Disk Partitioning\n\n# Make sure we reboot into the new system when we are finished\nreboot\n\n# Package Selection\n%packages --nobase --excludedocs\n@core\n-*firmware\n-iscsi*\n-fcoe*\n-b43-openfwwf\nkernel-firmware\nwget\nsudo\nperl\nlibselinux-python\nnet-tools\n\n<% if( typeof kvm !== \'undefined\' && kvm ) \{ %>\n <% if (version === \"6.5\") \{ %>\n kvm\n virt-manager\n libvirt\n libvirt-python\n python-virtinst\n <% \} else \{ %>\n @virtualization-hypervisor\n @virtualization-client\n @virtualization-platform\n @virtualization-tools\n <% \} %>\n<% \} %>\n\n<% if (typeof packages !== \'undefined\') \{ %>\n<% for (var i = 0, len = packages.length; i < len; i++) \{ %>\n<%= packages[i] %>\n<% \} %>\n<% \} %>\n%end\n\n%pre\n# The progress notification is just something nice-to-have, so progress notification failure should\n# never impact the normal installation process\n<% if( typeof progressMilestones !== \'undefined\' && progressMilestones.preConfigUri ) \{ %>\n # the url may contain query, the symbol ''&'' will mess the command line logic, so the whole url need be wrapped in quotation marks\n /usr/bin/curl -X POST -H ''Content-Type:application/json'' \"http://<%=server%>:<%=port%><%-progressMilestones.preConfigUri%>\" || true\n<% \} %>\n\n%end\n\n%post --log=/root/install-post.log\n(\n#notify the current progress\n<% if( typeof progressMilestones !== \'undefined\' && progressMilestones.postConfigUri ) \{ %>\n echo \"RackHD POST script started - curl notify post progress\"\n # the url may contain query, the symbol ''&'' will mess the command line logic, so the whole url need be wrapped in quotation marks\n /usr/bin/curl -X POST -H ''Content-Type:application/json'' \"http://<%=server%>:<%=port%><%-progressMilestones.postConfigUri%>\" || true\n echo \"RackHD POST script started - curl notify post progress after\"\n<% \} %>\n\n# PLACE YOUR POST DIRECTIVES HERE\nPATH=/bin:/sbin:/usr/bin:/usr/sbin\nexport PATH\n\n# copying of SSH key\n<% if (typeof rootSshKey !== \'undefined\') \{ %>\n mkdir /root/.ssh\n echo <%=rootSshKey%> > /root/.ssh/authorized_keys\n chown -R root:root /root/.ssh\n<% \} %>\n<% if (typeof users !== \'undefined\') \{ %>\n<% users.forEach(function(user) \{ %>\n <% if (typeof user.sshKey !== \'undefined\') \{ %>\n mkdir /home/<%=user.name%>/.ssh\n echo <%=user.sshKey%> > /home/<%=user.name%>/.ssh/authorized_keys\n chown -R <%=user.name%>:<%=user.name%> /home/<%=user.name%>/.ssh\n <% \} %>\n<% \}) %>\n<% \} %>\n\n#set hostname\n<% if (typeof hostname !== \'undefined\') \{ %>\n echo <%=hostname%> > /etc/hostname\n <% if (typeof domain !== \'undefined\') \{ %>\n echo -e \"NETWORKING=yes\\nHOSTNAME=<%=hostname%>.<%=domain%>\" > /etc/sysconfig/network\n <% \} %>\n<% \} %>\n\n# Setup BOND Configuration\n<% if (typeof bonds !== \'undefined\') \{ %> \n\n<% bonds.forEach(function(n) \{ %>\n echo \"Configuring bond <%=n.name%>\"\n <% var bondname = n.name %>\n echo DEVICE=<%=bondname%> > /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo NAME=<%=bondname%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo TYPE=bond >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo BONDING_MASTER=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo BONDING_OPTS=\"mode=802.3ad miimon=10 lacp_rate=1\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo USERCTL=no >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo NM_CONTROLLED=no >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo ONBOOT=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% if ( typeof n.ipv4 != \'undefined\' ) \{ %>\n echo IPADDR=\"<%=n.ipv4.ipAddr%>\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo NETMASK=\"<%=n.ipv4.netmask%>\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% if ( undefined != n.ipv4.gateway) \{ %>\n echo GATEWAY=\"<%=n.ipv4.gateway%>\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% \} %>\n echo DEFROUTE=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo PEERDNS=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% \} %>\n\n echo IPV4_FAILURE_FATAL=\"no\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo IPV6INIT=\"no\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% if (typeof n.nics !== \'undefined\') \{ %>\n <% for (var i = 0, len = n.nics.length; i < len; i++) \{ %>\n interface=`grep -i /sys/class/net/*/address -e <%=n.nics[i]%> | cut -d \"/\" -f 5`\n echo DEVICE=$interface > /etc/sysconfig/network-scripts/ifcfg-$interface\n echo NAME=<%=bondname%>-slave >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo MASTER=<%=bondname%> >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo TYPE=Ethernet >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo ONBOOT=yes >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo NM_CONTROLLED=no >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo SLAVE=yes >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \} %>\n <% \} %>\n\n # Bonded VLAN Interface\n <% if ( typeof n.bondvlaninterfaces != \'undefined\' ) \{ %>\n <% for (var i = 0, len = n.bondvlaninterfaces.length; i < len; i++) \{ %>\n echo DEVICE=<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%> > /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo NAME=<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo ONPARENT=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo IPADDR=<%=n.bondvlaninterfaces[i].ipv4.ipAddr%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo NETMASK=<%=n.bondvlaninterfaces[i].ipv4.netmask%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n <% if ( undefined != n.bondvlaninterfaces[i].ipv4.gateway) \{ %>\n echo GATEWAY=<%=n.bondvlaninterfaces[i].ipv4.gateway%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n <% \} %>\n echo VLAN=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo NM_CONTROLLED=no >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n <% \} %>\n <% \} %>\n <%\}) %>\n \n systemctl stop NetworkManager\n systemctl disable NetworkManager\n modprobe --first-time bonding\n systemctl restart network\n<%\} %>\n\n# Setup static network configuration\n<%_ var macRegex = /(..:*)\{6\}/i; _%>\n<% if (typeof networkDevices !== \'undefined\') \{ %>\n <% ipv6 = 0 %>\n <% networkDevices.forEach(function(n) \{ %>\n interface=<%=n.device%>\n <%_ if (n.device.search(macRegex) === 0)\{ _%>\n interface=`grep -i /sys/class/net/*/address -e $interface | cut -d \"/\" -f 5`\n <%_ \} _%>\n <% if( undefined != n.ipv4 ) \{ %>\n <% if( undefined != n.ipv4.vlanIds ) \{ %>\n <% n.ipv4.vlanIds.forEach(function(vid) \{ %>\n echo \"Configuring vlan <%=vid%> on $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"DEVICE=$interface.<%=vid%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPADDR=<%=n.ipv4.ipAddr%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"NETMASK=<%=n.ipv4.netmask%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"GATEWAY=<%=n.ipv4.gateway%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"VLAN=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"ONBOOT=no\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \}); %>\n <% \} else \{ %>\n echo \"Configuring device $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"DEVICE=$interface\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <%_ if (n.device.search(macRegex) === 0)\{ _%>\n echo \"HWADDR=<%=n.device%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <%_ \} _%>\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPADDR=<%=n.ipv4.ipAddr%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"NETMASK=<%=n.ipv4.netmask%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% if ( undefined != n.ipv4.gateway) \{ %>\n echo \"GATEWAY=<%=n.ipv4.gateway%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \} %>\n <% if ( undefined != n.ipv4.mtu) \{ %>\n echo \"MTU=<%=n.ipv4.mtu%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \} %>\n\n <% \} %>\n <% \} %>\n <% if( undefined != n.ipv6 ) \{ %>\n <% if( undefined != n.ipv6.vlanIds ) \{ %>\n <% n.ipv6.vlanIds.forEach(function(vid) \{ %>\n echo \"Configuring vlan <%=vid%> on $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"DEVICE=$interface.<%=vid%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPV6INIT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPV6ADDR=<%=n.ipv6.ipAddr%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPV6_DEFAULTGW=<%=n.ipv6.gateway%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"VLAN=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n <% ipv6 = 1 %>\n <% \}); %>\n <% \} else \{ %>\n echo \"Configuring device $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"DEVICE=$interface\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPV6INIT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPV6ADDR=<%=n.ipv6.ipAddr%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPV6_DEFAULTGW=<%=n.ipv6.gateway%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% ipv6 = 1 %>\n <% \} %>\n <% \} %>\n <% \}); %>\n <% if( ipv6 ) \{ %>\n grep -q -F ''NETWORKING_IPV6=yes'' /etc/sysconfig/network || echo \"NETWORKING_IPV6=yes\" >> /etc/sysconfig/network\n grep -q -F ''IPV6_AUTOCONF=no'' /etc/sysconfig/network || echo \"IPV6_AUTOCONF=no\" >> /etc/sysconfig/network\n <% \} %>\n<% \} %>\n\n# Setup DNS servers\n<% if (typeof dnsServers !== \'undefined\') \{ %>\n <% if (typeof domain !== \'undefined\') \{ %>\n echo \"search <%=domain%>\" > /etc/resolv.conf\n <% \} %>\n <% dnsServers.forEach(function(dns) \{ %>\n echo \"nameserver <%=dns%>\" >> /etc/resolv.conf\n <% \}) %>\n chattr +i /etc/resolv.conf\n<% \} %>\n\n# Download the service to callback to RackHD after OS installation/reboot completion\necho \"RackHD POST script wget started\"\n/usr/bin/wget http://<%=server%>:<%=port%>/api/current/templates/<%=rackhdCallbackScript%>?nodeId=<%=nodeId%> -O /etc/rc.d/init.d/<%=rackhdCallbackScript%>\necho \"RackHD POST script chmod callback script\"\nchmod +x /etc/rc.d/init.d/<%=rackhdCallbackScript%>\n# Enable the above service, it should auto-disable after running once\nchkconfig <%=rackhdCallbackScript%> on\necho \"RackHD POST script chkconfig callback script complete\"\n\n# Enable Services\n<% if (typeof enableServices !== \'undefined\') \{ %>\n<% for (var i = 0, len = enableServices.length; i < len; i++) \{ %>\nsystemctl enable <%=enableServices[i]%>\n<% \} %>\n<% \} %>\n\n# Disable Services\n<% if (typeof disableServices !== \'undefined\') \{ %>\n<% for (var i = 0, len = disableServices.length; i < len; i++) \{ %>\nsystemctl disable <%=disableServices[i]%>\n<% \} %>\n<% \} %>\n\n#signify ORA the installation completed\nfor retry in $(seq 1 5);\ndo\n /usr/bin/curl -X POST -H ''Content-Type:application/json'' http://<%=server%>:<%=port%>/api/current/notification?nodeId=<%=nodeId%>\n if [ $? -eq 0 ]; then\n echo \"Post Notification succeeded\"\n break\n else\n echo \"Post Notification failed\"\n sleep 1\n fi\ndone;\n\n) 2>&1 >>/root/install-post-sh.log\nEOF\n%end\n\n# RackShift Custom Post-InstallScript\n%post --log=/root/rackshift-post-install.log\n<% if( typeof postInstallCommands !== \'undefined\' ) \{ %>\n <% postInstallCommands.forEach(function(n) \{ %>\n <%-n%>\n <% \}); %>\n<% \} %>\t\n%end\n' where name = 'centos-ks'; \ No newline at end of file From 2a34ba752107708955b48403cc85abcc12077713 Mon Sep 17 00:00:00 2001 From: zhangdahai112 Date: Fri, 24 Sep 2021 14:45:03 +0800 Subject: [PATCH 4/9] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E5=8D=8E=E4=B8=BAra?= =?UTF-8?q?id=E7=A3=81=E7=9B=98=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/inspur/InspurM5MetalProvider.java | 3 + .../db/migration/V38__addhuaweiraid.sql | 66 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 rackshift-server/src/main/resources/db/migration/V38__addhuaweiraid.sql diff --git a/rackshift-plugin/inspurm5-metal-plugin/src/main/java/io/rackshift/plugin/inspur/InspurM5MetalProvider.java b/rackshift-plugin/inspurm5-metal-plugin/src/main/java/io/rackshift/plugin/inspur/InspurM5MetalProvider.java index 337cb692..787aa01d 100644 --- a/rackshift-plugin/inspurm5-metal-plugin/src/main/java/io/rackshift/plugin/inspur/InspurM5MetalProvider.java +++ b/rackshift-plugin/inspurm5-metal-plugin/src/main/java/io/rackshift/plugin/inspur/InspurM5MetalProvider.java @@ -55,6 +55,7 @@ public InspurM5MetalProvider() { public List getSupportedBrands() { return new ArrayList() {{ add("Inspur"); + add("Huawei"); }}; } @@ -66,6 +67,8 @@ public List getSupportedModels() { add("Inspur NF5270M5"); add("Inspur NF5266M5"); add("Inspur NF8480M5"); + add("Huawei RH2288H V3"); + add("Huawei 2288H V5"); }}; } diff --git a/rackshift-server/src/main/resources/db/migration/V38__addhuaweiraid.sql b/rackshift-server/src/main/resources/db/migration/V38__addhuaweiraid.sql new file mode 100644 index 00000000..e42add3a --- /dev/null +++ b/rackshift-server/src/main/resources/db/migration/V38__addhuaweiraid.sql @@ -0,0 +1,66 @@ +insert into workflow +values (uuid(), + 'system', + 'Graph.Quanta.storcli.Catalog', + '搜集 Huawei 服务器磁盘 Raid 信息', + 'POST_OTHER_WORKFLOW_START', + '[\'Huawei\']', + 'false', + '{ + "bootstrap-rancher": { + "dockerFile": "secure.erase.docker.tar.xz" + } +}', + 'enable', + now()); + +insert into workflow +values (uuid(), + 'system', + 'Graph.Raid.Delete.MegaRAID', + '清空 Huawei 服务器磁盘 Raid 信息', + 'POST_OTHER_WORKFLOW_START', + '[\'Huawei\']', + 'false', + '{ + "bootstrap-rancher": { + "dockerFile": "secure.erase.docker.tar.xz" + } +}', + 'enable', + now()); + +insert into workflow +values (uuid(), + 'system', + 'Graph.Raid.Create.PercRAID', + '创建 Huawei 服务器磁盘 Raid 虚拟磁盘', + 'POST_OTHER_WORKFLOW_START', + '[\'Huawei\']', + 'true', + '{ + "options": { + "bootstrap-rancher": { + "dockerFile": "secure.erase.docker.tar.xz" + }, + "create-raid": { + "createDefault": false, + "controller": 0, + "path": "/opt/MegaRAID/storcli/storcli64", + "raidList": [ + { + "enclosure": 32, + "type": "raid5", + "drives": [ + 0, + 1, + 2 + ], + "name": "VD0" + } + ] + } + } +}', + 'enable', + now()); \ No newline at end of file From 3dbb99966563f3e697608051cee4b01109a524dc Mon Sep 17 00:00:00 2001 From: zhangdahai112 Date: Fri, 24 Sep 2021 17:21:10 +0800 Subject: [PATCH 5/9] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=E9=BB=98=E8=AE=A4=20raid=20enclosureId=20?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/rackparams/Graph.Raid.Create.PercRAID.vue | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/rackshift-web/src/rackparams/Graph.Raid.Create.PercRAID.vue b/rackshift-web/src/rackparams/Graph.Raid.Create.PercRAID.vue index 87e4e378..4c8e1d7f 100644 --- a/rackshift-web/src/rackparams/Graph.Raid.Create.PercRAID.vue +++ b/rackshift-web/src/rackparams/Graph.Raid.Create.PercRAID.vue @@ -62,6 +62,7 @@ export default { }, data() { return { + enclosure: 32, defaultPayLoad: { "options": { "bootstrap-rancher": { @@ -126,7 +127,7 @@ export default { addRaid() { this.payLoad.options['create-raid'].raidList.push( { - "enclosure": 32, + "enclosure": this.enclosure, "type": null, "drives": [], "name": "VD" + this.payLoad.options['create-raid'].raidList.length @@ -257,6 +258,14 @@ export default { } this.disks = res.data.disks; this.nics = res.data.nics; + if (this.disks && this.disks.length > 0) { + this.enclosure = this.disks[0].enclosureId; + if (this.payLoad.options['create-raid'].raidList.length > 0) { + _.forEach(this.payLoad.options['create-raid'].raidList, r => { + r.enclosure = this.disks[0].enclosureId; + }) + } + } }) } , From 048a1386b3ec05ae674c3f489a0da870a35916b2 Mon Sep 17 00:00:00 2001 From: zhangdahai112 Date: Fri, 24 Sep 2021 17:47:59 +0800 Subject: [PATCH 6/9] =?UTF-8?q?build:=E7=89=88=E6=9C=AC=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 2 +- rackshift-web/src/common/about/AboutUs.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4ab0e915..8edc291f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,7 +3,7 @@ name: upload release asset on: create: tag: - - "v1.5.0" + - "v1.5.1" jobs: build: diff --git a/rackshift-web/src/common/about/AboutUs.vue b/rackshift-web/src/common/about/AboutUs.vue index fec4c6e3..62550d6b 100644 --- a/rackshift-web/src/common/about/AboutUs.vue +++ b/rackshift-web/src/common/about/AboutUs.vue @@ -47,7 +47,7 @@ export default { dialogVisible: false, githubUrl: 'https://github.com/rackshift/rackshift', websiteUrl: 'https://rackshift.io', - version: 'Release v1.5.0' + version: 'Release v1.5.1' } }, created() { From 98378792c3a6f1fe4bfde906ced295aefb17c9db Mon Sep 17 00:00:00 2001 From: zhangdahai112 Date: Tue, 28 Sep 2021 11:53:40 +0800 Subject: [PATCH 7/9] =?UTF-8?q?fix:=20idrac6=20java=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E7=AD=96=E7=95=A5=EF=BC=8C=E4=BB=A5=E5=8F=8A=20centos=20?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E8=84=9A=E6=9C=AC=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/db/migration/V37__fix_centos_ks.sql | 2 +- .../src/main/resources/db/migration/V39_fixidrac6java.sql | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 rackshift-server/src/main/resources/db/migration/V39_fixidrac6java.sql diff --git a/rackshift-server/src/main/resources/db/migration/V37__fix_centos_ks.sql b/rackshift-server/src/main/resources/db/migration/V37__fix_centos_ks.sql index 4b2d0380..6f312f5a 100644 --- a/rackshift-server/src/main/resources/db/migration/V37__fix_centos_ks.sql +++ b/rackshift-server/src/main/resources/db/migration/V37__fix_centos_ks.sql @@ -1 +1 @@ -update template set content = '# Copyright 2016-2018, DELL EMC, Inc.\ninstall\n#text\ngraphical\nunsupported_hardware\nurl --url=<%=repo%>\n# eula --agreed\nlang en_US.UTF-8\nkeyboard ''us''\ntimezone America/Los_Angeles --isUtc\nfirewall --enabled --http --ssh\nselinux --permissive\n<% if (version === \"6.5\") \{ %>\n bootloader --location=mbr --driveorder=<%=installDisk%> --append=\"crashkernel=auth rhgb\"\n<% \} else \{ %>\n bootloader --location=mbr --driveorder=<%=installDisk%> --boot-drive=<%=installDisk%> --append=\"crashkernel=auth rhgb\"\n<% \} %>\nservices --enabled=NetworkManager,sshd\n#network --device=<%=macaddress%> --noipv6 --activate\n\n# enable syslog\n<% if (typeof remoteLogging !== \'undefined\' && remoteLogging) \{ %>\n logging --host=<%=server%> --level=info\n<% \} %>\n\nauthconfig --enableshadow --passalgo=sha512 --enablefingerprint\n\n#Set the root account\nrootpw --iscrypted <%-rootEncryptedPassword%>\n\n#create all users\n<% if (typeof users !== \'undefined\') \{ %>\n<% users.forEach(function(user) \{ %>\n<%_ if( typeof user.uid !== \'undefined\' ) \{ _%>\n user --name=<%=user.name%> --uid=<%=user.uid%> --iscrypted --password <%-user.encryptedPassword%>\n<%_ \} else \{ _%>\n user --name=<%=user.name%> --iscrypted --password <%-user.encryptedPassword%>\n<%_ }}) _%>\n<% \} %>\n\n# Disk Partitioning\nzerombr\nclearpart --all --drives=<%=installDisk%>\n\n<% exist = false;%>\n\n<% if (typeof installPartitions !== \'undefined\' && installPartitions.length > 0) \{ %>\n <% installPartitions.forEach(function(partition) \{ %>\n <% if(partition.deviceType === ''lvm'')\{ %>\n <% exist = true;%>\n <%\}%>\n <%\})%>\n<%\}%>\n\n<% if (exist) \{%>\n # Create an LVM partition on sda\n part pv.01 --size=1 --ondisk=sda --grow --asprimary\n volgroup rootvg --pesize=4096 pv.01\n<%\}%>\n\n\n<% if (typeof installPartitions !== \'undefined\' && installPartitions.length > 0) \{ %>\n <% installPartitions.forEach(function(partition) \{ %>\n # mountPoint and size is required\n <% if(partition.mountPoint !== undefined && partition.size !== undefined) \{ %>\n \n # lvm support\n <% if(partition.deviceType === ''standard'' || partition.deviceType === undefined)\{ %>\n\n <% if(partition.fsType !== undefined) \{ %>\n <% if(partition.size === ''auto'') \{ %>\n partition <%=partition.mountPoint%> --size=250 --grow --fstype=<%=partition.fsType%>\n <% \} else \{ %>\n partition <%=partition.mountPoint%> --size=<%=partition.size%> --fstype=<%=partition.fsType%>\n <% \} %>\n <% \} else \{ %>\n # fsType is optional\n <% if(partition.size === ''auto'') \{ %>\n partition <%=partition.mountPoint%> --size=250 --grow\n <% \} else \{ %>\n partition <%=partition.mountPoint%> --size=<%=partition.size%>\n <% \} %>\n <% \} %>\n\n <% \} else \{%>\n # Create an LVM partition on sda\n #part pv.01 --size=1 --ondisk=sda --grow --asprimary\n #volgroup rootvg --pesize=4096 pv.01\n\n <% if(partition.fsType !== undefined) \{ %>\n <% if(partition.size === ''auto'') \{ %>\n logvol <%=partition.mountPoint%> --size=250 --grow --fstype=<%=partition.fsType%> --vgname=\"rootvg\" --name=<%=partition.lvmName%> \n <% \} else \{ %>\n logvol <%=partition.mountPoint%> --size=<%=partition.size%> --fstype=<%=partition.fsType%> --vgname=\"rootvg\" --name=<%=partition.lvmName%> \n <% \} %>\n <% \} else \{ %>\n # fsType is optional\n <% if(partition.size === ''auto'') \{ %>\n logvol <%=partition.mountPoint%> --size=250 --grow --vgname=\"rootvg\" --name=<%=partition.lvmName%> \n <% \} else \{ %>\n logvol <%=partition.mountPoint%> --size=<%=partition.size%> --vgname=\"rootvg\" --name=<%=partition.lvmName%>\n <% \} %>\n <% \} %>\n \n <% \} %>\n\n\n <% \} %>\n <% \}) %>\n<% \} else \{ %>\n # auto partitioning if no partitions are specified\n autopart\n<% \} %>\n\n# END of Disk Partitioning\n\n# Make sure we reboot into the new system when we are finished\nreboot\n\n# Package Selection\n%packages --nobase --excludedocs\n@core\n-*firmware\n-iscsi*\n-fcoe*\n-b43-openfwwf\nkernel-firmware\nwget\nsudo\nperl\nlibselinux-python\nnet-tools\n\n<% if( typeof kvm !== \'undefined\' && kvm ) \{ %>\n <% if (version === \"6.5\") \{ %>\n kvm\n virt-manager\n libvirt\n libvirt-python\n python-virtinst\n <% \} else \{ %>\n @virtualization-hypervisor\n @virtualization-client\n @virtualization-platform\n @virtualization-tools\n <% \} %>\n<% \} %>\n\n<% if (typeof packages !== \'undefined\') \{ %>\n<% for (var i = 0, len = packages.length; i < len; i++) \{ %>\n<%= packages[i] %>\n<% \} %>\n<% \} %>\n%end\n\n%pre\n# The progress notification is just something nice-to-have, so progress notification failure should\n# never impact the normal installation process\n<% if( typeof progressMilestones !== \'undefined\' && progressMilestones.preConfigUri ) \{ %>\n # the url may contain query, the symbol ''&'' will mess the command line logic, so the whole url need be wrapped in quotation marks\n /usr/bin/curl -X POST -H ''Content-Type:application/json'' \"http://<%=server%>:<%=port%><%-progressMilestones.preConfigUri%>\" || true\n<% \} %>\n\n%end\n\n%post --log=/root/install-post.log\n(\n#notify the current progress\n<% if( typeof progressMilestones !== \'undefined\' && progressMilestones.postConfigUri ) \{ %>\n echo \"RackHD POST script started - curl notify post progress\"\n # the url may contain query, the symbol ''&'' will mess the command line logic, so the whole url need be wrapped in quotation marks\n /usr/bin/curl -X POST -H ''Content-Type:application/json'' \"http://<%=server%>:<%=port%><%-progressMilestones.postConfigUri%>\" || true\n echo \"RackHD POST script started - curl notify post progress after\"\n<% \} %>\n\n# PLACE YOUR POST DIRECTIVES HERE\nPATH=/bin:/sbin:/usr/bin:/usr/sbin\nexport PATH\n\n# copying of SSH key\n<% if (typeof rootSshKey !== \'undefined\') \{ %>\n mkdir /root/.ssh\n echo <%=rootSshKey%> > /root/.ssh/authorized_keys\n chown -R root:root /root/.ssh\n<% \} %>\n<% if (typeof users !== \'undefined\') \{ %>\n<% users.forEach(function(user) \{ %>\n <% if (typeof user.sshKey !== \'undefined\') \{ %>\n mkdir /home/<%=user.name%>/.ssh\n echo <%=user.sshKey%> > /home/<%=user.name%>/.ssh/authorized_keys\n chown -R <%=user.name%>:<%=user.name%> /home/<%=user.name%>/.ssh\n <% \} %>\n<% \}) %>\n<% \} %>\n\n#set hostname\n<% if (typeof hostname !== \'undefined\') \{ %>\n echo <%=hostname%> > /etc/hostname\n <% if (typeof domain !== \'undefined\') \{ %>\n echo -e \"NETWORKING=yes\\nHOSTNAME=<%=hostname%>.<%=domain%>\" > /etc/sysconfig/network\n <% \} %>\n<% \} %>\n\n# Setup BOND Configuration\n<% if (typeof bonds !== \'undefined\') \{ %> \n\n<% bonds.forEach(function(n) \{ %>\n echo \"Configuring bond <%=n.name%>\"\n <% var bondname = n.name %>\n echo DEVICE=<%=bondname%> > /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo NAME=<%=bondname%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo TYPE=bond >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo BONDING_MASTER=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo BONDING_OPTS=\"mode=802.3ad miimon=10 lacp_rate=1\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo USERCTL=no >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo NM_CONTROLLED=no >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo ONBOOT=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% if ( typeof n.ipv4 != \'undefined\' ) \{ %>\n echo IPADDR=\"<%=n.ipv4.ipAddr%>\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo NETMASK=\"<%=n.ipv4.netmask%>\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% if ( undefined != n.ipv4.gateway) \{ %>\n echo GATEWAY=\"<%=n.ipv4.gateway%>\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% \} %>\n echo DEFROUTE=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo PEERDNS=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% \} %>\n\n echo IPV4_FAILURE_FATAL=\"no\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo IPV6INIT=\"no\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% if (typeof n.nics !== \'undefined\') \{ %>\n <% for (var i = 0, len = n.nics.length; i < len; i++) \{ %>\n interface=`grep -i /sys/class/net/*/address -e <%=n.nics[i]%> | cut -d \"/\" -f 5`\n echo DEVICE=$interface > /etc/sysconfig/network-scripts/ifcfg-$interface\n echo NAME=<%=bondname%>-slave >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo MASTER=<%=bondname%> >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo TYPE=Ethernet >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo ONBOOT=yes >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo NM_CONTROLLED=no >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo SLAVE=yes >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \} %>\n <% \} %>\n\n # Bonded VLAN Interface\n <% if ( typeof n.bondvlaninterfaces != \'undefined\' ) \{ %>\n <% for (var i = 0, len = n.bondvlaninterfaces.length; i < len; i++) \{ %>\n echo DEVICE=<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%> > /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo NAME=<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo ONPARENT=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo IPADDR=<%=n.bondvlaninterfaces[i].ipv4.ipAddr%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo NETMASK=<%=n.bondvlaninterfaces[i].ipv4.netmask%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n <% if ( undefined != n.bondvlaninterfaces[i].ipv4.gateway) \{ %>\n echo GATEWAY=<%=n.bondvlaninterfaces[i].ipv4.gateway%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n <% \} %>\n echo VLAN=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo NM_CONTROLLED=no >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n <% \} %>\n <% \} %>\n <%\}) %>\n \n systemctl stop NetworkManager\n systemctl disable NetworkManager\n modprobe --first-time bonding\n systemctl restart network\n<%\} %>\n\n# Setup static network configuration\n<%_ var macRegex = /(..:*)\{6\}/i; _%>\n<% if (typeof networkDevices !== \'undefined\') \{ %>\n <% ipv6 = 0 %>\n <% networkDevices.forEach(function(n) \{ %>\n interface=<%=n.device%>\n <%_ if (n.device.search(macRegex) === 0)\{ _%>\n interface=`grep -i /sys/class/net/*/address -e $interface | cut -d \"/\" -f 5`\n <%_ \} _%>\n <% if( undefined != n.ipv4 ) \{ %>\n <% if( undefined != n.ipv4.vlanIds ) \{ %>\n <% n.ipv4.vlanIds.forEach(function(vid) \{ %>\n echo \"Configuring vlan <%=vid%> on $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"DEVICE=$interface.<%=vid%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPADDR=<%=n.ipv4.ipAddr%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"NETMASK=<%=n.ipv4.netmask%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"GATEWAY=<%=n.ipv4.gateway%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"VLAN=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"ONBOOT=no\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \}); %>\n <% \} else \{ %>\n echo \"Configuring device $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"DEVICE=$interface\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <%_ if (n.device.search(macRegex) === 0)\{ _%>\n echo \"HWADDR=<%=n.device%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <%_ \} _%>\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPADDR=<%=n.ipv4.ipAddr%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"NETMASK=<%=n.ipv4.netmask%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% if ( undefined != n.ipv4.gateway) \{ %>\n echo \"GATEWAY=<%=n.ipv4.gateway%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \} %>\n <% if ( undefined != n.ipv4.mtu) \{ %>\n echo \"MTU=<%=n.ipv4.mtu%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \} %>\n\n <% \} %>\n <% \} %>\n <% if( undefined != n.ipv6 ) \{ %>\n <% if( undefined != n.ipv6.vlanIds ) \{ %>\n <% n.ipv6.vlanIds.forEach(function(vid) \{ %>\n echo \"Configuring vlan <%=vid%> on $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"DEVICE=$interface.<%=vid%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPV6INIT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPV6ADDR=<%=n.ipv6.ipAddr%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPV6_DEFAULTGW=<%=n.ipv6.gateway%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"VLAN=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n <% ipv6 = 1 %>\n <% \}); %>\n <% \} else \{ %>\n echo \"Configuring device $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"DEVICE=$interface\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPV6INIT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPV6ADDR=<%=n.ipv6.ipAddr%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPV6_DEFAULTGW=<%=n.ipv6.gateway%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% ipv6 = 1 %>\n <% \} %>\n <% \} %>\n <% \}); %>\n <% if( ipv6 ) \{ %>\n grep -q -F ''NETWORKING_IPV6=yes'' /etc/sysconfig/network || echo \"NETWORKING_IPV6=yes\" >> /etc/sysconfig/network\n grep -q -F ''IPV6_AUTOCONF=no'' /etc/sysconfig/network || echo \"IPV6_AUTOCONF=no\" >> /etc/sysconfig/network\n <% \} %>\n<% \} %>\n\n# Setup DNS servers\n<% if (typeof dnsServers !== \'undefined\') \{ %>\n <% if (typeof domain !== \'undefined\') \{ %>\n echo \"search <%=domain%>\" > /etc/resolv.conf\n <% \} %>\n <% dnsServers.forEach(function(dns) \{ %>\n echo \"nameserver <%=dns%>\" >> /etc/resolv.conf\n <% \}) %>\n chattr +i /etc/resolv.conf\n<% \} %>\n\n# Download the service to callback to RackHD after OS installation/reboot completion\necho \"RackHD POST script wget started\"\n/usr/bin/wget http://<%=server%>:<%=port%>/api/current/templates/<%=rackhdCallbackScript%>?nodeId=<%=nodeId%> -O /etc/rc.d/init.d/<%=rackhdCallbackScript%>\necho \"RackHD POST script chmod callback script\"\nchmod +x /etc/rc.d/init.d/<%=rackhdCallbackScript%>\n# Enable the above service, it should auto-disable after running once\nchkconfig <%=rackhdCallbackScript%> on\necho \"RackHD POST script chkconfig callback script complete\"\n\n# Enable Services\n<% if (typeof enableServices !== \'undefined\') \{ %>\n<% for (var i = 0, len = enableServices.length; i < len; i++) \{ %>\nsystemctl enable <%=enableServices[i]%>\n<% \} %>\n<% \} %>\n\n# Disable Services\n<% if (typeof disableServices !== \'undefined\') \{ %>\n<% for (var i = 0, len = disableServices.length; i < len; i++) \{ %>\nsystemctl disable <%=disableServices[i]%>\n<% \} %>\n<% \} %>\n\n#signify ORA the installation completed\nfor retry in $(seq 1 5);\ndo\n /usr/bin/curl -X POST -H ''Content-Type:application/json'' http://<%=server%>:<%=port%>/api/current/notification?nodeId=<%=nodeId%>\n if [ $? -eq 0 ]; then\n echo \"Post Notification succeeded\"\n break\n else\n echo \"Post Notification failed\"\n sleep 1\n fi\ndone;\n\n) 2>&1 >>/root/install-post-sh.log\nEOF\n%end\n\n# RackShift Custom Post-InstallScript\n%post --log=/root/rackshift-post-install.log\n<% if( typeof postInstallCommands !== \'undefined\' ) \{ %>\n <% postInstallCommands.forEach(function(n) \{ %>\n <%-n%>\n <% \}); %>\n<% \} %>\t\n%end\n' where name = 'centos-ks'; \ No newline at end of file +update template set content = '# Copyright 2016-2018, DELL EMC, Inc.\ninstall\n#text\ngraphical\nunsupported_hardware\nurl --url=<%=repo%>\n# eula --agreed\nlang en_US.UTF-8\nkeyboard ''us''\ntimezone America/Los_Angeles --isUtc\nfirewall --enabled --http --ssh\nselinux --permissive\n<% if (version === \"6.5\") \{ %>\n bootloader --location=mbr --driveorder=<%=installDisk%> --append=\"crashkernel=auth rhgb\"\n<% \} else \{ %>\n bootloader --location=mbr --driveorder=<%=installDisk%> --boot-drive=<%=installDisk%> --append=\"crashkernel=auth rhgb\"\n<% \} %>\nservices --enabled=NetworkManager,sshd\n#network --device=<%=macaddress%> --noipv6 --activate\n\n# enable syslog\n<% if (typeof remoteLogging !== \'undefined\' && remoteLogging) \{ %>\n logging --host=<%=server%> --level=info\n<% \} %>\n\nauthconfig --enableshadow --passalgo=sha512 --enablefingerprint\n\n#Set the root account\nrootpw --iscrypted <%-rootEncryptedPassword%>\n\n#create all users\n<% if (typeof users !== \'undefined\') \{ %>\n<% users.forEach(function(user) \{ %>\n<%_ if( typeof user.uid !== \'undefined\' ) \{ _%>\n user --name=<%=user.name%> --uid=<%=user.uid%> --iscrypted --password <%-user.encryptedPassword%>\n<%_ \} else \{ _%>\n user --name=<%=user.name%> --iscrypted --password <%-user.encryptedPassword%>\n<%_ \}\}) _%>\n<% \} %>\n\n# Disk Partitioning\nzerombr\nclearpart --all --drives=<%=installDisk%>\n\n<% exist = false;%>\n\n<% if (typeof installPartitions !== \'undefined\' && installPartitions.length > 0) \{ %>\n <% installPartitions.forEach(function(partition) \{ %>\n <% if(partition.deviceType === ''lvm'')\{ %>\n <% exist = true;%>\n <%\}%>\n <%\})%>\n<%\}%>\n\n<% if (exist) \{%>\n # Create an LVM partition on sda\n part pv.01 --size=1 --ondisk=sda --grow --asprimary\n volgroup rootvg --pesize=4096 pv.01\n<%\}%>\n\n\n<% if (typeof installPartitions !== \'undefined\' && installPartitions.length > 0) \{ %>\n <% installPartitions.forEach(function(partition) \{ %>\n # mountPoint and size is required\n <% if(partition.mountPoint !== undefined && partition.size !== undefined) \{ %>\n \n # lvm support\n <% if(partition.deviceType === ''standard'' || partition.deviceType === undefined)\{ %>\n\n <% if(partition.fsType !== undefined) \{ %>\n <% if(partition.size === ''auto'') \{ %>\n partition <%=partition.mountPoint%> --size=250 --grow --fstype=<%=partition.fsType%>\n <% \} else \{ %>\n partition <%=partition.mountPoint%> --size=<%=partition.size%> --fstype=<%=partition.fsType%>\n <% \} %>\n <% \} else \{ %>\n # fsType is optional\n <% if(partition.size === ''auto'') \{ %>\n partition <%=partition.mountPoint%> --size=250 --grow\n <% \} else \{ %>\n partition <%=partition.mountPoint%> --size=<%=partition.size%>\n <% \} %>\n <% \} %>\n\n <% \} else \{%>\n # Create an LVM partition on sda\n #part pv.01 --size=1 --ondisk=sda --grow --asprimary\n #volgroup rootvg --pesize=4096 pv.01\n\n <% if(partition.fsType !== undefined) \{ %>\n <% if(partition.size === ''auto'') \{ %>\n logvol <%=partition.mountPoint%> --size=250 --grow --fstype=<%=partition.fsType%> --vgname=\"rootvg\" --name=<%=partition.lvmName%> \n <% \} else \{ %>\n logvol <%=partition.mountPoint%> --size=<%=partition.size%> --fstype=<%=partition.fsType%> --vgname=\"rootvg\" --name=<%=partition.lvmName%> \n <% \} %>\n <% \} else \{ %>\n # fsType is optional\n <% if(partition.size === ''auto'') \{ %>\n logvol <%=partition.mountPoint%> --size=250 --grow --vgname=\"rootvg\" --name=<%=partition.lvmName%> \n <% \} else \{ %>\n logvol <%=partition.mountPoint%> --size=<%=partition.size%> --vgname=\"rootvg\" --name=<%=partition.lvmName%>\n <% \} %>\n <% \} %>\n \n <% \} %>\n\n\n <% \} %>\n <% \}) %>\n<% \} else \{ %>\n # auto partitioning if no partitions are specified\n autopart\n<% \} %>\n\n# END of Disk Partitioning\n\n# Make sure we reboot into the new system when we are finished\nreboot\n\n# Package Selection\n%packages --nobase --excludedocs\n@core\n-*firmware\n-iscsi*\n-fcoe*\n-b43-openfwwf\nkernel-firmware\nwget\nsudo\nperl\nlibselinux-python\nnet-tools\n\n<% if( typeof kvm !== \'undefined\' && kvm ) \{ %>\n <% if (version === \"6.5\") \{ %>\n kvm\n virt-manager\n libvirt\n libvirt-python\n python-virtinst\n <% \} else \{ %>\n @virtualization-hypervisor\n @virtualization-client\n @virtualization-platform\n @virtualization-tools\n <% \} %>\n<% \} %>\n\n<% if (typeof packages !== \'undefined\') \{ %>\n<% for (var i = 0, len = packages.length; i < len; i++) \{ %>\n<%= packages[i] %>\n<% \} %>\n<% \} %>\n%end\n\n%pre\n# The progress notification is just something nice-to-have, so progress notification failure should\n# never impact the normal installation process\n<% if( typeof progressMilestones !== \'undefined\' && progressMilestones.preConfigUri ) \{ %>\n # the url may contain query, the symbol ''&'' will mess the command line logic, so the whole url need be wrapped in quotation marks\n /usr/bin/curl -X POST -H ''Content-Type:application/json'' \"http://<%=server%>:<%=port%><%-progressMilestones.preConfigUri%>\" || true\n<% \} %>\n\n%end\n\n%post --log=/root/install-post.log\n(\n#notify the current progress\n<% if( typeof progressMilestones !== \'undefined\' && progressMilestones.postConfigUri ) \{ %>\n echo \"RackHD POST script started - curl notify post progress\"\n # the url may contain query, the symbol ''&'' will mess the command line logic, so the whole url need be wrapped in quotation marks\n /usr/bin/curl -X POST -H ''Content-Type:application/json'' \"http://<%=server%>:<%=port%><%-progressMilestones.postConfigUri%>\" || true\n echo \"RackHD POST script started - curl notify post progress after\"\n<% \} %>\n\n# PLACE YOUR POST DIRECTIVES HERE\nPATH=/bin:/sbin:/usr/bin:/usr/sbin\nexport PATH\n\n# copying of SSH key\n<% if (typeof rootSshKey !== \'undefined\') \{ %>\n mkdir /root/.ssh\n echo <%=rootSshKey%> > /root/.ssh/authorized_keys\n chown -R root:root /root/.ssh\n<% \} %>\n<% if (typeof users !== \'undefined\') \{ %>\n<% users.forEach(function(user) \{ %>\n <% if (typeof user.sshKey !== \'undefined\') \{ %>\n mkdir /home/<%=user.name%>/.ssh\n echo <%=user.sshKey%> > /home/<%=user.name%>/.ssh/authorized_keys\n chown -R <%=user.name%>:<%=user.name%> /home/<%=user.name%>/.ssh\n <% \} %>\n<% \}) %>\n<% \} %>\n\n#set hostname\n<% if (typeof hostname !== \'undefined\') \{ %>\n echo <%=hostname%> > /etc/hostname\n <% if (typeof domain !== \'undefined\') \{ %>\n echo -e \"NETWORKING=yes\\nHOSTNAME=<%=hostname%>.<%=domain%>\" > /etc/sysconfig/network\n <% \} %>\n<% \} %>\n\n# Setup BOND Configuration\n<% if (typeof bonds !== \'undefined\') \{ %> \n\n<% bonds.forEach(function(n) \{ %>\n echo \"Configuring bond <%=n.name%>\"\n <% var bondname = n.name %>\n echo DEVICE=<%=bondname%> > /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo NAME=<%=bondname%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo TYPE=bond >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo BONDING_MASTER=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo BONDING_OPTS=\"mode=802.3ad miimon=10 lacp_rate=1\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo USERCTL=no >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo NM_CONTROLLED=no >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo ONBOOT=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% if ( typeof n.ipv4 != \'undefined\' ) \{ %>\n echo IPADDR=\"<%=n.ipv4.ipAddr%>\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo NETMASK=\"<%=n.ipv4.netmask%>\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% if ( undefined != n.ipv4.gateway) \{ %>\n echo GATEWAY=\"<%=n.ipv4.gateway%>\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% \} %>\n echo DEFROUTE=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo PEERDNS=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% \} %>\n\n echo IPV4_FAILURE_FATAL=\"no\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n echo IPV6INIT=\"no\" >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>\n <% if (typeof n.nics !== \'undefined\') \{ %>\n <% for (var i = 0, len = n.nics.length; i < len; i++) \{ %>\n interface=`grep -i /sys/class/net/*/address -e <%=n.nics[i]%> | cut -d \"/\" -f 5`\n echo DEVICE=$interface > /etc/sysconfig/network-scripts/ifcfg-$interface\n echo NAME=<%=bondname%>-slave >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo MASTER=<%=bondname%> >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo TYPE=Ethernet >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo ONBOOT=yes >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo NM_CONTROLLED=no >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo SLAVE=yes >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \} %>\n <% \} %>\n\n # Bonded VLAN Interface\n <% if ( typeof n.bondvlaninterfaces != \'undefined\' ) \{ %>\n <% for (var i = 0, len = n.bondvlaninterfaces.length; i < len; i++) \{ %>\n echo DEVICE=<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%> > /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo NAME=<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo ONPARENT=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo IPADDR=<%=n.bondvlaninterfaces[i].ipv4.ipAddr%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo NETMASK=<%=n.bondvlaninterfaces[i].ipv4.netmask%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n <% if ( undefined != n.bondvlaninterfaces[i].ipv4.gateway) \{ %>\n echo GATEWAY=<%=n.bondvlaninterfaces[i].ipv4.gateway%> >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n <% \} %>\n echo VLAN=yes >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n echo NM_CONTROLLED=no >> /etc/sysconfig/network-scripts/ifcfg-<%=n.name%>.<%=n.bondvlaninterfaces[i].vlanid%>\n <% \} %>\n <% \} %>\n <%\}) %>\n \n systemctl stop NetworkManager\n systemctl disable NetworkManager\n modprobe --first-time bonding\n systemctl restart network\n<%\} %>\n\n# Setup static network configuration\n<%_ var macRegex = /(..:*)\{6\}/i; _%>\n<% if (typeof networkDevices !== \'undefined\') \{ %>\n <% ipv6 = 0 %>\n <% networkDevices.forEach(function(n) \{ %>\n interface=<%=n.device%>\n <%_ if (n.device.search(macRegex) === 0)\{ _%>\n interface=`grep -i /sys/class/net/*/address -e $interface | cut -d \"/\" -f 5`\n <%_ \} _%>\n <% if( undefined != n.ipv4 ) \{ %>\n <% if( undefined != n.ipv4.vlanIds && n.ipv4.vlanIds.length > 0 ) \{ %>\n <% n.ipv4.vlanIds.forEach(function(vid) \{ %>\n echo \"Configuring vlan <%=vid%> on $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"DEVICE=$interface.<%=vid%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPADDR=<%=n.ipv4.ipAddr%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"NETMASK=<%=n.ipv4.netmask%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"GATEWAY=<%=n.ipv4.gateway%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"VLAN=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"ONBOOT=no\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \}); %>\n <% \} else \{ %>\n echo \"Configuring device $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"DEVICE=$interface\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <%_ if (n.device.search(macRegex) === 0)\{ _%>\n echo \"HWADDR=<%=n.device%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <%_ \} _%>\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPADDR=<%=n.ipv4.ipAddr%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"NETMASK=<%=n.ipv4.netmask%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% if ( undefined != n.ipv4.gateway) \{ %>\n echo \"GATEWAY=<%=n.ipv4.gateway%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \} %>\n <% if ( undefined != n.ipv4.mtu) \{ %>\n echo \"MTU=<%=n.ipv4.mtu%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% \} %>\n\n <% \} %>\n <% \} %>\n <% if( undefined != n.ipv6 ) \{ %>\n <% if( undefined != n.ipv6.vlanIds ) \{ %>\n <% n.ipv6.vlanIds.forEach(function(vid) \{ %>\n echo \"Configuring vlan <%=vid%> on $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"DEVICE=$interface.<%=vid%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPV6INIT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPV6ADDR=<%=n.ipv6.ipAddr%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"IPV6_DEFAULTGW=<%=n.ipv6.gateway%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n echo \"VLAN=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface.<%=vid%>\n <% ipv6 = 1 %>\n <% \}); %>\n <% \} else \{ %>\n echo \"Configuring device $interface\"\n sed -i ''/^BOOTPROTO=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n sed -i ''/^ONBOOT=/d'' /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"DEVICE=$interface\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"BOOTPROTO=none\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"ONBOOT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPV6INIT=yes\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPV6ADDR=<%=n.ipv6.ipAddr%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n echo \"IPV6_DEFAULTGW=<%=n.ipv6.gateway%>/<%=n.ipv6.prefixlen%>\" >> /etc/sysconfig/network-scripts/ifcfg-$interface\n <% ipv6 = 1 %>\n <% \} %>\n <% \} %>\n <% \}); %>\n <% if( ipv6 ) \{ %>\n grep -q -F ''NETWORKING_IPV6=yes'' /etc/sysconfig/network || echo \"NETWORKING_IPV6=yes\" >> /etc/sysconfig/network\n grep -q -F ''IPV6_AUTOCONF=no'' /etc/sysconfig/network || echo \"IPV6_AUTOCONF=no\" >> /etc/sysconfig/network\n <% \} %>\n<% \} %>\n\n# Setup DNS servers\n<% if (typeof dnsServers !== \'undefined\') \{ %>\n <% if (typeof domain !== \'undefined\') \{ %>\n echo \"search <%=domain%>\" > /etc/resolv.conf\n <% \} %>\n <% dnsServers.forEach(function(dns) \{ %>\n echo \"nameserver <%=dns%>\" >> /etc/resolv.conf\n <% \}) %>\n chattr +i /etc/resolv.conf\n<% \} %>\n\n# Download the service to callback to RackHD after OS installation/reboot completion\necho \"RackHD POST script wget started\"\n/usr/bin/wget http://<%=server%>:<%=port%>/api/current/templates/<%=rackhdCallbackScript%>?nodeId=<%=nodeId%> -O /etc/rc.d/init.d/<%=rackhdCallbackScript%>\necho \"RackHD POST script chmod callback script\"\nchmod +x /etc/rc.d/init.d/<%=rackhdCallbackScript%>\n# Enable the above service, it should auto-disable after running once\nchkconfig <%=rackhdCallbackScript%> on\necho \"RackHD POST script chkconfig callback script complete\"\n\n# Enable Services\n<% if (typeof enableServices !== \'undefined\') \{ %>\n<% for (var i = 0, len = enableServices.length; i < len; i++) \{ %>\nsystemctl enable <%=enableServices[i]%>\n<% \} %>\n<% \} %>\n\n# Disable Services\n<% if (typeof disableServices !== \'undefined\') \{ %>\n<% for (var i = 0, len = disableServices.length; i < len; i++) \{ %>\nsystemctl disable <%=disableServices[i]%>\n<% \} %>\n<% \} %>\n\n#signify ORA the installation completed\nfor retry in $(seq 1 5);\ndo\n /usr/bin/curl -X POST -H ''Content-Type:application/json'' http://<%=server%>:<%=port%>/api/current/notification?nodeId=<%=nodeId%>\n if [ $? -eq 0 ]; then\n echo \"Post Notification succeeded\"\n break\n else\n echo \"Post Notification failed\"\n sleep 1\n fi\ndone;\n\n) 2>&1 >>/root/install-post-sh.log\nEOF\n%end\n\n# RackShift Custom Post-InstallScript\n%post --log=/root/rackshift-post-install.log\n<% if( typeof postInstallCommands !== \'undefined\' ) \{ %>\n <% postInstallCommands.forEach(function(n) \{ %>\n <%-n%>\n <% \}); %>\n<% \} %>\t\n%end\n' where name = 'centos-ks'; \ No newline at end of file diff --git a/rackshift-server/src/main/resources/db/migration/V39_fixidrac6java.sql b/rackshift-server/src/main/resources/db/migration/V39_fixidrac6java.sql new file mode 100644 index 00000000..0a53978b --- /dev/null +++ b/rackshift-server/src/main/resources/db/migration/V39_fixidrac6java.sql @@ -0,0 +1,3 @@ +update system_parameter +set param_value = 'registry.cn-qingdao.aliyuncs.com/x-lab/kvm:v1.5.1' +where param_key = 'kvm.image'; \ No newline at end of file From 956e3945228178846921585eb507f2da0bbc8eb4 Mon Sep 17 00:00:00 2001 From: zhangdahai112 Date: Tue, 28 Sep 2021 13:46:03 +0800 Subject: [PATCH 8/9] =?UTF-8?q?fix:=20centos=20=E5=AE=89=E8=A3=85=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration/{V39_fixidrac6java.sql => V39__fixidrac6java.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename rackshift-server/src/main/resources/db/migration/{V39_fixidrac6java.sql => V39__fixidrac6java.sql} (100%) diff --git a/rackshift-server/src/main/resources/db/migration/V39_fixidrac6java.sql b/rackshift-server/src/main/resources/db/migration/V39__fixidrac6java.sql similarity index 100% rename from rackshift-server/src/main/resources/db/migration/V39_fixidrac6java.sql rename to rackshift-server/src/main/resources/db/migration/V39__fixidrac6java.sql From fa592024e2487737a0196cd238f677c385c362fe Mon Sep 17 00:00:00 2001 From: zhangdahai112 Date: Tue, 28 Sep 2021 14:28:15 +0800 Subject: [PATCH 9/9] build:v1.5.1 --- .github/workflows/release.yml | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8edc291f..001979e5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,26 +49,18 @@ jobs: ``` ## 新增功能 - - 支持 浪潮/SuperMicro/DELL/h3c/曙光 远程 KVM - - 开关机状态刷新 - - 自定义 post-installation 脚本 - - InspurM5 RAID - - Suma,Lenovo 装机支持 - - ## 功能优化 - - 密码打印脱敏 - - 兼容超微服务器产品型号缺失 + - Huawei 2288H V3 V5 RAID ## 问题修复 - - 插件选择裸金属分页问题 - - h3c 磁盘 raid 失败的问题 - - ubuntu 20.04 和 windows 2019 完成后状态显示错误的问题 - - 重新执行安装脚本覆盖之前配置的问题 + - 浪潮M5 删除与创建 RAID 失败 + - CentOS 装机指定脚本安装 ip 指定失效 + - IDRAC6 远程 kvm 报错 + - 更新删除镜像报错 # 产品文档 点击 [完整文档](https://rackshift.io) 查看完整的安装和使用文档 # 离线安装包 - - 百度网盘下载链接: https://pan.baidu.com/s/1v0QYNZr1KGDlOxzlyoVGdA 提取码: ebz4 + - [离线安装包下载地址](https://community.fit2cloud.com/#/download/rackshift/v1-5-1) - name: Upload Release Asset id: upload-release-asset