summaryrefslogblamecommitdiffstats
path: root/virtualization/menulist-creator
blob: d4da929c958d8b521564142fb9ee2490471cec86 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14













                                                                                
                                                                

                                                                      








                                                                                
                        
                                                
 
















                                                                                
                                                                             

                           
                                            
                                                                      





                                                         





                                                       


                                                       
                                                           


                                                   
                                                                        


                                          
                                                                              
                           
                                                         





                                                              
                                                             





                                                                           
                                                                






                                                                             
                                                                            

                           
                                                                   






                                                                  
                                                                  
                                                              
                
                                                                     




                               

                                                                    




                                                    

                                                                  


                                   
                                                              

                           
                                                          








                                                                                
                                                          
 



                                                                  



                                              




                                                                  




                                                                  



                                                                         

                                              
      


                                               



                                                                               
                                

                                                            
                                                  
                                                         
                                                           







                                
                                                                

                                                                 

                                                             
                                                                         

                                                             

                                                                         
                     



                                                             
                                                                             
                                                                        
                                                                           
                                                         
                                                                      


      

                                                            
                                   
 
                                               
                                                                 


                                                                                 
                         
                                                   





                                                              
 
                                                                         




                                                 



      








                                              
                                                  
               
#!/bin/bash

################################################################################
## Creates vmware and vbox (script creation for vbox is not implented yet)
## runscripts from xmlfiles.
## Use template file runvmware-v2 for executeables
##
##
## Structure:
##   ${vmdir}/$image.xml                    configurationfile
##   ${vmdir}/$image.vmdk                   vmware image file 
##   ${vmdir}/$image.vbox                   vbox image file 
##   ${vmdir}/runscripts/$pool/*.vmware     vmware runscript 
##   ${vmdir}/runscripts/$pool/*.vbox       virtualbox runscript 
##   ${vmdir}/xdialog-files/$pool/*.xdialog xdialog menu entrys 
##   ${vmdir}/xdmsession/$pool/*.desktop    .desktop files for xdm,
##                                          can't avoid masses of them
##   ${vmdir}/templates/runvmware-v2        image exec template script
################################################################################

#TODO: check first if this xml file should be used, if not jump out of the
# while loop. reducee checks and resources

# Just needed if vmdir is somewhere else
vmdir="." && cd ${vmdir}

# template for runvmware
templatevmware="${vmdir}/templates/runvmware-v2"

# Take all xml files and work with them
for xml in *.xml;do
  
  # converts the XML file to utf-8, whyever we need that
  # inefficient here, because we don't need utf-8 for every xml file
  # but most secure place. Else the structure gets screwed.
  #TODO: perhaps we can kick out the whole UTF-8 shit, if the admins
  # are not able to give us the correct format, we shouldnt fix it
  iconv -c -f utf-8 -t utf-8 < ${xml} > ${xml}.utf


  ##############################################################################
  ## get needed information from xml file and check them if needed
  ##############################################################################

 
  # get image name
  image=$(grep -i "<image_name param=\"" ${xml} | awk -F "\"" '{ print $2 }')

  # Test if correct defined
  image_type=$(echo ${image}|sed 's/.*\.//')
  if [ "${image_type}" != "vmdk"  -a  "${image_type}" != "vdi" ]; then
    # TODO: Test
    echo "PANIC, image is not correct defined in ${xml}."
    echo "Image has to end with vdi or vmdk!"
    exit 0
  fi

  # Test if image is available
  if [ ! -f ${image} ]; then
    echo "PANIC, image defined in ${xml} not available"
    exit 0
  fi


  # get information if the current image should be used
  # active when active=1 image, else disabled
  active=$(grep -i "<active param=\"true\"" ${xml} | wc -l)


  # get list where the current image should be used
  pools=$(grep -i "<pools param=\"" ${xml} | awk -F "\"" '{ print $2 }')

 
  # Virtualmachine (vmware or virtualbox)?
  vm=$(grep -i "<virtualmachine param=\"" ${xml} | awk -F "\"" '{ print $2 }')
  # Test if correct defined
  if [ "${vm}" != "vbox"  -a  "${vm}" != "vmware" ]; then
    # TODO: Test
    echo "PANIC, virtualmachine not correct defined in ${xml}"
    exit 0
  fi

  # Test if vbox and wrong image
  if [ "${vm}" = "vbox"  -a  "${image_type}" != "vdi" ]; then
    # TODO: Test
    echo "PANIC, virtualmachine vbox cant use image type defined in ${xml}"
    exit 0
  fi

  # Test if vmware and wrong image 
  if [ "${vm}" = "vmware"  -a  "${image_type}" != "vmdk" ]; then
    # TODO: Test
    echo "PANIC, virtualmachine vmware cant use image type defined in ${xml}"
    exit 0
  fi

  
  # Connectiontype of vm (nat or bridged)?
  network=$(grep -i "<network param=\"" ${xml} | awk -F "\"" '{ print $2 }')

  # Test if correct defined
  if [ "${network}" != "nat"  -a  "${network}" != "bridged" ]; then
    # TODO: test
    echo "PANIC, network connection not correct defined in ${xml}"
    exit 0
  fi

  
  # os running in vmware?
  os=$(grep -i "<os param=\"" ${xml} | awk -F "\"" '{ print $2 }')
  if [ "${os}" != "Linux"  -a  "${os}" != "Windows XP" ]; then
    # TODO: test
    echo "PANIC, OS in virtual machine not correct defined in ${xml}"
    exit 0
  fi
    
   
  # get short image description
  short_description=$(grep "short_description param=\"" ${xml}.utf |
          sed -e "s/&.*;/; /g" | awk -F "\"" '{print $2}')
  # if ${short_description} not defined use ${image}
  short_description=${short_description:-"${image}"}
 

  # Get the long image description
  long_description=$(grep "long_description param=\"" ${xml}.utf |
          sed -e "s/&.*;/; /g" | awk -F "\"" '{print $2}')


  # Informations if we need for XDM
  xdm=$(grep "xdm param=\"" ${xml} | awk -F "\"" '{print $2}')

  # Test if correct defined
  if [ "${xdm}" != "true"  -a  "${xdm}" != "false" ]; then
    # TODO: test
    echo "PANIC, XDM usage not correct defined in ${xml}"
    exit 0
  fi

  
  ##############################################################################
  ## main part,
  ##############################################################################
  # Main part, creates desktopentrys and image run scripts

  # TODO: Perhaps its better if we put runscripts, xdmsessions and
  # xdialog-files in one big folder with subfolder runscripts,
  # xdmsessions, xdialog-files

  # check if ${vmdir}/runscripts/ is available
  if [ ! -d ${vmdir}/runscripts ]; then
    mkdir ${vmdir}/runscripts
  fi
  
  # check if ${vmdir}/xdmsessions/ for .desktop files is available
  if [ ! -d ${vmdir}/xdmsessions ]; then
    mkdir ${vmdir}/xdmsessions
  fi
  
  # check if ${vmdir}/xdmsessions/ for .desktop files is available
  if [ ! -d ${vmdir}/xdmsessions ]; then
    mkdir ${vmdir}/xdialog-files
  fi
 
  # work with the different pools and...
  for i in ${pools}; do 
    # ... make sure we have the different pool directorys, else create it
    if [ ! -d ${vmdir}/runscripts/${i} ]; then
      mkdir -p ${vmdir}/runscripts/${i}
    fi
    if [ ! -d ${vmdir}/xdmsessions/${i} ]; then
      mkdir -p ${vmdir}/xdmsessions/${i}
    fi
    if [ ! -d ${vmdir}/xdialog-files/${i} ]; then
      mkdir -p ${vmdir}/xdialog-files/${i}
    fi
    # ... remove startscript, xdmsessions and Xdialog files if it isn't active.
    if [ ${active} -ne 1 ]; then
      if [ -f ${vmdir}/runscripts/${i}/${image}.vmware \
           -o -f runscripts/${i}/${image}.virtualbox ]; then
        rm -rf ${vmdir}/runscripts/${i}/${image}.*
        rm -rf ${vmdir}/xdmsessions/${i}/${image}.desktop
        rm -rf ${vmdir}/xdialog-files/${i}/${image}.xdialog
      fi
    fi


    # ... create desktopentry
    if [ ${active} -eq 1 ]; then

      # create desktopentry
      echo -e "\nCreating runfiles for ${image} and pool ${i}\n"
      # create the desktopentry
      #TODO: change it with < EOF, >> isnt nice for so much lines
      echo "Desktop entry for ${image}" \
                >> ${vmdir}/xdmsessions/${i}/${image}.desktop
      echo "[Desktop Entry]" > ${vmdir}/xdmsessions/${i}/${image}.desktop
      echo "X-SuSE-translate=true" \
                >> ${vmdir}/xdmsessions/${i}/${image}.desktop
      echo "Encoding=UTF-8" >> ${vmdir}/xdmsessions/${i}/${image}.desktop
      echo "Type=XSession" >> ${vmdir}/xdmsessions/${i}/${image}.desktop
      #TODO: Fix path
      echo "Exec=/path/to/the/execfile/${image}" \
                >> ${vmdir}/xdmsessions/${i}/${image}.desktop
      echo "Name=${short_description}" \
                >> ${vmdir}/xdmsessions/${i}/${image}.desktop
      echo "Comment=${comment}" >> ${vmdir}/xdmsessions/${i}/${image}.desktop
      #TODO: I dont like SLXGrp as variable herein, why we need it here?
      #echo "SLXGrp=${pools}" >> ${vmdir}/xdmsessions/${i}/${image}.desktop
      #TODO: do we need XDM configuration? -> Chemie pool
      #echo "XDM=${xdm}" >> ${vmdir}/xdmsessions/${i}/${image}.desktop
    fi

    
    # If we have vmware, build executeable from template and
    # Xdialog menu entrys
    if [ "${vm}" = "vmware" ]; then

      # virtualmachine executable form template
      sed -e "s/imagename=\"CHANGEIT\"/imagename=\"${image}\"/" \
          -e "s/displayname=\"CHANGEIT\"/displayname=\"${short_description}\"/" \
          -e "s/vmostype=\"CHANGEIT\"/vmostype=\"${os}\"/" \
          -e "s/network=\"CHANGEIT\"/network=\"${network}\"/" \
      ${templatevmware} \
      > ${vmdir}/runscripts/${i}/${image}.runvmware
    
      # Xdialog menu entrys
      echo -e "\"${vmdir}/runscripts/${i}/${image}.vmware\" \\
            \"${short_description}\" \\
            \"${long_description}\" \\" \
            > ${vmdir}/xdialog-files/${i}/${image}.xdialog

    # if we have virtualbox, part here can only be vbox cause check above
    else 
      echo "Currently Virtualbox isn't implented"
      exit 0
    fi

  done

done

# Building Xdialog executable for each pool
for i in ${vmdir}/xdialog-files/*; do
  cp ${vmdir}/templates/xdialog.sh ${i}
  cat ${i}/*.xdialog >> ${i}/xdialog.sh
  #closing bracket as last line invoked with \
  echo ")" >> ${i}/xdialog.sh
done


# Delete all .utf files, we dont need them anymore
rm -f *.xml.utf