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