|
29 | 29 | import yaml |
30 | 30 |
|
31 | 31 |
|
32 | | -def other_client(profile, clients): |
33 | | - for cli in clients: |
34 | | - if profile.startswith(f"{cli}_"): |
35 | | - return True |
36 | | - return False |
37 | | - |
38 | | - |
39 | 32 | def libvirt_macosx(): |
40 | 33 | return which('brew') is not None and 'libvirt started' in os.popen('brew services list').read() |
41 | 34 |
|
@@ -712,85 +705,22 @@ def process_inputfile(self, plan, inputfile, overrides={}, onfly=None, full=Fals |
712 | 705 | return entries, overrides, basefile, basedir |
713 | 706 |
|
714 | 707 | def list_profiles(self): |
715 | | - default_disksize = '10' |
716 | | - default = self.default |
717 | | - results = [] |
718 | | - other_clients = [cli for cli in self.clients if cli != self.client] |
719 | | - for profile in [p for p in self.profiles if 'base' not in self.profiles[p]] + [p for p in self.profiles |
720 | | - if 'base' in self.profiles[p]]: |
721 | | - if other_client(profile, other_clients): |
722 | | - continue |
723 | | - info = self.profiles[profile] |
724 | | - if 'base' in info: |
725 | | - father = self.profiles[info['base']] |
726 | | - default_numcpus = father.get('numcpus', default['numcpus']) |
727 | | - default_memory = father.get('memory', default['memory']) |
728 | | - default_pool = father.get('pool', default['pool']) |
729 | | - default_disks = father.get('disks', default['disks']) |
730 | | - default_nets = father.get('nets', default['nets']) |
731 | | - default_image = father.get('image', '') |
732 | | - default_cloudinit = father.get('cloudinit', default['cloudinit']) |
733 | | - default_nested = father.get('nested', default['nested']) |
734 | | - default_reservedns = father.get('reservedns', default['reservedns']) |
735 | | - default_reservehost = father.get('reservehost', default['reservehost']) |
736 | | - default_flavor = father.get('flavor', default['flavor']) |
737 | | - else: |
738 | | - default_numcpus = default['numcpus'] |
739 | | - default_memory = default['memory'] |
740 | | - default_pool = default['pool'] |
741 | | - default_disks = default['disks'] |
742 | | - default_nets = default['nets'] |
743 | | - default_image = '' |
744 | | - default_cloudinit = default['cloudinit'] |
745 | | - default_nested = default['nested'] |
746 | | - default_reservedns = default['reservedns'] |
747 | | - default_reservehost = default['reservehost'] |
748 | | - default_flavor = default['flavor'] |
749 | | - profiletype = info.get('type', '') |
750 | | - if profiletype == 'container': |
751 | | - continue |
752 | | - numcpus = info.get('numcpus', default_numcpus) |
753 | | - memory = info.get('memory', default_memory) |
754 | | - pool = info.get('pool', default_pool) |
755 | | - diskinfo = [] |
756 | | - disks = info.get('disks') |
757 | | - if disks is None: |
758 | | - if 'disksize' in info: |
759 | | - disks = [info['disksize']] |
760 | | - else: |
761 | | - disks = default_disks |
762 | | - for disk in disks: |
763 | | - if disk is None: |
764 | | - size = default_disksize |
765 | | - elif isinstance(disk, int): |
766 | | - size = str(disk) |
767 | | - elif isinstance(disk, dict): |
768 | | - size = str(disk.get('size', default_disksize)) |
769 | | - diskinfo.append(size) |
770 | | - diskinfo = ','.join(diskinfo) |
771 | | - netinfo = [] |
772 | | - nets = info.get('nets', default_nets) |
773 | | - for net in nets: |
774 | | - if isinstance(net, str): |
775 | | - netname = net |
776 | | - elif isinstance(net, dict) and 'name' in net: |
777 | | - netname = net['name'] |
778 | | - netinfo.append(netname) |
779 | | - netinfo = ','.join(netinfo) |
780 | | - template = info.get('template', default_image) |
781 | | - image = info.get('image', template) |
782 | | - cloudinit = info.get('cloudinit', default_cloudinit) |
783 | | - nested = info.get('nested', default_nested) |
784 | | - reservedns = info.get('reservedns', default_reservedns) |
785 | | - reservehost = info.get('reservehost', default_reservehost) |
786 | | - flavor = info.get('flavor', default_flavor) |
787 | | - if flavor is None: |
788 | | - flavor = f"{numcpus}cpus {memory}Mb ram" |
789 | | - if profile.startswith(f'{self.client}_'): |
790 | | - profile = profile.replace(f'{self.client}_', '') |
791 | | - results.append([profile, flavor, pool, diskinfo, image, netinfo, cloudinit, nested, |
792 | | - reservedns, reservehost]) |
793 | | - return sorted(results, key=lambda x: x[0]) |
| 708 | + cli = self.client |
| 709 | + all_profiles = self.profiles |
| 710 | + valid_profiles = {p: all_profiles[p] for p in all_profiles if all_profiles[p].get('type', 'vm') == 'vm'} |
| 711 | + for profile in valid_profiles: |
| 712 | + entry = self.default.copy() |
| 713 | + base_profiles = [] |
| 714 | + base_profile = valid_profiles[profile].get('base') |
| 715 | + while base_profile is not None: |
| 716 | + base_profiles.append(base_profile) |
| 717 | + base_profile = valid_profiles[base_profile].get('base') |
| 718 | + for base_profile in reversed(base_profiles): |
| 719 | + entry.update(valid_profiles[base_profile]) |
| 720 | + entry.update(valid_profiles[profile]) |
| 721 | + valid_profiles[profile] = entry |
| 722 | + valid_profiles = {p: valid_profiles[p] for p in valid_profiles if all_profiles[p].get('client', cli) == cli} |
| 723 | + return valid_profiles |
794 | 724 |
|
795 | 725 | def list_clusterprofiles(self): |
796 | 726 | return self.clusterprofiles |
|
0 commit comments