Thanks Alexandru, @Granwille Strauss <granwi...@namhost.com> , what I usually do in this sittuation (because cloud init can be a real pain): - start an instance - troubleshoot - change cloud-init config - run cloud-init clean - reboot the instance
It is possible that DCHP hostname overwrites locally configured hostname (there is such a bug for Debian preseed, not sure if that is your case though). Try looking in the cloud-init startup log and if user-data loads properly, just start disabling cloud-init modules one by one until you find the culprit. Regards, Jordan On Wed, Aug 14, 2024 at 10:55 AM Alexandru Stan <alexandru.s...@lifeincloud.com.invalid> wrote: > Hi Jordan, > > The sudo line in the documentation is not correct (maybe a format issue?), > I always got errors when doing sudo su with the created user. This works, > however: > > sudo: ["ALL=(ALL) NOPASSWD:ALL"] > > > > > -----Original Message----- > From: jordan j <yordan...@gmail.com> > Sent: Tuesday, August 13, 2024 6:26 PM > To: users@cloudstack.apache.org > Cc: ruben.bo...@cldin.eu > Subject: Re: Cloud-Init not working as per Cloudstack documentation > > Hello Granwille, > > Disable the network from system_info and try again. > I have found that cloud-init has issues with handling networking on some > os-es and because of that it does not start properly. > Unfortunately I have not spent time on research of "Why". > > echo "system_info: > default_user: > name: cloud-user > lock_passwd: false > sudo: [\"ALL=(ALL) ALL\"] \ > network: > config: disabled" > /etc/cloud/cloud.cfg.d/80_root.cfg > > Regards, > Jordan > > > On Mon, Aug 12, 2024 at 9:40 AM Granwille Strauss > <granwi...@namhost.com.invalid> wrote: > > > Hi Ruben > > > > Thank you very much, I have watched this and all other related online > > videos to best assist with this. I can 100% confirm when I curl the > > virtual router from the VM that I see the userdata perfectly fine, but > > something keeps overwriting my custom changes when I boot the VM. > > Something else keeps setting the VM hostname, to the "Name" specified > > when the VM is created in Cloudstack. Its as if another datasource is > > triggering it each time. > > > > It would be nice if someone could assist with their cloud-init > > configuration and potential userdata that helps set custom values when > > a VM is booted, specifically the hostname. > > On 8/10/24 21:11, Ruben Bosch wrote: > > > > Hi Granwille, > > > > Wido has done a great talk about cloudinit. Check it out > > here:https://www.youtube.com/watch?v=seknX44Ktfc. You can check the > > details of your supplied userdata in the virtual router to see whether > what you stored in the UI/API is what is supplied to the VM. > > > > On Fri, Aug 9, 2024 at 11:39 AM Granwille > > Strauss<granwi...@namhost.com.invalid> > <granwi...@namhost.com.invalid> wrote: > > > > > > Hi Guys > > > > Any help on this? Surely I am using *userdata* right via the UI? Or > > should I log this on GitHub instead? > > On 8/8/24 10:32, Granwille Strauss wrote: > > > > Hi > > > > I push *userdata* manually when I deploy a VM and still it does not > > want to work: > > > > I have this in place now: > > > > #cloud-config > > hostname: hostname.example.com > > fqdn: hostname.example.com > > prefer_fqdn_over_hostname: true > > create_hostname_file: true > > preserve_hostname: true > > > > > > Screenshot:https://www.awesomescreenshot.com/image/49925105?key=a51b72 > > 9871fb9239579c1604c43677a3 > > > > Instead, it keeps pulling this instead and not accepting my manual > inputs: > > > > 2024-08-08 08:21:40,488 - util.py[DEBUG]: Writing to > > /var/lib/cloud/instances/a3da80ae-1cc3-4c3b-9204-5d2a14f58fef/vendor-d > > ata2.txt.i > > - wb: [600] 308 bytes > > 2024-08-08 08:21:40,489 - cc_set_hostname.py[DEBUG]: Setting the > > hostname to VMNAME FROM UI (VMNAME FROM UI) > > 2024-08-08 08:21:40,489 - subp.py[DEBUG]: Running command > > ['hostnamectl', 'set-hostname', 'VMNAME FROM UI'] with allowed return > > codes [0] (shell=False, capture=True) > > 2024-08-08 08:21:40,512 - __init__.py[DEBUG]: Non-persistently setting > > the system hostname to VMNAME FROM UI > > 2024-08-08 08:21:40,512 - subp.py[DEBUG]: Running command ['hostname', > > 'VMNAME FROM UI'] with allowed return codes [0] (shell=False, > > capture=True) > > 2024-08-08 08:21:40,522 - atomic_helper.py[DEBUG]: Atomically writing > > to file /var/lib/cloud/data/set-hostname (via temporary file > > /var/lib/cloud/data/tmpskrfsk7k) - w: [644] 53 bytes/chars > > 2024-08-08 08:21:40,523 - util.py[DEBUG]: Writing to > > /var/lib/cloud/instances/a3da80ae-1cc3-4c3b-9204-5d2a14f58fef/sem/cons > > ume_data > > - wb: [644] 24 bytes > > 2024-08-08 08:21:40,524 - helpers.py[DEBUG]: Running consume_data > > using lock (<FileLock using file > > '/var/lib/cloud/instances/a3da80ae-1cc3-4c3b-9204-5d2a14f58fef/sem/con > > sume_data'>) > > 2024-08-08 08:21:40,524 - handlers.py[DEBUG]: start: > > init-network/consume-user-data: reading and applying user-data > > 2024-08-08 08:21:40,525 - stages.py[DEBUG]: Added default handler for > > {'text/cloud-config', 'text/cloud-config-jsonp'} from > > CloudConfigPartHandler: [['text/cloud-config', > > 'text/cloud-config-jsonp']] > > > > > > Anyone that can guide me with how to use *userdata* via the Cloudstack > > UI correctly, please? > > On 8/8/24 01:01, Granwille Strauss wrote: > > > > Hi > > > > Thank you, you were right. After creating a new template and having > > the root last, the growfs worked 100%. Thank you for this. > > > > This now brings me to *userdata* in cloudstack that's not working. I > > registered a new userdata in the UI: > > > > #cloud-config hostname: {{ ds.meta_data.custom_hostname }} fqdn: {{ > > ds.meta_data.custom_hostname }} prefer_fqdn_over_hostname: true > > create_hostname_file: true > > > > Declared the *custom_hostname *variable and when booting a VM it > > still > > fails: > > > > 2024-08-07 22:46:56,673 - stages.py[DEBUG]: Added default handler for > > {'text/jinja2'} from JinjaTemplatePartHandler: [['text/jinja2']] > > 2024-08-07 22:46:56,673 - __init__.py[DEBUG]: Calling handler > > CloudConfigPartHandler: [['text/cloud-config', > > 'text/cloud-config-jsonp']] (__begin__, None, 3) with frequency > > once-per-instance > > 2024-08-07 22:46:56,673 - __init__.py[DEBUG]: Calling handler > > ShellScriptPartHandler: [['text/x-shellscript']] (__begin__, None, 2) > > with frequency once-per-instance > > 2024-08-07 22:46:56,674 - __init__.py[DEBUG]: Calling handler > > ShellScriptByFreqPartHandler: [['text/x-shellscript-per-boot']] > > (__begin__, None, 2) with frequency once-per-instance > > 2024-08-07 22:46:56,674 - __init__.py[DEBUG]: Calling handler > > ShellScriptByFreqPartHandler: [['text/x-shellscript-per-instance']] > > (__begin__, None, 2) with frequency once-per-instance > > 2024-08-07 22:46:56,674 - __init__.py[DEBUG]: Calling handler > > ShellScriptByFreqPartHandler: [['text/x-shellscript-per-once']] > > (__begin__, None, 2) with frequency once-per-instance > > 2024-08-07 22:46:56,674 - __init__.py[DEBUG]: Calling handler > > BootHookPartHandler: [['text/cloud-boothook']] (__begin__, None, 2) > > with frequency once-per-instance > > 2024-08-07 22:46:56,674 - __init__.py[DEBUG]: Calling handler > > JinjaTemplatePartHandler: [['text/jinja2']] (__begin__, None, 3) with > > frequency once-per-instance > > 2024-08-07 22:46:56,674 - __init__.py[DEBUG]: {'MIME-Version': '1.0', > > 'Content-Type': 'text/cloud-config', 'Content-Disposition': > > 'attachment; filename="part-001"'} > > 2024-08-07 22:46:56,674 - __init__.py[DEBUG]: Calling handler > > CloudConfigPartHandler: [['text/cloud-config', > > 'text/cloud-config-jsonp']] (text/cloud-config, part-001, 3) with > > frequency once-per-instance > > 2024-08-07 22:46:56,674 - util.py[DEBUG]: Attempting to load yaml from > > string of length 158 with allowed root types (<class 'dict'>,) > > 2024-08-07 22:46:56,676 - util.py[WARNING]: Failed loading yaml blob. > > Invalid format at line 2 column 11: "while constructing a mapping > > in "<unicode string>", line 2, column 11: > > hostname: {{ ds.meta_data.custom_hostname }} > > ^ > > found unhashable key > > in "<unicode string>", line 2, column 12: > > hostname: {{ ds.meta_data.custom_hostname }} > > ^" > > 2024-08-07 22:46:56,676 - cloud_config.py[WARNING]: Failed at merging > > in cloud config part from part-001: empty cloud config > > 2024-08-07 22:46:56,676 - __init__.py[DEBUG]: Calling handler > > CloudConfigPartHandler: [['text/cloud-config', > > 'text/cloud-config-jsonp']] (__end__, None, 3) with frequency > > once-per-instance > > 2024-08-07 22:46:56,677 - util.py[DEBUG]: Writing to > > /var/lib/cloud/instances/c366e71a-220c-48ed-aba1-bdd8a932064b/cloud-co > > nfig.txt > > - wb: [600] 77 bytes > > 2024-08-07 22:46:56,677 - util.py[DEBUG]: Restoring selinux mode for > > /var/lib/cloud/instances/c366e71a-220c-48ed-aba1-bdd8a932064b/cloud-co > > nfig.txt > > (recursive=False) > > 2024-08-07 22:46:56,678 - util.py[DEBUG]: Restoring selinux mode for > > /var/lib/cloud/instances/c366e71a-220c-48ed-aba1-bdd8a932064b/cloud-co > > nfig.txt > > (recursive=False) > > 2024-08-07 22:46:56,679 - __init__.py[DEBUG]: Calling handler > > ShellScriptPartHandler: [['text/x-shellscript']] (__end__, None, 2) > > with frequency once-per-instance > > > > > > What am I doing wrong in this case? And why does the VM hostname keep > > defaulting to the instance name specified in the UI instead? > > > > I also created the following in */etc/cloud/cloud.cfg.d*, which > > injects my SSH key and updated packages and installs a few additional > > ones, but this too seems to fail: > > > > #cloud-config > > ssh_authorized_keys: > > - <my pub key> > > package_update: true > > package_upgrade: true > > packages: > > - epel-release > > - neofetch > > - htop > > - gcc > > - gcc-c++ > > - perl > > > > > > Here's the error: > > > > 2024-08-07 22:47:00,315 - rhel.py[DEBUG]: Using DNF for package > > management > > 2024-08-07 22:47:00,315 - subp.py[DEBUG]: Running command ['dnf', > > '-y', 'makecache'] with allowed return codes [0] (shell=False, > > capture=False) > > 2024-08-07 22:47:05,331 - rhel.py[DEBUG]: Using DNF for package > > management > > 2024-08-07 22:47:05,331 - subp.py[DEBUG]: Running command ['dnf', > > '-y', 'upgrade'] with allowed return codes [0] (shell=False, > > capture=False) > > 2024-08-07 22:47:07,103 - rhel.py[DEBUG]: Using DNF for package > > management > > 2024-08-07 22:47:07,103 - subp.py[DEBUG]: Running command ['dnf', > > '-y', 'install', 'epel-release', 'neofetch', 'htop', 'gcc', 'gcc-c++', > > 'perl'] with allowed return codes [0] (shell=False, capture=False) > > 2024-08-07 22:47:08,573 - util.py[WARNING]: Failed to install packages: > > ['epel-release', 'neofetch', 'htop', 'gcc', 'gcc-c++', 'perl'] > > 2024-08-07 22:47:08,575 - util.py[DEBUG]: Failed to install packages: > > ['epel-release', 'neofetch', 'htop', 'gcc', 'gcc-c++', 'perl'] > > Traceback (most recent call last): > > File > > "/usr/lib/python3.6/site-packages/cloudinit/config/cc_package_update_u > > pgrade_install.py", > > line 121, in handle > > cloud.distro.install_packages(pkglist) > > File "/usr/lib/python3.6/site-packages/cloudinit/distros/rhel.py", > > line 59, in install_packages > > self.package_command("install", pkgs=pkglist) > > File "/usr/lib/python3.6/site-packages/cloudinit/distros/rhel.py", > > line 201, in package_command > > subp.subp(cmd, capture=False) > > File "/usr/lib/python3.6/site-packages/cloudinit/subp.py", line 323, > > in subp > > stdout=out, stderr=err, exit_code=rc, cmd=args > > cloudinit.subp.ProcessExecutionError: Unexpected error while running > > command. > > Command: ['dnf', '-y', 'install', 'epel-release', 'neofetch', 'htop', > > 'gcc', 'gcc-c++', 'perl'] Exit code: 1 > > Reason: - > > Stdout: - > > Stderr: - > > 2024-08-07 22:47:08,582 - > > cc_package_update_upgrade_install.py[WARNING]: 1 failed with > > exceptions, re-raising the last one > > 2024-08-07 22:47:08,582 - handlers.py[DEBUG]: finish: > > modules-final/config-package_update_upgrade_install: FAIL: running > > config-package_update_upgrade_install with frequency once-per-instance > > 2024-08-07 22:47:08,582 - util.py[WARNING]: Running module > > package_update_upgrade_install (<module > > 'cloudinit.config.cc_package_update_upgrade_install' from > > '/usr/lib/python3.6/site-packages/cloudinit/config/cc_package_update_u > > pgrade_install.py'>) > > failed > > 2024-08-07 22:47:08,582 - util.py[DEBUG]: Running module > > package_update_upgrade_install (<module > > 'cloudinit.config.cc_package_update_upgrade_install' from > > '/usr/lib/python3.6/site-packages/cloudinit/config/cc_package_update_u > > pgrade_install.py'>) > > failed > > > > > > My main concern is the hostname that I cannot seem to set no matter > > what I try, if I can get this at least right that would be the > > ultimate. How can I pass the update_hostname userdata so that I can > > manually enter custom hostnames when deploying VM via UI? > > On 8/7/24 22:52, Alexandru Stan wrote: > > > > Hello, > > > > Can’t say about everything you mentioned, but regarding the disk > resizinng I can share my experience, I also had some issues before I > managed to get it working. So, from what I’ve searched, growpart does not > seem to work with lvm (could be wrong here though), so basic partitioning > it is. Then, it seems that it extends the partition only if it’s the last > one on the disk, seems to be your issue since the last partition is the > swap partition. Try with the root partition being the last one, it should > work fine. > > > > > > From: Granwille Strauss <granwi...@namhost.com.INVALID> > > <granwi...@namhost.com.INVALID> <granwi...@namhost.com.INVALID> > > <granwi...@namhost.com.INVALID> > > Sent: 7 August, 2024 20:35 > > To: users@cloudstack.apache.org > > Subject: Cloud-Init not working as per Cloudstack documentation > > > > > > Evening, > > > > Please note, I do not use any API service and solely rely on the > Cloudstack UI. > > > > I deployed a new clean template and I followed the cloudstack > documentation thoroughly to use the basics of cloud-init with cloudstack. > But when I deployed my VM nothing seems to trigger at all, including > userdata I registered. > > pwd > > /etc/cloud/cloud.cfg.d > > [root@hostname cloud.cfg.d]# ll > > total 32 > > -rw-r--r--. 1 root root 2070 Dec 4 2023 05_logging.cfg > > -rw-r--r--. 1 root root 22 Aug 7 17:43 49_hostkeys.cfg > > -rw-r--r--. 1 root root 88 Aug 7 17:45 50_growpartion.cfg > > -rw-r--r--. 1 root root 209 Aug 7 17:52 51_extend_volume.cfg > > -rw-r--r--. 1 root root 143 Aug 7 17:55 52_upgrade_packages.cfg > > -rw-r--r--. 1 root root 355 Aug 7 18:00 53_install_packages.cfg > > -rw-r--r--. 1 root root 357 Aug 7 17:42 80_user.cfg -rw-r--r--. 1 > > root root 167 Dec 4 2023 README > > > > > > For example, I deployed a new VM with its root disk overwrite from the > template, which was 10 GB to 60 GB and the 50_growpartion.cfg did nothing: > > [root@hostname cloud.cfg.d]# cat 50_growpartion.cfg > > growpart: > > mode: auto > > devices: > > - \"/dev/vda2\" > > ignore_growroot_disabled: false > > cat 51_extend_volume.cfg > > runcmd: > > - [ cloud-init-per, always, grow_FS, resize2fs, /dev/vda2 ] > > > > grep "50_growpartion.cfg" /var/log/cloud-init.log > > 2024-08-07 16:50:45,881 - util.py[DEBUG]: Reading from > > /etc/cloud/cloud.cfg.d/50_growpartion.cfg (quiet=False) > > 2024-08-07 16:50:45,881 - util.py[DEBUG]: Read 88 bytes from > > /etc/cloud/cloud.cfg.d/50_growpartion.cfg > > 2024-08-07 16:50:45,928 - util.py[DEBUG]: Reading from > > /etc/cloud/cloud.cfg.d/50_growpartion.cfg (quiet=False) > > 2024-08-07 16:50:45,928 - util.py[DEBUG]: Read 88 bytes from > > /etc/cloud/cloud.cfg.d/50_growpartion.cfg > > 2024-08-07 16:50:46,046 - util.py[DEBUG]: Reading from > > /etc/cloud/cloud.cfg.d/50_growpartion.cfg (quiet=False) > > 2024-08-07 16:50:46,046 - util.py[DEBUG]: Read 88 bytes from > > /etc/cloud/cloud.cfg.d/50_growpartion.cfg > > lsblk > > NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT > > sr0 11:0 1 1024M 0 rom > > vda 253:0 0 60G 0 disk > > ├─vda1 253:1 0 512M 0 part /boot > > ├─vda2 253:2 0 7.5G 0 part / > > └─vda3 253:3 0 2G 0 part [SWAP] > > The same happens with the userdata specified, because I don't use an > API, I need to set custom value, such as a hostname when I boot a VM I > created the following userdata in the UI as per doc: > > > > > > #cloud-config runcmd: - echo 'hostname {{ ds.meta_data.hostname1 }}' > > > /tmp/hostname - echo '{{ ds.meta_data.hostname1 }} > /etc/hostname' > > /tmp/hostname - echo 'hostnamectl set-hostname {{ ds.meta_data.hostname1 > }}' > /tmp/hostname And I declared the hostname1 variable, which allows me > to specify the hostname under "Advanced" settings when I create a new > instance. But nothing, for some reason, it keeps setting the VM name as the > server hostname. But periods (.) are not allowed in the Name field for me > to continue with this method and I need to be able to have special > characters in the hostname for FQDNS spmetimes. > > > > The only cloud-init command that ran was the 80_user.cfg that creates a > managed user, that was the only one that worked. My upgrade and install > configs none ran: > > cat 52_upgrade_packages.cfg > > #cloud-config > > > > # Upgrade the instance on first boot > > # (ie run apt-get upgrade) > > # > > # Default: false > > # Aliases: apt_upgrade > > cat 53_install_packages.cfg > > #cloud-config > > > > # Install additional packages on first boot # # Default: none # # if > > packages are specified, this apt_update will be set to true # # > > packages may be supplied as a single package name or as a list # with > > the format [<package>, <version>] wherein the specifc # package > > version will be installed. > > packages: > > - epel-release > > - neofetch > > - htop > > And here's my cloud.cfg: > > cat cloud.cfg > > datasource_list: ["CloudStack"] > > > > datasource: > > CloudStack: > > max_wait: 120 > > timeout: 50 > > > > network: > > config: disabled > > > > users: > > - default > > > > system_info: > > default_user: > > name: root > > > > disable_root: false > > > > ssh_deletekeys: true > > > > cloud_init_modules: > > - seed_random > > - bootcmd > > - write-files > > - growpart > > - resizefs > > - disk_setup > > - mounts > > - set_hostname > > - update_hostname > > - update_etc_hosts > > - [ssh, always] > > - users-groups > > > > cloud_config_modules: > > - ssh-import-id > > - locale > > - [ set-passwords, always ] > > - ntp > > - timezone > > - disable-ec2-metadata > > - [runcmd, always] > > > > cloud_final_modules: > > - scripts-vendor > > - scripts-per-once > > - scripts-per-boot > > - scripts-per-instance > > - [scripts-user, always] > > - puppet > > > > warnings: > > dsid_missing_source: off > > > > Am I missing something with this? Any assistance will be greatly > appreciated. > > -- > > Regards / Groete > > [https://www.namhost.com/t/namhost/images/mail/namhost-email-sig-logo. > > png]<https://www.namhost.com/> <https://www.namhost.com/> > > <https://www.namhost.com/> <https://www.namhost.com/> Granwille > > Strauss // Senior Systems Admin > > > > e: granwi...@namhost.com<mailto:granwi...@namhost.com> > > <granwi...@namhost.com> <granwi...@namhost.com> > > <granwi...@namhost.com> > > m: +264 81 323 1260<tel:+264813231260> <+264813231260> <+264813231260> > > w: www.namhost.com<https://www.namhost.com/> > > <https://www.namhost.com/> <https://www.namhost.com/> > > <https://www.namhost.com/> > > > > [https://www.namhost.com/t/namhost/images/mail/facebook.png]<https://w > > ww.facebook.com/namhost> <https://www.facebook.com/namhost> > > <https://www.facebook.com/namhost> > > <https://www.facebook.com/namhost>[https://www.namhost.com/t/namhost/i > > mages/mail/twitter.png]<https://twitter.com/namhost> > > <https://twitter.com/namhost> <https://twitter.com/namhost> > > <https://twitter.com/namhost>[https://www.namhost.com/t/namhost/images > > /mail/instagram.png]<https://www.instagram.com/namhostinternetservices > > /> <https://www.instagram.com/namhostinternetservices/> > > <https://www.instagram.com/namhostinternetservices/> > > <https://www.instagram.com/namhostinternetservices/>[https://www.namho > > st.com/t/namhost/images/mail/linkedin.png]<https://www.linkedin.com/co > > mpany/namhost> <https://www.linkedin.com/company/namhost> > > <https://www.linkedin.com/company/namhost> > > <https://www.linkedin.com/company/namhost>[https://www.namhost.com/t/n > > amhost/images/mail/youtube.png]<https://www.youtube.com/channel/UCTd5v > > -kVPaic_dguGur15AA> > > <https://www.youtube.com/channel/UCTd5v-kVPaic_dguGur15AA> > > <https://www.youtube.com/channel/UCTd5v-kVPaic_dguGur15AA> > > <https://www.youtube.com/channel/UCTd5v-kVPaic_dguGur15AA> > > > > [https://www.namhost.com/t/namhost/images/mail/yourmove-email-banner.p > > ng]<https://www.namhost.com/your-move> > > <https://www.namhost.com/your-move> > > <https://www.namhost.com/your-move> > > <https://www.namhost.com/your-move> > > Namhost Internet Services (Pty) Ltd , > > > > 24 Black Eagle Rd, Hermanus, 7210, RSA > > > > > > > > The content of this message is confidential. If you have received it > > by mistake, please inform us by email reply and then delete the > > message. It is forbidden to copy, forward, or in any way reveal the > > contents of this message to anyone without our explicit consent. The > > integrity and security of this email cannot be guaranteed over the > > Internet. Therefore, the sender will not be held liable for any damage > > caused by the message. For our full privacy policy and disclaimers, > > please go to https://www.namhost.com/privacy-policy > > > > -- > > Regards / Groete > > <https://www.namhost.com> <https://www.namhost.com> Granwille Strauss > > // Senior Systems Admin > > > > *e:* granwi...@namhost.com > > *m:* +264 81 323 1260 <+264813231260> > > *w:* www.namhost.com > > <https://www.facebook.com/namhost> <https://www.facebook.com/namhost> > > <https://twitter.com/namhost> > > <https://twitter.com/namhost><https://www.instagram.com/namhostinterne > > tservices/> > > <https://www.instagram.com/namhostinternetservices/><https://www.linke > > din.com/company/namhost> > > <https://www.linkedin.com/company/namhost><https://www.youtube.com/cha > > nnel/UCTd5v-kVPaic_dguGur15AA> > > <https://www.youtube.com/channel/UCTd5v-kVPaic_dguGur15AA> > > <https://www.namhost.com/your-move> > > <https://www.namhost.com/your-move> > > > > Namhost Internet Services (Pty) Ltd , > > > > 24 Black Eagle Rd, Hermanus, 7210, RSA > > > > > > > > The content of this message is confidential. If you have received it > > by mistake, please inform us by email reply and then delete the > > message. It is forbidden to copy, forward, or in any way reveal the > > contents of this message to anyone without our explicit consent. The > > integrity and security of this email cannot be guaranteed over the > > Internet. Therefore, the sender will not be held liable for any damage > > caused by the message. For our full privacy policy and disclaimers, > > please go tohttps://www.namhost.com/privacy-policy > > > > > > -- > > Regards / Groete > > <https://www.namhost.com> <https://www.namhost.com> Granwille Strauss > > // Senior Systems Admin > > > > *e:* granwi...@namhost.com > > *m:* +264 81 323 1260 <+264813231260> > > *w:* www.namhost.com > > <https://www.facebook.com/namhost> <https://www.facebook.com/namhost> > > <https://twitter.com/namhost> > > <https://twitter.com/namhost><https://www.instagram.com/namhostinterne > > tservices/> > > <https://www.instagram.com/namhostinternetservices/><https://www.linke > > din.com/company/namhost> > > <https://www.linkedin.com/company/namhost><https://www.youtube.com/cha > > nnel/UCTd5v-kVPaic_dguGur15AA> > > <https://www.youtube.com/channel/UCTd5v-kVPaic_dguGur15AA> > > <https://www.namhost.com/your-move> > > <https://www.namhost.com/your-move> > > > > Namhost Internet Services (Pty) Ltd , > > > > 24 Black Eagle Rd, Hermanus, 7210, RSA > > > > > > > > The content of this message is confidential. If you have received it > > by mistake, please inform us by email reply and then delete the > > message. It is forbidden to copy, forward, or in any way reveal the > > contents of this message to anyone without our explicit consent. The > > integrity and security of this email cannot be guaranteed over the > > Internet. Therefore, the sender will not be held liable for any damage > > caused by the message. For our full privacy policy and disclaimers, > > please go tohttps://www.namhost.com/privacy-policy > > > > > > -- > > Regards / Groete > > <https://www.namhost.com> <https://www.namhost.com> Granwille Strauss > > // Senior Systems Admin > > > > *e:* granwi...@namhost.com > > *m:* +264 81 323 1260 <+264813231260> > > *w:* www.namhost.com > > <https://www.facebook.com/namhost> <https://www.facebook.com/namhost> > > <https://twitter.com/namhost> > > <https://twitter.com/namhost><https://www.instagram.com/namhostinterne > > tservices/> > > <https://www.instagram.com/namhostinternetservices/><https://www.linke > > din.com/company/namhost> > > <https://www.linkedin.com/company/namhost><https://www.youtube.com/cha > > nnel/UCTd5v-kVPaic_dguGur15AA> > > <https://www.youtube.com/channel/UCTd5v-kVPaic_dguGur15AA> > > <https://www.namhost.com/your-move> > > <https://www.namhost.com/your-move> > > > > Namhost Internet Services (Pty) Ltd , > > > > 24 Black Eagle Rd, Hermanus, 7210, RSA > > > > > > > > The content of this message is confidential. If you have received it > > by mistake, please inform us by email reply and then delete the > > message. It is forbidden to copy, forward, or in any way reveal the > > contents of this message to anyone without our explicit consent. The > > integrity and security of this email cannot be guaranteed over the > > Internet. Therefore, the sender will not be held liable for any damage > > caused by the message. For our full privacy policy and disclaimers, > > please go tohttps://www.namhost.com/privacy-policy > > > > -- > > Regards / Groete > > > > <https://www.namhost.com> Granwille Strauss // Senior Systems Admin > > > > *e:* granwi...@namhost.com > > *m:* +264 81 323 1260 <+264813231260> > > *w:* www.namhost.com > > > > <https://www.facebook.com/namhost> <https://twitter.com/namhost> > > <https://www.instagram.com/namhostinternetservices/> > > <https://www.linkedin.com/company/namhost> > > <https://www.youtube.com/channel/UCTd5v-kVPaic_dguGur15AA> > > > > <https://www.namhost.com/your-move> > > > > Namhost Internet Services (Pty) Ltd , > > > > 24 Black Eagle Rd, Hermanus, 7210, RSA > > > > > > > > The content of this message is confidential. If you have received it > > by mistake, please inform us by email reply and then delete the > > message. It is forbidden to copy, forward, or in any way reveal the > > contents of this message to anyone without our explicit consent. The > > integrity and security of this email cannot be guaranteed over the > > Internet. Therefore, the sender will not be held liable for any damage > > caused by the message. For our full privacy policy and disclaimers, > > please go to https://www.namhost.com/privacy-policy > > > > >