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 > >