On Mon, Nov 3, 2014 at 8:52 PM, Branimir Pejakovic <[email protected]> wrote:
> > > On Fri, Oct 31, 2014 at 11:00 PM, Juan Hernandez <[email protected]> > wrote: > >> On 10/31/2014 06:47 PM, Branimir Pejakovic wrote: >> > >> > >> > >> > On Thu, Oct 30, 2014 at 12:52 PM, Branimir Pejakovic >> > <[email protected] <mailto:[email protected]>> wrote: >> > >> > >> > >> > On Thu, Oct 30, 2014 at 12:39 PM, Shahar Havivi <[email protected] >> > <mailto:[email protected]>> wrote: >> > >> > On 30.10.14 12:30, Branimir Pejakovic wrote: >> > > On Thu, Oct 30, 2014 at 12:02 PM, Shahar Havivi >> > <[email protected] <mailto:[email protected]>> wrote: >> > > >> > > > On 30.10.14 10:06, Branimir Pejakovic wrote: >> > > > > On Thu, Oct 30, 2014 at 7:22 AM, Shahar Havivi >> > <[email protected] <mailto:[email protected]>> >> > > > wrote: >> > > > > >> > > > > > On 29.10.14 17:35, Branimir Pejakovic wrote: >> > > > > > > Hi list, >> > > > > > > >> > > > > > > I was wondering is there a way to add multiple files >> > to a vm via >> > > > > > cloud-init >> > > > > > > using python SDK. I was able to add /etc/resolv.conf >> and >> > > > additionally I >> > > > > > > would like to add config files for NICs (ifcfg-ethX) >> > with appropriate >> > > > > > > values (ip,gw,netmask). I used an example given here: >> > > > > > > http://www.ovirt.org/Features/Cloud-Init_Integration >> . But >> > > > > > unfortunately I >> > > > > > > cannot do the same thing If I want to write multiple >> > files to a vm in >> > > > > > > params.Action class. >> > > > > > > >> > > > > > > Thank you in advance! >> > > > > > you can use the custom script text box in oVirts >> > cloud-init section, >> > > > > > there you can add any cloud-init section - adding files >> > examples can be >> > > > > > found >> > > > > > here: >> > > > > > >> > > > > > >> > > > >> > >> http://cloudinit.readthedocs.org/en/latest/topics/examples.html#writing-out-arbitrary-files >> > > > > > >> > > > > > Shahar Havivi. >> > > > > > >> > > > > > >> > > > > Hi Shahar, >> > > > > >> > > > > Thank you for the reply. >> > > > > >> > > > > To be honest I knew for those scripts but I want to do it >> > in automate >> > > > > fashion just like in that example that I put in my >> > original message. I >> > > > have >> > > > > tried to specify in params.Files class multiple files: >> > > > > >> > > > > vm_file1 = params.Files(file=[params.File(name = 'file1', >> > content = >> > > > > file1_content, type_= 'PLAINTEXT')]) >> > > > > vm_file2 = params.Files(file=[params.File(name = 'file2', >> > content = >> > > > > file2_content, type_= 'PLAINTEXT')]) >> > > > > >> > > > > and then give them as arguments to params.CloudInit _init_ >> > constructor >> > > > > (files=...) just like in that example above but it seems >> > that I am doing >> > > > > something wrong because it does not write multiple files - >> > it writes only >> > > > > when you specify one file all right. The exception is >> > "Error: 'list' >> > > > object >> > > > > has no attribute 'export'" (I tried to specify those files >> > as a list - >> > > > > files=[vm_file1,vm_file2]). >> > > > > >> > > > > Thanks for any help. >> > > > The custom script is currently the only option to add files >> > via Cloud-Init >> > > > >> > > > Thanks, >> > > > Shahar Havivi. >> > > > >> > > > >> > > Hi Shahar, >> > > >> > > Granted. But the example in python >> > > http://www.ovirt.org/Features/Cloud-Init_Integration uses >> > custom script :) >> > > I just want to know how to do the same thing in case when I >> > want to write >> > > more than one file to a VM - and yes - all those multiple >> > files that I >> > > want to write are specified via custom scripts. >> > > >> > > From the link - (The "Python SDK" paragraph: scontent object >> > holds the >> > > custom script): >> > > >> > > scontent = "write_files:\n- content: |\n search >> > > example.com <http://example.com>\n nameserver >> > 10.10.10.1\n nameserver >> > > 10.10.10.2\n path: /etc/resolv.conf" >> > > >> > > For example (and just for example), I want to write to >> > /etc/issue and >> > > /etc/hosts not only /etc/resolv.conf. In essence, when vm goes >> > to run-once >> > > mode I want to write more than one file to a vm via Python >> (using >> > > CloudInit) in automated fashion (and not touching oVirt GUI at >> > all). >> > You don't need to use the GUI, >> > the sdks initialization have custom_script as string which is >> > equivalent to >> > the text box that you see in the GUI, and you can put the same >> > content there >> > (ie multiple files). >> > Is that sufficient enough? >> > >> > >> > Hi Shahar, >> > >> > Thanks! I will try this one. I was not aware of this feature. >> > Although I can see that it was mentioned on the list (my bad). >> > >> > Thank you for your effort! I really do appreciate it! >> > >> > >> > >> > Hi, >> > >> > Please if somebody can help me because I am pretty stuck. As I said in >> > previous posts I used this Python example >> > http://www.ovirt.org/Features/Cloud-Init_Integration to set root >> > password, hostname and resolv.conf. It worked without any problems for >> > 3.4 oVirt version and equivalent Python SDK >> > (ovirt-engine-sdk-python-3.4.x.noarch). >> > >> > Then, I have tried to write through yuml scripts more conf files than >> > just resolv.conf to configure guest. I also saw this post on the list: >> > http://lists.ovirt.org/pipermail/users/2014-October/028539.html. So >> > based on that, I decided to upgraded oVirt and SDK >> > (ovirt-engine-sdk-python-3.5.0.7-1.el6.noarch) to 3.5 version. The >> > upgrade itself passed without any problem. >> > >> > From that point forward I tried to use custom_script parameter (as >> > suggested by Shahar) inside Initialization class and CloudInit class >> > without any luck. >> > >> > Can somebody please provide a simple Python code to submit yaml script >> > to cloud-init? >> > >> > Also after the upgrade the example script I mentioned above can only >> > change hostname. It does not write resolv.conf anymore nor it sets root >> > password. I don't know if something is changed inside methods? For >> > example, customization of virtual machine (memory,cpu,high availability, >> > pinning to a certain host etc works without any problems). >> > >> > Thank you! >> > >> > Best regards, >> > >> > Branimir >> > >> >> The "custom_script" element doesn't work in combination with cloud-init >> and run once. To make it work you have to use cloud-init and a file >> element containing your custom script. Here you have an example: >> >> #!/usr/bin/python >> >> import base64 >> import re >> >> from ovirtsdk.api import API >> from ovirtsdk.xml import params >> >> # A simple function to encode using base64 and now new lines: >> def encode(s): >> return re.sub("\s+", "", base64.encodestring(s)) >> >> # Connect to the server: >> api = API( >> url="https://engine35.example.com/ovirt-engine/api", >> username="admin@internal", >> password="redhat123", >> insecure=True, >> debug=True >> ) >> >> # Find the virtual machine: >> myvm = api.vms.get(name="myvm") >> >> # Prepare the cloud-init custom script to write files: >> myscript = """\ >> write_files: >> """ >> >> # Append one file: >> myscript += """\ >> - encoding: b64 >> content: %s >> owner: root:root >> path: /etc/firstfile.txt >> permissions: '0644' >> """ % encode("The content of the first file") >> >> # Append another file: >> myscript += """\ >> - encoding: b64 >> content: %s >> owner: root:root >> path: /etc/secondfile.txt >> permissions: '0644' >> """ % encode("The content of the second file") >> >> # Prepare the action to trigger initialization using cloud-init: >> action = params.Action( >> vm=params.VM( >> initialization=params.Initialization( >> cloud_init=params.CloudInit( >> files=params.Files( >> file=[ >> params.File( >> name="myscript", >> type_="plaintext", >> content=myscript >> ) >> ] >> ) >> ) >> ) >> ) >> ) >> >> # Start the virtual machine: >> myvm.start(action) >> >> # Disconnect from the server: >> api.disconnect() >> >> Regarding the problem with the root password we have a bug in 3.5 that >> makes this fail. See here: >> >> https://bugzilla.redhat.com/1156155 >> >> The problem is that we are not passing the user name to cloud-init, and >> as a result it is changing the default cloud-init user password, not the >> root pssword. To workaround the issue you can edit the >> "/etc/cloud/cloud.cfg" file of the VM and change the default user name: >> >> system_info: >> distro: ... >> default_user: >> name: root <-- Change this from "fedora" or "cloud-init" to root >> >> -- >> Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta >> 3ºD, 28016 Madrid, Spain >> Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L. >> > > > Hi Juan, > > Sorry for the delay. Thank you very much for this. It works perfectly. > > Best regards, > > Branimir > > > Hi, I just want to ask one more thing - is it possible to rename virtual disk from template_disk1 to vm1_disk1. I am asking this because I create vms based on the template and every machine I create has the same disk template name. Of course, I have searched through list archives and found this: http://lists.ovirt.org/pipermail/users/2014-June/024993.html https://bugzilla.redhat.com/show_bug.cgi?id=1105887 According to bugzilla this feature is targeted for 3.6 release. Is there any workaround maybe for this in 3.5 in Python SDK? Thank you! Best regards, Branimir
_______________________________________________ Users mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/users

