[ovirt-users] Passing custom script to cloud init using api

Shanil S xielesshanil at gmail.com
Wed Sep 17 05:07:52 UTC 2014


Hi Juan,

Yes, the above script is working fine.

-- 
Regards
Shanil

On Tue, Sep 16, 2014 at 7:49 PM, Juan Hernandez <jhernand at redhat.com> wrote:

> On 09/12/2014 07:04 AM, Shanil S wrote:
> > Hi Juan,
> >
> > I tried the following
> >
> > <action>
> >   <vm>
> >     <initialization>
> >       <cloud_init>
> >         ...
> >        <files>
> >           <file>
> >             <name>ignored</name>
> >             <content><![CDATA[write_files:
> >     -content: |
> >         Some Content for my file
> >     path: /tmp/myfile
> >     permissions: '0644']]></content>
> >             <type>plaintext</type>
> >           </file>
> >         </files>
> >       </cloud_init>
> >   <custom_script><![CDATA[
> > write_files:
> >     -content: |
> >         Some Content for my file
> >     path: /tmp/myfile
> >     permissions: '0644']]</custom_script>
> >
> >
> > But in that time i go the following errors from the api
> > Request syntactically incorrect. See the link description below for the
> > correct usage:start a virtual machine in the system identified by the
> > given idPOST
> > Content-Typeapplication/xml|json
> >
> >
> > If i change the xml format like
> >
> > <action>
> >   <vm>
> >     <initialization>
> >       <cloud_init>
> >         ...
> >        <files>
> >           <file>
> >             <name>ignored</name>
> >             <content><![CDATA[write_files:
> >     -content: |
> >         Some Content for my file
> >     path: /tmp/myfile
> >     permissions: '0644']]></content>
> >             <type>plaintext</type>
> >           </file>
> >         </files>
> >       </cloud_init>
> >   <custom_script>
> > write_files:
> >     -content: |
> >         Some Content for my file
> >     path: /tmp/myfile
> >     permissions: '0644'</custom_script>
> >
> > the cloud init part won't work even though we didn't get any errors from
> > the api. Could you please check it ?
> >
>
> The attached example script worked correctly for me. Be careful with the
> indentation of the "write_files" section, as it the format is YAML and
> it is sensitive to indentation.
>
> Also putting the file in /tmp may be bad idea, specially if you want it
> to persist after rebooting the machine.
>
> >
> > On Thu, Sep 11, 2014 at 6:16 PM, Juan Hernandez <jhernand at redhat.com
> > <mailto:jhernand at redhat.com>> wrote:
> >
> >     On 09/11/2014 12:51 PM, Shanil S wrote:
> >     > Hi Juan,
> >     >
> >     > Also, i tried the following custom script from the ovirt panel and
> its
> >     > working
> >     >
> >     > #cloud-config
> >     > write_files:
> >     >     -content: |
> >     >         # THIS IS MY TEXT FILE
> >     >         Some Content for my file
> >     >     path: /tmp/myfile
> >     >     permissions: '0644'
> >     >
> >     >
> >     > but the same content script i tried from the ovir api call  like
> >     >
> >     > <custom_script>#cloud-config
> >     > write_files:
> >     >     -content: |
> >     >         # THIS IS MY TEXT FILE
> >     >         Some Content for my file
> >     >     path: /tmp/myfile
> >     >     permissions: '0644' </custom_script>
> >     >    </initialization>
> >     >
> >     > But its not working, may be this is a bug in the  ovirt api
> function call ?
> >     >
> >
> >     Currently the "custom_script" element doesn't work in combination
> with
> >     "cloud-init". To make it work you will have to use the "files"
> element:
> >
> >     <action>
> >       <vm>
> >         <initialization>
> >           <cloud_init>
> >             ...
> >             <files>
> >               <file>
> >                 <name>this is ignored</name>
> >                 <content><![CDATA[your script]]></content>
> >                 <type>plaintext</type>
> >               </file>
> >             </files>
> >           </cloud_init>
> >         </initialization>
> >       </vm>
> >     </action>
> >
> >     As I wrote before there is a bug related to this:
> >
> >     https://bugzilla.redhat.com/1138564
> >
> >     If that bug is fixed (unlikely according to the last comments) then
> the
> >     "custom_script" element will start working, but for know I suggest
> you
> >     include your custom script in both places:
> >
> >     <action>
> >       <vm>
> >         <initialization>
> >           <cloud_init>
> >             ...
> >             <files>
> >               <file>
> >                 <name>this is ignored</name>
> >                 <content><![CDATA[your script]]></content>
> >                 <type>plaintext</type>
> >               </file>
> >             </files>
> >           </cloud_init>
> >           <custom_script><![CDATA[your script]]></custom_script>
> >         </initialization>
> >       </vm>
> >     </action>
> >
> >     >
> >     > --
> >     > Regards
> >     > Shanil
> >     >
> >     > On Thu, Sep 11, 2014 at 3:36 PM, Shanil S <xielesshanil at gmail.com
> <mailto:xielesshanil at gmail.com>
> >     > <mailto:xielesshanil at gmail.com <mailto:xielesshanil at gmail.com>>>
> wrote:
> >     >
> >     >     Hi Juan,
> >     >
> >     >     Okay sure..
> >     >     The following xml i used
> >     >
> >     >     <action>
> >     >             <vm>
> >     >                 <os>
> >     >                     <boot dev='cdrom'/>
> >     >                 </os>
> >     >                 <initialization>
> >     >          <cloud_init>
> >     >          <host>
> >     >              <address>test2</address>
> >     >            </host>
> >     >
> >     >           <users>
> >     >              <user>
> >     >                <user_name>root</user_name>
> >     >                <password>test</password>
> >     >              </user>
> >     >            </users>
> >     >           <network_configuration>
> >     >           <nics>
> >     >
> >     >                <nic>
> >     >                     <interface>virtio</interface>
> >     >                  <name>eth0</name>
> >     >                  <boot_protocol>none</boot_protocol>
> >     >                  <on_boot>true</on_boot>
> >     >                </nic>
> >     >              </nics>
> >     >              <dns>
> >     >                <servers>
> >     >                  <host>
> >     >                    <address>x.x.x.x</address>
> >     >                  </host>
> >     >                </servers>
> >     >              </dns>
> >     >            </network_configuration>
> >     >          </cloud_init>
> >     >         <custom_script> #cloud-config
> >     >
> >     >     phone_home:
> >     >     url: http://x.x.com/api/xx/api_receive.php
> >     >
> >     >     </custom_script>
> >     >        </initialization>
> >     >             </vm>
> >     >         </action>
> >     >
> >     >
> >     >
> >     >     --
> >     >     Regards
> >     >     Shanil
> >     >
> >     >     On Thu, Sep 11, 2014 at 1:48 PM, Juan Hernandez
> >     <jhernand at redhat.com <mailto:jhernand at redhat.com>
> >     >     <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>>
> wrote:
> >     >
> >     >         On 09/11/2014 06:54 AM, Shanil S wrote:
> >     >         > Hi Juan,
> >     >         >
> >     >         > It seems the it doesn't contains the "phone_home "
> >     section in
> >     >         the  cat
> >     >         > /mnt/openstack/latest/user_data
> >     >         >
> >     >         > the following is the output
> >     >         >
> >     >         > #cloud-config
> >     >         > ssh_pwauth: true
> >     >         > disable_root: 0
> >     >         > output:
> >     >         >   all: '>> /var/log/cloud-init-output.log'
> >     >         > user: root
> >     >         > password: admin123
> >     >         > chpasswd:
> >     >         >   expire: false
> >     >         > runcmd:
> >     >         > - 'sed -i ''/^datasource_list: /d''
> >     /etc/cloud/cloud.cfg; echo
> >     >         > ''datasource_list:
> >     >         >   ["NoCloud", "ConfigDrive"]'' >> /etc/cloud/cloud.cfg'
> >     >         >
> >     >         >
> >     >         > but if i try with the
> >     >         >
> >     >         > <files>
> >     >         >           <file>
> >     >         >             <name>ignored</name>
> >     >         >             <content><![CDATA[runcmd:
> >     >         >  - echo 'Test script !' > /iwashere_test.txt
> >     >         > ]]></content>
> >     >         >             <type>plaintext</type>
> >     >         >           </file>
> >     >         >         </files>
> >     >         >
> >     >         > then it will create the /iwashere_test.txt and write the
> >     >         contents and in
> >     >         > that time the cat /mnt/openstack/latest/user_data is
> >     >         >
> >     >         > cat /mnt/openstack/latest/user_data
> >     >         > #cloud-config
> >     >         > ssh_pwauth: true
> >     >         > disable_root: 0
> >     >         > output:
> >     >         >   all: '>> /var/log/cloud-init-output.log'
> >     >         > user: root
> >     >         > password: admin123
> >     >         > chpasswd:
> >     >         >   expire: false
> >     >         > runcmd:
> >     >         > - 'sed -i ''/^datasource_list: /d''
> >     /etc/cloud/cloud.cfg; echo
> >     >         > ''datasource_list:
> >     >         >   ["NoCloud", "ConfigDrive"]'' >> /etc/cloud/cloud.cfg'
> >     >         > runcmd:
> >     >         >  - echo 'Test script !' > /iwashere_test.txt
> >     >         >
> >     >         > so, i think the custom script section is not working, i
> am
> >     >         attaching the
> >     >         > vm log as a screenshot.
> >     >         >
> >     >
> >     >         Can you share the XML document that you sent to the
> RESTAPI in
> >     >         order to
> >     >         populate the "phone_home" section?
> >     >
> >     >         > On Wed, Sep 10, 2014 at 2:07 PM, Juan Hernandez
> >     <jhernand at redhat.com <mailto:jhernand at redhat.com>
> >     <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>
> >     >         > <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>
> >     <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>>> wrote:
> >     >         >
> >     >         >     On 09/10/2014 06:44 AM, Shanil S wrote:
> >     >         >     > Hi Juan,
> >     >         >     >
> >     >         >     > What i am planning to do is to make work the
> following
> >     >         script
> >     >         >     >
> >     >         >     > #cloud-config
> >     >         >     >
> >     >         >     > # phone_home: if this dictionary is present, then
> the
> >     >         phone_home
> >     >         >     > # cloud-config module will post specified data
> back to
> >     >         the given
> >     >         >     > # url
> >     >         >     > # default: none
> >     >         >     > # phone_home:
> >     >         >     > #  url: http://my.foo.bar/$INSTANCE/
> >     >         >     > #  post: all
> >     >         >     > #  tries: 10
> >     >         >     > #
> >     >         >     > phone_home:
> >     >         >     >  url: http://my.example.com/$INSTANCE_ID/
> >     >         >     >  post: [ pub_key_dsa, pub_key_rsa, pub_key_ecdsa,
> >     >         instance_id ]
> >     >         >     >
> >     >         >     >
> >     >
> >      (
> http://cloudinit.readthedocs.org/en/latest/topics/examples.html#run-commands-on-first-boot
> )
> >     >         >     >
> >     >         >     > but it wasn't working when i tried, i hope to post
> the
> >     >         above values to
> >     >         >     > the specific url and get the posted details.
> >     >         >     >
> >     >         >
> >     >         >     I think it should work, but it depends completely on
> >     >         cloud-init itself.
> >     >         >     I'd suggest you check the content of the generated
> >     cloud-init
> >     >         >     configuration file (as described in a previous
> mail). If
> >     >         it contains the
> >     >         >     "phone_home" section then you can discard a problem
> with
> >     >         oVirt, and
> >     >         >     focus on clud-init.
> >     >         >
> >     >         >     >
> >     >         >     > On Wed, Sep 10, 2014 at 10:02 AM, Shanil S
> >     >         <xielesshanil at gmail.com <mailto:xielesshanil at gmail.com>
> >     <mailto:xielesshanil at gmail.com <mailto:xielesshanil at gmail.com>>
> >     >         <mailto:xielesshanil at gmail.com
> >     <mailto:xielesshanil at gmail.com> <mailto:xielesshanil at gmail.com
> >     <mailto:xielesshanil at gmail.com>>>
> >     >         >     > <mailto:xielesshanil at gmail.com
> >     <mailto:xielesshanil at gmail.com> <mailto:xielesshanil at gmail.com
> >     <mailto:xielesshanil at gmail.com>>
> >     >         <mailto:xielesshanil at gmail.com <mailto:
> xielesshanil at gmail.com>
> >     >         <mailto:xielesshanil at gmail.com
> >     <mailto:xielesshanil at gmail.com>>>>> wrote:
> >     >         >     >
> >     >         >     >     Hi Juan,
> >     >         >     >
> >     >         >     >     Okay.. Thanks.. its working.
> >     >         >     >
> >     >         >     >     I would like to execute other page something
> >     like test_script.php by
> >     >         >     >     posting some values to it using the cloud
> >     init, Is it possible to do
> >     >         >     >     it ?
> >     >         >     >
> >     >         >     >
> >     >         >     >
> >     >         >     >     --
> >     >         >     >     Regards
> >     >         >     >     Shanil
> >     >         >     >
> >     >         >     >     On Fri, Sep 5, 2014 at 10:08 PM, Juan
> >     Hernandez <jhernand at redhat.com <mailto:jhernand at redhat.com>
> >     <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>
> >     >         <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>
> >     <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>>
> >     >         >     >     <mailto:jhernand at redhat.com
> >     <mailto:jhernand at redhat.com>
> >     >         <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>
> >     <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>
> >     >         <mailto:jhernand at redhat.com
> >     <mailto:jhernand at redhat.com>>>>> wrote:
> >     >         >     >
> >     >         >     >         On 09/05/2014 12:55 PM, Shanil S wrote:
> >     >         >     >         > Hi Juan,
> >     >         >     >         >
> >     >         >     >         > Thanks for your reply.
> >     >         >     >         >
> >     >         >     >         > I tried with the above but i was unable
> to
> >     >         find the
> >     >         >     'iwashere.txt' after
> >     >         >     >         > executing the above xml.
> >     >         >     >         >
> >     >         >     >
> >     >         >     >         I repeated the test, this time with 3.4,
> >     and it
> >     >         worked
> >     >         >     fine for
> >     >         >     >         me. As
> >     >         >     >         the formatting of the XML is very
> >     important I'd
> >     >         suggest
> >     >         >     that you
> >     >         >     >         take
> >     >         >     >         the attached script (instead of copy &
> paste
> >     >         from the mail),
> >     >         >     >         change the
> >     >         >     >         password and VM id and run it.
> >     >         >     >
> >     >         >     >         There are two kind of things that can go
> wrong
> >     >         here. One
> >     >         >     is that the
> >     >         >     >         engine/VDSM combination may not be
> generating
> >     >         the right
> >     >         >     file. To
> >     >         >     >         verify
> >     >         >     >         this start the VM with the attached
> >     script, and
> >     >         once it is
> >     >         >     >         started go to
> >     >         >     >         the hypervisor where it is running and
> >     find the
> >     >         corresponding
> >     >         >     >         qemu process:
> >     >         >     >
> >     >         >     >           # ps -ef | grep -- '-name myvm'
> >     >         >     >
> >     >         >     >         This will give you a very long command
> line.
> >     >         That command line
> >     >         >     >         should
> >     >         >     >         include a "-drive" option containing the
> full
> >     >         path of the
> >     >         >     disk image
> >     >         >     >         generated by the engine/VDSM, something
> >     like this:
> >     >         >     >
> >     >         >     >           -drive
> >     >         >     >
> >     >         >
> >     >
> >
> file=/var/run/vdsm/payload/b5f087d4-022d-4d5f-8a1e-268c562c7bb1.b6fcddff571bb8c2028c61b623d172a6.img
> >     >         >     >
> >     >         >     >         To inspect its content make a copy (just in
> >     >         case) and
> >     >         >     mount it:
> >     >         >     >
> >     >         >     >           # cp -drive
> >     >         >     >
> >     >         >
> >     >
> >
> file=/var/run/vdsm/payload/b5f087d4-022d-4d5f-8a1e-268c562c7bb1.b6fcddff571bb8c2028c61b623d172a6.img
> >     >         >     >         /root/my.img
> >     >         >     >           # mount -o loop,ro /root/my.img /mnt
> >     >         >     >
> >     >         >     >         Inspect the content:
> >     >         >     >
> >     >         >     >           # find /mnt
> >     >         >     >           /mnt/openstack
> >     >         >     >           /mnt/openstack/content
> >     >         >     >           /mnt/openstack/content/0000
> >     >         >     >           /mnt/openstack/latest
> >     >         >     >           /mnt/openstack/latest/meta_data.json
> >     >         >     >           /mnt/openstack/latest/user_data
> >     >         >     >
> >     >         >     >         The content of the custom-script should be
> at
> >     >         the end of the
> >     >         >     >         "user_data"
> >     >         >     >         file, so take a look at that:
> >     >         >     >
> >     >         >     >           # cat /mnt/openstack/latest/user_data
> >     >         >     >           #cloud-config
> >     >         >     >           ssh_pwauth: true
> >     >         >     >           disable_root: 0
> >     >         >     >           output:
> >     >         >     >             all: '>>
> /var/log/cloud-init-output.log'
> >     >         >     >           user: root
> >     >         >     >           password: mypassword
> >     >         >     >           chpasswd:
> >     >         >     >             expire: false
> >     >         >     >           runcmd:
> >     >         >     >           - 'sed -i ''/^datasource_list: /d''
> >     >         >     /etc/cloud/cloud.cfg; echo
> >     >         >     >         ''datasource_list:
> >     >         >     >             ["NoCloud", "ConfigDrive"]'' >>
> >     >         /etc/cloud/cloud.cfg'
> >     >         >     >           runcmd:
> >     >         >     >            - echo "I was here!" > /iwashere.txt
> >     >         >     >
> >     >         >     >         If your custom script isn't there then
> >     there is some
> >     >         >     problem in the
> >     >         >     >         engine/VDSM side, otherwise the problem is
> >     >         probably in
> >     >         >     cloud-init
> >     >         >     >         itself, and we will need someone with more
> >     >         knowledge of
> >     >         >     >         cloud-init to
> >     >         >     >         debug it.
> >     >         >     >
> >     >         >     >         Don't forget to umount the file when
> finished:
> >     >         >     >
> >     >         >     >           # umount /mnt
> >     >         >     >
> >     >         >     >         >
> >     >         >     >         > On Fri, Sep 5, 2014 at 3:00 PM, Juan
> >     Hernandez
> >     >         >     <jhernand at redhat.com <mailto:jhernand at redhat.com>
> >     <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>
> >     >         <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>
> >     <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>>
> >     >         >     <mailto:jhernand at redhat.com
> >     <mailto:jhernand at redhat.com> <mailto:jhernand at redhat.com
> >     <mailto:jhernand at redhat.com>>
> >     >         <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>
> >     <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>>>
> >     >         >     >         > <mailto:jhernand at redhat.com
> >     <mailto:jhernand at redhat.com>
> >     >         <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>
> >     <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>
> >     >         <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>>
> >     >         >     <mailto:jhernand at redhat.com
> >     <mailto:jhernand at redhat.com> <mailto:jhernand at redhat.com
> >     <mailto:jhernand at redhat.com>>
> >     >         <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>
> >     <mailto:jhernand at redhat.com <mailto:jhernand at redhat.com>>>>>> wrote:
> >     >         >     >         >
> >     >         >     >         >     On 09/05/2014 10:46 AM, Sven Kieske
> >     wrote:
> >     >         >     >         >     >
> >     >         >     >         >     >
> >     >         >     >         >     > Am 05.09.2014 10:27, schrieb Juan
> >     Hernandez:
> >     >         >     >         >     >> 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
> >     >         >     >         >     >
> >     >         >     >         >     > Thanks for the report, I just
> proposed
> >     >         this as a
> >     >         >     blocker
> >     >         >     >         for the 3.4.4
> >     >         >     >         >     > release as it is a clear
> regression.
> >     >         >     >         >     > Also I rely on this functionality
> >     in my
> >     >         3.3. setup
> >     >         >     and I
> >     >         >     >         want to upgrade
> >     >         >     >         >     > to 3.4 so I can't upgrade until
> >     this is
> >     >         fixed and
> >     >         >     released.
> >     >         >     >         >
> >     >         >     >         >     Agree, I set the bug as a blocker
> >     for 3.4.4.
> >     >         >     >         >
> >     >         >     >         >     >>
> >     >         >     >         >     >> However, you can exploit this bug
> >     to do
> >     >         what you
> >     >         >     want.
> >     >         >     >         This is an example:
> >     >         >     >         >     >
> >     >         >     >         >     > Well I guess this is a pretty bad
> >     idea,
> >     >         because it
> >     >         >     will
> >     >         >     >         just work
> >     >         >     >         >     > until the bug is fixed?
> >     >         >     >         >     >
> >     >         >     >         >
> >     >         >     >         >     No, what I proposed in the example
> is to
> >     >         put the custom
> >     >         >     >         script in both
> >     >         >     >         >     the first "file" inside "clud_init"
> >     and in the
> >     >         >     >         "custom_script" element.
> >     >         >     >         >     That should work with the current
> status
> >     >         and also
> >     >         >     if/when
> >     >         >     >         we fix the
> >     >         >     >         >     bug.
> >     >         >     >         >
> >     >         >     >
> >     >         >
> >     >
> >
>
> --
> 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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/users/attachments/20140917/4d8b1c89/attachment-0001.html>


More information about the Users mailing list