Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def merge_traits(original, to_merge):
- # Add or remove traits in to_merge from original
- # traits are prefixed with + if they must be asserted, or - if
- # they must be removed.
- traits_add = set()
- traits_rem = set()
- for trait in to_merge:
- if trait.startswith('+'):
- traits_add.add(trait[1:])
- else:
- traits_rem.add(trait[1:])
- return (set(original) | traits_add) - traits_rem
- # Zero day, no traits are set
- traits = set()
- # Virt driver exposes these traits
- # We support VMX and LM cpu flags, but we're not new enough to
- # have AVX2
- virt_traits = ['+TRAIT_CPU_VMX', '+TRAIT_CPU_LM', '-TRAIT_CPU_AVX2']
- # Compute exposes these traits
- # We have determined that we have shared storage, but we don't have
- # volume support
- compute_traits = ['+TRAIT_SHARED_STORAGE', '-TRAIT_SUPPORTS_VOLUMES']
- # Compute update periodic runs
- traits = merge_traits(traits, virt_traits)
- traits = merge_traits(traits, compute_traits)
- print(traits)
- # Operator decides to set some traits on the provider
- operator_traits = ['+TRAIT_TRUSTED', '+TRAIT_CUSTOM_MYTHING']
- traits = merge_traits(traits, operator_traits)
- print(traits)
- # Compute update periodic runs
- traits = merge_traits(traits, virt_traits)
- traits = merge_traits(traits, compute_traits)
- print(traits)
- # Operator thinks he can manipulate CPU flag traits
- traits -= set(['TRAIT_CPU_VMX'])
- traits |= set(['TRAIT_CPU_AVX2'])
- print('%s (bad operator)' % traits)
- # Compute update periodic runs
- # Virt will overwrite what the operator did for those
- # traits only, because it knows better
- traits = merge_traits(traits, virt_traits)
- traits = merge_traits(traits, compute_traits)
- print(traits)
- # Virt driver determines it now supports AVX2 because nova.conf changed
- virt_traits += '+TRAIT_CPU_AVX2'
- # Compute update periodic runs
- traits = merge_traits(traits, virt_traits)
- traits = merge_traits(traits, compute_traits)
- print(traits)
- # Compute learns it no longer supports shared storage
- compute_traits[0] = '-TRAIT_SHARED_STORAGE'
- # Compute update periodic runs
- traits = merge_traits(traits, virt_traits)
- traits = merge_traits(traits, compute_traits)
- print(traits)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement