@@ -1940,6 +1940,237 @@ def test_server_create_with_description_api_older(self):
19401940 self .assertRaises (exceptions .CommandError , self .cmd .take_action ,
19411941 parsed_args )
19421942
1943+ def test_server_create_with_host_v274 (self ):
1944+
1945+ # Explicit host is supported for nova api version 2.74 or above
1946+ self .app .client_manager .compute .api_version = 2.74
1947+
1948+ arglist = [
1949+ '--image' , 'image1' ,
1950+ '--flavor' , 'flavor1' ,
1951+ '--host' , 'host1' ,
1952+ self .new_server .name ,
1953+ ]
1954+ verifylist = [
1955+ ('image' , 'image1' ),
1956+ ('flavor' , 'flavor1' ),
1957+ ('host' , 'host1' ),
1958+ ('config_drive' , False ),
1959+ ('server_name' , self .new_server .name ),
1960+ ]
1961+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
1962+
1963+ with mock .patch .object (api_versions ,
1964+ 'APIVersion' ,
1965+ return_value = 2.74 ):
1966+ # In base command class ShowOne in cliff, abstract method
1967+ # take_action() returns a two-part tuple with a tuple of
1968+ # column names and a tuple of data to be shown.
1969+ columns , data = self .cmd .take_action (parsed_args )
1970+
1971+ # Set expected values
1972+ kwargs = dict (
1973+ meta = None ,
1974+ files = {},
1975+ reservation_id = None ,
1976+ min_count = 1 ,
1977+ max_count = 1 ,
1978+ security_groups = [],
1979+ userdata = None ,
1980+ key_name = None ,
1981+ availability_zone = None ,
1982+ block_device_mapping_v2 = [],
1983+ nics = 'auto' ,
1984+ scheduler_hints = {},
1985+ config_drive = None ,
1986+ host = 'host1' ,
1987+ )
1988+ # ServerManager.create(name, image, flavor, **kwargs)
1989+ self .servers_mock .create .assert_called_with (
1990+ self .new_server .name ,
1991+ self .image ,
1992+ self .flavor ,
1993+ ** kwargs
1994+ )
1995+
1996+ self .assertEqual (self .columns , columns )
1997+ self .assertEqual (self .datalist (), data )
1998+ self .assertFalse (self .images_mock .called )
1999+ self .assertFalse (self .flavors_mock .called )
2000+
2001+ def test_server_create_with_host_pre_v274 (self ):
2002+
2003+ # Host is not supported for nova api version below 2.74
2004+ self .app .client_manager .compute .api_version = 2.73
2005+
2006+ arglist = [
2007+ '--image' , 'image1' ,
2008+ '--flavor' , 'flavor1' ,
2009+ '--host' , 'host1' ,
2010+ self .new_server .name ,
2011+ ]
2012+ verifylist = [
2013+ ('image' , 'image1' ),
2014+ ('flavor' , 'flavor1' ),
2015+ ('host' , 'host1' ),
2016+ ('config_drive' , False ),
2017+ ('server_name' , self .new_server .name ),
2018+ ]
2019+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
2020+
2021+ with mock .patch .object (api_versions ,
2022+ 'APIVersion' ,
2023+ return_value = 2.74 ):
2024+ self .assertRaises (exceptions .CommandError , self .cmd .take_action ,
2025+ parsed_args )
2026+
2027+ def test_server_create_with_hypervisor_hostname_v274 (self ):
2028+
2029+ # Explicit hypervisor_hostname is supported for nova api version
2030+ # 2.74 or above
2031+ self .app .client_manager .compute .api_version = 2.74
2032+
2033+ arglist = [
2034+ '--image' , 'image1' ,
2035+ '--flavor' , 'flavor1' ,
2036+ '--hypervisor-hostname' , 'node1' ,
2037+ self .new_server .name ,
2038+ ]
2039+ verifylist = [
2040+ ('image' , 'image1' ),
2041+ ('flavor' , 'flavor1' ),
2042+ ('hypervisor_hostname' , 'node1' ),
2043+ ('config_drive' , False ),
2044+ ('server_name' , self .new_server .name ),
2045+ ]
2046+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
2047+
2048+ with mock .patch .object (api_versions ,
2049+ 'APIVersion' ,
2050+ return_value = 2.74 ):
2051+ # In base command class ShowOne in cliff, abstract method
2052+ # take_action() returns a two-part tuple with a tuple of
2053+ # column names and a tuple of data to be shown.
2054+ columns , data = self .cmd .take_action (parsed_args )
2055+
2056+ # Set expected values
2057+ kwargs = dict (
2058+ meta = None ,
2059+ files = {},
2060+ reservation_id = None ,
2061+ min_count = 1 ,
2062+ max_count = 1 ,
2063+ security_groups = [],
2064+ userdata = None ,
2065+ key_name = None ,
2066+ availability_zone = None ,
2067+ block_device_mapping_v2 = [],
2068+ nics = 'auto' ,
2069+ scheduler_hints = {},
2070+ config_drive = None ,
2071+ hypervisor_hostname = 'node1' ,
2072+ )
2073+ # ServerManager.create(name, image, flavor, **kwargs)
2074+ self .servers_mock .create .assert_called_with (
2075+ self .new_server .name ,
2076+ self .image ,
2077+ self .flavor ,
2078+ ** kwargs
2079+ )
2080+
2081+ self .assertEqual (self .columns , columns )
2082+ self .assertEqual (self .datalist (), data )
2083+ self .assertFalse (self .images_mock .called )
2084+ self .assertFalse (self .flavors_mock .called )
2085+
2086+ def test_server_create_with_hypervisor_hostname_pre_v274 (self ):
2087+
2088+ # Hypervisor_hostname is not supported for nova api version below 2.74
2089+ self .app .client_manager .compute .api_version = 2.73
2090+
2091+ arglist = [
2092+ '--image' , 'image1' ,
2093+ '--flavor' , 'flavor1' ,
2094+ '--hypervisor-hostname' , 'node1' ,
2095+ self .new_server .name ,
2096+ ]
2097+ verifylist = [
2098+ ('image' , 'image1' ),
2099+ ('flavor' , 'flavor1' ),
2100+ ('hypervisor_hostname' , 'node1' ),
2101+ ('config_drive' , False ),
2102+ ('server_name' , self .new_server .name ),
2103+ ]
2104+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
2105+
2106+ with mock .patch .object (api_versions ,
2107+ 'APIVersion' ,
2108+ return_value = 2.74 ):
2109+ self .assertRaises (exceptions .CommandError , self .cmd .take_action ,
2110+ parsed_args )
2111+
2112+ def test_server_create_with_host_and_hypervisor_hostname_v274 (self ):
2113+
2114+ # Explicit host and hypervisor_hostname is supported for nova api
2115+ # version 2.74 or above
2116+ self .app .client_manager .compute .api_version = 2.74
2117+
2118+ arglist = [
2119+ '--image' , 'image1' ,
2120+ '--flavor' , 'flavor1' ,
2121+ '--host' , 'host1' ,
2122+ '--hypervisor-hostname' , 'node1' ,
2123+ self .new_server .name ,
2124+ ]
2125+ verifylist = [
2126+ ('image' , 'image1' ),
2127+ ('flavor' , 'flavor1' ),
2128+ ('host' , 'host1' ),
2129+ ('hypervisor_hostname' , 'node1' ),
2130+ ('config_drive' , False ),
2131+ ('server_name' , self .new_server .name ),
2132+ ]
2133+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
2134+
2135+ with mock .patch .object (api_versions ,
2136+ 'APIVersion' ,
2137+ return_value = 2.74 ):
2138+ # In base command class ShowOne in cliff, abstract method
2139+ # take_action() returns a two-part tuple with a tuple of
2140+ # column names and a tuple of data to be shown.
2141+ columns , data = self .cmd .take_action (parsed_args )
2142+
2143+ # Set expected values
2144+ kwargs = dict (
2145+ meta = None ,
2146+ files = {},
2147+ reservation_id = None ,
2148+ min_count = 1 ,
2149+ max_count = 1 ,
2150+ security_groups = [],
2151+ userdata = None ,
2152+ key_name = None ,
2153+ availability_zone = None ,
2154+ block_device_mapping_v2 = [],
2155+ nics = 'auto' ,
2156+ scheduler_hints = {},
2157+ config_drive = None ,
2158+ host = 'host1' ,
2159+ hypervisor_hostname = 'node1' ,
2160+ )
2161+ # ServerManager.create(name, image, flavor, **kwargs)
2162+ self .servers_mock .create .assert_called_with (
2163+ self .new_server .name ,
2164+ self .image ,
2165+ self .flavor ,
2166+ ** kwargs
2167+ )
2168+
2169+ self .assertEqual (self .columns , columns )
2170+ self .assertEqual (self .datalist (), data )
2171+ self .assertFalse (self .images_mock .called )
2172+ self .assertFalse (self .flavors_mock .called )
2173+
19432174
19442175class TestServerDelete (TestServer ):
19452176
0 commit comments