[ovirt-devel] oVirt Cloud-init

Marc Young 3vilpenguin at gmail.com
Mon Feb 20 20:23:36 UTC 2017


All good. Turns out the fix was


-echo $'NM_CONTROLLED=no' > /etc/sysconfig/network-scripts/ifcfg-eth0
+echo $'' > /etc/sysconfig/network-scripts/ifcfg-eth0
+
+CLOUD_CONFIG=/etc/cloud/cloud.cfg
+grep  -q ' - resolv-conf' $CLOUD_CONFIG || sed -i -e 's/ - timezone/&\n -
resolv-conf/' $CLOUD_CONFIG
+chkconfig NetworkManager off


On Mon, Feb 20, 2017 at 1:12 PM, Marc Young <3vilpenguin at gmail.com> wrote:

> FWIW I think the problem was cloud.cfg not having the resolv.conf module
> set up for management.
> I'm investigating now but it's taking longer than I like due to VPN
> issues. I'll update when I finally have the resolution
>
> On Mon, Feb 20, 2017 at 10:01 AM, Marc Young <3vilpenguin at gmail.com>
> wrote:
>
>> I started poking around in the cloud-init code. it's running v0.7.5 and
>> the network code (forked) for rhel.py is here: https://github.com/numbe
>> r5/cloud-init/blob/0.7.5/cloudinit/distros/rhel.py#L87
>>
>> I used journalctl /usr/bin/cloud-init to get debug output and got this:
>>
>>
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] rhel.py[DEBUG]:
>> Translated ubuntu style network settings auto eth0
>>                                          iface eth0 inet static
>>                                            address 192.168.2.120
>>                                            netmask 255.255.255.0
>>                                            gateway 192.168.2.1
>>                                            dns-nameservers 192.168.2.1
>>                                            dns-search test.local
>>                                           into {'eth0': {'dns-search':
>> ['test.local'], 'auto': True, 'dns-nameservers': ['192.168.2.1'],
>> 'netmask': '255.255.255.0', 'bootproto': 'static', 'address':
>> '192.168.2.120', 'gateway': '192.168.2.1'}}
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Reading from /etc/sysconfig/network-scripts/ifcfg-eth0 (quiet=False)
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]: Read
>> 17 bytes from /etc/sysconfig/network-scripts/ifcfg-eth0
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Writing to /etc/sysconfig/network-scripts/ifcfg-eth0 - wb: [420] 120
>> bytes
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Restoring selinux mode for /etc/sysconfig/network-scripts/ifcfg-eth0
>> (recursive=False)
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Restoring selinux mode for /etc/sysconfig/network-scripts/ifcfg-eth0
>> (recursive=False)
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Reading from /etc/resolv.conf (quiet=False)
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]: Read
>> 86 bytes from /etc/resolv.conf
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Writing to /etc/resolv.conf - wb: [420] 109 bytes
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Restoring selinux mode for /etc/resolv.conf (recursive=False)
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Restoring selinux mode for /etc/resolv.conf (recursive=False)
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Reading from /etc/sysconfig/network (quiet=False)
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]: Read
>> 53 bytes from /etc/sysconfig/network
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Writing to /etc/sysconfig/network - wb: [420] 68 bytes
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Restoring selinux mode for /etc/sysconfig/network (recursive=False)
>> Feb 19 19:39:03 vagrant cloud-init[647]: [CLOUDINIT] util.py[DEBUG]:
>> Restoring selinux mode for /etc/sysconfig/network (recursive=False)
>>
>> It definitely feels like something related to cloud-init or my setup .
>> I'll keep looking, perhaps the write to /etc/resolv.conf is failing
>> silently. I can verify that any changes made to /etc/resolv.conf survive a
>> service network restart so i'm not sure if it's not happening at all or
>> what, but i don't think it's being overridden.
>>
>> On Mon, Feb 20, 2017 at 9:36 AM, Marc Young <3vilpenguin at gmail.com>
>> wrote:
>>
>>> Still no change...
>>>
>>>
>>>  myoung  dev    ~  repos  github  vagrant-ovirt4  feature/gh65 
>>> ✎  $  vagrant up
>>> 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.
>>>
>>> Bringing machine 'default' up with 'ovirt4' provider...
>>> ==> default: Creating VM with the following settings...
>>> ==> default:  -- Name:          testing
>>> ==> default:  -- Cluster:       Default
>>> ==> default:  -- Template:      vagrant-centos7
>>> ==> default:  -- Console Type:  vnc
>>> ==> default:  -- Memory:
>>> ==> default:  ---- Memory:      2048 MB
>>> ==> default:  ---- Maximum:     2048 MB
>>> ==> default:  ---- Guaranteed:  2048 MB
>>> ==> default:  -- Cpu:
>>> ==> default:  ---- Cores:       2
>>> ==> default:  ---- Sockets:     1
>>> ==> default:  ---- Threads:     1
>>> ==> default:  -- Cloud-Init:    false
>>> ==> default: Waiting for VM to become "ready" to start...
>>> ==> default: Starting VM.
>>>
>>> From: /home/myoung/repos/github/vagrant-ovirt4/lib/vagrant-ovirt4/action/start_vm.rb
>>> @ line 79 VagrantPlugins::OVirtProvider::Action::StartVM#call:
>>>
>>>     74:           vm_configuration[:initialization][:dns_search] =
>>> iface_options[:dns_search] unless iface_options[:dns_search].nil?
>>>     75:
>>>     76:           require 'pry'
>>>     77:           binding.pry
>>>     78:
>>>  => 79:           machine.start(
>>>     80:             use_cloud_init: true,
>>>     81:             vm: vm_configuration
>>>     82:           )
>>>     83:
>>>     84:           @app.call(env)
>>>
>>> [1] pry(#<VagrantPlugins::OVirtProvider::Action::StartVM>)>
>>> vm_configuration
>>> => {:initialization=>
>>>   {:host_name=>"testing",
>>>    :nic_configurations=>[{:name=>"eth0", :on_boot=>true,
>>> :boot_protocol=>"static", :ip=>{:version=>"v4", :address=>"192.168.2.120",
>>> :gateway=>"192.168.2.1", :netmask=>"255.255.255.0"}}],
>>>    :custom_script=>nil,
>>>    :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...
>>>  myoung  dev    ~  repos  github  vagrant-ovirt4  feature/gh65 
>>> ✎  $  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: Wed Feb 15 00:23:35 2017 from 192.168.2.32
>>> [vagrant at testing ~]$ cat /etc/resolv.conf
>>> # Generated by NetworkManager
>>> search localdomain
>>> [vagrant at testing ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
>>> NM_CONTROLLED=no
>>> NETMASK=255.255.255.0
>>> BOOTPROTO=static
>>> DEVICE=eth0
>>> IPADDR=192.168.2.120
>>> GATEWAY=192.168.2.1
>>> ONBOOT=yes
>>>
>>>
>>>
>>> If i check out the floppy attached to that VM:
>>>
>>> [myoung at ovirt ~]$ sudo ps -ef | grep qemu-kvm | grep test
>>> [sudo] password for myoung:
>>> qemu     24311     1 87 01:38 ?        00:00:18 .....
>>> [myoung at ovirt ~]$ sudo cp /var/run/vdsm/payload/9964609e
>>> -8d85-4a5c-9416-8e11b2fd5883.d0d0739973bfb4b6eb67d1f4974c3e0c.img .
>>> [myoung at ovirt ~]$ mkdir a; sudo mount -o loop,ro
>>> 9964609e-8d85-4a5c-9416-8e11b2fd5883.d0d0739973bfb4b6eb67d1f4974c3e0c.img
>>> a
>>> [myoung at ovirt ~]$ sudo cat $(sudo find a -name 0000 -type f)
>>> auto eth0
>>> iface eth0 inet static
>>>   address 192.168.2.120
>>>   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 a
>>>
>>>
>>>
>>> What's the next step? Is there a way to verify on the upstream that
>>> dns-search and dns-nameservers actually populate the ifcfg-eth0 file ?
>>>
>>>
>>>
>>> On Sat, Feb 18, 2017 at 6:58 AM, Juan Hernández <jhernand at redhat.com>
>>> wrote:
>>>
>>>> On 02/17/2017 08:11 PM, Marc Young wrote:
>>>> > 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].ni
>>>> l?
>>>> >         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
>>>> >     <http://foo.example.com>\n    - bar.example.com
>>>> >     <http://bar.example.com>\n  domain: example.com
>>>> >     <http://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 <http://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 <http://foo.example.com>
>>>> >         - bar.example.com <http://bar.example.com>
>>>> >       domain: example.com <http://example.com>
>>>> >       options:
>>>> >         rotate: true
>>>> >         timeout: 1
>>>>
>>>> Apparently you are passing in the 'custom_script' some DNS
>>>> configuration, which may conflict with the DNS configuration that you
>>>> are passing in the 'dns_servers' and 'dns_search' options. It could be
>>>> that cloud-init ignores one of them. I'd suggest that you try to remove
>>>> completely the 'custom_script' parameter.
>>>>
>>>> >     [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.20fc2db0517e8c06579d77
>>>> 19d8f3fb35.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.20fc2db0517e8c06579d77
>>>> 19d8f3fb35.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 <http://www.google.com
>>>> >
>>>> >     ping: www.google.com <http://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 <http://www.google.com
>>>> >
>>>> >     ping: www.google.com <http://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 <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=55.8 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=43.9 ms
>>>> >     ^C
>>>> >     --- www.google.com <http://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
>>>> > <mailto: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> <tel: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/too
>>>> ls/prepare_redhat_for_box.sh>
>>>> >     >
>>>> >     <https://github.com/myoung34/vagrant-ovirt4/blob/master/too
>>>> ls/prepare_redhat_for_box.sh
>>>> >     <https://github.com/myoung34/vagrant-ovirt4/blob/master/too
>>>> ls/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>
>>>> >     >
>>>> >     <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>
>>>> >     >     <http://www.google.com/>ping: www.google.com
>>>> >     <http://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>
>>>> >     >     <http://www.google.com/>PING www.google.com
>>>> >     <http://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>
>>>> >     >     <http://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>
>>>> >     >     <http://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>
>>>> >     >     <http://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>
>>>> >     <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/20170220/ed130fef/attachment-0001.html>


More information about the Devel mailing list