return self.image_name(name)
def get_sorted_flavors(self, arch, select):
- """
- Return the smallest flavor that satisfies the desired size.
- """
+ log.debug("flavor selection regex: " + select)
flavors_string = self.run("flavor list -f json")
flavors = json.loads(flavors_string)
found = []
log.debug("sorted flavors = " + str(sorted_flavors))
return sorted_flavors
- def flavor(self, hint, arch, select):
+ def __flavor(self, hint, arch, select):
"""
Return the smallest flavor that satisfies the desired size.
"""
" does not contain a flavor in which" +
" the desired " + str(hint) + " can fit")
- def flavor_range(self, min, good, arch, select):
+ def __flavor_range(self, min, good, arch, select):
"""
Return the smallest flavor that satisfies the good hint.
If no such flavor, get the largest flavor smaller than good
" does not contain a flavor which" +
" is larger than " + str(min))
+ def __flavor_wrapper(self, min, good, hint, arch):
+ """
+ Wrapper for __flavor_range() and __flavor(), to hide the messiness of
+ the real world.
+
+ This is the one, single place for coding OpenStack-provider-specific
+ heuristics for selecting flavors.
+ """
+ select = None
+ if self.get_provider() == 'ovh':
+ log.debug("Looking for a match among the El Cheapo flavors...")
+ select = '^vps-ssd-'
+ try:
+ if (hint is not None):
+ return self.__flavor(hint, arch, select)
+ return self.__flavor_range(min, good, arch, select)
+ except NoFlavorException:
+ pass
+ log.debug("No El Cheapo flavors match the selection criteria. "
+ "Looking for a match among the more expensive flavors...")
+ select = '^(hg|sg|c2)-.*ssd'
+ if (hint is not None):
+ return self.__flavor(hint, arch, select)
+ return self.__flavor_range(min, good, arch, select)
+
+ def flavor(self, hint, arch):
+ return self.__flavor_wrapper(None, None, hint, arch)
+
+ def flavor_range(self, min, good, arch):
+ return self.__flavor_wrapper(min, good, None, arch)
+
def interpret_hints(self, defaults, hints):
"""
Return a hint hash which is the interpretation of a list of hints
log.exception("flavor list")
raise Exception("verify openrc.sh has been sourced")
- def flavor(self, arch):
+ def teuthology_openstack_flavor(self, arch):
"""
Return an OpenStack flavor fit to run the teuthology cluster.
The RAM size depends on the maximum number of workers that
if self.args.controller_disk > 0:
hint['disk'] = self.args.controller_disk
- select = None
- if self.get_provider() == 'ovh':
- select = '^(vps|hg|sg|c2)-.*ssd'
- return super(TeuthologyOpenStack, self).flavor(hint, arch, select)
+ return self.flavor(hint, arch)
def net(self):
"""
self.run(
"server create " +
" --image '" + self.image('ubuntu', '16.04', arch) + "' " +
- " --flavor '" + self.flavor(arch) + "' " +
+ " --flavor '" + self.teuthology_openstack_flavor(arch) + "' " +
" " + self.net() +
" --key-name " + self.args.key_name +
" --user-data " + user_data +
local nameserver="$3"
local labdomain="$4"
local ip="$5"
- local flavor_select="$6"
- local archive_upload="$7"
- local canonical_tags="$8"
-
- if test "$flavor_select" ; then
- flavor_select="flavor-select-regexp: $flavor_select"
- fi
+ local archive_upload="$6"
+ local canonical_tags="$7"
if test "$network" ; then
network="network: $network"
volumes:
count: 0
size: 1 # GB
- $flavor_select
subnet: $subnet
$network
EOF
local nameserver
local labdomain=teuthology
local nworkers=2
- local flavor_select
local keypair=teuthology
local archive_upload
local ceph_workbench_git_url
;;
esac
- case $provider in
- ovh)
- flavor_select='^(vps|hg|sg|c2)-.*ssd'
- ;;
- esac
-
local ip
for dev in eth0 ens3 ; do
ip=$(ip a show dev $dev 2>/dev/null | sed -n "s:.*inet \(.*\)/.*:\1:p")
: ${nameserver:=$ip}
if $do_create_config ; then
- create_config "$network" "$subnets" "$nameserver" "$labdomain" "$ip" "$flavor_select" "$archive_upload" "$canonical_tags" || return 1
+ create_config "$network" "$subnets" "$nameserver" "$labdomain" "$ip" "$archive_upload" "$canonical_tags" || return 1
setup_ansible "$subnets" $labdomain || return 1
setup_ssh_config || return 1
setup_authorized_keys || return 1
):
with pytest.raises(NoFlavorException):
hint = { 'ram': 1000, 'disk': 40, 'cpus': 2 }
- OpenStack().flavor(hint, 'arch', None)
+ OpenStack().flavor(hint, 'arch')
flavor = 'good-flavor'
def get_sorted_flavors(self, arch, select):
get_sorted_flavors=get_sorted_flavors,
):
hint = { 'ram': 1000, 'disk': 40, 'cpus': 2 }
- assert flavor == OpenStack().flavor(hint, 'arch', None)
+ assert flavor == OpenStack().flavor(hint, 'arch')
def test_flavor_range(self):
flavors = [
get_sorted_flavors=get_sorted_flavors,
):
with pytest.raises(NoFlavorException):
- OpenStack().flavor_range(min, good, 'arch', None)
+ OpenStack().flavor_range(min, good, 'arch')
#
# there is one flavor in the required range
get_sorted_flavors=get_sorted_flavors,
):
- assert 'min' == OpenStack().flavor_range(min, good, 'arch', None)
+ assert 'min' == OpenStack().flavor_range(min, good, 'arch')
#
# out of the two flavors in the required range, get the bigger one
get_sorted_flavors=get_sorted_flavors,
):
- assert 'good' == OpenStack().flavor_range(min, good, 'arch', None)
+ assert 'good' == OpenStack().flavor_range(min, good, 'arch')
#
# there is one flavor bigger or equal to good, get this one
get_sorted_flavors=get_sorted_flavors,
):
- assert 'best' == OpenStack().flavor_range(min, good, 'arch', None)
+ assert 'best' == OpenStack().flavor_range(min, good, 'arch')
#
# there are two flavors bigger or equal to good, get the smallest one
get_sorted_flavors=get_sorted_flavors,
):
- assert 'best' == OpenStack().flavor_range(min, good, 'arch', None)
+ assert 'best' == OpenStack().flavor_range(min, good, 'arch')
def test_interpret_hints(self):
net = "--nic net-id=" + str(self.net_id(config['openstack']['network']))
else:
net = ''
- flavor = self.flavor(resources_hint['machine'],
- arch,
- config['openstack'].get('flavor-select-regexp'))
+ flavor = self.flavor(resources_hint['machine'], arch)
cmd = ("flock --close --timeout 28800 /tmp/teuthology-server-create.lock" +
" openstack server create" +
" " + config['openstack'].get('server-create', '') +
sha1)
openstack = OpenStack()
openstack.set_provider()
- if openstack.provider == 'ovh':
- select = '^(vps|hg|sg|c2)-.*ssd'
- else:
- select = ''
network = openstack.net()
if network != "":
network = " OPENSTACK_NETWORK='" + network + "' "
openstack.image(os_type, os_version, arch) # create if it does not exist
build_flavor = openstack.flavor_range(
- config['min_machine'], config['good_machine'], arch, select)
+ config['min_machine'], config['good_machine'], arch)
default_arch = openstack.get_default_arch()
http_flavor = openstack.flavor({
'disk': 30, # GB
'ram': 1024, # MB
'cpus': 1,
- }, default_arch, select)
+ }, default_arch)
lock = "/tmp/buildpackages-" + sha1 + "-" + os_type + "-" + os_version
cmd = (". " + os.environ['HOME'] + "/.ssh_agent ; " +
" flock --close " + lock +