Re: cloud-init resolv.conf updates

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>> Would it also work with 
>>
>>auto eth0 
>>iface eth0 inet dhcp 
>>dns-nameservers X.X.X.X 

yes it should work

>>Where can I read more about this ? 

Well, cloud-init doc is pretty poor.
I have digged inside cloud-init git ;)


https://github.com/number5/cloud-init/blob/74e61ab27addbfcceac4eba254f739ef9964b0ed/cloudinit/sources/DataSourceConfigDrive.py

def on_first_boot(data, distro=None):
    """Performs any first-boot actions using data read from a config-drive."""
    if not isinstance(data, dict):
        raise TypeError("Config-drive data expected to be a dict; not %s"
                        % (type(data)))
    net_conf = data.get("network_config", '')
    if net_conf and distro:
        LOG.debug("Updating network interfaces from config drive")
        distro.apply_network(net_conf)


then
https://github.com/number5/cloud-init/blob/74e61ab27addbfcceac4eba254f739ef9964b0ed/cloudinit/distros/__init__.py

  def apply_network(self, settings, bring_up=True):
        # Write it out
        dev_names = self._write_network(settings)


debian (simply write the /etc/network/interfaces)
-------------------------------------------------
https://github.com/number5/cloud-init/blob/74e61ab27addbfcceac4eba254f739ef9964b0ed/cloudinit/distros/debian.py

def _write_network(self, settings):
        util.write_file(self.network_conf_fn, settings)
        return ['all']



redhat (translate to redhat network conf file and  resolv.conf)
------------------------------------------------------------------
https://github.com/number5/cloud-init/blob/74e61ab27addbfcceac4eba254f739ef9964b0ed/cloudinit/distros/rhel.py

def _write_network(self, settings):
        # TODO(harlowja) fix this... since this is the ubuntu format
        entries = net_util.translate_network(settings)
        LOG.debug("Translated ubuntu style network settings %s into %s",
                  settings, entries)
        # Make the intermediate format as the rhel format...
        nameservers = []
        searchservers = []
        dev_names = entries.keys()
        use_ipv6 = False
        for (dev, info) in entries.items():
            net_fn = self.network_script_tpl % (dev)
            net_cfg = {
                'DEVICE': dev,
                'NETMASK': info.get('netmask'),
                'IPADDR': info.get('address'),
                'BOOTPROTO': info.get('bootproto'),
                'GATEWAY': info.get('gateway'),
                'BROADCAST': info.get('broadcast'),
                'MACADDR': info.get('hwaddress'),
                'ONBOOT': _make_sysconfig_bool(info.get('auto')),
            }
            if info.get('inet6'):
                use_ipv6 = True
                net_cfg.update({
                    'IPV6INIT': _make_sysconfig_bool(True),
                    'IPV6ADDR': info.get('ipv6').get('address'),
                    'IPV6_DEFAULTGW': info.get('ipv6').get('gateway'),
                })
            rhel_util.update_sysconfig_file(net_fn, net_cfg)
            if 'dns-nameservers' in info:
                nameservers.extend(info['dns-nameservers'])
            if 'dns-search' in info:
                searchservers.extend(info['dns-search'])
        if nameservers or searchservers:
            rhel_util.update_resolve_conf_file(self.resolve_conf_fn,
                                               nameservers, searchservers)
        if dev_names:
            net_cfg = {
                'NETWORKING': _make_sysconfig_bool(True),
            }
            # If IPv6 interface present, enable ipv6 networking
            if use_ipv6:
                net_cfg['NETWORKING_IPV6'] = _make_sysconfig_bool(True)
                net_cfg['IPV6_AUTOCONF'] = _make_sysconfig_bool(False)
            rhel_util.update_sysconfig_file(self.network_conf_fn, net_cfg)
        return dev_names


----- Mail original -----
De: "Loic Dachary" <loic@xxxxxxxxxxx>
À: "aderumier" <aderumier@xxxxxxxxx>
Cc: "ceph-devel" <ceph-devel@xxxxxxxxxxxxxxx>
Envoyé: Vendredi 12 Juin 2015 09:17:47
Objet: Re: cloud-init resolv.conf updates

Hi Alexandre, 

That's an interesting trick :-) Would it also work with 

auto eth0 
iface eth0 inet dhcp 
dns-nameservers X.X.X.X 

Where can I read more about this ? 

Cheers 

On 12/06/2015 07:01, Alexandre DERUMIER wrote: 
> Hi Loic, 
> 
> I'm always playing with cloudinit currently, 
> and I never can get working resolv_conf module too (with configdrive datasource) 
> 
> 
> Finaly, I manage it with this configdrive: 
> 
> /latest/meta_data.json 
> { 
> "uuid": "c5240fed-76a8-48d9-b417-45b46599d999", 
> "network_config" :{ "content_path": "/content/0000"} 
> } 
> 
> /content/0000 
> 
> auto eth0 
> iface eth0 inet static 
> address x.X.X.X 
> netmask 255.255.255.0 
> gateway X.X.X.X 
> dns-nameservers X.X.X.X 
> dns-search mydomain 
> 
> 
> The config is at debian format, but each cloud-init agent on different os parse it, 
> and transform it to correct distro format. (/sysconfig/.. for redhat). 
> 
> 
> 
> ----- Mail original ----- 
> De: "Loic Dachary" <loic@xxxxxxxxxxx> 
> À: "Mehdi Abaakouk" <sileht@xxxxxxxxxx> 
> Cc: "ceph-devel" <ceph-devel@xxxxxxxxxxxxxxx> 
> Envoyé: Jeudi 11 Juin 2015 23:37:39 
> Objet: cloud-init resolv.conf updates 
> 
> Hi Mehdi, 
> 
> I tried to 
> 
> manage_resolv_conf: true 
> 
> resolv_conf: 
> nameservers: ['8.8.4.4', '8.8.8.8'] 
> 
> but did not get any result and according to /var/log/cloud-init.log it does not seem to be taken into account. 
> 
> It looks like this is still an open issue according to 
> 
> https://answers.launchpad.net/ubuntu/+source/cloud-init/+question/234041 
> https://bugs.launchpad.net/cloud-init/+bug/1394061 
> 
> even when you get past the misleading example that spells manage-resolv-conf instead of manag_resolv_conf at 
> 
> http://cloudinit.readthedocs.org/en/stable/topics/examples.html#configure-an-instances-resolv-conf 
> 
> It looks like there would be a need to add 
> 
> cloud_config_modules: 
> - resolv_conf 
> 
> according to http://bazaar.launchpad.net/~cloud-init-dev/cloud-init/trunk/view/head:/doc/examples/cloud-config.txt#L300 but I don't know which modules I need and which are optional and if the list is going to be merged with the default or override. 
> 
> so I ended up doing: 
> 
> #cloud-config 
> bootcmd: 
> - echo "nameserver 10.0.3.31" | sudo tee -a /etc/resolvconf/resolv.conf.d/head 
> - sudo resolvconf -u 
> 
> Which works for Ubuntu 14.04 but isn't going to work for every operating system ;-) 
> 
> I'm sure you faced something similar in the past and I'd very much appreciate a pointer in the right direction. 
> 
> Cheers 
> 

-- 
Loïc Dachary, Artisan Logiciel Libre 
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux