Image Pillars

If the built image type is PXE, a Salt pillar is also generated.

Image pillars are stored in the database and Salt subsystem can access details about the generated image. Details include where the image files are located and provided, image checksums, information needed for network boot, and more.

The generated pillar is available to all connected clients.

This is an example of image pillar:

{
  "images": {
    "POS_Image_JeOS7": {
      "7.1.0-1": {
        "url": "https://ftp/saltboot/image/POS_Image_JeOS7.x86_64-7.1.0-1/POS_Image_JeOS7.x86_64-7.1.0",
        "arch": "x86_64",
        "hash": "7368c101e96826053c6efde0588cf365",
        "size": 1548746752,
        "sync": {
          "url": "https://manager.example.com/os-images/1/POS_Image_JeOS7-7.1.0-1/POS_Image_JeOS7.x86_64-7.1.0",
          "hash": "7368c101e96826053c6efde0588cf365",
          "local_path": "image/POS_Image_JeOS7.x86_64-7.1.0-1"
        },
        "type": "pxe",
        "fstype": "ext3",
        "filename": "POS_Image_JeOS7.x86_64-7.1.0",
        "inactive": false,
        "boot_image": "POS_Image_JeOS7-7.1.0-1"
      }
    }
  },
  "boot_images": {
    "POS_Image_JeOS7-7.1.0-1": {
      "arch": "x86_64",
      "name": "POS_Image_JeOS7",
      "sync": {
        "initrd_url": "https://manager.example.com/os-images/1/POS_Image_JeOS7-7.1.0-1/POS_Image_JeOS7.x86_64-7.1.0.initrd",
        "kernel_url": "https://manager.example.com/os-images/1/POS_Image_JeOS7-7.1.0-1/POS_Image_JeOS7.x86_64-7.1.0-5.14.21-150400.24.55-default.kernel",
        "local_path": "POS_Image_JeOS7.x86_64-7.1.0-1"
      },
      "initrd": {
        "url": "https://ftp/saltboot/boot/POS_Image_JeOS7.x86_64-7.1.0-1/POS_Image_JeOS7.x86_64-7.1.0.initrd",
        "hash": "d38b74a373bc6c9def1f069a8533d99f",
        "size": 118252253,
        "version": "7.1.0",
        "filename": "POS_Image_JeOS7.x86_64-7.1.0.initrd"
      },
      "kernel": {
        "url": "https://ftp/saltboot/boot/POS_Image_JeOS7.x86_64-7.1.0-1/POS_Image_JeOS7.x86_64-7.1.0-5.14.21-150400.24.55-default.kernel",
        "hash": "946dac0a19125d78e282afe0e3ebf0b6",
        "size": 11444416,
        "version": "5.14.21-150400.24.55-default",
        "filename": "POS_Image_JeOS7.x86_64-7.1.0-5.14.21-150400.24.55-default.kernel"
      },
      "basename": "POS_Image_JeOS7.x86_64-7.1.0"
    }
  }
}

Under the Images section, there is a specific image called POS_Image_JeOS7 with a version 7.1.0-1. It provides various details such as the image URL for download, architecture, hash, size, synchronization information, image type (in this case, PXE), file system type, file name, and an inactive flag to exclude it from auto-selection. Additionally, it references the corresponding boot image named POS_Image_JeOS7-7.1.0-1.

The boot_images section contains information about the boot image POS_Image_JeOS7-7.1.0-1. It specifies the details about kernel and initrd.

Image pillar can be modified via API. This example retrieves the image pillar for a given image ID, and changes the Inactive flag to True and writes it back.

#!/usr/bin/env python3
from xmlrpc.client import ServerProxy

MANAGER_URL = "http://manager.example.com/rpc/api"

MANAGER_LOGIN = "admin"
MANAGER_PASSWORD = "adminpass"

IMAGE_ID=15

client = ServerProxy(MANAGER_URL)
key = client.auth.login(MANAGER_LOGIN, MANAGER_PASSWORD)

pillar = client.image.getPillar(key, IMAGE_ID)
[(name, version_dict)] = pillar['images'].items()
[(version, image_data)] = version_dict.items()
image_data['inactive'] = True
client.image.setPillar(key, IMAGE_ID, pillar)

client.auth.logout(key)