aboutsummaryrefslogtreecommitdiffstats
path: root/environments/external-loadbalancer-vip-v6.yaml
blob: 5a2ef505a59dbe8070ec6f7f521024c4feafdecf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
resource_registry:
  OS::TripleO::Network::Ports::NetVipMap: ../network/ports/net_vip_map_external_v6.yaml
  OS::TripleO::Network::Ports::ExternalVipPort: ../network/ports/noop.yaml
  OS::TripleO::Network::Ports::InternalApiVipPort: ../network/ports/noop.yaml
  OS::TripleO::Network::Ports::StorageVipPort: ../network/ports/noop.yaml
  OS::TripleO::Network::Ports::StorageMgmtVipPort: ../network/ports/noop.yaml
  OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/from_service_v6.yaml
  OS::TripleO::Controller::Ports::ExternalPort: ../network/ports/external_from_pool_v6.yaml
  OS::TripleO::Controller::Ports::InternalApiPort: ../network/ports/internal_api_from_pool_v6.yaml
  OS::TripleO::Controller::Ports::StoragePort: ../network/ports/storage_from_pool_v6.yaml
  OS::TripleO::Controller::Ports::StorageMgmtPort: ../network/ports/storage_mgmt_from_pool_v6.yaml
  # OVS doesn't support IPv6 endpoints for tunneling yet, so this remains IPv4 for now.
  OS::TripleO::Controller::Ports::TenantPort: ../network/ports/tenant_from_pool.yaml

parameter_defaults:
  # When using an external loadbalancer set the following in parameter_defaults
  # to control your VIPs (currently one per network)
  # NOTE: we will eventually move to one VIP per service
  #
  ControlPlaneIP: 192.0.2.251
  ExternalNetworkVip: 2001:db8:fd00:1000:0000:0000:0000:0005
  InternalApiNetworkVip: fd00:fd00:fd00:2000:0000:0000:0000:0005
  StorageNetworkVip: fd00:fd00:fd00:3000:0000:0000:0000:0005
  StorageMgmtNetworkVip: fd00:fd00:fd00:4000:0000:0000:0000:0005
  ServiceVips:
    redis: fd00:fd00:fd00:2000:0000:0000:0000:0006
  ControllerIPs:
    external:
      - 2001:db8:fd00:1000:0000:0000:0000:0007
    internal_api:
      - fd00:fd00:fd00:2000:0000:0000:0000:0007
    storage:
      - fd00:fd00:fd00:3000:0000:0000:0000:0007
    storage_mgmt:
      - fd00:fd00:fd00:4000:0000:0000:0000:0007
    tenant:
      - 172.16.0.253
  EnableLoadBalancer: false
ript will connect through # QMP and affinitize all cores within the VM to match cores on the # host. execfile("./vm-cores.py") def build_mask(cores): ret = 0; for core in cores: for thread in core: ret += 1 << thread; return ret; n_cores = len(cores); n_threads = len(cores[0]); mask = str(hex((build_mask(cores)))) smp_str = str(n_cores*n_threads) smp_str += ",cores=" + str(n_cores) smp_str += ",sockets=1" smp_str += ",threads=" + str(n_threads) try: qmp_sock = check_output(["mktemp", "--tmpdir", "qmp-sock-XXXX"]).strip() except: qmp_sock = "/tmp/qmp-sock" qemu_cmdline = "" qemu_cmdline += "taskset " + mask + " qemu-system-x86_64 -smp " + smp_str qemu_cmdline += " -qmp unix:" + qmp_sock + ",server,nowait" qemu_cmdline += " -daemonize" for a in sys.argv[1:]: qemu_cmdline += " " + a try: pid = fork() except OSError, e: sys.exit("Failed to fork: " + e.strerror) if (pid != 0): # In the parent process ret = system(qemu_cmdline) if (ret != 0): sys.exit("Failed to run QEMU: exit status " + str(ret) + ". Command line was:\n" + qemu_cmdline) # Parent process done sys.exit(0) # In the child process: use _exit to terminate retry = 0 s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) while (retry < 10): sleep(1); try: s.connect(qmp_sock) print "Connected to QMP" break; except: pass retry = retry + 1 print "Failed to connect to QMP, attempt " + str(retry) if (retry >= 10): print "Failed to connect to QMP" _exit(1) # skip info about protocol dat = s.recv(100000) # need to run qmp_capabilities before next command works s.send("{\"execute\" : \"qmp_capabilities\" }") dat = s.recv(100000) # Get the PID for each guest core s.send("{\"execute\" : \"query-cpus\"}") dat = s.recv(100000) a = json.loads(dat)["return"]; if (len(a) != n_cores*n_threads): print "Configuration mismatch: " + str(len(a)) + " vCPU reported by QMP, instead of expected " + str(n_cores*n_threads) _exit(1) print "QMP reported " + str(len(a)) + " vCPU, as expected" if (n_threads == 1): idx = 0; for core in a: cm = str(hex(1 << cores[idx][0])) pid = str(core["thread_id"]) system("taskset -p " + cm + " " + pid + " > /dev/null") idx = idx + 1 elif (n_threads == 2): idx = 0; prev = 0; for core in a: cm = str(hex(1 << cores[idx][prev])) pid = str(core["thread_id"]) system("taskset -p " + cm + " " + pid + " > /dev/null") prev = prev + 1; if (prev == 2): idx = idx + 1; prev = 0 else: print "Not implemented yet: more than 2 threads per core" _exit(1) print "Core affinitization completed" _exit(0)