XCP-ng
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    % characters in cloud-init configs render as 0 in instance

    Scheduled Pinned Locked Moved Solved Infrastructure as Code
    11 Posts 3 Posters 1.8k Views 3 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • D Offline
      dj423 @dj423
      last edited by

      @dj423

      After a bit more digging, I see from the XO cloud config, to the config drive is where the characters get switched - here is the output of
      xo-cli cloudConfig.getAll

      id: 'e7655d9f-c442-4c0f-8e16-35bf3e5e5685',
          name: 'Prod-RL9-jinja',
          template: '## template: jinja\n' +
            '#cloud-config\n' +
            'fqdn: {name}%\n' +
            "{% set u1 = 'user' %}\n" +
            "{% set u1pass = '$6$xxxxxxK0q11t/' %}\n" +
      

      Everything looks correct, and matches the config as in XO cloud configs. All good so far.

      Mounting the cloud config drive I see something different, and why it is failing - cloud init is choking on the {0 's

      mount /dev/xvda /mnt
      cat /mnt/user-data
      root@test1:/mnt/userdata# cat user-data

      ## template: jinja
      #cloud-config
      fqdn: RL9-jinjatest0
      {0 set u1 = 'user' 0}
      {0 set u1pass = 'xxx/' 0}
      {0 set u1key = 'xxxx xx-ed25519-ansible' 0}
      

      All of the % characters are now 0's. See it in the hostname as well as jinja.

      Anyone know what part of the process (where it reads the cloud-init userdata and packages into the config disk) would flip all %'s to 0's?? When I run tests on the original userdata config, everything renders fine when I test it with cloud init in the VM instance, so I don't think the issue is with cloud-init.

      ex: cloud-init query --format="$( cat userdata.yaml )"

      When I feed the same userdata config to xo-cli vm.create everything renders fine, it just doesn't have the metadata for the hostname. Really strange. I will keep digging, and try a few test configs for giggles.

      1 Reply Last reply Reply Quote 0
      • olivierlambertO Offline
        olivierlambert Vates 🪐 Co-Founder CEO
        last edited by

        @julien-f or @Bastien-Nollet can you take a quick look?

        1 Reply Last reply Reply Quote 0
        • julien-fJ Offline
          julien-f Vates 🪐 Co-Founder XO Team @dj423
          last edited by

          @dj423 It's because the cloud-init configs in XO are template and some entries are replaced:

          • {name} with the name of the VM
          • % the index of the VM starting from 0, only useful when the advanced setting Multiple VMs is enabled, always 0 otherwise

          Would it fix your problem if we change the behavior so that % is simply removed when Multiple VMs is not enabled?

          D 2 Replies Last reply Reply Quote 2
          • D Offline
            dj423 @julien-f
            last edited by

            @julien-f

            Possibly, I just need the jinja lines to render with the % characters in place.

            Example:

            {% elif distro == 'ubuntu' or distro == 'debian' %}
            {% set group = 'sudo' %}
            

            Is there a config setting to disable the Multiple VM setting I missed?
            Thanks for your help!

            julien-fJ 1 Reply Last reply Reply Quote 0
            • D Offline
              dj423 @julien-f
              last edited by

              @julien-f said in % characters in cloud-init configs render as 0 in instance:

              @dj423only useful when the advanced setting Multiple VMs is enabled, always 0 otherwise

              I found that setting in advanced, and never even knew it existed lol

              I am not using that feature.

              8a71802e-ba91-4da0-9e95-da48e0255941-image.png

              Was hoping I could just disable it and see if it changes behavior.

              1 Reply Last reply Reply Quote 0
              • julien-fJ Offline
                julien-f Vates 🪐 Co-Founder XO Team @dj423
                last edited by

                @dj423 Then my solution would not work as it would break all your tags.

                But indeed, maybe we should not replace % at all when Multiple VMs is disabled.

                I know it's a bit cumbersome but in the meantime, you can escape the problematic character: \%.

                D 1 Reply Last reply Reply Quote 1
                • D Offline
                  dj423 @julien-f
                  last edited by

                  @julien-f said in % characters in cloud-init configs render as 0 in instance:

                  @dj423 I know it's a bit cumbersome but in the meantime, you can escape the problematic character: \%.

                  Ok cool, I was wondering if that would work, and my testing worked perfectly. Thank you!

                  julien-fJ 1 Reply Last reply Reply Quote 0
                  • julien-fJ Offline
                    julien-f Vates 🪐 Co-Founder XO Team @dj423
                    last edited by julien-f

                    @dj423 It should be fixed in the master branch: https://github.com/vatesfr/xen-orchestra/commit/30e6d4b4f14ddbb6ee34cd456e4ca707486df2db

                    • {index} is now used in place of %
                    • % is still working when Multiple VMs is enabled
                    • % and \% will be replaced by % when Multiple VMs is disabled
                    0 julien-f committed to vatesfr/xen-orchestra
                    feat(xo-web/new-vm): new cloud-init template var `{index}`
                    D 1 Reply Last reply Reply Quote 1
                    • D Offline
                      dj423 @julien-f
                      last edited by

                      @julien-f said in % characters in cloud-init configs render as 0 in instance:

                      @dj423 It should be fixed in the master branch: https://github.com/vatesfr/xen-orchestra/commit/30e6d4b4f14ddbb6ee34cd456e4ca707486df2db

                      • {index} is now used in place of %
                      • % is still working when Multiple VMs is enabled
                      • % and \% will be replaced by % when Multiple VMs is disabled

                      Wow! First of all big Thank you for getting that in place so fast. I updated, and for grins provisioned an Oracle 9.4 VM in XO using the same templated config (without the escaped /%) and it worked flawless.

                      snippet:
                      {% if distro == 'rocky' or distro == 'centos' or distro == 'ol' or distro == 'almalinux' or distro == 'fedora' or distro == 'redhat' %}
                      {% set group = 'wheel' %}
                      

                      Thanks again Julien!

                      1 Reply Last reply Reply Quote 2
                      • olivierlambertO Offline
                        olivierlambert Vates 🪐 Co-Founder CEO
                        last edited by

                        🎉🎉🎉

                        1 Reply Last reply Reply Quote 0
                        • olivierlambertO olivierlambert marked this topic as a question on
                        • olivierlambertO olivierlambert has marked this topic as solved on

                        Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                        Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                        With your input, this post could be even better 💗

                        Register Login
                        • First post
                          Last post