On 09/04/2014 11:59 AM, Shanil S wrote: > Hi Juan, > > I tried with the above touch command but it seems the 'iwashere' file > isn't created after executing it the above command. >
Trying to make an example for this I discovered that the "custom_script" element is currently ignored if the "cloud_init" element is present. Instead we are taking the content of the first "file" element from the "cloud_init" element and appending it to the cloud-init configuration file. I believe that this is a bug, as it breaks backwards compatibility: https://bugzilla.redhat.com/1138564 However, you can exploit this bug to do what you want. This is an example: #!/bin/sh -ex url="https://ovirt.example.com/ovirt-engine/api" user="admin@internal" password="******" curl \ --insecure \ --request POST \ --header "Accept: application/xml" \ --header "Content-Type: application/xml" \ --user "${user}:${password}" \ --data ' <action> <vm> <initialization> <cloud_init> <host> <address>myhost.mydomain.com</address> </host> <users> <user> <user_name>root</user_name> <password>mypassword</password> </user> </users> <network_configuration> <nics> <nic> <name>eth0</name> <boot_protocol>static</boot_protocol> <network> <ip address="192.168.122.31" netmask="255.255.255" gateway="192.168.122.1"/> </network> <on_boot>true</on_boot> </nic> </nics> <dns> <servers> <host> <address>192.168.122.1</address> </host> </servers> <search_domains> <host> <address>mydomain.com</address> </host> </search_domains> </dns> </network_configuration> <files> <file> <name>ignored</name> <content><![CDATA[runcmd: - echo "I was here!" > /iwashere.txt ]]></content> <type>plaintext</type> </file> </files> </cloud_init> <custom_script><![CDATA[runcmd: - echo "I was here!" > /iwashere.txt ]]></custom_script> </initialization> </vm> </action> ' \ "${url}/vms/480225cf-0cbd-4166-b9ca-3857b124618a/start" Note that in this example I am including the custom script both in the first "file" element inside "cloud_init" and in the "custom_script" element, this way it will work with the current version of the engine and also if/when we eventually fix the bug. Please remember to update the wiki with your feedback: http://www.ovirt.org/REST-Api#How_can_I_run_a_custom_script_using_cloud-init.3F > > On Thu, Sep 4, 2014 at 3:02 PM, Juan Hernandez <jhern...@redhat.com > <mailto:jhern...@redhat.com>> wrote: > > On 09/04/2014 10:58 AM, Shanil S wrote: > > Hi Juan, > > > > Okay.. Thanks for your update. Also i found some sample cloud init > > scripts from here > > https://github.com/number5/cloud-init/tree/master/doc/examples and i > > tried the following scripts > > > > - type: foo/wark > > filename: bar > > content: | > > This is my payload > > hello > > - this is also payload > > - | > > multi line payload > > here > > - > > type: text/upstart-job > > filename: my-upstart.conf > > content: | > > Test file contents > > > > And run the start vm using the above script using cloud init and api, > > Could you please tell me where i can find the result of the above > script ? > > I think the above script will create a file like my-upstart.conf > > > > As I said I am not a cloud-init expert, so I don't really know what is > the meaning or effect of this script. But I think that you need to use > the "runcmd" option. For example: > > <action> > ... > <initialization> > <cloud-init>...</cloud-init> > <custom-script><![CDATA[runcmd: > - touch /iwashere > ]]></custom-script> > </initialization> > </action> > > If you use this it should run the "touch /iwashere" command, and you can > check that it did verifying that the "/iwashere" file exists. > > As I said I didn't test this, so I may not work. I'd appreciate if you > can test it, and once it works update the wiki with the correct > instructions: > > > http://www.ovirt.org/REST-Api#How_can_I_run_a_custom_script_using_cloud-init.3F > > > > > On Thu, Sep 4, 2014 at 1:56 PM, Juan Hernandez > <jhern...@redhat.com <mailto:jhern...@redhat.com> > > <mailto:jhern...@redhat.com <mailto:jhern...@redhat.com>>> wrote: > > > > On 09/04/2014 06:29 AM, Shanil S wrote: > > > Hi Juan, > > > > > > Is there anyways to specify the custom script from a file in > the xml ? > > > ie, i have a script in a file called script.sh and i would > like to > > > include this script in the xml with the api call. Is there > any methods > > > for this ? > > > > > > > You can deploy files using cloud-init, and the run them using > the custom > > script. Something like this: > > > > <action> > > ... > > <initialization> > > <cloud-init> > > <files> > > <file name="/root/myscript.sh"/> > > <content><![CDATA[#!/bin/sh the content of your > > script]]></content> > > </file> > > </files> > > </cloud-init> > > <custom_script><![CDATA[runcmd: > > - sh /root/myscript.sh > > ]]></custom_script> > > </initialization> > > </action> > > > > But I'm not a cloud-init expert, and I didn't test this, so I > don't > > really know if the custom_script will run before or after the > files are > > deployed. It makes more sense to run the scripts after > deploying the > > files, but you will have to test it yourself. > > > > The content of the files and the scripts has to be embedded in > the XML > > document that you send to the RESTAPI server, there is no way > to send an > > XML document and a separate file. Building this kind of XML > document > > shouldn't be complicated if you use the CDATA syntax like in > the example > > above. > > > > Another thing that you may consider, if you have to run a > complicated > > script or set of scripts, is to have them pre-installed in the > template > > that you use to create the VM, then you just need to run them. > > > > > -- > > > Regards > > > Shanil > > > > > > > > > On Tue, Sep 2, 2014 at 3:02 PM, Shanil S > <xielessha...@gmail.com <mailto:xielessha...@gmail.com> > > <mailto:xielessha...@gmail.com <mailto:xielessha...@gmail.com>> > > > <mailto:xielessha...@gmail.com > <mailto:xielessha...@gmail.com> <mailto:xielessha...@gmail.com > <mailto:xielessha...@gmail.com>>>> > > wrote: > > > > > > Hi Juan, > > > > > > Thanks for the solution. > > > > > > -- > > > Regards > > > Shanil > > > > > > > > > On Tue, Sep 2, 2014 at 2:59 PM, Juan Hernandez > > <jhern...@redhat.com <mailto:jhern...@redhat.com> > <mailto:jhern...@redhat.com <mailto:jhern...@redhat.com>> > > > <mailto:jhern...@redhat.com <mailto:jhern...@redhat.com> > <mailto:jhern...@redhat.com <mailto:jhern...@redhat.com>>>> wrote: > > > > > > On 09/02/2014 05:46 AM, Shanil S wrote: > > > > Hi All, > > > > > > > > From the ovirt admin panel, there is an option to > give the > > > custom script > > > > in the cloud init ( Run Once-> cloud init- > Custom > > script ). > > > Is there > > > > any ways to pass the custom script to cloud init > using the > > > rest api ? > > > > > > > > > > The custom script should go inside the > "custom_script" element > > > inside > > > the "initialization" element: > > > > > > <action> > > > ... > > > <initialization> > > > <cloud_init>...</cloud_init> > > > <custom_script>your custom script</custom_script> > > > </initialization> > > > </action> > > > > -- 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. _______________________________________________ Users mailing list Users@ovirt.org http://lists.ovirt.org/mailman/listinfo/users