122 lines
4.2 KiB
Python
122 lines
4.2 KiB
Python
# Copyright 2015 Mirantis, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
|
|
import argparse
|
|
import os
|
|
import sys
|
|
|
|
from keystoneauth1 import identity
|
|
from keystoneauth1 import session
|
|
from neutronclient.v2_0 import client
|
|
|
|
|
|
parser = argparse.ArgumentParser(description='GenericSwitch functional test')
|
|
parser.add_argument('--switch_name',
|
|
type=str,
|
|
required=True,
|
|
help='Name of the switch')
|
|
parser.add_argument('--switch_id',
|
|
type=str,
|
|
required=True,
|
|
help='Switch id to create a local_link_information with')
|
|
parser.add_argument('--port',
|
|
type=str,
|
|
required=True,
|
|
help='OVS port to manage')
|
|
parser.add_argument('--network',
|
|
type=str,
|
|
default='private',
|
|
help='Neutron network name to create port in')
|
|
parser.add_argument('--auth-url',
|
|
type=str,
|
|
default='http://127.0.0.1:5000/v3',
|
|
help='Keystone auth URL endpoint')
|
|
parser.add_argument('--username',
|
|
type=str,
|
|
default='admin',
|
|
help='Keystone user name, must have admin access')
|
|
parser.add_argument('--password',
|
|
type=str,
|
|
default='admin',
|
|
help='Keystone user password, must have admin access')
|
|
parser.add_argument('--project-name',
|
|
type=str,
|
|
default='admin',
|
|
help='Keystone user project name, must have admin access')
|
|
parser.add_argument('--user-domain-id',
|
|
type=str,
|
|
help='Keystone user domain ID')
|
|
parser.add_argument('--project-domain-id',
|
|
type=str,
|
|
help='Keystone project domain ID')
|
|
opts = parser.parse_args()
|
|
|
|
auth_params = {
|
|
"username": os.environ.get("OS_USERNAME", opts.username),
|
|
"password": os.environ.get("OS_PASSWORD", opts.password),
|
|
"tenant_name": os.environ.get("OS_PROJECT_NAME", opts.project_name),
|
|
}
|
|
|
|
user_domain_id = os.environ.get("OS_USER_DOMAIN_ID", opts.user_domain_id)
|
|
if user_domain_id:
|
|
auth_params["user_domain_id"] = user_domain_id
|
|
project_domain_id = os.environ.get("OS_PROJECT_DOMAIN_ID",
|
|
opts.project_domain_id)
|
|
if project_domain_id:
|
|
auth_params["project_domain_id"] = project_domain_id
|
|
|
|
|
|
auth = identity.Password(os.environ.get("OS_AUTH_URL", opts.auth_url),
|
|
**auth_params)
|
|
try:
|
|
sess = session.Session(auth=auth)
|
|
nc = client.Client(session=sess)
|
|
|
|
network_name = opts.network
|
|
|
|
network = nc.list_networks(name=network_name)['networks'][0]
|
|
print(network['provider:segmentation_id'])
|
|
|
|
create_body = {
|
|
'port':
|
|
{'network_id': network['id'],
|
|
'admin_state_up': True,
|
|
'name': 'generic_switch_test'
|
|
}
|
|
}
|
|
port_id = nc.create_port(create_body)['port']['id']
|
|
host = nc.list_agents(
|
|
agent_type='Open vSwitch agent')['agents'][0]['host']
|
|
update_body = {
|
|
'port': {
|
|
'device_owner': 'baremetal:none',
|
|
'device_id': 'fake-instance-uuid',
|
|
'admin_state_up': True,
|
|
'binding:vnic_type': 'baremetal',
|
|
'binding:host_id': host,
|
|
'binding:profile': {
|
|
'local_link_information': [{
|
|
'switch_info': opts.switch_name,
|
|
'switch_id': opts.switch_id,
|
|
'port_id': opts.port}]
|
|
}
|
|
}
|
|
}
|
|
|
|
nc.update_port(port_id, update_body)
|
|
except Exception as exc:
|
|
msg = "Failed to create and update port, exception is %s" % exc
|
|
sys.exit(msg)
|