def subtest_instance_operations(self): instance_name = util.random_name('cli_test_instance') fault_domain = 'FAULT-DOMAIN-1' image_id = util.oracle_linux_image() shape = 'VM.Standard1.1' result = self.invoke( ['compute', 'instance', 'launch', '--compartment-id', util.COMPARTMENT_ID, '--availability-domain', util.availability_domain(), '--display-name', instance_name, '--fault-domain', fault_domain, '--subnet-id', self.subnet_ocid, '--image-id', image_id, '--shape', shape, '--metadata', util.remove_outer_quotes(oci_cli_compute.compute_cli_extended.compute_instance_launch_metadata_example)]) self.instance_ocid = util.find_id_in_response(result.output) util.validate_response(result, expect_etag=True) util.wait_until(['compute', 'instance', 'get', '--instance-id', self.instance_ocid], 'RUNNING', max_wait_seconds=600) result = self.invoke(['compute', 'instance', 'list', '--compartment-id', util.COMPARTMENT_ID]) util.validate_response(result) # list with compartment shortcut result = self.invoke(['compute', 'instance', 'list', '-c', util.COMPARTMENT_ID]) util.validate_response(result) instance_name = instance_name + "_updated" result = self.invoke(['compute', 'instance', 'update', '--instance-id', self.instance_ocid, '--display-name', instance_name]) util.validate_response(result, expect_etag=True) result = self.invoke(['compute', 'instance', 'get', '--instance-id', self.instance_ocid]) util.validate_response(result, expect_etag=True) result = self.invoke( ['compute', 'instance', 'launch', '--compartment-id', util.COMPARTMENT_ID, '--availability-domain', util.availability_domain(), '--display-name', instance_name + "_2", '--fault-domain', fault_domain, '--subnet-id', self.subnet_ocid, '--image-id', image_id, '--shape', shape, '--metadata', util.remove_outer_quotes(oci_cli_compute.compute_cli_extended.compute_instance_launch_metadata_example), '--wait-for-state', 'RUNNING', '--max-wait-seconds', '20', '--wait-interval-seconds', '5']) self.instance_ocid_2 = util.find_id_in_response(result.output[result.output.index('{'):]) assert result.exit_code != 0
def subtest_launch_instance_merges_user_data_file_param_with_metadata( self): instance_name = util.random_name('cli_test_instance_options') image_id = util.oracle_linux_image() shape = 'VM.Standard1.2' hostname_label = util.random_name('bminstance', insert_underscore=False) launch_instance_result = util.invoke_command([ 'compute', 'instance', 'launch', '--compartment-id', util.COMPARTMENT_ID, '--availability-domain', util.availability_domain(), '--display-name', instance_name, '--subnet-id', self.subnet_ocid, '--image-id', image_id, '--shape', shape, '--hostname-label', hostname_label + "4", '--user-data-file', USER_DATA_FILE, '--metadata', util.remove_outer_quotes(oci_cli_compute.compute_cli_extended. compute_instance_launch_metadata_example) ]) util.validate_response(launch_instance_result, expect_etag=True) temp_instance_ocid = util.find_id_in_response( launch_instance_result.output) self.instance_ocids.append(temp_instance_ocid) response = json.loads(launch_instance_result.output) instance_metadata = response['data']['metadata'] assert instance_metadata['user_data'] assert instance_metadata['ssh_authorized_keys'] self.delete_instance(temp_instance_ocid)
def subtest_dhcp_option_operations(self): dhcp_options_name = util.random_name('cli_test_dhcp_options') options = util.remove_outer_quotes(oci_cli_virtual_network.virtualnetwork_cli_extended.network_create_dhcp_options_options_example) result = self.invoke( ['dhcp-options', 'create', '--compartment-id', util.COMPARTMENT_ID, '--vcn-id', self.vcn_ocid, '--display-name', dhcp_options_name, '--options', options ]) util.validate_response(result, expect_etag=True) self.dhcp_options_ocid = util.find_id_in_response(result.output) util.wait_until(['network', 'dhcp-options', 'get', '--dhcp-id', self.dhcp_options_ocid], 'AVAILABLE') result = self.invoke(['dhcp-options', 'list', '--compartment-id', util.COMPARTMENT_ID, '--vcn-id', self.vcn_ocid]) util.validate_response(result) self.run_list_filter_verification('dhcp-options', dhcp_options_name) result = self.invoke(['dhcp-options', 'get', '--dhcp-id', self.dhcp_options_ocid]) util.validate_response(result, expect_etag=True) dhcp_options_name = dhcp_options_name + "_updated" options_v2 = """[{"type": "DomainNameServer", "customDnsServers": ["202.44.61.10"], "serverType": "CustomDnsServer"}, {"searchDomainNames": ["testvcn.oraclevcn.com"], "type":"SearchDomain"}]""" # update display name only - does not show a confirmation prompt result = self.invoke(['dhcp-options', 'update', '--dhcp-id', self.dhcp_options_ocid, '--display-name', dhcp_options_name]) util.validate_response(result, expect_etag=True) # update options, confirm y result = self.invoke( ['dhcp-options', 'update', '--dhcp-id', self.dhcp_options_ocid, '--options', options_v2], input='y') util.validate_response(result, json_response_expected=False) # update options, confirm n result = self.invoke( ['dhcp-options', 'update', '--dhcp-id', self.dhcp_options_ocid, '--options', options], input='n') assert result.exit_code != 0 util.vcr_mode_aware_sleep(20) # update options, force result = self.invoke( ['dhcp-options', 'update', '--dhcp-id', self.dhcp_options_ocid, '--options', options_v2, '--force']) util.validate_response(result, expect_etag=True) response = json.loads(result.output) # validate response contains SearchDomain option response_has_search_domain_option = False for option in response["data"]["options"]: if option["type"] == "SearchDomain": response_has_search_domain_option = True assert option["search-domain-names"][0] == "testvcn.oraclevcn.com" assert response_has_search_domain_option, "Options response should contain option of type 'SearchDomain'."
def subtest_ip_sec_connection_operations(self): if hasattr(self, 'drg_capacity_issue'): print( 'Unable to execute subtest_ip_sec_connection_operations as a DRG is not available' ) return ipsc_name = util.random_name('cli_test_ipsc') routes = util.remove_outer_quotes( oci_cli_virtual_network.virtualnetwork_cli_extended. network_create_ip_sec_connection_static_routes_example) result = self.invoke([ 'ip-sec-connection', 'create', '--compartment-id', util.COMPARTMENT_ID, '--display-name', ipsc_name, '--cpe-id', self.cpe_ocid, '--drg-id', self.drg_ocid, '--static-routes', routes ]) if 'Limit tenant-ipsec-vpn-connection' in result.output: self.drg_capacity_issue = True print( 'Unable to execute subtest_ip_sec_connection_operations as an IPSec Connection is not available' ) return self.ipsc_ocid = util.find_id_in_response(result.output) util.validate_response(result, expect_etag=True) util.wait_until([ 'network', 'ip-sec-connection', 'get', '--ipsc-id', self.ipsc_ocid ], 'AVAILABLE', max_wait_seconds=600) result = self.invoke([ 'ip-sec-connection', 'list', '--compartment-id', util.COMPARTMENT_ID ]) util.validate_response(result) ipsc_name = ipsc_name + "_updated" result = self.invoke([ 'ip-sec-connection', 'update', '--ipsc-id', self.ipsc_ocid, '--display-name', ipsc_name ]) util.validate_response(result, expect_etag=True) result = self.invoke( ['ip-sec-connection', 'get', '--ipsc-id', self.ipsc_ocid]) util.validate_response(result, expect_etag=True) result = self.invoke( ['ip-sec-connection', 'get-config', '--ipsc-id', self.ipsc_ocid]) util.validate_response(result) result = self.invoke( ['ip-sec-connection', 'get-status', '--ipsc-id', self.ipsc_ocid]) util.validate_response(result)
def subtest_route_table_operations(self): rt_name = util.random_name('cli_test_route_table') rules = util.remove_outer_quotes(oci_cli_virtual_network.virtualnetwork_cli_extended.network_create_route_table_route_rules_example.format(ig_id=self.ig_ocid)) result = self.invoke( ['route-table', 'create', '--compartment-id', util.COMPARTMENT_ID, '--display-name', rt_name, '--vcn-id', self.vcn_ocid, '--route-rules', rules ]) self.rt_ocid = util.find_id_in_response(result.output) util.validate_response(result, expect_etag=True) util.wait_until(['network', 'route-table', 'get', '--rt-id', self.rt_ocid], 'AVAILABLE', max_wait_seconds=300) result = self.invoke(['route-table', 'list', '--compartment-id', util.COMPARTMENT_ID, '--vcn-id', self.vcn_ocid]) util.validate_response(result) self.run_list_filter_verification('route-table', rt_name) result = self.invoke(['route-table', 'get', '--rt-id', self.rt_ocid]) util.validate_response(result, expect_etag=True) rt_name = rt_name + "_updated" rules_v2 = """[{{"cidrBlock":"0.0.0.0/1","networkEntityId":"{ig_id}"}}]""".format(ig_id=self.ig_ocid) # update display name only - does not show a prompt result = self.invoke(['route-table', 'update', '--rt-id', self.rt_ocid, '--display-name', rt_name]) util.validate_response(result, expect_etag=True) util.vcr_mode_aware_sleep(20) # update route-rules, confirm y result = self.invoke( ['route-table', 'update', '--rt-id', self.rt_ocid, '--route-rules', rules_v2], input='y') util.validate_response(result, json_response_expected=False) # update route-rules, confirm n result = self.invoke( ['route-table', 'update', '--rt-id', self.rt_ocid, '--route-rules', rules_v2], input='n') assert result.exit_code != 0 util.vcr_mode_aware_sleep(20) # update route-rules, force result = self.invoke( ['route-table', 'update', '--rt-id', self.rt_ocid, '--route-rules', rules, '--force']) util.validate_response(result, expect_etag=True)
def subtest_subnet_operations(self): subnet_name = util.random_name('cli_test_subnet') cidr_block = "10.0.0.0/16" security_list_ids = util.remove_outer_quotes( oci_cli_virtual_network.virtualnetwork_cli_extended. network_create_subnet_security_list_ids_example.format( sl_id=self.sl_ocid)) subnet_dns_label = util.random_name('subnet', insert_underscore=False) result = self.invoke([ 'subnet', 'create', '--compartment-id', util.COMPARTMENT_ID, '--availability-domain', util.availability_domain(), '--display-name', subnet_name, '--vcn-id', self.vcn_ocid, '--cidr-block', cidr_block, '--security-list-ids', security_list_ids, '--dns-label', subnet_dns_label ]) self.subnet_ocid = util.find_id_in_response(result.output) util.validate_response(result, expect_etag=True) util.wait_until( ['network', 'subnet', 'get', '--subnet-id', self.subnet_ocid], 'AVAILABLE', max_wait_seconds=300) result = self.invoke([ 'subnet', 'list', '--compartment-id', util.COMPARTMENT_ID, '--vcn-id', self.vcn_ocid ]) util.validate_response(result) self.run_list_filter_verification('subnet', subnet_name) subnet_name = subnet_name + "_updated" result = self.invoke([ 'subnet', 'update', '--subnet-id', self.subnet_ocid, '--display-name', subnet_name ]) util.validate_response(result, expect_etag=True) result = self.invoke( ['subnet', 'get', '--subnet-id', self.subnet_ocid]) util.validate_response(result, expect_etag=True) subnet_response = json.loads(result.output) assert subnet_response['data']['dns-label'] == subnet_dns_label
def subtest_launch_instance_ssh_authorized_keys_in_param_and_in_metadata_throws_error(self): instance_name = util.random_name('cli_test_instance_options') image_id = util.oracle_linux_image() shape = 'VM.Standard1.2' hostname_label = util.random_name('bminstance', insert_underscore=False) launch_instance_result = util.invoke_command( ['compute', 'instance', 'launch', '--compartment-id', util.COMPARTMENT_ID, '--availability-domain', util.availability_domain(), '--display-name', instance_name, '--subnet-id', self.subnet_ocid, '--image-id', image_id, '--shape', shape, '--hostname-label', hostname_label + "2", '--ssh-authorized-keys-file', util.SSH_AUTHORIZED_KEYS_FILE, '--metadata', util.remove_outer_quotes(oci_cli_compute.compute_cli_extended.compute_instance_launch_metadata_example)]) assert launch_instance_result.exit_code != 0
def subtest_security_list_operations(self): sl_name = util.random_name('cli_test_security_list') egress_rules = util.remove_outer_quotes( oci_cli_virtual_network.virtualnetwork_cli_extended. network_create_security_list_egress_security_rules_example) ingress_rules = util.remove_outer_quotes( oci_cli_virtual_network.virtualnetwork_cli_extended. network_create_security_list_ingress_security_rules_example) result = self.invoke([ 'security-list', 'create', '--compartment-id', util.COMPARTMENT_ID, '--display-name', sl_name, '--vcn-id', self.vcn_ocid, '--egress-security-rules', egress_rules, '--ingress-security-rules', ingress_rules ]) self.sl_ocid = util.find_id_in_response(result.output) util.validate_response(result, expect_etag=True) util.wait_until([ 'network', 'security-list', 'get', '--security-list-id', self.sl_ocid ], 'AVAILABLE', max_wait_seconds=300) result = self.invoke([ 'security-list', 'list', '--compartment-id', util.COMPARTMENT_ID, '--vcn-id', self.vcn_ocid ]) util.validate_response(result) self.run_list_filter_verification('security-list', sl_name) result = self.invoke( ['security-list', 'get', '--security-list-id', self.sl_ocid]) util.validate_response(result, expect_etag=True) sl_name = sl_name + "_updated" egress_rules_v2 = """[{"destination": "10.0.2.0/24", "protocol": "6", "tcpOptions": {"destinationPortRange": {"max": 1522, "min": 1522}}}]""" ingress_rules_v2 = """[{"protocol": "6", "source": "10.0.1.0/25", "tcpOptions": {"destinationPortRange": {"max": 1521, "min": 1521}}}]""" # TODO: A short sleep before every security list update to allow for replication. util.vcr_mode_aware_sleep(20) # Force update on all fields result = self.invoke([ 'security-list', 'update', '--security-list-id', self.sl_ocid, '--display-name', sl_name, '--egress-security-rules', egress_rules, '--ingress-security-rules', ingress_rules, '--force' ]) util.validate_response(result, expect_etag=True) util.vcr_mode_aware_sleep(20) # update display name only - does not show a prompt result = self.invoke([ 'security-list', 'update', '--security-list-id', self.sl_ocid, '--display-name', sl_name ]) util.validate_response(result, expect_etag=True) util.vcr_mode_aware_sleep(20) # update egress-rules, confirm y result = self.invoke([ 'security-list', 'update', '--security-list-id', self.sl_ocid, '--egress-security-rules', egress_rules_v2 ], input='y') util.validate_response(result, json_response_expected=False) util.vcr_mode_aware_sleep(20) # update ingress-rules, confirm y result = self.invoke([ 'security-list', 'update', '--security-list-id', self.sl_ocid, '--ingress-security-rules', ingress_rules_v2 ], input='y') util.validate_response(result, json_response_expected=False) util.vcr_mode_aware_sleep(20) # update both, confirm y result = self.invoke([ 'security-list', 'update', '--security-list-id', self.sl_ocid, '--ingress-security-rules', ingress_rules, '--egress-security-rules', egress_rules ], input='y') util.validate_response(result, json_response_expected=False) util.vcr_mode_aware_sleep(20) # update egress-rules, confirm n result = self.invoke([ 'security-list', 'update', '--security-list-id', self.sl_ocid, '--egress-security-rules', egress_rules_v2 ], input='n') assert result.exit_code != 0 # update egress-rules, force result = self.invoke([ 'security-list', 'update', '--security-list-id', self.sl_ocid, '--egress-security-rules', egress_rules_v2, '--force' ]) util.validate_response(result, expect_etag=True)