Revision 7c670076

b/lib/query.py
1259 1259
    # Used for individual rows
1260 1260
    self.inst_hvparams = None
1261 1261
    self.inst_beparams = None
1262
    self.inst_osparams = None
1262 1263
    self.inst_nicparams = None
1263 1264

  
1264 1265
  def __iter__(self):
......
1271 1272
    for inst in self.instances:
1272 1273
      self.inst_hvparams = self.cluster.FillHV(inst, skip_globals=True)
1273 1274
      self.inst_beparams = self.cluster.FillBE(inst)
1275
      self.inst_osparams = self.cluster.SimpleFillOS(inst.os, inst.osparams)
1274 1276
      self.inst_nicparams = [self.cluster.SimpleFillNIC(nic.nicparams)
1275 1277
                             for nic in inst.nics]
1276 1278

  
......
1636 1638
  fields = [
1637 1639
    # Filled parameters
1638 1640
    (_MakeField("hvparams", "HypervisorParameters", QFT_OTHER,
1639
                "Hypervisor parameters"),
1641
                "Hypervisor parameters (merged)"),
1640 1642
     IQ_CONFIG, 0, lambda ctx, _: ctx.inst_hvparams),
1641 1643
    (_MakeField("beparams", "BackendParameters", QFT_OTHER,
1642
                "Backend parameters"),
1644
                "Backend parameters (merged)"),
1643 1645
     IQ_CONFIG, 0, lambda ctx, _: ctx.inst_beparams),
1646
    (_MakeField("osparams", "OpSysParameters", QFT_OTHER,
1647
                "Operating system parameters (merged)"),
1648
     IQ_CONFIG, 0, lambda ctx, _: ctx.inst_osparams),
1644 1649

  
1645 1650
    # Unfilled parameters
1646 1651
    (_MakeField("custom_hvparams", "CustomHypervisorParameters", QFT_OTHER,
......
1649 1654
    (_MakeField("custom_beparams", "CustomBackendParameters", QFT_OTHER,
1650 1655
                "Custom backend parameters",),
1651 1656
     IQ_CONFIG, 0, _GetItemAttr("beparams")),
1657
    (_MakeField("custom_osparams", "CustomOpSysParameters", QFT_OTHER,
1658
                "Custom operating system parameters",),
1659
     IQ_CONFIG, 0, _GetItemAttr("osparams")),
1652 1660
    (_MakeField("custom_nicparams", "CustomNicParameters", QFT_OTHER,
1653 1661
                "Custom network interface parameters"),
1654 1662
     IQ_CONFIG, 0, lambda ctx, inst: [nic.nicparams for nic in inst.nics]),
b/test/ganeti.query_unittest.py
564 564
        },
565 565
      nicparams={
566 566
        constants.PP_DEFAULT: constants.NICC_DEFAULTS,
567
        })
567
        },
568
      os_hvp={},
569
      osparams={})
568 570

  
569 571
    instances = [
570
      objects.Instance(name="inst1", hvparams={}, beparams={}, nics=[]),
571
      objects.Instance(name="inst2", hvparams={}, nics=[],
572
      objects.Instance(name="inst1", hvparams={}, beparams={}, osparams={},
573
                       nics=[], os="deb1"),
574
      objects.Instance(name="inst2", hvparams={}, nics=[], osparams={},
575
        os="foomoo",
572 576
        beparams={
573 577
          constants.BE_MEMORY: 512,
574 578
        }),
575
      objects.Instance(name="inst3", hvparams={}, beparams={},
576
        nics=[objects.NIC(ip="192.0.2.99", nicparams={})]),
579
      objects.Instance(name="inst3", hvparams={}, beparams={}, osparams={},
580
        os="dos", nics=[objects.NIC(ip="192.0.2.99", nicparams={})]),
577 581
      ]
578 582

  
579 583
    iqd = query.InstanceQueryData(instances, cluster, None, [], [], {},
......
617 621
        constants.PP_DEFAULT: constants.NICC_DEFAULTS,
618 622
        },
619 623
      os_hvp={},
620
      tcpudp_port_pool=set())
624
      tcpudp_port_pool=set(),
625
      osparams={
626
        "deb99": {
627
          "clean_install": "yes",
628
          },
629
        })
621 630

  
622 631
    offline_nodes = ["nodeoff1", "nodeoff2"]
623 632
    bad_nodes = ["nodebad1", "nodebad2", "nodebad3"] + offline_nodes
......
630 639
        admin_up=True, hypervisor=constants.HT_XEN_PVM, os="linux1",
631 640
        primary_node="node1",
632 641
        disk_template=constants.DT_PLAIN,
633
        disks=[]),
642
        disks=[],
643
        osparams={}),
634 644
      objects.Instance(name="inst2", hvparams={}, nics=[],
635 645
        uuid="73a0f8a7-068c-4630-ada2-c3440015ab1a",
636 646
        ctime=1291211000, mtime=1291211077, serial_no=1,
......
640 650
        disks=[],
641 651
        beparams={
642 652
          constants.BE_MEMORY: 512,
643
        }),
653
        },
654
        osparams={}),
644 655
      objects.Instance(name="inst3", hvparams={}, beparams={},
645 656
        uuid="11ec8dff-fb61-4850-bfe0-baa1803ff280",
646 657
        ctime=1291011000, mtime=1291013000, serial_no=1923,
......
654 665
                        constants.NIC_LINK: constants.DEFAULT_BRIDGE,
655 666
                        }),
656 667
          objects.NIC(ip=None, mac=macs.pop(), nicparams={}),
657
          ]),
668
          ],
669
        osparams={}),
658 670
      objects.Instance(name="inst4", hvparams={}, beparams={},
659 671
        uuid="68dab168-3ef5-4c9d-b4d3-801e0672068c",
660 672
        ctime=1291244390, mtime=1291244395, serial_no=25,
......
677 689
                        constants.NIC_MODE: constants.NIC_MODE_BRIDGED,
678 690
                        constants.NIC_LINK: "eth123",
679 691
                        }),
680
          ]),
692
          ],
693
        osparams={}),
681 694
      objects.Instance(name="inst5", hvparams={}, nics=[],
682 695
        uuid="0e3dca12-5b42-4e24-98a2-415267545bd0",
683 696
        ctime=1231211000, mtime=1261200000, serial_no=3,
......
687 700
        disks=[],
688 701
        beparams={
689 702
          constants.BE_MEMORY: 512,
690
        }),
703
        },
704
        osparams={}),
691 705
      objects.Instance(name="inst6", hvparams={}, nics=[],
692 706
        uuid="72de6580-c8d5-4661-b902-38b5785bb8b3",
693 707
        ctime=7513, mtime=11501, serial_no=13390,
......
697 711
        disks=[],
698 712
        beparams={
699 713
          constants.BE_MEMORY: 768,
700
        }),
714
        },
715
        osparams={
716
          "clean_install": "no",
717
          }),
701 718
      objects.Instance(name="inst7", hvparams={}, nics=[],
702 719
        uuid="ceec5dc4-b729-4f42-ae28-69b3cd24920e",
703 720
        ctime=None, mtime=None, serial_no=1947,
......
705 722
        primary_node="node6",
706 723
        disk_template=constants.DT_DISKLESS,
707 724
        disks=[],
708
        beparams={}),
725
        beparams={},
726
        osparams={}),
709 727
      ]
710 728

  
711 729
    assert not utils.FindDuplicates(inst.name for inst in instances)
......
826 844
        exp = (constants.RS_NORMAL, inst.name in live_data)
827 845
      self.assertEqual(row[fieldidx["oper_state"]], exp)
828 846

  
847
      cust_exp = (constants.RS_NORMAL, {})
848
      if inst.os == "deb99":
849
        if inst.name == "inst6":
850
          exp = (constants.RS_NORMAL, {"clean_install": "no"})
851
          cust_exp = exp
852
        else:
853
          exp = (constants.RS_NORMAL, {"clean_install": "yes"})
854
      else:
855
        exp = (constants.RS_NORMAL, {})
856
      self.assertEqual(row[fieldidx["osparams"]], exp)
857
      self.assertEqual(row[fieldidx["custom_osparams"]], cust_exp)
858

  
829 859
      usage = disk_usage[inst.name]
830 860
      if usage is None:
831 861
        usage = 0

Also available in: Unified diff