[ovirt-devel] oVirt Cloud-init

Marc Young 3vilpenguin at gmail.com
Fri Feb 17 19:11:18 UTC 2017


Per the script, i'll change that, probably just wasnt paying attention to
where i ran chkconfig

Per cloud-init YAML, not sure. It was in a previous reply so i gave it a
shot. But i can't find that usage anywhere either so i gave up on it.

Per troubleshooting:

Spinning up a VM with dns_servers and dns_search:

    66:           vm_configuration[:initialization][:dns_servers] =
iface_options[:dns_servers] unless iface_options[:dns_servers].nil?
    67:           vm_configuration[:initialization][:dns_search] =
iface_options[:dns_search] unless iface_options[:dns_search].nil?
    68:           require 'pry'
    69:           binding.pry
    70:
 => 71:           machine.start(
    72:             use_cloud_init: true,
    73:             vm: vm_configuration
    74:           )
    75:
    76:           @app.call(env)

[1] pry(#<VagrantPlugins::OVirtProvider::Action::StartVM>)> vm_configuration
=> {:initialization=>
  {:host_name=>"test",
   :nic_configurations=>[{:name=>"eth0", :on_boot=>true,
:boot_protocol=>"static", :ip=>{:version=>"v4", :address=>"192.168.2.200",
:gateway=>"192.168.2.1", :netmask=>"255.255.255.0"}}],
   :custom_script=>
    "manage-resolv-conf: true\n\nresolv_conf:\n  nameservers: ['8.8.4.4',
'8.8.8.8']\n  searchdomains:\n    - foo.example.com\n    - bar.example.com\n
 domain: example.com\n  options:\n    rotate: true\n    timeout: 1\n",
   :dns_servers=>"192.168.2.1",
   :dns_search=>"test.local"}}
[2] pry(#<VagrantPlugins::OVirtProvider::Action::StartVM>)>
==> default: Waiting for VM to get an IP address...
==> default: Machine is booted and ready for use!
==> default: Rsyncing folder: /home/myoung/repos/github/vagrant-ovirt4/ =>
/vagrant
==> default: Setting hostname...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically
replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH
key...


now ill ssh in and look around

 myoung  dev    ~  repos  github  vagrant-ovirt4  feature/gh65  ✎
 5❓  1  $  vagrant ssh
You appear to be running Vagrant outside of the official installers.
Note that the installers are what ensure that Vagrant has all required
dependencies, and Vagrant assumes that these dependencies exist. By
running outside of the installer environment, Vagrant may not function
properly. To remove this warning, install Vagrant using one of the
official packages from vagrantup.com.

Last login: Thu Feb 16 23:04:00 2017 from 192.168.2.198
[vagrant at test ~]$ sudo cat /var/lib/cloud/instance/user-data.txt
#cloud-config
output:
  all: '>> /var/log/cloud-init-output.log'
disable_root: 0
runcmd:
- 'sed -i ''/^datasource_list: /d'' /etc/cloud/cloud.cfg; echo
''datasource_list:
  ["NoCloud", "ConfigDrive"]'' >> /etc/cloud/cloud.cfg'
ssh_pwauth: true
chpasswd:
  expire: false
user: root
manage-resolv-conf: true

resolv_conf:
  nameservers: ['8.8.4.4', '8.8.8.8']
  searchdomains:
    - foo.example.com
    - bar.example.com
  domain: example.com
  options:
    rotate: true
    timeout: 1
[vagrant at test ~]$ sudo cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain

[vagrant at test ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
NM_CONTROLLED=no
NETMASK=255.255.255.0
BOOTPROTO=static
DEVICE=eth0
IPADDR=192.168.2.200
GATEWAY=192.168.2.1
ONBOOT=yes

[vagrant at test ~]$ sudo cat /var/log/cloud-init* | grep -i dns
[vagrant at test ~]$ sudo cat /var/log/cloud-init* | grep -i local
Feb 14 23:16:45 vagrant cloud-init: Cloud-init v. 0.7.5 running
'init-local' at Wed, 15 Feb 2017 05:16:45 +0000. Up 11.00 seconds.
Feb 16 23:03:35 test cloud-init: Cloud-init v. 0.7.5 running 'init-local'
at Fri, 17 Feb 2017 05:03:35 +0000. Up 5.23 seconds.
Cloud-init v. 0.7.5 running 'init-local' at Thu, 09 Feb 2017 03:45:01
+0000. Up 1310.61 seconds.
Cloud-init v. 0.7.5 running 'init-local' at Wed, 15 Feb 2017 05:16:45
+0000. Up 11.00 seconds.
Cloud-init v. 0.7.5 running 'init-local' at Fri, 17 Feb 2017 05:03:35
+0000. Up 5.23 seconds.
Cloud-init v. 0.7.5 finished at Fri, 17 Feb 2017 05:03:45 +0000. Datasource
DataSourceConfigDrive [local,ver=2][source=/dev/sr1].  Up 15.37 seconds



On the vm host running that VM:


[myoung at ovirt ~]$ sudo ps -ef | grep qemu-kvm | grep test
qemu     12456     1  9 05:03 ?        00:00:19 /usr/libexec/qemu-kvm -name
...snipped
[myoung at ovirt ~]$ sudo cp
/var/run/vdsm/payload/c65751c3-431d-44e4-836c-963b81b1f846.20fc2db0517e8c06579d7719d8f3fb35.img
.
[myoung at ovirt ~]$ sudo mount -o loop,ro
c65751c3-431d-44e4-836c-963b81b1f846.20fc2db0517e8c06579d7719d8f3fb35.img
/mnt
[myoung at ovirt ~]$ find /mnt -type f
find: ‘/mnt’: Permission denied
[myoung at ovirt ~]$ sudo find /mnt -type f
/mnt/openstack/content/0000
/mnt/openstack/latest/meta_data.json
/mnt/openstack/latest/user_data
[myoung at ovirt ~]$ sudo cat /mnt/openstack/content/0000
auto eth0
iface eth0 inet static
  address 192.168.2.200
  netmask 255.255.255.0
  gateway 192.168.2.1
  dns-nameservers 192.168.2.1
  dns-search test.local
[myoung at ovirt ~]$ sudo umount
c65751c3-431d-44e4-836c-963b81b1f846.20fc2db0517e8c06579d7719d8f3fb35.img

Cloud-init definitely isn't working right away with resolv.conf, but I'm
definitely passing it correctly to the API, it shows up on the floppy as
you described but it's not making its way to
/etc/sysconfig/network-scripts/ifcfg-eth0 even though the other settings
for sure are (such as address, netmask,)

If i add that information to /etc/sysconfig/network-scripts/ifcfg-eth0 and
bounce network it all works:

[vagrant at test ~]$ ping -c 3 www.google.com
ping: www.google.com: Name or service not known
[vagrant at test ~]$ echo $'DNS1=192.168.2.113\nDNS2=192.168.2.1' | sudo tee
-a /etc/sysconfig/network-scripts/ifcfg-eth0 >/dev/null
[vagrant at test ~]$ ping -c 3 www.google.com
ping: www.google.com: Name or service not known
[vagrant at test ~]$ sudo service network restart
Restarting network (via systemctl):                        [  OK  ]
[vagrant at test ~]$ ping -c 3 www.google.com
PING www.google.com (216.58.217.4) 56(84) bytes of data.
64 bytes from den03s09-in-f4.1e100.net (216.58.217.4): icmp_seq=1 ttl=54
time=55.8 ms
64 bytes from den03s09-in-f4.1e100.net (216.58.217.4): icmp_seq=2 ttl=54
time=43.9 ms
^C
--- www.google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 43.939/49.916/55.894/5.981 ms
[vagrant at test ~]$ sudo cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.2.113
nameserver 192.168.2.1




On Fri, Feb 17, 2017 at 2:21 AM, Juan Hernández <jhernand at redhat.com> wrote:

> On 02/17/2017 06:00 AM, Marc Young wrote:
> > I'm apparently really bad at email, I replied only to Shahar, not the
> > whole thread.
> >
> > Vinzenz your email slipped first, so to answer your question:
> >
> > It's the latest Centos 7 with these installed:
> >
> > cloud-init-0.7.5-10.el7.centos.1
> > kernel-3.10.0-514 <tel:3.10.0-514>.el7
> > ovirt-guest-agent-common-1.0.13-1.20161220085008.git165fff1.el7.centos
> >
> > The setup script I use to create a template is here:
> > https://github.com/myoung34/vagrant-ovirt4/blob/master/
> tools/prepare_redhat_for_box.sh
> > <https://github.com/myoung34/vagrant-ovirt4/blob/master/
> tools/prepare_redhat_for_box.sh>
> >
>
> In that script you run "chkconfig cloud-init on" *before* installing the
> cloud-init package. That is irrelevant, as the cloud-init services are
> enabled by default when the package is installed. But worth changing.
>
> > The engine-host is oVirt Engine Version: 4.1.0.4-1.el7.centos
> > The ruby SDK i'm working with is 4.1.2
> >
> > Halfway through I realized that it's actually supported in the API:
> >
> >     custom_script String
> >     dns_search String
> >     dns_servers String
> >
> >
> > It also shows usage here:
> > https://github.com/oVirt/ovirt-engine-sdk-ruby/blob/
> master/sdk/examples/start_vm_with_cloud_init.rb
> > <https://github.com/oVirt/ovirt-engine-sdk-ruby/blob/
> master/sdk/examples/start_vm_with_cloud_init.rb>
> >
> > Here's some verification:
> >
> >         66:           vm_configuration[:initialization][:dns_servers] =
> >     iface_options[:dns_servers] unless iface_options[:dns_servers].nil?
> >         67:           vm_configuration[:initialization][:dns_search] =
> >     iface_options[:dns_search] unless iface_options[:dns_search].nil?
> >         68:           require 'pry'
> >         69:           binding.pry
> >         70:
> >      => 71:           machine.start(
> >         72:             use_cloud_init: true,
> >         73:             vm: vm_configuration
> >         74:           )
> >         75:
> >         76:           @app.call(env)
> >
> >     [1] pry(#<VagrantPlugins::OVirtProvider::Action::StartVM>)>
> >     vm_configuration
> >     => {:initialization=>
> >       {:host_name=>"test",
> >        :nic_configurations=>[{:name=>"eth0", :on_boot=>true,
> >     :boot_protocol=>"static", :ip=>{:version=>"v4",
> >     :address=>"192.168.2.200", :gateway=>"192.168.2.1",
> >     :netmask=>"255.255.255.0"}}],
> >        :custom_script=>nil,
> >        :dns_servers=>"192.168.2.1",
> >        :dns_search=>"test.local"}}
> >
> >
> > But it didn't do anything:
> >
> >     [vagrant at test ~]$ cat /etc/resolv.conf
> >     # Generated by NetworkManager
> >     search localdomain
> >
> >     [vagrant at test ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
> >     NM_CONTROLLED=no
> >     NETMASK=255.255.255.0
> >     BOOTPROTO=static
> >     DEVICE=eth0
> >     IPADDR=192.168.2.200
> >     GATEWAY=192.168.2.1
> >     ONBOOT=yes
> >
> >
> > The same is also true using cloud_init:
> >
> >         ovirt.cloud_init =<<EOF
> >     write_files:
> >       - content: |
> >           wat
> >         path: /tmp/something.txt
> >         permissions: '0644'
> >     network-interfaces: |
> >       auto eth0
> >       iface eth0 inet static
> >         address 192.168.2.201
> >         network 192.168.2.0
> >         netmask 255.255.255.0
> >         gateway 192.168.2.1
> >         dns-nameservers 192.168.2.113 192.168.2.1
> >     EOF
> >
>
> Is this ^ supposed to work in cloud-init? I didn't find it in the
> documentation. I thought that the only way to provide network interface
> configuration is via the 'openstack/content/whatever' file within the
> generated floppy.
>
> >
> > and inspection:
> >
> >         66:           vm_configuration[:initialization][:dns_servers] =
> >     iface_options[:dns_servers] unless iface_options[:dns_servers].nil?
> >         67:           vm_configuration[:initialization][:dns_search] =
> >     iface_options[:dns_search] unless iface_options[:dns_search].nil?
> >         68:           require 'pry'
> >         69:           binding.pry
> >         70:
> >      => 71:           machine.start(
> >         72:             use_cloud_init: true,
> >         73:             vm: vm_configuration
> >         74:           )
> >         75:
> >         76:           @app.call(env)
> >     [1] pry(#<VagrantPlugins::OVirtProvider::Action::StartVM>)>
> >     vm_configuration
> >     => {:initialization=>
> >       {:host_name=>"test",
> >        :nic_configurations=>[{:name=>"eth0", :on_boot=>true,
> >     :boot_protocol=>"static", :ip=>{:version=>"v4",
> >     :address=>"192.168.2.200", :gateway=>"192.168.2.1",
> >     :netmask=>"255.255.255.0"}}],
> >        :custom_script=>
> >         "write_files:\n  - content: |\n      wat\n    path:
> >     /tmp/something.txt\n    permissions: '0644'\nnetwork-interfaces: |\n
> >     auto eth0\n  iface eth0 inet static\n    address 192.168.2.201\n
> >     network 192.168.2.0\n    netmask 255.255.255.0\n    gateway
> >     192.168.2.1\n    dns-nameservers 192.168.2.113 192.168.2.1\n",
> >        :dns_servers=>"192.168.2.1",
> >        :dns_search=>"test.local"}}
> >
> >
> > And here's my debugging after it comes up:
> >
> >     [vagrant at test ~]$ cat /etc/resolv.conf
> >     # Generated by NetworkManager
> >     search localdomain
> >     [vagrant at test ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
> >     NM_CONTROLLED=no
> >     NETMASK=255.255.255.0
> >     BOOTPROTO=static
> >     DEVICE=eth0
> >     IPADDR=192.168.2.200
> >     GATEWAY=192.168.2.1
> >     ONBOOT=yes
> >     [vagrant at test ~]$ cat /tmp/something.txt
> >     wat
> >     [vagrant at test ~]$ ping -c 3 www.google.com
> >     <http://www.google.com/>ping: www.google.com
> >     <http://www.google.com/>: Name or service not known
> >     [vagrant at test ~]$ echo $'nameserver 192.168.2.113\nnameserver
> >     192.168.2.1' | sudo tee -a /etc/resolv.conf >/dev/null
> >     [vagrant at test ~]$ ping -c 3 www.google.com
> >     <http://www.google.com/>PING www.google.com
> >     <http://www.google.com/> (216.58.217.4) 56(84) bytes of data.
> >     64 bytes from den03s09-in-f4.1e100.net
> >     <http://den03s09-in-f4.1e100.net/> (216.58.217.4): icmp_seq=1
> >     ttl=54 time=47.5 ms
> >     64 bytes from den03s09-in-f4.1e100.net
> >     <http://den03s09-in-f4.1e100.net/> (216.58.217.4): icmp_seq=2
> >     ttl=54 time=46.9 ms
> >     64 bytes from den03s09-in-f4.1e100.net
> >     <http://den03s09-in-f4.1e100.net/> (216.58.217.4): icmp_seq=3
> >     ttl=54 time=44.3 ms
> >     --- www.google.com <http://www.google.com/> ping statistics ---
> >     3 packets transmitted, 3 received, 0% packet loss, time 2002ms
> >     rtt min/avg/max/mdev = 44.385/46.307/47.555/1.390 ms
> >
>
> Not sure if you did that already, but is very useful to check the
> content of the floppy that the oVirt engine creates and attaches to the
> virtual machine. To do so run the virtual machine, then go to the
> hypervisor where it is running and locate the corresponding 'qemu-kvm'
> process:
>
>   # ps -ef | grep qemu-kvm | grep myvm
>
> That will have a very long command line, and should have a 'payload'
> option that points to the generated floppy, something like this:
>
>   -drive file=/var/run/vdsm/payload/ae3a9cd4-....img
>
> Copy that file somewhere, and mount it:
>
>   # mount -o loop,ro that_file.img /mnt
>
> Then explore the content:
>
>   # find /mnt -type f
>   /mnt/openstack/content/0000
>   /mnt/openstack/latest/meta_data.json
>   /mnt/openstack/latest/user_data
>
> The 'openstack/content/0000' file should contain your network
> configuration. Is it what you expected?
>
> The 'openstack/latest/user_data' file should contain the cloud-init
> ocnfiguration generated by oVirt, which your custom script appended.
> Does it look correct?
>
> (Remember to "umount /mnt" when done.)
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/devel/attachments/20170217/5db0ae1e/attachment-0001.html>


More information about the Devel mailing list