Skip to content

Instructions

Note: Currently supports checking Ubuntu OS versions

Getting Started - Instructions

Define your Data

  1. Define the attributes of the software you would like to extract information from. These can be considered column definitions.
1. os_version
2. vendor
3. ipaddr

Define your Ingest Configuration

Example Ingest Configuration Provided within application, please see default.yaml

default.yaml

app: legacyload
schema:
  dbIP: 10.92.93.166 # Replace to IP of db-ami with "sudo incus ls"
  dbUser: postgres
  dbPassword: password
  dbName: test #(Recommended to use prod database for customer use)
  table:
    - name: UBUNTU_OS_VERSION #Fixed name, will be parsed and checked
      columns:
        - name: os_version
          type: text
          grouping: true
        - name: vendor
          type: text
          grouping: true
        - name: ipaddr
          type: text
        - name: instance_type
          type: text
        - name: instance_id
          type: text
          pk: true
        - name: inst_name
          type: text
        - name: ami_id
          type: text
        - name: subnet_id
          type: text
        - name: ssh_key
          type: text
        - name: python_version
          type: text
    - name: app
      columns:
        - name: env
          type: text
        - name: version
          type: text
        - name: vendor
          type: text
        - name: name
          type: text
        - name: id
          type: text
          pk: true

ingest_config:
  repos:
    - repo_owner: owner
      repo: test_repo
      branch: master
      token: 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
      files:
        - source_path: /data/test2.csv
          target_table: UBUNTU_OS_VERSION
          mapping:
            col1: instance_id
            col2: os_version
            col3: vendor
            col4: ipaddr
            col5: instance_type
            col6: inst_name
            col7: ami_id
            col8: subnet_id
            col9: ssh_key
            col10: python_version
        - source_path: test1.csv
          target_table: app
          mapping:
            col1: id
            col2: vendor
            col3: name
            col4: version
            col5: env

  1. Define the GitHub repository details
    • Repository owner
    • Repository name
    • Branch name
    • GitHub access token
  2. Define the file mapping provided in the extracted CSV
    • Source path of CSV
    • Target table
    • Column mapping

Example Ingest file

i-0c7d8a6f5b4e2c3d1, 18.04, ubuntu, 10.0.0.56, g8.32x, 000-pulsar-dev, ami_adajksdiioudioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7d8a6f5b4e2c3d2, 20.04, ubuntu, 10.0.0.55, g8.16x, 001-pulsar-dev, ami_adajksdiioueioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7d8a6f5b4e2c3d3, 16.04, ubuntu, 10.0.0.57, g8.32x, 002-pulsar-dev, ami_adajksdiioudioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7e8a6f5b4e2c3d4, 18.04, ubuntu, 10.0.0.54, g8.16x, 003-pulsar-dev, ami_adajksdiioueioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7d8a6f5b4e2c3d5, 20.04, ubuntu, 10.0.0.40, g8.32x, 004-pulsar-dev, ami_adajksdiioudioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7d8a6f5b4e2c3d6, 22.04, ubuntu, 10.0.0.41, g8.16x, 005-pulsar-dev, ami_adajksdiioueioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7d8a6f5b4e2c3d7, 16.04, ubuntu, 10.0.0.42, g8.32x, 006-pulsar-dev, ami_adajksdiioedioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7e8a6f5b4e2c3d8, 18.04, ubuntu, 10.0.0.43, g8.16x, 007-pulsar-dev, ami_adajksdiioueioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7d8a6f5b4ewc3d9, 18.04, ubuntu, 10.0.0.36, g8.32x, 000-flink-dev, ami_adajksdiioudioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7d8a6d5b4e2c310, 20.04, ubuntu, 10.0.0.35, g8.16x, 001-flink-dev, ami_adajksdiioueioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7d8a6f5b4efc311, 16.04, ubuntu, 10.0.0.37, g8.32x, 002-flink-dev, ami_adajksdiioudioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7e8a6f5b4e2c312, 18.04, ubuntu, 10.0.0.34, g8.16x, 003-flink-dev, ami_adajksdiioueioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7d8a6f5b4e2c313, 20.04, ubuntu, 10.0.0.30, g8.32x, 004-flink-dev, ami_adajksdiioudioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7d8a6f5b4e2c314, 22.04, ubuntu, 10.0.0.31, g8.16x, 005-flink-dev, ami_adajksdiioueioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7d8a6f5b4e2c315, 16.04, ubuntu, 10.0.0.32, g8.32x, 006-flink-dev, ami_adajksdiioedioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1
i-0c7e8a6f5b4e2c316, 18.04, ubuntu, 10.0.0.33, g8.16x, 007-flink-dev, ami_adajksdiioueioawoer, subnet_dkfjaskljfioiojaoiwtrjembk, test_key, python3.9.1

Launch application

  1. Specify a configuration and run the application inside the VM
    sudo incus shell db-ami #enter application environment
    
  2. Switch user with sudo su - ubuntu
  3. Example: sudo vi default.yaml specify full path for CONFIG_FILE as /home/ubuntu/default.yaml
  4. You may create a new file with vi prod_config.yaml which is specified as /home/ubuntu/prod_config.yaml
    sudo incus exec db-ami --env CONFIG_FILE=/home/ubuntu/default.yaml  /home/ubuntu/as.sh # replace config file path as necessary
    
  5. Query ingested data through the following API:

    • A query to the API can be made in the form of a curl call to the Application IP, port 8000, and the suffixed route pattern
ssh -i KEY_PAIR -t ubuntu@VM_IP "curl dbIP:8000/os_ubuntu_status" | jq

Please replace the following credentials:

  • KEY_PAIR SSH Key Pair path
  • VM_IP VM IP

API Guide

  1. /os_ubuntu and /os_ubuntu_status returns all the records and all the columns in the user provided UBUNTU_OS_VERSION
    {
      "columns": {
        "columns": [
          "created_at",
          "os_version",
          "vendor",
          "ipaddr",
          "instance_type",
          "inst_name",
          "ami_id",
          "subnet_id",
          "ssh_key",
          "python_version"
        ],
        "pk": "instance_id"
      },
      "data": [
        {
          "ami_id": "ami_adajksdiioudioawoer",
          "codename": "Bionic Beaver",
          "created": "2017-10-19T00:00:00Z",
          "created_at": "2025-04-12T00:11:43.429741Z",
          "eol": "2023-05-31T00:00:00Z",
          "eol_esm": "2028-04-26T00:00:00Z",
          "eol_server": "2023-05-31T00:00:00Z",
          "inst_name": "000-pulsar-dev",
          "instance_id": "i-0c7d8a6f5b4e2c3d1",
          "instance_type": "g8.32x",
          "ipaddr": "10.0.0.56",
          "os_version": "18.04",
          "python_version": "python3.9.1",
          "release": "2018-04-26T00:00:00Z",
          "series": "bionic",
          "ssh_key": "test_key",
          "subnet_id": "subnet_dkfjaskljfioiojaoiwtrjembk",
          "vendor": "ubuntu",
          "version": "18.04"
        },
        {
          "ami_id": "ami_adajksdiioueioawoer",
          "codename": "Focal Fossa",
          "created": "2019-10-17T00:00:00Z",
          "created_at": "2025-04-12T00:11:43.431074Z",
          "eol": "2025-05-29T00:00:00Z",
          "eol_esm": "2030-04-23T00:00:00Z",
          "eol_server": "2025-05-29T00:00:00Z",
          "inst_name": "001-pulsar-dev",
          "instance_id": "i-0c7d8a6f5b4e2c3d2",
          "instance_type": "g8.16x",
          "ipaddr": "10.0.0.55",
          "os_version": "20.04",
          "python_version": "python3.9.1",
          "release": "2020-04-23T00:00:00Z",
          "series": "focal",
          "ssh_key": "test_key",
          "subnet_id": "subnet_dkfjaskljfioiojaoiwtrjembk",
          "vendor": "ubuntu",
          "version": "20.04"
        },
        {
          "ami_id": "ami_adajksdiioudioawoer",
          "codename": "Xenial Xerus",
          "created": "2015-10-22T00:00:00Z",
          "created_at": "2025-04-12T00:11:43.431492Z",
          "eol": "2021-04-30T00:00:00Z",
          "eol_esm": "2026-04-23T00:00:00Z",
          "eol_server": "2021-04-30T00:00:00Z",
          "inst_name": "002-pulsar-dev",
          "instance_id": "i-0c7d8a6f5b4e2c3d3",
          "instance_type": "g8.32x",
          "ipaddr": "10.0.0.57",
          "os_version": "16.04",
          "python_version": "python3.9.1",
          "release": "2016-04-21T00:00:00Z",
          "series": "xenial",
          "ssh_key": "test_key",
          "subnet_id": "subnet_dkfjaskljfioiojaoiwtrjembk",
          "vendor": "ubuntu",
          "version": "16.04"
        },
        {
          "ami_id": "ami_adajksdiioueioawoer",
          "codename": "Bionic Beaver",
          "created": "2017-10-19T00:00:00Z",
          "created_at": "2025-04-12T00:11:43.431912Z",
          "eol": "2023-05-31T00:00:00Z",
          "eol_esm": "2028-04-26T00:00:00Z",
          "eol_server": "2023-05-31T00:00:00Z",
          "inst_name": "003-pulsar-dev",
          "instance_id": "i-0c7e8a6f5b4e2c3d4",
          "instance_type": "g8.16x",
          "ipaddr": "10.0.0.54",
          "os_version": "18.04",
          "python_version": "python3.9.1",
          "release": "2018-04-26T00:00:00Z",
          "series": "bionic",
          "ssh_key": "test_key",
          "subnet_id": "subnet_dkfjaskljfioiojaoiwtrjembk",
          "vendor": "ubuntu",
          "version": "18.04"
        },
        {
          "ami_id": "ami_adajksdiioudioawoer",
          "codename": "Focal Fossa",
          "created": "2019-10-17T00:00:00Z",
          "created_at": "2025-04-12T00:11:43.434624Z",
          "eol": "2025-05-29T00:00:00Z",
          "eol_esm": "2030-04-23T00:00:00Z",
          "eol_server": "2025-05-29T00:00:00Z",
          "inst_name": "004-pulsar-dev",
          "instance_id": "i-0c7d8a6f5b4e2c3d5",
          "instance_type": "g8.32x",
          "ipaddr": "10.0.0.40",
          "os_version": "20.04",
          "python_version": "python3.9.1",
          "release": "2020-04-23T00:00:00Z",
          "series": "focal",
          "ssh_key": "test_key",
          "subnet_id": "subnet_dkfjaskljfioiojaoiwtrjembk",
          "vendor": "ubuntu",
          "version": "20.04"
        },
        {
          "ami_id": "ami_adajksdiioueioawoer",
          "codename": "Jammy Jellyfish",
          "created": "2021-10-14T00:00:00Z",
          "created_at": "2025-04-12T00:11:43.435055Z",
          "eol": "2027-06-01T00:00:00Z",
          "eol_esm": "2032-04-21T00:00:00Z",
          "eol_server": "2027-06-01T00:00:00Z",
          "inst_name": "005-pulsar-dev",
          "instance_id": "i-0c7d8a6f5b4e2c3d6",
          "instance_type": "g8.16x",
          "ipaddr": "10.0.0.41",
          "os_version": "22.04",
          "python_version": "python3.9.1",
          "release": "2022-04-21T00:00:00Z",
          "series": "jammy",
          "ssh_key": "test_key",
          "subnet_id": "subnet_dkfjaskljfioiojaoiwtrjembk",
          "vendor": "ubuntu",
          "version": "22.04"
        },
      ]
    }
    
  2. /os_ubuntu_status_eol returns the end of life records in the user provided UBUNTU_OS_VERSION
  3. /os_ubuntu_status_supported returns the supported life records in the user provided UBUNTU_OS_VERSION
  4. /initialize applies the configuration
  5. /ingest ingests the user provided data

Output will be emitted in the form of JSON. jq or a similiar tool is recommended.