Exemple #1
0
    def by_name(self,input,*args,**kw):
        if 'anywhere' in kw:
            search = Key.list_by_name(input,find_anywhere=True)
        else:
            search = Key.list_by_name(input)

        keys = [elem.key_name for elem in search]
        return dict(matches=keys)
Exemple #2
0
 def save(self, **kw):
     if kw["id"]:
         key = Key.by_id(kw["id"])
         key.key_name = kw["key_name"]
     else:
         key = Key(key_name=kw["key_name"])
         session.add(key)
     if "numeric" in kw:
         key.numeric = kw["numeric"]
     flash(_(u"OK"))
     redirect(".")
 def test_closing_script_tag_escaped_in_search_bar(self):
     with session.begin():
         Key.lazy_create(key_name=u'</script>')
     b = self.browser
     b.get(get_server_base())
     b.find_element_by_link_text('Show Search Options').click()
     wait_for_animation(b, '#searchform')
     Select(b.find_element_by_name('systemsearch-0.table'))\
         .select_by_visible_text('Key/Value')
     Select(b.find_element_by_name('systemsearch-0.keyvalue'))\
         .select_by_visible_text('</script>')
Exemple #4
0
 def test_closing_script_tag_escaped_in_search_bar(self):
     with session.begin():
         Key.lazy_create(key_name=u'</script>')
     b = self.browser
     b.get(get_server_base())
     b.find_element_by_link_text('Show Search Options').click()
     wait_for_animation(b, '#searchform')
     Select(b.find_element_by_name('systemsearch-0.table'))\
         .select_by_visible_text('Key/Value')
     Select(b.find_element_by_name('systemsearch-0.keyvalue'))\
         .select_by_visible_text('</script>')
Exemple #5
0
 def save(self, **kw):
     if kw['id']:
         key = Key.by_id(kw['id'])
         key.key_name = kw['key_name']
     else:
         key = Key(key_name=kw['key_name'])
         session.add(key)
     if 'numeric' in kw:
         key.numeric = kw['numeric']
     flash( _(u"OK") )
     redirect(".")
Exemple #6
0
 def save(self, **kw):
     if kw['id']:
         key = Key.by_id(kw['id'])
         key.key_name = kw['key_name']
     else:
         if Key.query.filter_by(key_name=kw['key_name']).first():
             flash(u"Key Type exists: %s" % kw['key_name'])
             redirect(".")
         key = Key(key_name=kw['key_name'])
         session.add(key)
     key.numeric = kw['numeric']
     flash(_(u"OK"))
     redirect(".")
Exemple #7
0
 def save(self, **kw):
     if kw["id"]:
         key = Key.by_id(kw["id"])
         key.key_name = kw["key_name"]
     else:
         if Key.query.filter_by(key_name=kw["key_name"]).first():
             flash(u"Key Type exists: %s" % kw["key_name"])
             redirect(".")
         key = Key(key_name=kw["key_name"])
         session.add(key)
     key.numeric = kw["numeric"]
     flash(_(u"OK"))
     redirect(".")
Exemple #8
0
 def test_by_multiple_key_values(self):
     with session.begin():
         self.system = data_setup.create_system()
         self.system.key_values_string.append(Key_Value_String(
             Key.by_name(u'CPUMODEL'), 'foocodename'))
         self.system.key_values_string.append(Key_Value_String(
             Key.by_name(u'HVM'), '1'))
         self.system.key_values_int.append(Key_Value_Int(
             Key.by_name(u'DISKSPACE'), '1024'))
     b = self.browser
     perform_search(b, [('Key/Value', 'HVM', 'is', '1'),
         ('Key/Value', 'CPUMODEL', 'is', 'foocodename'),
         ('Key/Value', 'DISKSPACE', 'greater than', '1000')])
     check_system_search_results(b, present=[self.system],
             absent=[self.another_system])
Exemple #9
0
    def edit(self, **kw):
        values = []
        if kw.get("id"):
            key = Key.by_id(kw["id"])
            values = dict(id=key.id, key_name=key.key_name, numeric=key.numeric)

        return dict(form=self.form, action="./save", options={}, value=values)
Exemple #10
0
    def test_existing_keys_are_untouched(self):
        with session.begin():
            system = data_setup.create_system()
            system.key_values_string.extend([
                Key_Value_String(Key.by_name(u'PCIID'), '1022:2000'), # this one gets deleted
                Key_Value_String(Key.by_name(u'HVM'), '0'), # this one gets updated
                Key_Value_String(Key.by_name(u'VENDOR'), 'Bob'), # this one should not be touched
            ])

        self.server.legacypush(system.fqdn, {'PCIID': [], 'HVM': True})
        with session.begin():
            session.refresh(system)
            self.assertEquals(len(system.key_values_string), 2, system.key_values_string)
            self.assertEquals(system.key_values_string[0].key.key_name, u'VENDOR')
            self.assertEquals(system.key_values_string[0].key_value, u'Bob')
            self.assertEquals(system.key_values_string[1].key.key_name, u'HVM')
            self.assertEquals(system.key_values_string[1].key_value, u'1')
Exemple #11
0
 def test_by_key_value_is_not(self):
     with session.begin():
         self.another_system.key_values_string.append(Key_Value_String(
                 Key.by_name(u'CPUMODEL'), 'foocodename'))
     b = self.browser
     perform_search(b, [('Key/Value', 'CPUMODEL', 'is not', 'foocodename')],
             search_url=u'mine')
     check_system_search_results(b, present=[self.system],
             absent=[self.another_system])
    def _from_csv(cls,system,data,csv_type,log):
        """
        Import data from CSV file into System Objects
        """
        if 'key' in data and data['key']:
            try:
                key = Key.by_name(data['key'])
            except InvalidRequestError:
                log.append('%s: Invalid Key %s ' % (system.fqdn, data['key']))
                return False
        else:
            log.append('%s: Key must not be blank!' % system.fqdn)
            return False
        if 'key_value' in data and data['key_value']:
            if key.numeric:
                system_key_values = system.key_values_int
                try:
                    key_value = Key_Value_Int.by_key_value(system,
                                                           key,
                                                           data['key_value'])
                except InvalidRequestError:
                    key_value = Key_Value_Int(key=key,
                                              key_value=data['key_value'])
            else:
                system_key_values = system.key_values_string
                try:
                    key_value = Key_Value_String.by_key_value(system,
                                                           key,
                                                           data['key_value'])
                except InvalidRequestError:
                    key_value = Key_Value_String(key=key,
                                                 key_value=data['key_value'])
        else:
            log.append('%s: Key Value must not be blank!' % system.fqdn)
            return False
        deleted = False
        if 'deleted' in data:
            deleted = smart_bool(data['deleted'])
        if deleted:
            if key_value in system_key_values:
                system.record_activity(user=identity.current.user, service=u'CSV',
                        action=u'Removed', field=u'Key/Value',
                        old=u'%s/%s' % (data['key'],data['key_value']), new=u'')
                system_key_values.remove(key_value)
                if not key_value.id:
                    session.expunge(key_value)
        else:
            if key_value not in system_key_values:
                system.record_activity(user=identity.current.user, service=u'CSV',
                        action=u'Added', field=u'Key/Value', old=u'',
                        new=u'%s/%s' % (data['key'],data['key_value']))
                system_key_values.append(key_value)

        session.add(key_value)
        return True
Exemple #13
0
 def test_by_key_value_is_on_removed_systems_page(self):
     with session.begin():
         system = data_setup.create_system()
         removed_system = data_setup.create_system(status=SystemStatus.removed)
         removed_system.key_values_string.append(Key_Value_String(
                 Key.by_name(u'CPUMODEL'), 'foocodename'))
     # Key Value search from "Removed Systems"
     b = self.browser
     perform_search(b, [('Key/Value', 'CPUMODEL', 'is', 'foocodename')],
             search_url='removed')
     check_system_search_results(b, present=[removed_system],
             absent=[system])
 def test_xml_filter(self):
     with session.begin():
         module_key = Key.by_name(u"MODULE")
         with_module = data_setup.create_system()
         with_module.key_values_string.extend(
             [Key_Value_String(module_key, u"cciss"), Key_Value_String(module_key, u"kvm")]
         )
         without_module = data_setup.create_system()
     out = run_client(["bkr", "list-systems", "--xml-filter", '<key_value key="MODULE" />'])
     returned_systems = out.splitlines()
     self.assert_(with_module.fqdn in returned_systems, returned_systems)
     self.assert_(without_module.fqdn not in returned_systems, returned_systems)
Exemple #15
0
 def test_system_activity_shows_changes(self):
     with session.begin():
         system = data_setup.create_system()
         system.key_values_string.extend([
             Key_Value_String(Key.by_name(u'PCIID'), '1022:2000'),
             Key_Value_String(Key.by_name(u'PCIID'), '80ee:beef'),
         ])
     self.server.legacypush(system.fqdn,
             {'PCIID': ['80ee:cafe', '80ee:beef']})
     with session.begin():
         session.refresh(system)
         self.assertEquals(system.activity[0].field_name, u'Key/Value')
         self.assertEquals(system.activity[0].service, u'XMLRPC')
         self.assertEquals(system.activity[0].action, u'Added')
         self.assertEquals(system.activity[0].old_value, None)
         self.assertEquals(system.activity[0].new_value, u'PCIID/80ee:cafe')
         self.assertEquals(system.activity[1].field_name, u'Key/Value')
         self.assertEquals(system.activity[1].service, u'XMLRPC')
         self.assertEquals(system.activity[1].action, u'Removed')
         self.assertEquals(system.activity[1].old_value, u'PCIID/1022:2000')
         self.assertEquals(system.activity[1].new_value, None)
    def setUpClass(cls):
        cls.browser = cls.get_browser()
        login(cls.browser)
        cls.system_one_details = { 'fqdn' : u'a1',
                                    'type' : u'Machine',
                                    'arch' : u'i386',
                                    'status' : u'Automated',
                                    'owner' : data_setup.create_user(),}
        cls.system_one = data_setup.create_system(**cls.system_one_details)
        cls.system_one.loaned = data_setup.create_user()
        cls.system_one.numa = Numa(nodes=2)
        cls.system_one.key_values_string.append(Key_Value_String(
            Key.by_name(u'CPUMODEL'), 'foocodename'))
        cls.system_one.key_values_string.append(Key_Value_String(
            Key.by_name(u'HVM'), '1'))
        cls.system_one.cpu = Cpu(flags=['flag1', 'flag2'])

        cls.system_one.key_values_int.append(Key_Value_Int(
            Key.by_name(u'DISKSPACE'), '1024'))
        cls.system_one.key_values_int.append(Key_Value_Int(
            Key.by_name(u'MEMORY'), '4096'))

        cls.system_two_details = { 'fqdn' : u'a2',
                                    'type' : u'Prototype',
                                    'arch' : u'x86_64',
                                    'status' : u'Manual',
                                    'owner' : data_setup.create_user(),}
        cls.system_two = data_setup.create_system(**cls.system_two_details)
        cls.system_two.key_values_int.append(Key_Value_Int(
            Key.by_name(u'DISKSPACE'), '900'))
        cls.system_two.key_values_string.append(Key_Value_String(
            Key.by_name(u'HVM'), '1'))

        device_class = DeviceClass.lazy_create(device_class='class_type')
        device1 = Device.lazy_create(vendor_id = '0000',
                                      device_id = '0000',
                                      subsys_vendor_id = '2223',
                                      subsys_device_id = '2224',
                                      bus = '0000',
                                      driver = '0000',
                                      device_class_id = device_class.id,
                                      description = 'blah')
        cls.system_two.devices.append(device1)
        cls.system_three_details = { 'fqdn' : u'a3',
                                    'type' : u'Laptop',
                                    'arch' : u'ia64',
                                    'status' : u'Removed',
                                    'owner' : data_setup.create_user(),}
        cls.system_three = data_setup.create_system(**cls.system_three_details)
        cls.system_three.numa = Numa(nodes=1)
        device2 = Device.lazy_create(vendor_id = '0000',
                                      device_id = '0000',
                                      subsys_vendor_id = '1111',
                                      subsys_device_id = '1112',
                                      bus = '0000',
                                      driver = '0000',
                                      device_class_id = device_class.id,
                                      description = 'blah')
        cls.system_three.devices.append(device2)
Exemple #17
0
 def test_key_present(self):
     module_key = Key.by_name(u'MODULE')
     with_module = data_setup.create_system()
     with_module.key_values_string.extend([
             Key_Value_String(module_key, u'cciss'),
             Key_Value_String(module_key, u'kvm')])
     without_module = data_setup.create_system()
     self.check_filter("""
         <hostRequires>
             <key_value key="MODULE" op="==" />
         </hostRequires>
         """,
         present=[with_module], absent=[without_module])
Exemple #18
0
 def test_key_present(self):
     module_key = Key.by_name(u'MODULE')
     with_module = data_setup.create_system()
     with_module.key_values_string.extend([
             Key_Value_String(module_key, u'cciss'),
             Key_Value_String(module_key, u'kvm')])
     without_module = data_setup.create_system()
     self.check_filter("""
         <hostRequires>
             <key_value key="MODULE" op="==" />
         </hostRequires>
         """,
         present=[with_module], absent=[without_module])
Exemple #19
0
    def edit(self, **kw):
        values = []
        if kw.get('id'):
            key = Key.by_id(kw['id'])
            values = dict(id=key.id,
                          key_name=key.key_name,
                          numeric=key.numeric)

        return dict(
            form=self.form,
            action='./save',
            options={},
            value=values,
        )
Exemple #20
0
 def test_xml_filter(self):
     with session.begin():
         module_key = Key.by_name(u'MODULE')
         with_module = data_setup.create_system()
         with_module.key_values_string.extend([
                 Key_Value_String(module_key, u'cciss'),
                 Key_Value_String(module_key, u'kvm')])
         without_module = data_setup.create_system()
     feed_url = urljoin(get_server_base(), '?' + urlencode({
             'tg_format': 'atom', 'list_tgp_order': '-date_modified',
             'xmlsearch': '<key_value key="MODULE" />'}))
     feed = lxml.etree.parse(urlopen(feed_url)).getroot()
     self.assert_(self.feed_contains_system(feed, with_module.fqdn))
     self.assert_(not self.feed_contains_system(feed, without_module.fqdn))
 def test_xml_filter(self):
     with session.begin():
         module_key = Key.by_name(u'MODULE')
         with_module = data_setup.create_system()
         with_module.key_values_string.extend([
                 Key_Value_String(module_key, u'cciss'),
                 Key_Value_String(module_key, u'kvm')])
         without_module = data_setup.create_system()
     out = run_client(['bkr', 'system-list',
             '--xml-filter', '<key_value key="MODULE" />'])
     returned_systems = out.splitlines()
     self.assert_(with_module.fqdn in returned_systems, returned_systems)
     self.assert_(without_module.fqdn not in returned_systems,
             returned_systems)
 def test_multiple_xml_filters(self):
     with session.begin():
         module_key = Key.by_name(u'MODULE')
         matching = data_setup.create_system()
         matching.cpu = Cpu(vendor=u'GenuineIntel', family=6, model=47, model_name=u'Intel')
         matching.key_values_string.append(
                 Key_Value_String(module_key, u'cciss'))
         nonmatching = data_setup.create_system()
     out = run_client(['bkr', 'system-list',
             '--xml-filter', '<not><lender value="shark"/></not>',
             '--xml-filter', '<key_value key="MODULE" value="cciss"/>',
             '--host-filter', 'INTEL__WESTMERE'])
     returned_systems = out.splitlines()
     self.assertIn(matching.fqdn, returned_systems)
     self.assertNotIn(nonmatching.fqdn, returned_systems)
Exemple #23
0
 def test_xml_filter(self):
     with session.begin():
         module_key = Key.by_name(u'MODULE')
         with_module = data_setup.create_system()
         with_module.key_values_string.extend([
             Key_Value_String(module_key, u'cciss'),
             Key_Value_String(module_key, u'kvm')
         ])
         without_module = data_setup.create_system()
     out = run_client([
         'bkr', 'list-systems', '--xml-filter', '<key_value key="MODULE" />'
     ])
     returned_systems = out.splitlines()
     self.assert_(with_module.fqdn in returned_systems, returned_systems)
     self.assert_(without_module.fqdn not in returned_systems,
                  returned_systems)
Exemple #24
0
 def edit(self,**kw):
     values = []
     if kw.get('id'):
         key = Key.by_id(kw['id'])
         values = dict(
             id         = key.id,
             key_name   = key.key_name,
             numeric    = key.numeric
         )
     
     return dict(
         form = self.form,
         action = './save',
         options = {},
         value = values,
     )
Exemple #25
0
    def test_uncheck_numeric_keytype(self):
        with session.begin():
            key = Key(data_setup.unique_name(u'FOOBAR%s'), numeric=1)
            session.add(key)

        b = self.browser
        login(b)
        b.get(get_server_base() + 'keytypes/')
        b.find_element_by_link_text('F').click()
        b.find_element_by_link_text(key.key_name).click()
        b.find_element_by_name('numeric').click()
        b.find_element_by_id('keytypes').submit()

        with session.begin():
            session.refresh(key)
            self.assertEqual(key.numeric, False)
Exemple #26
0
 def test_multiple_xml_filters(self):
     with session.begin():
         module_key = Key.by_name(u'MODULE')
         matching = data_setup.create_system()
         matching.cpu = Cpu(family=6, model=47, model_name=u'Intel')
         matching.key_values_string.append(
             Key_Value_String(module_key, u'cciss'))
         nonmatching = data_setup.create_system()
     out = run_client([
         'bkr', 'list-systems', '--xml-filter',
         '<not><lender value="shark"/></not>', '--xml-filter',
         '<key_value key="MODULE" value="cciss"/>', '--host-filter',
         'INTEL__WESTMERE'
     ])
     returned_systems = out.splitlines()
     self.assertIn(matching.fqdn, returned_systems)
     self.assertNotIn(nonmatching.fqdn, returned_systems)
Exemple #27
0
 def test_by_key_value_is(self):
     with session.begin():
         self.system.key_values_string.append(Key_Value_String(
                 Key.by_name(u'CPUMODEL'), 'foocodename'))
     b = self.browser
     b.get(get_server_base())
     b.find_element_by_link_text('Show Search Options').click()
     wait_for_animation(b, '#searchform')
     Select(b.find_element_by_name('systemsearch-0.table'))\
         .select_by_visible_text('Key/Value')
     Select(b.find_element_by_name('systemsearch-0.keyvalue'))\
         .select_by_visible_text('CPUMODEL')
     Select(b.find_element_by_name('systemsearch-0.operation'))\
         .select_by_visible_text('is')
     b.find_element_by_name('systemsearch-0.value').send_keys('foocodename')
     b.find_element_by_id('searchform').submit()
     check_system_search_results(b, present=[self.system],
             absent=[self.another_system])
Exemple #28
0
 def test_xml_filter(self):
     with session.begin():
         module_key = Key.by_name(u"MODULE")
         with_module = data_setup.create_system()
         with_module.key_values_string.extend(
             [Key_Value_String(module_key, u"cciss"), Key_Value_String(module_key, u"kvm")]
         )
         without_module = data_setup.create_system()
     feed_url = urljoin(
         get_server_base(),
         "?"
         + urlencode(
             {"tg_format": "atom", "list_tgp_order": "-date_modified", "xmlsearch": '<key_value key="MODULE" />'}
         ),
     )
     feed = lxml.etree.parse(urlopen(feed_url)).getroot()
     self.assert_(self.feed_contains_system(feed, with_module.fqdn))
     self.assert_(not self.feed_contains_system(feed, without_module.fqdn))
Exemple #29
0
 def test_key_notequal(self):
     module_key = Key.by_name(u'MODULE')
     with_cciss = data_setup.create_system()
     with_cciss.key_values_string.extend([
             Key_Value_String(module_key, u'cciss'),
             Key_Value_String(module_key, u'kvm')])
     without_cciss = data_setup.create_system()
     without_cciss.key_values_string.extend([
             Key_Value_String(module_key, u'ida'),
             Key_Value_String(module_key, u'kvm')])
     self.check_filter("""
         <hostRequires>
             <and>
                 <key_value key="MODULE" op="!=" value="cciss"/>
             </and>
         </hostRequires>
         """,
         present=[without_cciss], absent=[with_cciss])
Exemple #30
0
 def test_key_notequal(self):
     module_key = Key.by_name(u'MODULE')
     with_cciss = data_setup.create_system()
     with_cciss.key_values_string.extend([
             Key_Value_String(module_key, u'cciss'),
             Key_Value_String(module_key, u'kvm')])
     without_cciss = data_setup.create_system()
     without_cciss.key_values_string.extend([
             Key_Value_String(module_key, u'ida'),
             Key_Value_String(module_key, u'kvm')])
     self.check_filter("""
         <hostRequires>
             <and>
                 <key_value key="MODULE" op="!=" value="cciss"/>
             </and>
         </hostRequires>
         """,
         present=[without_cciss], absent=[with_cciss])
Exemple #31
0
 def test_xml_filter(self):
     with session.begin():
         module_key = Key.by_name(u'MODULE')
         with_module = data_setup.create_system()
         with_module.key_values_string.extend([
             Key_Value_String(module_key, u'cciss'),
             Key_Value_String(module_key, u'kvm')
         ])
         without_module = data_setup.create_system()
     feed_url = urljoin(
         get_server_base(),
         '?' + urlencode({
             'tg_format': 'atom',
             'list_tgp_order': '-date_modified',
             'xmlsearch': '<key_value key="MODULE" />'
         }))
     feed = lxml.etree.parse(urlopen(feed_url)).getroot()
     self.assert_(self.feed_contains_system(feed, with_module.fqdn))
     self.assert_(not self.feed_contains_system(feed, without_module.fqdn))
Exemple #32
0
    def test_bools_are_coerced_to_ints(self):
        with session.begin():
            system = data_setup.create_system()
            system.key_values_string.append(
                    Key_Value_String(Key.by_name(u'HVM'), '0'))

        self.server.legacypush(system.fqdn, {'HVM': False})
        with session.begin():
            session.refresh(system)
            self.assertEquals(len(system.activity), 0) # nothing has changed, yet

        self.server.legacypush(system.fqdn, {'HVM': True})
        with session.begin():
            session.refresh(system)
            self.assertEquals(system.activity[0].field_name, u'Key/Value')
            self.assertEquals(system.activity[0].service, u'XMLRPC')
            self.assertEquals(system.activity[0].action, u'Added')
            self.assertEquals(system.activity[0].old_value, None)
            self.assertEquals(system.activity[0].new_value, u'HVM/1')
Exemple #33
0
 def test_keyvalue_does_not_cause_duplicate_rows(self):
     system = data_setup.create_system()
     disk_key = Key.by_name(u'DISK')
     system.key_values_int.extend([
             Key_Value_Int(disk_key, 30718),
             Key_Value_Int(disk_key, 140011),
             Key_Value_Int(disk_key, 1048570)])
     session.flush()
     filter = """
         <hostRequires>
             <and>
                 <system><name op="=" value="%s" /></system>
                 <key_value key="DISK" op="&gt;" value="9000" />
             </and>
         </hostRequires>
         """ % system.fqdn
     query = XmlHost.from_string(filter).apply_filter(System.query)
     self.assertEquals(len(query.all()), 1)
     # with the bug this count comes out as 3 instead of 1,
     # which doesn't sound so bad...
     # but when it's 926127 instead of 278, that's bad
     self.assertEquals(query.count(), 1)
Exemple #34
0
 def filter(self, joins):
     key = self.get_xml_attr('key', unicode, None)
     op = self.op_table[self.get_xml_attr('op', unicode, '==')]
     value = self.get_xml_attr('value', unicode, None)
     try:
         _key = Key.by_name(key)
     except NoResultFound:
         return (joins, None)
     if op not in ('__eq__', '__ne__') and not value:
         # makes no sense, discard
         return (joins, None)
     if _key.numeric:
         key_value_cls = Key_Value_Int
         collection = System.key_values_int
     else:
         key_value_cls = Key_Value_String
         collection = System.key_values_string
     # <key_value key="THING" op="==" /> -- must have key with any value
     # <key_value key="THING" op="==" value="VALUE" /> -- must have key with given value
     # <key_value key="THING" op="!=" /> -- must not have key
     # <key_value key="THING" op="!=" value="VALUE" /> -- must not have key with given value
     if op == '__ne__' and value is None:
         query = not_(collection.any(key_value_cls.key == _key))
     elif op == '__ne__':
         query = not_(
             collection.any(
                 and_(key_value_cls.key == _key,
                      key_value_cls.key_value == value)))
     elif op == '__eq__' and value is None:
         query = collection.any(key_value_cls.key == _key)
     elif op == '__eq__':
         query = collection.any(
             and_(key_value_cls.key == _key,
                  key_value_cls.key_value == value))
     else:
         query = collection.any(
             and_(key_value_cls.key == _key,
                  getattr(key_value_cls.key_value, op)(value)))
     return (joins, query)
Exemple #35
0
 def test_keyvalue_does_not_cause_duplicate_rows(self):
     system = data_setup.create_system()
     disk_key = Key.by_name(u'DISK')
     system.key_values_int.extend([
             Key_Value_Int(disk_key, 30718),
             Key_Value_Int(disk_key, 140011),
             Key_Value_Int(disk_key, 1048570)])
     session.flush()
     filter = """
         <hostRequires>
             <and>
                 <system><name op="=" value="%s" /></system>
                 <key_value key="DISK" op="&gt;" value="9000" />
             </and>
         </hostRequires>
         """ % system.fqdn
     query = XmlHost.from_string(filter).apply_filter(System.query)
     self.assertEquals(len(query.all()), 1)
     # with the bug this count comes out as 3 instead of 1,
     # which doesn't sound so bad...
     # but when it's 926127 instead of 278, that's bad
     self.assertEquals(query.count(), 1)
 def test_remove_key_value(self):
     with session.begin():
         self.system.key_values_int.append(
                 Key_Value_Int(Key.by_name(u'NR_DISKS'), 100))
     orig_date_modified = self.system.date_modified
     b = self.browser
     login(b)
     self.go_to_system_view(tab='Key/Values')
     b.find_element_by_xpath(
             '//td[normalize-space(preceding-sibling::td[1]/text())'
             '="NR_DISKS" and '
             'normalize-space(text())="100"]')
     delete_and_confirm(b, '//tr[normalize-space(td[1]/text())="NR_DISKS" and '
             'normalize-space(td[2]/text())="100"]')
     self.assertEquals(b.find_element_by_class_name('flash').text,
             'removed NR_DISKS/100')
     b.find_element_by_xpath('//div[@id="keys" and not(.//tr['
             'normalize-space(td[1]/text())="NR_DISKS" and '
             'normalize-space(td[2]/text())="100"])]')
     with session.begin():
         session.refresh(self.system)
         self.assert_(self.system.date_modified > orig_date_modified)
Exemple #37
0
 def filter(self, joins):
     key = self.get_xml_attr('key', unicode, None)
     op = self.op_table[self.get_xml_attr('op', unicode, '==')]
     value = self.get_xml_attr('value', unicode, None)
     try:
         _key = Key.by_name(key)
     except NoResultFound:
         return (joins, None)
     if op not in ('__eq__', '__ne__') and not value:
         # makes no sense, discard
         return (joins, None)
     if _key.numeric:
         key_value_cls = Key_Value_Int
         collection = System.key_values_int
     else:
         key_value_cls = Key_Value_String
         collection = System.key_values_string
     # <key_value key="THING" op="==" /> -- must have key with any value
     # <key_value key="THING" op="==" value="VALUE" /> -- must have key with given value
     # <key_value key="THING" op="!=" /> -- must not have key
     # <key_value key="THING" op="!=" value="VALUE" /> -- must not have key with given value
     if op == '__ne__' and value is None:
         query = not_(collection.any(key_value_cls.key == _key))
     elif op == '__ne__':
         query = not_(collection.any(and_(
                 key_value_cls.key == _key,
                 key_value_cls.key_value == value)))
     elif op == '__eq__' and value is None:
         query = collection.any(key_value_cls.key == _key)
     elif op == '__eq__':
         query = collection.any(and_(
                 key_value_cls.key == _key,
                 key_value_cls.key_value == value))
     else:
         query = collection.any(and_(
                 key_value_cls.key == _key,
                 getattr(key_value_cls.key_value, op)(value)))
     return (joins, query)
Exemple #38
0
 def test_remove_key_value(self):
     with session.begin():
         self.system.key_values_int.append(
             Key_Value_Int(Key.by_name(u'NR_DISKS'), 100))
     orig_date_modified = self.system.date_modified
     b = self.browser
     login(b)
     self.go_to_system_view(tab='Key/Values')
     b.find_element_by_xpath(
         '//td[normalize-space(preceding-sibling::td[1]/text())'
         '="NR_DISKS" and '
         'normalize-space(text())="100"]')
     delete_and_confirm(
         b, '//tr[normalize-space(td[1]/text())="NR_DISKS" and '
         'normalize-space(td[2]/text())="100"]')
     self.assertEquals(
         b.find_element_by_class_name('flash').text, 'removed NR_DISKS/100')
     b.find_element_by_xpath('//div[@id="keys" and not(.//tr['
                             'normalize-space(td[1]/text())="NR_DISKS" and '
                             'normalize-space(td[2]/text())="100"])]')
     with session.begin():
         session.refresh(self.system)
         self.assert_(self.system.date_modified > orig_date_modified)
Exemple #39
0
 def test_remove_key_value(self):
     with session.begin():
         self.system.key_values_int.append(Key_Value_Int(Key.by_name(u"NR_DISKS"), 100))
     orig_date_modified = self.system.date_modified
     self.login()
     sel = self.selenium
     self.go_to_system_view()
     sel.click('//ul[@class="tabbernav"]//a[text()="Key/Values"]')
     self.assertEquals(
         sel.get_xpath_count(
             "//td[normalize-space(preceding-sibling::td[1]/text())"
             '="NR_DISKS" and '
             'normalize-space(text())="100"]'
         ),
         1,
     )
     sel.click(  # delete link inside cell in row with NR_DISKS 100
         '//table[@class="list"]//td['
         'normalize-space(preceding-sibling::td[2]/text())="NR_DISKS" and '
         'normalize-space(preceding-sibling::td[1]/text())="100"'
         ']//a[text()="Delete ( - )"]'
     )
     sel.click("//button[@type='button' and text()='Yes']")
     sel.wait_for_page_to_load("30000")
     self.assertEquals(sel.get_text("css=.flash"), "removed NR_DISKS/100")
     self.assertEquals(
         sel.get_xpath_count(
             "//td[normalize-space(preceding-sibling::td[1]/text())"
             '="NR_DISKS" and '
             'normalize-space(text())="100"]'
         ),
         0,
     )
     with session.begin():
         session.refresh(self.system)
         self.assert_(self.system.date_modified > orig_date_modified)
Exemple #40
0
    def setUpClass(cls):
        cls.system_one_details = {
            'fqdn': u'a1',
            'type': u'Machine',
            'arch': u'i386',
            'status': u'Automated',
            'owner': data_setup.create_user(),
        }
        cls.system_one = data_setup.create_system(**cls.system_one_details)
        cls.system_one.loaned = data_setup.create_user()
        cls.system_one.numa = Numa(nodes=2)
        cls.system_one.key_values_string.append(
            Key_Value_String(Key.by_name(u'CPUMODEL'), 'foocodename'))
        cls.system_one.key_values_string.append(
            Key_Value_String(Key.by_name(u'HVM'), '1'))
        cls.system_one.cpu = Cpu(flags=['flag1', 'flag2'])

        cls.system_one.key_values_int.append(
            Key_Value_Int(Key.by_name(u'DISKSPACE'), '1024'))
        cls.system_one.key_values_int.append(
            Key_Value_Int(Key.by_name(u'MEMORY'), '4096'))

        cls.system_two_details = {
            'fqdn': u'a2',
            'type': u'Prototype',
            'arch': u'x86_64',
            'status': u'Manual',
            'owner': data_setup.create_user(),
        }
        cls.system_two = data_setup.create_system(**cls.system_two_details)
        cls.system_two.key_values_int.append(
            Key_Value_Int(Key.by_name(u'DISKSPACE'), '900'))
        cls.system_two.key_values_string.append(
            Key_Value_String(Key.by_name(u'HVM'), '1'))

        device_class = DeviceClass.lazy_create(device_class='class_type')
        device1 = Device.lazy_create(vendor_id='0000',
                                     device_id='0000',
                                     subsys_vendor_id='2223',
                                     subsys_device_id='2224',
                                     bus='0000',
                                     driver='0000',
                                     device_class_id=device_class.id,
                                     description='blah')
        cls.system_two.devices.append(device1)
        cls.system_three_details = {
            'fqdn': u'a3',
            'type': u'Laptop',
            'arch': u'ia64',
            'status': u'Automated',
            'owner': data_setup.create_user(),
        }
        cls.system_three = data_setup.create_system(**cls.system_three_details)
        cls.system_three.numa = Numa(nodes=1)
        device2 = Device.lazy_create(vendor_id='0000',
                                     device_id='0000',
                                     subsys_vendor_id='1111',
                                     subsys_device_id='1112',
                                     bus='0000',
                                     driver='0000',
                                     device_class_id=device_class.id,
                                     description='blah')
        cls.system_three.devices.append(device2)

        cls.system_four_details = {
            'status': u'Removed',
        }
        cls.system_four = data_setup.create_system(**cls.system_four_details)
        cls.system_four.key_values_string.append(
            Key_Value_String(Key.by_name(u'CPUMODEL'), 'foocodename'))
Exemple #41
0
def populate_db(user_name=None, password=None, user_display_name=None,
                user_email_address=None):
    logger.info('Populating tables with pre-defined values if necessary')
    session.begin()

    try:
        admin = Group.by_name(u'admin')
    except InvalidRequestError:
        admin = Group(group_name=u'admin', display_name=u'Admin')
        session.add(admin)

    try:
        lab_controller = Group.by_name(u'lab_controller')
    except InvalidRequestError:
        lab_controller = Group(group_name=u'lab_controller',
                               display_name=u'Lab Controller')
        session.add(lab_controller)

    # Setup User account
    if user_name:
        user = User.lazy_create(user_name=user_name.decode('utf8'))
        if password:
            user.password = password.decode('utf8')
        if user_display_name:
            user.display_name = user_display_name.decode('utf8')
        if user_email_address:
            user.email_address = user_email_address.decode('utf8')
        # Ensure the user is in the 'admin' group as an owner.
        # Flush for lazy_create.
        session.flush()
        user_group_assoc = UserGroup.lazy_create(
            user_id=user.user_id, group_id=admin.group_id)
        user_group_assoc.is_owner = True

    # Create distro_expire perm if not present
    try:
        _ = Permission.by_name(u'distro_expire')
    except NoResultFound:
        distro_expire_perm = Permission(u'distro_expire')
        session.add(distro_expire_perm)

    # Create proxy_auth perm if not present
    try:
        _ = Permission.by_name(u'proxy_auth')
    except NoResultFound:
        proxy_auth_perm = Permission(u'proxy_auth')
        session.add(proxy_auth_perm)

    # Create tag_distro perm if not present
    try:
        _ = Permission.by_name(u'tag_distro')
    except NoResultFound:
        tag_distro_perm = Permission(u'tag_distro')
        admin.permissions.append(tag_distro_perm)

    # Create stop_task perm if not present
    try:
        _ = Permission.by_name(u'stop_task')
    except NoResultFound:
        stop_task_perm = Permission(u'stop_task')
        lab_controller.permissions.append(stop_task_perm)
        admin.permissions.append(stop_task_perm)

    # Create secret_visible perm if not present
    try:
        _ = Permission.by_name(u'secret_visible')
    except NoResultFound:
        secret_visible_perm = Permission(u'secret_visible')
        lab_controller.permissions.append(secret_visible_perm)
        admin.permissions.append(secret_visible_perm)

    # Create change_prio perm if not present
    try:
        _ = Permission.by_name(u'change_prio')
    except NoResultFound:
        change_prio_perm = Permission(u'change_prio')
        session.add(change_prio_perm)

    # Setup Hypervisors Table
    if Hypervisor.query.count() == 0:
        for h in [u'KVM', u'Xen', u'HyperV', u'VMWare']:
            session.add(Hypervisor(hypervisor=h))

    # Setup kernel_type Table
    if KernelType.query.count() == 0:
        for type in [u'default', u'highbank', u'imx', u'omap', u'tegra']:
            session.add(KernelType(kernel_type=type, uboot=False))
        for type in [u'mvebu']:
            session.add(KernelType(kernel_type=type, uboot=True))

    # Setup base Architectures
    if Arch.query.count() == 0:
        for arch in [u'i386', u'x86_64', u'ia64', u'ppc', u'ppc64', u'ppc64le',
                     u's390', u's390x', u'armhfp', u'aarch64', u'arm']:
            session.add(Arch(arch))

    # Setup base power types
    if PowerType.query.count() == 0:
        for power_type in [u'apc_snmp', u'apc_snmp_then_etherwake',
                           u'bladecenter', u'bladepap', u'drac', u'ether_wake', u'hyper-v',
                           u'ilo', u'integrity', u'ipmilan', u'ipmitool', u'lpar', u'rsa',
                           u'virsh', u'wti']:
            session.add(PowerType(power_type))

    # Setup key types
    if Key.query.count() == 0:
        session.add(Key(u'DISKSPACE', True))
        session.add(Key(u'COMMENT'))
        session.add(Key(u'CPUFAMILY', True))
        session.add(Key(u'CPUFLAGS'))
        session.add(Key(u'CPUMODEL'))
        session.add(Key(u'CPUMODELNUMBER', True))
        session.add(Key(u'CPUSPEED', True))
        session.add(Key(u'CPUVENDOR'))
        session.add(Key(u'DISK', True))
        session.add(Key(u'FORMFACTOR'))
        session.add(Key(u'HVM'))
        session.add(Key(u'MEMORY', True))
        session.add(Key(u'MODEL'))
        session.add(Key(u'MODULE'))
        session.add(Key(u'NETWORK'))
        session.add(Key(u'NR_DISKS', True))
        session.add(Key(u'NR_ETH', True))
        session.add(Key(u'NR_IB', True))
        session.add(Key(u'PCIID'))
        session.add(Key(u'PROCESSORS', True))
        session.add(Key(u'RTCERT'))
        session.add(Key(u'SCRATCH'))
        session.add(Key(u'STORAGE'))
        session.add(Key(u'USBID'))
        session.add(Key(u'VENDOR'))
        session.add(Key(u'XENCERT'))
        session.add(Key(u'NETBOOT_METHOD'))

    if RetentionTag.query.count() == 0:
        session.add(RetentionTag(tag=u'scratch', is_default=1, expire_in_days=30))
        session.add(RetentionTag(tag=u'60days', needs_product=False, expire_in_days=60))
        session.add(RetentionTag(tag=u'120days', needs_product=False, expire_in_days=120))
        session.add(RetentionTag(tag=u'active', needs_product=True))
        session.add(RetentionTag(tag=u'audit', needs_product=True))

    config_items = [
        # name, description, numeric
        (u'root_password', u'Plaintext root password for provisioned systems', False),
        (u'root_password_validity', u"Maximum number of days a user's root password is valid for",
         True),
        (u'guest_name_prefix', u'Prefix for names of dynamic guests in OpenStack', False),
        (u'guest_private_network', u'Network address in CIDR format for private networks'
                                   ' of dynamic guests in OpenStack.', False),
    ]
    for name, description, numeric in config_items:
        ConfigItem.lazy_create(name=name, description=description, numeric=numeric)
    if ConfigItem.by_name(u'root_password').current_value() is None:
        ConfigItem.by_name(u'root_password').set(u'beaker', user=admin.users[0])
    if ConfigItem.by_name(u'guest_private_network').current_value() is None:
        ConfigItem.by_name(u'guest_private_network').set(u'192.168.10.0/24',
                                                         user=admin.users[0])

    session.commit()
    session.close()
    logger.info('Pre-defined values populated')
Exemple #42
0
 def remove(self, **kw):
     remove = Key.by_id(kw['id'])
     session.delete(remove)
     flash( _(u"%s Deleted") % remove.key_name )
     raise redirect(".")