Advertisement
Guest User

Untitled

a guest
Mar 12th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.18 KB | None | 0 0
  1. def merge_traits(original, to_merge):
  2.     # Add or remove traits in to_merge from original
  3.     # traits are prefixed with + if they must be asserted, or - if
  4.     # they must be removed.
  5.     traits_add = set()
  6.     traits_rem = set()
  7.  
  8.     for trait in to_merge:
  9.         if trait.startswith('+'):
  10.             traits_add.add(trait[1:])
  11.         else:
  12.             traits_rem.add(trait[1:])
  13.  
  14.     return (set(original) | traits_add) - traits_rem
  15.  
  16.  
  17.  
  18. # Zero day, no traits are set
  19. traits = set()
  20.  
  21. # Virt driver exposes these traits
  22. # We support VMX and LM cpu flags, but we're not new enough to
  23. # have AVX2
  24. virt_traits = ['+TRAIT_CPU_VMX', '+TRAIT_CPU_LM', '-TRAIT_CPU_AVX2']
  25.  
  26. # Compute exposes these traits
  27. # We have determined that we have shared storage, but we don't have
  28. # volume support
  29. compute_traits = ['+TRAIT_SHARED_STORAGE', '-TRAIT_SUPPORTS_VOLUMES']
  30.  
  31. # Compute update periodic runs
  32. traits = merge_traits(traits, virt_traits)
  33. traits = merge_traits(traits, compute_traits)
  34. print(traits)
  35.  
  36. # Operator decides to set some traits on the provider
  37. operator_traits = ['+TRAIT_TRUSTED', '+TRAIT_CUSTOM_MYTHING']
  38.  
  39. traits = merge_traits(traits, operator_traits)
  40. print(traits)
  41.  
  42. # Compute update periodic runs
  43. traits = merge_traits(traits, virt_traits)
  44. traits = merge_traits(traits, compute_traits)
  45. print(traits)
  46.  
  47. # Operator thinks he can manipulate CPU flag traits
  48. traits -= set(['TRAIT_CPU_VMX'])
  49. traits |= set(['TRAIT_CPU_AVX2'])
  50. print('%s (bad operator)' % traits)
  51.  
  52. # Compute update periodic runs
  53. # Virt will overwrite what the operator did for those
  54. # traits only, because it knows better
  55. traits = merge_traits(traits, virt_traits)
  56. traits = merge_traits(traits, compute_traits)
  57. print(traits)
  58.  
  59. # Virt driver determines it now supports AVX2 because nova.conf changed
  60. virt_traits += '+TRAIT_CPU_AVX2'
  61.  
  62. # Compute update periodic runs
  63. traits = merge_traits(traits, virt_traits)
  64. traits = merge_traits(traits, compute_traits)
  65. print(traits)
  66.  
  67. # Compute learns it no longer supports shared storage
  68. compute_traits[0] = '-TRAIT_SHARED_STORAGE'
  69.  
  70. # Compute update periodic runs
  71. traits = merge_traits(traits, virt_traits)
  72. traits = merge_traits(traits, compute_traits)
  73. print(traits)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement