Portal:MicroOS/cloud-init
Configuration of openSUSE MicroOS and openSUSE Kubic with cloud-init
The system will be configured with cloud-init during the boot phase. The following datasources are configured and called in this order: LocalDisk, NoCloud, OpenStack, None.
Datasource LocalDisk
This datasource reads the configuration files from the local disk. The required configuration files are meta-data, user-data and optional vendor-data, and must be located at the root of your local disk.
Datasource NoCloud
The NoCloud datasource can be configured to look for configuration data on a local storage or a remote network source.
Remote Network Source
For a remote network source, the URL needs to be specified during boot at the kernel command line: cloud-init-url=http://my.example.com/cloud.cfg
The format of the file is:
#cloud-config datasource: NoCloud: # default seedfrom is None # if found, then it should contain a url with: # <url>user-data and <url>meta-data # seedfrom: http://my.example.com/<path>/
The content of the URL is stored in /etc/cloud/cloud.cfg.d/91_kernel_cmdline_url.cfg and will not be overwritten, even if the URL on the kernel commandline changes.
Local Storage
To setup the network to access configuration files on the network local configuration files can be used. NoCloud will search on all devices, which do not contain a partition table and contain a vfat or iso9660 filesystem. The filesystem volume label must be cidata.
So this could be a ISO-image, USB-Stick or an unpartitioned harddisk.
meta-data
instance-id: iid-abcde001 network-interfaces: | auto eth0 iface eth0 inet dhcp
The instance-id is used to determine if this is "first boot”. So if changes are made to the configuration, this has to be changed.
The auto eth0 in the network configuration part means, that the network configuration should be started automatically during boot phase. In this example, the interface `eth0` is configured for dhcp.
A static network configuration would look like:
network-interfaces: | auto eth0 iface eth0 inet static address 192.168.1.10 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1
user-data
Header
#cloud-config debug: True disable_root: False
All user-data configuration files have to start with the line #cloud-config. To get debug output, set debug: True. If you want to login with a root password and not only ssh keys, set disable_root: False.
Add Authorized SSH Keys
ssh_deletekeys: False ssh_pwauth: True ssh_authorized_keys: - ssh-rsa XXXKEY mail@example.com
ssh_deletekeys: False tells cloud-init not to delete old private and public keys of the host. The default is True, which means existing keys will be deleted and new ones generated. This is a bad idea, since ssh will complain about changed or wrong keys the next time you try to login after the cloud-init configuration has changed.
ssh_authorized_keys adds the public ssh keys to the authorized_keys file of of the default user. If not specified otherwise, this is root.
ssh_pwauth: True allows to login via ssh with a password, if a password is set. ssh_pwauth: False would prevent that.
Set Passwords
chpasswd: list: | root:linux expire: True
This will set the password for root to linux. The variable expire defines, if the user as to change the password at the first login or not. expire: True means, he has to change the password with the first login. Instead of a clear text password it's also possible to specify a hashed password:
chpasswd: list: | account:$6$salt$hash
Add custom repository and configure zypper
Here is how you can add a custom repository of your choice:
zypper: repos: - id: tumbleweed-oss name: os-oss baseurl: http://download.opensuse.org/tumbleweed/repo/oss/ enabled: 1 autorefresh: 1 - id: tumbleweed-oss-sources name: os-oss-sources baseurl: http://download.opensuse.org/tumbleweed/repo/src-oss/ enabled: 0 - id: tumbleweed-update name: os-update baseurl: http://download.opensuse.org/update/tumbleweed/ enabled: 1 autorefresh: 1 config: reposdir: /etc/zypp/repos.dir servicesdir: /etc/zypp/services.d download.use_deltarpm: true # any setting in /etc/zypp/zypp.conf
This option adds an additional custom software repository to the system, in this case the Tumbleweed OSS and update repositories. All options valid for *.repo files for zypper are valid options.
Timezone
timezone: Europe/Berlin
Set the timezone for this instance. The value of timezone must exist in /usr/share/zoneinfo.
Hostname
hostname: myhost fqdn: myhost.example.com
Nameserver
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
Salt Minion
salt_minion: conf: master: salt.example.com public_key: | -----BEGIN PUBLIC KEY----- XXX -----END PUBLIC KEY----- private_key: | -----BEGIN RSA PRIVATE KEY----- XXX -----END RSA PRIVATE KEY-----
The Salt Minion is only available and used with openSUSE Kubic, not with openSUSE MicroOS
NTP Server
ntp: servers: - ntp1.example.com - ntp2.example.com - ntp3.example.com runcmd: - /usr/bin/systemctl enable --now ntpd
With this configuration, ntp is configured during the first boot to use three ntp servers. Additionally, the ntp service is enabled and started immediately. There can only be one time service running on a system at the same time. systemd-timesyncd, chrony or other time services need to be disabled first.
Keyboard layout
runcmd: - /usr/bin/localectl set-keymap de-latin1-nodeadkeys
The keyboard layout is set to the German layout with nodeadkeys.
openSUSE Kubic Kubeadm Node
Configuration of the openSUSE Kubic kubeadm node is currently not implemented.
openSUSE Kubic Cluster Node
Configuration of an openSUSE Kubic Cluster Node with cloud-init is currently not implemented.
runcmd statement
There can only be one runcmd: statement in the user-data file. All different ones have to be grouped together to one.
Example configuration for openSUSE MicroOS
If you install with YaST2 or autoyast, you don't need to configure the network, update channel, user accounts and passwords or something similar. But you could still use cloud-init for fine tuning and additional configurations. If you use ready-to-run virtualisation images, you need something like the following. This example can be enhanced with all other valid cloud-init options.
meta-data
instance-id: iid-MICROOS01 network-interfaces: | auto eth0 iface eth0 inet dhcp
user-data
#cloud-config debug: True disable_root: False ssh_pwauth: True ssh_deletekeys: False ssh_authorized_keys: - ssh-rsa AAAAxxx== mail@exmaple.com chpasswd: list: | root:$6$salt$hash expire: False zypper: repos: - id: tumbleweed-oss name: os-oss baseurl: http://download.opensuse.org/tumbleweed/repo/oss/ enabled: 1 autorefresh: 1 - id: tumbleweed-update name: os-update baseurl: http://download.opensuse.org/update/tumbleweed/ enabled: 1 autorefresh: 1 config: download.use_deltarpm: true