But I do find recently 4.1 broken on baremetal, because some merge flush part of my code. I am going to file a block bug for that
> -----Original Message----- > From: Chip Childers [mailto:chip.child...@sungard.com] > Sent: Friday, March 01, 2013 4:44 PM > To: <cloudstack-dev@incubator.apache.org> > Cc: Frank Zhang > Subject: Re: git commit: refs/heads/4.1 - CloudStack CLOUDSTACK-774 > Supporting kickstart in CloudStack baremetal > > Is this a blocker bug fix? > > On Mar 1, 2013, at 7:22 PM, Frank Zhang <frank.zh...@citrix.com> wrote: > > > Oh, I am sorry. I forgot the last day of Feb is 28 ... didn't notice > > today is 3/1 > > > >> -----Original Message----- > >> From: David Nalley [mailto:da...@gnsa.us] > >> Sent: Friday, March 01, 2013 3:10 PM > >> To: cloudstack-dev@incubator.apache.org > >> Cc: cloudstack-comm...@incubator.apache.org > >> Subject: Re: git commit: refs/heads/4.1 - CloudStack CLOUDSTACK-774 > >> Supporting kickstart in CloudStack baremetal > >> > >> Why did this hit 4.1? > >> > >> > >> > >> On Fri, Mar 1, 2013 at 6:04 PM, <frankzh...@apache.org> wrote: > >>> Updated Branches: > >>> refs/heads/4.1 a47f32343 -> 75aad6763 > >>> > >>> > >>> CloudStack CLOUDSTACK-774 > >>> Supporting kickstart in CloudStack baremetal > >>> > >>> make kikcstart working with ubuntu > >>> > >>> > >>> Project: > >>> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo > >>> Commit: > >>> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/7 > >>> 5a > >>> ad676 > >>> Tree: > >>> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/75a > >>> ad > >>> 676 > >>> Diff: > >>> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/75a > >>> ad > >>> 676 > >>> > >>> Branch: refs/heads/4.1 > >>> Commit: 75aad6763b57ab2ebbe79101888368a3bd8f4185 > >>> Parents: a47f323 > >>> Author: Frank Zhang <frank.zh...@citrix.com> > >>> Authored: Fri Mar 1 15:03:10 2013 -0800 > >>> Committer: Frank Zhang <frank.zh...@citrix.com> > >>> Committed: Fri Mar 1 15:03:33 2013 -0800 > >>> > >>> ---------------------------------------------------------------------- > >>> .../BaremetalKickStartPxeResource.java | 2 +- > >>> .../BaremetalKickStartServiceImpl.java | 33 ++++++++- > >>> .../PrepareKickstartPxeServerCommand.java | 31 +++++--- > >>> .../ping/prepare_kickstart_kernel_initrd.py | 55 ++++++++------- > >>> 4 files changed, 80 insertions(+), 41 deletions(-) > >>> -------------------------------------------------------------------- > >>> -- > >>> > >>> > >>> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/75a > >>> ad > >> > 676/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkserv > >> i > >>> ce/BaremetalKickStartPxeResource.java > >>> -------------------------------------------------------------------- > >>> -- > >>> diff --git > >> > a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservic > >> e > >>> /BaremetalKickStartPxeResource.java > >> > b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservic > >> e > >>> /BaremetalKickStartPxeResource.java > >>> index 2b9b140..58c6e86 100755 > >>> --- > >> > a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservic > >> e > >>> /BaremetalKickStartPxeResource.java > >>> +++ > >> b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkser > >>> +++ vice/BaremetalKickStartPxeResource.java > >>> @@ -175,7 +175,7 @@ public class BaremetalKickStartPxeResource > >> extends BaremetalPxeResourceBase { > >>> } > >>> > >>> String copyTo = String.format("%s/%s", _tftpDir, > >> cmd.getTemplateUuid()); > >>> - String script = String.format("python > >> /usr/bin/prepare_kickstart_kernel_initrd.py %s %s", cmd.getRepo(), > >> copyTo); > >>> + String script = String.format("python > >>> + /usr/bin/prepare_kickstart_kernel_initrd.py %s %s %s", > >>> + cmd.getKernel(), cmd.getInitrd(), copyTo); > >>> > >>> if (!SSHCmdHelper.sshExecuteCmd(sshConnection, script)) { > >>> return new Answer(cmd, false, "prepare kickstart at > >>> pxe server " + _ip + " failed, command:" + script); > >>> > >>> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/75a > >>> ad > >> > 676/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkserv > >> i > >>> ce/BaremetalKickStartServiceImpl.java > >>> -------------------------------------------------------------------- > >>> -- > >>> diff --git > >> > a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservic > >> e > >>> /BaremetalKickStartServiceImpl.java > >> > b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservic > >> e > >>> /BaremetalKickStartServiceImpl.java > >>> index ba5fb0d..8a5ac78 100755 > >>> --- > >> > a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservic > >> e > >>> /BaremetalKickStartServiceImpl.java > >>> +++ > >> b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkser > >>> +++ vice/BaremetalKickStartServiceImpl.java > >>> @@ -95,11 +95,36 @@ public class BaremetalKickStartServiceImpl > >>> extends > >> BareMetalPxeServiceBase imple > >>> try { > >>> String tpl = profile.getTemplate().getUrl(); > >>> assert tpl != null : "How can a null template get here!!!"; > >>> - String[] tpls = tpl.split(";"); > >>> - assert tpls.length == 2 : "Template is not correctly > >>> encoded. " + tpl; > >>> + String[] tpls = tpl.split(";"); > >>> + CloudRuntimeException err = new > >> CloudRuntimeException(String.format("template url[%s] is not > >> correctly encoded. it must be in format of > >> ks=http_link_to_kickstartfile;kernel=nfs_path_to_pxe_kernel;initrd=nf > >> s_pa > >> th_to_pxe_initrd", tpl)); > >>> + if (tpls.length != 3) { > >>> + throw err; > >>> + } > >>> + > >>> + String ks = null; > >>> + String kernel = null; > >>> + String initrd = null; > >>> + > >>> + for (String t : tpls) { > >>> + String[] kv = t.split("="); > >>> + if (kv.length != 2) { > >>> + throw err; > >>> + } > >>> + if (kv[0].equals("ks")) { > >>> + ks = kv[1]; > >>> + } else if (kv[0].equals("kernel")) { > >>> + kernel = kv[1]; > >>> + } else if (kv[0].equals("initrd")) { > >>> + initrd = kv[1]; > >>> + } else { > >>> + throw err; > >>> + } > >>> + } > >>> + > >>> PrepareKickstartPxeServerCommand cmd = new > >> PrepareKickstartPxeServerCommand(); > >>> - cmd.setKsFile(tpls[0]); > >>> - cmd.setRepo(tpls[1]); > >>> + cmd.setKsFile(ks); > >>> + cmd.setInitrd(initrd); > >>> + cmd.setKernel(kernel); > >>> cmd.setMac(nic.getMacAddress()); > >>> cmd.setTemplateUuid(template.getUuid()); > >>> Answer aws = _agentMgr.send(pxeVo.getHostId(), cmd); > >>> > >>> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/75a > >>> ad > >> > 676/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkserv > >> i > >>> ce/PrepareKickstartPxeServerCommand.java > >>> -------------------------------------------------------------------- > >>> -- > >>> diff --git > >> > a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservic > >> e > >>> /PrepareKickstartPxeServerCommand.java > >> > b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservic > >> e > >>> /PrepareKickstartPxeServerCommand.java > >>> index 8951547..25dfeb7 100755 > >>> --- > >> > a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservic > >> e > >>> /PrepareKickstartPxeServerCommand.java > >>> +++ > >> b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkser > >>> +++ vice/PrepareKickstartPxeServerCommand.java > >>> @@ -22,10 +22,11 @@ import com.cloud.agent.api.Command; > >>> > >>> public class PrepareKickstartPxeServerCommand extends Command { > >>> private String ksFile; > >>> - private String repo; > >>> private String templateUuid; > >>> private String mac; > >>> - private String ksDevice; > >>> + private String ksDevice; > >>> + private String kernel; > >>> + private String initrd; > >>> > >>> @Override > >>> public boolean executeInSequence() { @@ -39,15 +40,23 @@ public > >>> class PrepareKickstartPxeServerCommand extends Command { > >>> public void setKsFile(String ksFile) { > >>> this.ksFile = ksFile; > >>> } > >>> - > >>> - public String getRepo() { > >>> - return repo; > >>> - } > >>> - > >>> - public void setRepo(String repo) { > >>> - this.repo = repo; > >>> - } > >>> - > >>> + > >>> + public String getKernel() { > >>> + return kernel; > >>> + } > >>> + > >>> + public void setKernel(String kernel) { > >>> + this.kernel = kernel; > >>> + } > >>> + > >>> + public String getInitrd() { > >>> + return initrd; > >>> + } > >>> + > >>> + public void setInitrd(String initrd) { > >>> + this.initrd = initrd; > >>> + } > >>> + > >>> public String getTemplateUuid() { > >>> return templateUuid; > >>> } > >>> > >>> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/75a > >>> ad 676/scripts/network/ping/prepare_kickstart_kernel_initrd.py > >>> -------------------------------------------------------------------- > >>> -- diff --git > >>> a/scripts/network/ping/prepare_kickstart_kernel_initrd.py > >>> b/scripts/network/ping/prepare_kickstart_kernel_initrd.py > >>> index b234a62..ff61848 100755 > >>> --- a/scripts/network/ping/prepare_kickstart_kernel_initrd.py > >>> +++ b/scripts/network/ping/prepare_kickstart_kernel_initrd.py > >>> @@ -21,50 +21,55 @@ import tempfile > >>> import os.path > >>> import os > >>> > >>> -iso_folder = '' > >>> -copy_to = '' > >>> +kernel = None > >>> +initrd = None > >>> +copy_to = None > >>> > >>> def cmd(cmdstr, err=True): > >>> + print cmdstr > >>> if os.system(cmdstr) != 0 and err: > >>> raise Exception("Failed to run shell command: %s" % cmdstr) > >>> > >>> def prepare(): > >>> + global kernel, initrd, copy_to > >>> try: > >>> - kernel = os.path.join(copy_to, "vmlinuz") > >>> - initrd = os.path.join(copy_to, "initrd.img") > >>> - if os.path.exists(kernel) and os.path.exists(initrd): > >>> + k = os.path.join(copy_to, "vmlinuz") > >>> + i = os.path.join(copy_to, "initrd.img") > >>> + if os.path.exists(k) and os.path.exists(i): > >>> print "Having template(%s) prepared already, skip > >>> copying" % > >> copy_to > >>> return 0 > >>> else: > >>> if not os.path.exists(copy_to): > >>> os.makedirs(copy_to) > >>> > >>> - mnt_path = tempfile.mkdtemp() > >>> - try: > >>> - mnt = "mount %s %s" % (iso_folder, mnt_path) > >>> - cmd(mnt) > >>> - > >>> - kernel = os.path.join(mnt_path, "vmlinuz") > >>> - initrd = os.path.join(mnt_path, "initrd.img") > >>> - cp = "cp -f %s %s/" % (kernel, copy_to) > >>> - cmd(cp) > >>> - cp = "cp -f %s %s/" % (initrd, copy_to) > >>> - cmd(cp) > >>> - finally: > >>> - umnt = "umount %s" % mnt_path > >>> - cmd(umnt, False) > >>> - rm = "rm -r %s" % mnt_path > >>> - cmd(rm, False) > >>> - return 0 > >>> + > >>> + def copy_from_nfs(src, dst): > >>> + mnt_path = tempfile.mkdtemp() > >>> + try: > >>> + nfs_path = os.path.dirname(src) > >>> + filename = os.path.basename(src) > >>> + t = os.path.join(mnt_path, filename) > >>> + mnt = "mount %s %s" % (nfs_path, mnt_path) > >>> + cmd(mnt) > >>> + cp = "cp -f %s %s" % (t, dst) > >>> + cmd(cp) > >>> + finally: > >>> + umnt = "umount %s" % mnt_path > >>> + cmd(umnt, False) > >>> + rm = "rm -r %s" % mnt_path > >>> + cmd(rm, False) > >>> + > >>> + copy_from_nfs(kernel, copy_to) > >>> + copy_from_nfs(initrd, copy_to) > >>> except Exception, e: > >>> print e > >>> return 1 > >>> > >>> if __name__ == "__main__": > >>> - if len(sys.argv) < 3: > >>> - print "Usage: prepare_kickstart_kerneal_initrd.py > >> path_to_kernel_initrd_iso path_kernel_initrd_copy_to" > >>> + if len(sys.argv) < 4: > >>> + print "Usage: prepare_kickstart_kerneal_initrd.py > >>> + path_to_kernel > >> path_to_initrd path_kernel_initrd_copy_to" > >>> sys.exit(1) > >>> > >>> - (iso_folder, copy_to) = sys.argv[1:] > >>> + (kernel, initrd, copy_to) = sys.argv[1:] > >>> sys.exit(prepare()) > >