diff --git a/devsetup/Makefile b/devsetup/Makefile index 9696bd97..7f7ff70e 100644 --- a/devsetup/Makefile +++ b/devsetup/Makefile @@ -511,6 +511,48 @@ standalone_sync: $(eval $(call vars)) scripts/standalone-sync.sh ${EDPM_COMPUTE_SUFFIX} ${STANDALONE_COMPUTE_DRIVER} '${EDPM_COMPUTE_ADDITIONAL_NETWORKS}' '${EDPM_COMPUTE_ADDITIONAL_HOST_ROUTES}' +.PHONY: standalone_ipv6 +standalone_ipv6: export NETWORK_ISOLATION_IPV4=false +standalone_ipv6: export NETWORK_ISOLATION_IPV6=true +standalone_ipv6: export NETWORK_ISOLATION_NETWORK_NAME=ipv6-ctl-net +standalone_ipv6: export IPV6_NET_ISOLATION_SUBNET=${NETWORK_ISOLATION_IPV6_ADDRESS} +standalone_ipv6: export TEMP_IPV6_NET_ISOLATION_JSON_PATH=/tmp/temp.json +standalone_ipv6: export STANDALONE=true +standalone_ipv6: export USE_IPv6=true +# IPv6 address of the nat64-router VM hosting IPv6 services +standalone_ipv6: export NAT64_IPV6_GATEWAY=${IPV6_LAB_NAT64_HOST_IPV6} +standalone_ipv6: export NETWORK_ISOLATION_NET_NAME=${IPV6_LAB_NETWORK_NAME} +# Create isolated ipv6 control network and IPv6 lab with a VM running IPv6 +# services (IPv6 routing, DNS etc). Then create a stanadalone edpm node +# running Openstack with IPv6 addressing. +standalone_ipv6: + $(eval $(call vars)) + make network_isolation_bridge + make ipv6_lab + $$(echo \ + [{\ + \"type\": \"network\",\ + \"name\": \"$$NETWORK_ISOLATION_NETWORK_NAME\",\ + \"standalone_config\": {\ + \"type\": \"linux_bridge\",\ + \"name\": \"$$NETWORK_ISOLATION_NETWORK_NAME\",\ + \"mtu\": 1500,\ + \"ip_subnet\": \"$$IPV6_NET_ISOLATION_SUBNET\",\ + \"allocation_pools\": [{\ + \"start\": \"fd00:aaaa::100\",\ + \"end\": \"fd00:aaaa::150\"\ + }]\ + }\ + }] > $$TEMP_IPV6_NET_ISOLATION_JSON_PATH); + scripts/gen-ansibleee-ssh-key.sh + scripts/gen-edpm-node.sh ${EDPM_COMPUTE_SUFFIX} $$(cat $$TEMP_IPV6_NET_ISOLATION_JSON_PATH | jq -c) + make standalone_deploy + make standalone_sync + +.PHONY: standalone_ipv6_cleanup +standalone_ipv6_cleanup: network_isolation_bridge_cleanup standalone_cleanup ipv6_lab_cleanup + $(eval $(call vars)) + .PHONY: standalone standalone: export STANDALONE=true standalone: edpm_compute standalone_deploy ## Create vm and deploy tripleo standalone diff --git a/devsetup/scripts/gen-edpm-node-common.sh b/devsetup/scripts/gen-edpm-node-common.sh index 0e5ca2c4..9308dcab 100755 --- a/devsetup/scripts/gen-edpm-node-common.sh +++ b/devsetup/scripts/gen-edpm-node-common.sh @@ -25,6 +25,8 @@ trap 'rm -rf -- "$MY_TMP_DIR"' EXIT EDPM_SERVER_ROLE=${EDPM_SERVER_ROLE:-"compute"} FIRSTBOOT_EXTRA=${FIRSTBOOT_EXTRA:-"/tmp/edpm-firstboot-extra"} +USE_IPv6=${USE_IPv6:-false} +NAT64_IPV6_GATEWAY=${NAT64_IPV6_GATEWAY:-fd00:abcd:abcd:fc00::2/64} STANDALONE=${STANDALONE:-false} SWIFT_REPLICATED=${SWIFT_REPLICATED:-false} EDPM_COMPUTE_SUFFIX=${1:-"0"} @@ -43,8 +45,7 @@ EDPM_COMPUTE_NETWORK_TYPE=${EDPM_COMPUTE_NETWORK_TYPE:-network} # Use a json string to add additonal networks: # '[{"type": "network", "name": "crc-bmaas"}, {"type": "network", "name": "other-net"}]' EDPM_COMPUTE_ADDITIONAL_NETWORKS=${2:-'[]'} -EDPM_COMPUTE_NETWORK_IP=$(virsh net-dumpxml ${EDPM_COMPUTE_NETWORK} | xmllint --xpath 'string(/network/ip/@address)' -) -DATAPLANE_DNS_SERVER=${DATAPLANE_DNS_SERVER:-${EDPM_COMPUTE_NETWORK_IP}} + CENTOS_9_STREAM_URL=${CENTOS_9_STREAM_URL:-"https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2"} EDPM_IMAGE_URL=${EDPM_IMAGE_URL:-"${CENTOS_9_STREAM_URL}"} BASE_DISK_FILENAME=${BASE_DISK_FILENAME:-"$(basename ${EDPM_IMAGE_URL})"} @@ -60,6 +61,20 @@ else IP_ADRESS_SUFFIX=$((100+${EDPM_COMPUTE_SUFFIX})) fi +if [ ${USE_IPv6} = "true" ]; then + IP_VER="ipv6" + EDPM_COMPUTE_NETWORK_IP=$(virsh net-dumpxml ${EDPM_COMPUTE_NETWORK} | xmllint --xpath 'string(//ip[@family="ipv6"]/@address)' -) + IP=${IP:-"${EDPM_COMPUTE_NETWORK_IP%:*}:${IP_ADRESS_SUFFIX}"} + GATEWAY=${GATEWAY:-"${NAT64_IPV6_GATEWAY%%/*}"} + PREFIX=64 +else + IP_VER="ipv4" + EDPM_COMPUTE_NETWORK_IP=$(virsh net-dumpxml ${EDPM_COMPUTE_NETWORK} | xmllint --xpath 'string(/network/ip/@address)' -) + IP=${IP:-"${EDPM_COMPUTE_NETWORK_IP%.*}.${IP_ADRESS_SUFFIX}"} + GATEWAY=${GATEWAY:-"${EDPM_COMPUTE_NETWORK_IP}"} + PREFIX=24 +fi + if [ ! -f ${SSH_PUBLIC_KEY} ]; then echo "${SSH_PUBLIC_KEY} is missing. Run gen-ansibleee-ssh-key.sh" exit 1 @@ -222,12 +237,9 @@ if [ "$SWIFT_REPLICATED" = "true" ]; then fi # Set network variables for firstboot script -IP=${IP:-"${EDPM_COMPUTE_NETWORK_IP%.*}.${IP_ADRESS_SUFFIX}"} NETDEV=eth0 NETSCRIPT="/etc/sysconfig/network-scripts/ifcfg-${NETDEV}" -GATEWAY=${GATEWAY:-"${EDPM_COMPUTE_NETWORK_IP}"} -DNS=${DATAPLANE_DNS_SERVER} -PREFIX=24 +DNS=${DATAPLANE_DNS_SERVER:-${EDPM_COMPUTE_NETWORK_IP}} cat <${OUTPUT_DIR}/${EDPM_COMPUTE_NAME}-firstboot.sh PARTITION=\$(df / --output=source | grep -o "[[:digit:]]") @@ -255,13 +267,14 @@ fi # Set network for current session nmcli device set eth0 managed yes + n=0 retries=6 while true; do - nmcli device modify $NETDEV ipv4.addresses $IP/$PREFIX ipv4.gateway $GATEWAY ipv4.dns $DNS ipv4.method manual && break + nmcli device modify $NETDEV $IP_VER.addresses $IP/$PREFIX $IP_VER.gateway $GATEWAY $IP_VER.dns $DNS $IP_VER.method manual && break n="\$((n+1))" if (( n >= retries )); then - echo "Failed to configure ipv4 address in $NETDEV." + echo "Failed to configure $IP_VER address in $NETDEV." break fi sleep 5 diff --git a/devsetup/scripts/ipv6-nat64/nat64_router.sh b/devsetup/scripts/ipv6-nat64/nat64_router.sh index 7292e983..dd464ce0 100755 --- a/devsetup/scripts/ipv6-nat64/nat64_router.sh +++ b/devsetup/scripts/ipv6-nat64/nat64_router.sh @@ -164,7 +164,7 @@ write_files: # services to allow (UDP) set allowed_udp_dports { type inet_service - elements = { domain } + elements = { domain, ntp } } # this chain gathers all accept conditions chain allow { @@ -272,12 +272,15 @@ write_files: [proxy] runcmd: + - [ 'sed', '-i', 's/^pool.*/pool clock.redhat.com iburst/', '/etc/chrony.conf' ] + - [ 'sed', '-i', '/^pool/a allow fd00:abcd:abcd:fc00::\/64', '/etc/chrony.conf' ] - [ 'sh', '-c', 'echo "include \"/etc/nftables/main64.nft\"" | tee -a /etc/sysconfig/nftables.conf' ] - [ 'systemctl', 'daemon-reload' ] - [ 'systemctl', 'enable', 'unbound.service' ] - [ 'systemctl', 'enable', 'tayga@default.service' ] - [ 'systemctl', 'enable', 'nftables.service' ] - [ 'systemctl', 'enable', 'radvd.service' ] + - [ 'systemctl', 'restart', 'chronyd.service' ] # TODO: Workaround - https://github.com/canonical/cloud-init/issues/4518 - Remove WA when fix in packages - [ 'crudini', '--del', '/etc/NetworkManager/system-connections/cloud-init-eth0.nmconnection', 'ipv4', 'route2' ] - [ 'crudini', '--set', '/etc/NetworkManager/system-connections/cloud-init-eth0.nmconnection', 'ipv6', 'route1', '::/0,${IPV6_NETWORK_IPADDRESS%%/*}' ] diff --git a/devsetup/scripts/standalone-sync.sh b/devsetup/scripts/standalone-sync.sh index 744f856a..5fc839bf 100755 --- a/devsetup/scripts/standalone-sync.sh +++ b/devsetup/scripts/standalone-sync.sh @@ -21,11 +21,17 @@ EDPM_COMPUTE_SUFFIX=${1:-"0"} EDPM_COMPUTE_NETWORK=${EDPM_COMPUTE_NETWORK:-default} STANDALONE_VM=${STANDALONE_VM:-"true"} +USE_IPv6=${USE_IPv6:-false} +IP_ADRESS_SUFFIX=$((100+${EDPM_COMPUTE_SUFFIX})) if [[ ${STANDALONE_VM} == "true" ]]; then - EDPM_COMPUTE_NETWORK_IP=$(virsh net-dumpxml ${EDPM_COMPUTE_NETWORK} | xmllint --xpath 'string(/network/ip/@address)' -) + if [ ${USE_IPv6} = "true" ]; then + EDPM_COMPUTE_NETWORK_IP=$(virsh net-dumpxml ${EDPM_COMPUTE_NETWORK} | xmllint --xpath 'string(//ip[@family="ipv6"]/@address)' -) + IP=${IP:-"${EDPM_COMPUTE_NETWORK_IP%:*}:${IP_ADRESS_SUFFIX}"} + else + EDPM_COMPUTE_NETWORK_IP=$(virsh net-dumpxml ${EDPM_COMPUTE_NETWORK} | xmllint --xpath 'string(/network/ip/@address)' -) + IP=${IP:-"${EDPM_COMPUTE_NETWORK_IP%.*}.${IP_ADRESS_SUFFIX}"} + fi fi -IP_ADRESS_SUFFIX=$((100+${EDPM_COMPUTE_SUFFIX})) -IP=${IP:-"${EDPM_COMPUTE_NETWORK_IP%.*}.${IP_ADRESS_SUFFIX}"} OUTPUT_DIR=${OUTPUT_DIR:-"${SCRIPTPATH}/../../out/edpm/"} SSH_KEY_FILE=${SSH_KEY_FILE:-"${OUTPUT_DIR}/ansibleee-ssh-key-id_rsa"} diff --git a/devsetup/scripts/standalone.sh b/devsetup/scripts/standalone.sh index f4451d54..6137601d 100755 --- a/devsetup/scripts/standalone.sh +++ b/devsetup/scripts/standalone.sh @@ -27,13 +27,62 @@ EDPM_COMPUTE_ADDITIONAL_HOST_ROUTES=${4:-'[]'} EDPM_COMPUTE_NAME=${EDPM_COMPUTE_NAME:-"edpm-compute-${EDPM_COMPUTE_SUFFIX}"} EDPM_COMPUTE_NETWORK=${EDPM_COMPUTE_NETWORK:-default} STANDALONE_VM=${STANDALONE_VM:-"true"} +IP_ADRESS_SUFFIX=$((100+${EDPM_COMPUTE_SUFFIX})) +NAT64_IPV6_GATEWAY=${NAT64_IPV6_GATEWAY:-fd00:abcd:abcd:fc00::2} +NETWORK_ISOLATION_IPV6_ADDRESS=${NETWORK_ISOLATION_IPV6_ADDRESS:-fd00:aaaa::1/64} + if [[ ${STANDALONE_VM} == "true" ]]; then - EDPM_COMPUTE_NETWORK_IP=$(virsh net-dumpxml ${EDPM_COMPUTE_NETWORK} | xmllint --xpath 'string(/network/ip/@address)' -) + if [ ${USE_IPv6} = "true" ]; then + EDPM_COMPUTE_NETWORK_IP=$(virsh net-dumpxml ${EDPM_COMPUTE_NETWORK} | xmllint --xpath 'string(//ip[@family="ipv6"]/@address)' -) + IP=${IP:-"${EDPM_COMPUTE_NETWORK_IP%:*}:${IP_ADRESS_SUFFIX}"} + GATEWAY=${GATEWAY:-"${NAT64_IPV6_GATEWAY%%/*}"} + HOST_PRIMARY_RESOLV_CONF_ENTRY=${EDPM_COMPUTE_NETWORK_IP} + + CTL_PLANE_ADDR_PREFIX=${CTL_PLANE_ADDR_PREFIX:-${NETWORK_ISOLATION_IPV6_ADDRESS%::*}} + CTL_PLANE_IP=${CTL_PLANE_IP:-${CTL_PLANE_ADDR_PREFIX}::${IP_ADRESS_SUFFIX}} + CTL_PLANE_CIDR=${CTL_PLANE_CIDR:-"64"} + CTL_PLANE_SUBNET=${CTL_PLANE_SUBNET:-${CTL_PLANE_ADDR_PREFIX}::/${CTL_PLANE_CIDR}} + CTL_PLANE_VIP=${CTL_PLANE_VIP:-${CTL_PLANE_ADDR_PREFIX}::99} + + STORAGE_ADDR_PREFIX="${STORAGE_ADDR_PREFIX:-\"fd00:bbbb::\"}" + STORAGE_CIDR=${STORAGE_CIDR:-"64"} + STORAGE_MGMT_ADDR_PREFIX=${STORAGE_MGMT_ADDR_PREFIX:-\"fd00:cccc::\"} + STORAGE_MGMT_CIDR=${STORAGE_MGMT_CIDR:-"64"} + INTERNAL_ADDR_PREFIX=${INTERNAL_ADDR_PREFIX:-\"fd00:dddd::\"} + INTERNAL_CIDR=${INTERNAL_CIDR:-"64"} + TENANT_ADDR_PREFIX=${TENANT_ADDR_PREFIX:-\"fd00:eeee::\"} + TENANT_CIDR=${TENANT_CIDR:-"64"} + EXTERNAL_ADDR_PREFIX=${EXTERNAL_ADDR_PREFIX:-\"fd00:ffff::\"} + EXTERNAL_CIDR=${EXTERNAL_CIDR:-"64"} + IP_NET_MASK=\"::\" + NTP_SERVER=${NTP_SERVER:-"${NAT64_IPV6_GATEWAY%%/*}"} + OS_NET_CONFIG_IFACE=${OS_NET_CONFIG_IFACE:-"nic2"} + + else + EDPM_COMPUTE_NETWORK_IP=$(virsh net-dumpxml ${EDPM_COMPUTE_NETWORK} | xmllint --xpath 'string(/network/ip/@address)' -) + IP=${IP:-"${EDPM_COMPUTE_NETWORK_IP%.*}.${IP_ADRESS_SUFFIX}"} + GATEWAY=${GATEWAY:-"${EDPM_COMPUTE_NETWORK_IP}"} + CTL_PLANE_IP=${IP} + CTL_PLANE_CIDR=${CTL_PLANE_CIDR:-"24"} + CTL_PLANE_SUBNET=${CTL_PLANE_SUBNET:-${CTL_PLANE_IP%.*}.0/${CTL_PLANE_CIDR}} + CTL_PLANE_VIP=${CTL_PLANE_VIP:-${CTL_PLANE_IP%.*}.99} + + STORAGE_ADDR_PREFIX=${STORAGE_ADDR_PREFIX:-"172.18.0."} + STORAGE_CIDR=${STORAGE_CIDR:-"24"} + STORAGE_MGMT_ADDR_PREFIX=${STORAGE_MGMT_ADDR_PREFIX:-"172.20.0."} + STORAGE_MGMT_CIDR=${STORAGE_MGMT_CIDR:-"24"} + INTERNAL_ADDR_PREFIX=${INTERNAL_ADDR_PREFIX:-"172.17.0."} + INTERNAL_CIDR=${INTERNAL_CIDR:-"24"} + TENANT_ADDR_PREFIX=${TENANT_ADDR_PREFIX:-"172.19.0."} + TENANT_CIDR=${TENANT_CIDR:-"24"} + EXTERNAL_ADDR_PREFIX=${EXTERNAL_ADDR_PREFIX:-"172.21.0."} + EXTERNAL_CIDR=${EXTERNAL_CIDR:-"24"} + + IP_NET_MASK="0.0.0.0" + OS_NET_CONFIG_IFACE=${OS_NET_CONFIG_IFACE:-"nic1"} + fi fi -IP_ADRESS_SUFFIX=$((100+${EDPM_COMPUTE_SUFFIX})) -IP=${IP:-"${EDPM_COMPUTE_NETWORK_IP%.*}.${IP_ADRESS_SUFFIX}"} -OS_NET_CONFIG_IFACE=${OS_NET_CONFIG_IFACE:-"nic1"} -GATEWAY=${GATEWAY:-"${EDPM_COMPUTE_NETWORK_IP}"} + OUTPUT_DIR=${OUTPUT_DIR:-"${SCRIPTPATH}/../../out/edpm/"} SSH_KEY_FILE=${SSH_KEY_FILE:-"${OUTPUT_DIR}/ansibleee-ssh-key-id_rsa"} SSH_OPT="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $SSH_KEY_FILE" @@ -56,7 +105,6 @@ CLOUD_DOMAIN=${CLOUD_DOMAIN:-localdomain} OCTAVIA_ENABLED=${OCTAVIA_ENABLED:-false} TELEMETRY_ENABLED=${TELEMETRY_ENABLED:-true} - if [[ ! -f $SSH_KEY_FILE ]]; then echo "$SSH_KEY_FILE is missing" exit 1 @@ -84,7 +132,7 @@ sudo dnf update -y EOF fi -if [[ -e /run/systemd/resolve/resolv.conf ]]; then +if [[ -e /run/systemd/resolve/resolv.conf && ${USE_IPv6} = "false" ]]; then HOST_PRIMARY_RESOLV_CONF_ENTRY=$(cat /run/systemd/resolve/resolv.conf | grep ^nameserver | grep -v "${EDPM_COMPUTE_NETWORK_IP%.*}" | head -n1 | cut -d' ' -f2) else HOST_PRIMARY_RESOLV_CONF_ENTRY=${HOST_PRIMARY_RESOLV_CONF_ENTRY:-$GATEWAY} @@ -176,6 +224,13 @@ sudo cp /tmp/deployed_network.yaml \$HOME/deployed_network.yaml sudo cp /tmp/Standalone.yaml \$HOME/Standalone.yaml #---- +#--- +## Allow execution on rendered scripts +#--- +sudo chmod +x /tmp/ceph.sh || true +sudo chmod +x /tmp/openstack.sh || true +#---- + [[ "\$EDPM_COMPUTE_CEPH_ENABLED" == "true" ]] && /tmp/ceph.sh /tmp/openstack.sh [[ "\$COMPUTE_DRIVER" == "ironic" ]] && /tmp/ironic_post.sh @@ -205,12 +260,26 @@ cat << EOF > ${J2_VARS_FILE} --- additional_networks: ${EDPM_COMPUTE_ADDITIONAL_NETWORKS} additional_host_routes: ${EDPM_COMPUTE_ADDITIONAL_HOST_ROUTES} -ctlplane_cidr: 24 -ctlplane_ip: ${IP} +ctlplane_cidr: ${CTL_PLANE_CIDR} +ctlplane_ip: ${CTL_PLANE_IP} +ctlplane_subnet: ${CTL_PLANE_SUBNET} +ctlplane_vip: ${CTL_PLANE_VIP} + +is_ipv6: ${USE_IPv6} +storage_addr_prefix: ${STORAGE_ADDR_PREFIX} +storage_cidr: ${STORAGE_CIDR} +storage_mgmt_addr_prefix: ${STORAGE_MGMT_ADDR_PREFIX} +storage_mgmt_cidr: ${STORAGE_MGMT_CIDR} +internal_addr_prefix: ${INTERNAL_ADDR_PREFIX} +internal_cidr: ${INTERNAL_CIDR} +tenant_addr_prefix: ${TENANT_ADDR_PREFIX} +tenant_cidr: ${TENANT_CIDR} +external_addr_prefix: ${EXTERNAL_ADDR_PREFIX} +external_cidr: ${EXTERNAL_CIDR} +ip_net_mask: ${IP_NET_MASK} + os_net_config_iface: ${OS_NET_CONFIG_IFACE} standalone_vm: ${STANDALONE_VM} -ctlplane_subnet: ${IP%.*}.0/24 -ctlplane_vip: ${IP%.*}.99 ip_address_suffix: ${IP_ADRESS_SUFFIX} interface_mtu: ${INTERFACE_MTU:-1500} gateway_ip: ${GATEWAY} @@ -224,22 +293,33 @@ jinja2_render standalone/network_data.j2 "${J2_VARS_FILE}" > ${MY_TMP_DIR}/netwo jinja2_render standalone/deployed_network.j2 "${J2_VARS_FILE}" > ${MY_TMP_DIR}/deployed_network.yaml jinja2_render standalone/net_config.j2 "${J2_VARS_FILE}" > ${MY_TMP_DIR}/net_config.yaml jinja2_render standalone/role.j2 "${J2_VARS_FILE}" > ${MY_TMP_DIR}/Standalone.yaml +jinja2_render standalone/openstack.j2 "${J2_VARS_FILE}" > ${MY_TMP_DIR}/openstack.sh +jinja2_render standalone/ceph.j2 "${J2_VARS_FILE}" > ${MY_TMP_DIR}/ceph.sh + +# scp requires special syntax to specify an IPv6 address +if [ ${USE_IPv6} = "true" ]; then + SCP_IP="[${IP}]" + SCP_OPT="-6" +else + SCP_IP=${IP} + SCP_OPT="" +fi # Copying files -scp $SSH_OPT $REPO_SETUP_CMDS root@$IP:/tmp/repo-setup.sh -scp $SSH_OPT $CMDS_FILE root@$IP:/tmp/standalone-deploy.sh -scp $SSH_OPT ${MY_TMP_DIR}/net_config.yaml root@$IP:/tmp/net_config.yaml -scp $SSH_OPT ${MY_TMP_DIR}/network_data.yaml root@$IP:/tmp/network_data.yaml -scp $SSH_OPT ${MY_TMP_DIR}/deployed_network.yaml root@$IP:/tmp/deployed_network.yaml -scp $SSH_OPT ${MY_TMP_DIR}/Standalone.yaml root@$IP:/tmp/Standalone.yaml -[[ "$EDPM_COMPUTE_CEPH_ENABLED" == "true" ]] && scp $SSH_OPT standalone/ceph.sh root@$IP:/tmp/ceph.sh -scp $SSH_OPT standalone/openstack.sh root@$IP:/tmp/openstack.sh -scp $SSH_OPT standalone/post_config/ironic.sh root@$IP:/tmp/ironic_post.sh +scp $SCP_OPT $SSH_OPT $REPO_SETUP_CMDS root@$SCP_IP:/tmp/repo-setup.sh +scp $SCP_OPT $SSH_OPT $CMDS_FILE root@$SCP_IP:/tmp/standalone-deploy.sh +scp $SCP_OPT $SSH_OPT ${MY_TMP_DIR}/net_config.yaml root@$SCP_IP:/tmp/net_config.yaml +scp $SCP_OPT $SSH_OPT ${MY_TMP_DIR}/network_data.yaml root@$SCP_IP:/tmp/network_data.yaml +scp $SCP_OPT $SSH_OPT ${MY_TMP_DIR}/deployed_network.yaml root@$SCP_IP:/tmp/deployed_network.yaml +scp $SCP_OPT $SSH_OPT ${MY_TMP_DIR}/Standalone.yaml root@$SCP_IP:/tmp/Standalone.yaml +[[ "$EDPM_COMPUTE_CEPH_ENABLED" == "true" ]] && scp $SCP_OPT $SSH_OPT ${MY_TMP_DIR}/ceph.sh root@$SCP_IP:/tmp/ceph.sh +scp $SCP_OPT $SSH_OPT ${MY_TMP_DIR}/openstack.sh root@$SCP_IP:/tmp/openstack.sh +scp $SCP_OPT $SSH_OPT standalone/post_config/ironic.sh root@$SCP_IP:/tmp/ironic_post.sh [ -f $HOME/.ssh/id_ecdsa.pub ] || \ ssh-keygen -t ecdsa -f $HOME/.ssh/id_ecdsa -q -N "" -scp $SSH_OPT $HOME/.ssh/id_ecdsa.pub root@$IP:/root/.ssh/id_ecdsa.pub +scp $SCP_OPT $SSH_OPT $HOME/.ssh/id_ecdsa.pub root@$SCP_IP:/root/.ssh/id_ecdsa.pub if [[ -f $HOME/containers-prepare-parameters.yaml ]]; then - scp $SSH_OPT $HOME/containers-prepare-parameters.yaml root@$IP:/root/containers-prepare-parameters.yaml + scp $SCP_OPT $SSH_OPT $HOME/containers-prepare-parameters.yaml root@$SCP_IP:/root/containers-prepare-parameters.yaml fi # Running diff --git a/devsetup/standalone/ceph.sh b/devsetup/standalone/ceph.j2 similarity index 98% rename from devsetup/standalone/ceph.sh rename to devsetup/standalone/ceph.j2 index 53d3275b..9ddb1953 100755 --- a/devsetup/standalone/ceph.sh +++ b/devsetup/standalone/ceph.j2 @@ -22,7 +22,7 @@ set -ex # Post adoption this network will remain isolated and the Ceph cluster may be considered external. # Assign the IP from vlan21 to a variable representing the Ceph IP -export CEPH_IP=${CEPH_IP:-"172.18.0.100"} +export CEPH_IP=${CEPH_IP:-"{{ storage_addr_prefix }}100"} # Create a block device with logical volumes to be used as an OSD. sudo dd if=/dev/zero of=/var/lib/ceph-osd.img bs=1 count=0 seek=7G diff --git a/devsetup/standalone/deployed_network.j2 b/devsetup/standalone/deployed_network.j2 index f3fa02b2..41f63f6f 100644 --- a/devsetup/standalone/deployed_network.j2 +++ b/devsetup/standalone/deployed_network.j2 @@ -15,25 +15,25 @@ parameter_defaults: ip_subnet: {{ ctlplane_subnet }} ip_address_uri: {{ ctlplane_ip }} storage: - ip_address: 172.18.0.{{ ip_address_suffix }} - ip_subnet: 172.18.0.1/24 - ip_address_uri: 172.18.0.{{ ip_address_suffix }} + ip_address: {{ storage_addr_prefix }}{{ ip_address_suffix }} + ip_subnet: {{ storage_addr_prefix }}1/{{ storage_cidr }} + ip_address_uri: {{ storage_addr_prefix }}{{ ip_address_suffix }} storage_mgmt: - ip_address: 172.20.0.{{ ip_address_suffix }} - ip_subnet: 172.20.0.1/24 - ip_address_uri: 172.20.0.{{ ip_address_suffix }} + ip_address: {{ storage_mgmt_addr_prefix }}{{ ip_address_suffix }} + ip_subnet: {{ storage_mgmt_addr_prefix }}1/{{ storage_mgmt_cidr }} + ip_address_uri: {{ storage_mgmt_addr_prefix }}{{ ip_address_suffix }} internal_api: - ip_address: 172.17.0.{{ ip_address_suffix }} - ip_subnet: 172.17.0.1/24 - ip_address_uri: 172.17.0.{{ ip_address_suffix }} + ip_address: {{ internal_addr_prefix }}{{ ip_address_suffix }} + ip_subnet: {{ internal_addr_prefix }}1/{{ internal_cidr }} + ip_address_uri: {{ internal_addr_prefix }}{{ ip_address_suffix }} tenant: - ip_address: 172.19.0.{{ ip_address_suffix }} - ip_subnet: 172.19.0.1/24 - ip_address_uri: 172.19.0.{{ ip_address_suffix }} + ip_address: {{ tenant_addr_prefix }}{{ ip_address_suffix }} + ip_subnet: {{ tenant_addr_prefix }}1/{{ tenant_cidr }} + ip_address_uri: {{ tenant_addr_prefix }}{{ ip_address_suffix }} external: - ip_address: 172.21.0.{{ ip_address_suffix }} - ip_subnet: 172.21.0.1/24 - ip_address_uri: 172.21.0.{{ ip_address_suffix }} + ip_address: {{ external_addr_prefix }}{{ ip_address_suffix }} + ip_subnet: {{ external_addr_prefix }}1/{{ external_cidr }} + ip_address_uri: {{ external_addr_prefix }}{{ ip_address_suffix }} {%- for network in additional_networks if network.standalone_config %} {%- set net = network.standalone_config %} {{ net.name.lower() }}: @@ -49,28 +49,28 @@ parameter_defaults: tags: - {{ ctlplane_subnet }} subnets: - - ip_version: 4 + - ip_version: {{ 6 if is_ipv6 else 4 }} VipPortMap: storage: - ip_address: 172.18.0.2 - ip_address_uri: 172.18.0.2 - ip_subnet: 172.18.0.2/24 + ip_address: {{ storage_addr_prefix }}2 + ip_address_uri: {{ storage_addr_prefix }}2 + ip_subnet: {{ storage_addr_prefix }}2/{{ storage_cidr }} storage_mgmt: - ip_address: 172.20.0.2 - ip_address_uri: 172.20.0.2 - ip_subnet: 172.20.0.2/24 + ip_address: {{ storage_mgmt_addr_prefix }}2 + ip_address_uri: {{ storage_mgmt_addr_prefix }}2 + ip_subnet: {{ storage_mgmt_addr_prefix }}2/{{ storage_mgmt_cidr }} internal_api: - ip_address: 172.17.0.2 - ip_address_uri: 172.17.0.2 - ip_subnet: 172.17.0.2/24 + ip_address: {{ internal_addr_prefix }}2 + ip_address_uri: {{ internal_addr_prefix }}2 + ip_subnet: {{ internal_addr_prefix }}2/{{ internal_cidr }} # tenant: - # ip_address: 172.19.0.2 - # ip_address_uri: 172.19.0.2 - # ip_subnet: 172.19.0.2/24 + # ip_address: {{ tenant_addr_prefix }}2 + # ip_address_uri: {{ tenant_addr_prefix }}2 + # ip_subnet: {{ tenant_addr_prefix }}2/{{ tenant_cidr }} external: - ip_address: 172.21.0.2 - ip_address_uri: 172.21.0.2 - ip_subnet: 172.21.0.2/24 + ip_address: {{ external_addr_prefix }}2 + ip_address_uri: {{ external_addr_prefix }}2 + ip_subnet: {{ external_addr_prefix }}2/{{ external_cidr }} {%- for network in additional_networks if network.standalone_config and network.standalone_config.vip %} {%- set net = network.standalone_config %} {{ net.name.lower() }}: @@ -81,29 +81,29 @@ parameter_defaults: DeployedNetworkEnvironment: net_cidr_map: storage: - - 172.18.0.0/24 + - {{ storage_addr_prefix }}0/{{ storage_cidr }} storage_mgmt: - - 172.20.0.0/24 + - {{ storage_mgmt_addr_prefix }}0/{{ storage_mgmt_cidr }} internal_api: - - 172.17.0.0/24 + - {{ internal_addr_prefix }}0/{{ internal_cidr }} tenant: - - 172.19.0.0/24 + - {{ tenant_addr_prefix }}0/{{ tenant_cidr }} external: - - 172.21.0.0/24 + - {{ external_addr_prefix }}0/{{ external_cidr }} {%- for network in additional_networks if network.standalone_config %} {%- set net = network.standalone_config %} {{ net.name.lower() }}: - {{ net.ip_subnet }} {%- endfor %} net_ip_version_map: - storage: 4 - storage_mgmt: 4 - internal_api: 4 - tenant: 4 - external: 4 + storage: {{ 6 if is_ipv6 else 4 }} + storage_mgmt: {{ 6 if is_ipv6 else 4 }} + internal_api: {{ 6 if is_ipv6 else 4 }} + tenant: {{ 6 if is_ipv6 else 4 }} + external: {{ 6 if is_ipv6 else 4 }} {%- for network in additional_networks if network.standalone_config %} {%- set net = network.standalone_config %} - {{ net.name.lower() }}: 4 + {{ net.name.lower() }}: {{ 6 if is_ipv6 else 4 }} {%- endfor %} net_attributes_map: storage: @@ -118,11 +118,11 @@ parameter_defaults: - tripleo_vip=true subnets: storage_subnet: - cidr: 172.18.0.0/24 + cidr: {{ storage_addr_prefix }}0/{{ storage_cidr }} dns_nameservers: [] gateway_ip: null host_routes: [] - ip_version: 4 + ip_version: {{ 6 if is_ipv6 else 4 }} name: storage_subnet storage_mgmt: network: @@ -136,11 +136,11 @@ parameter_defaults: - tripleo_vip=true subnets: storage_mgmt_subnet: - cidr: 172.20.0.0/24 + cidr: {{ storage_mgmt_addr_prefix }}0/{{ storage_mgmt_cidr }} dns_nameservers: [] gateway_ip: null host_routes: [] - ip_version: 4 + ip_version: {{ 6 if is_ipv6 else 4 }} name: storage_mgmt_subnet internal_api: network: @@ -154,11 +154,11 @@ parameter_defaults: - tripleo_vip=true subnets: internal_api_subnet: - cidr: 172.17.0.0/24 + cidr: {{ internal_addr_prefix }}0/{{ internal_cidr }} dns_nameservers: [] gateway_ip: null host_routes: [] - ip_version: 4 + ip_version: {{ 6 if is_ipv6 else 4 }} name: internal_api_subnet tenant: network: @@ -172,11 +172,11 @@ parameter_defaults: - tripleo_vip=false subnets: tenant_subnet: - cidr: 172.19.0.0/24 + cidr: {{ tenant_addr_prefix }}0/{{ tenant_cidr }} dns_nameservers: [] gateway_ip: null host_routes: [] - ip_version: 4 + ip_version: {{ 6 if is_ipv6 else 4 }} name: tenant_subnet external: network: @@ -190,11 +190,11 @@ parameter_defaults: - tripleo_vip=true subnets: external_subnet: - cidr: 172.21.0.0/24 + cidr: {{ external_addr_prefix }}0/{{ external_cidr }} dns_nameservers: [] gateway_ip: null host_routes: [] - ip_version: 4 + ip_version: {{ 6 if is_ipv6 else 4 }} name: external_subnet {%- for network in additional_networks if network.standalone_config %} {%- set net = network.standalone_config %} @@ -213,6 +213,6 @@ parameter_defaults: dns_nameservers: {{ net.dns_nameservers | default([]) }} gateway_ip: {{ net.gateway_ip | default('null') }} host_routes: {{ net.host_routes | default([]) }} - ip_version: 4 + ip_version: {{ 6 if is_ipv6 else 4 }} name: {{ net.name.lower() }}_subnet {%- endfor %} diff --git a/devsetup/standalone/net_config.j2 b/devsetup/standalone/net_config.j2 index 4062b6b4..2ce39d0e 100644 --- a/devsetup/standalone/net_config.j2 +++ b/devsetup/standalone/net_config.j2 @@ -16,7 +16,7 @@ network_config: - ip_netmask: {{ ctlplane_vip }}/32 {% if standalone_vm|default(true) %} routes: - - ip_netmask: 0.0.0.0/0 + - ip_netmask: {{ ip_net_mask }}/0 next_hop: {{ gateway_ip }} {%- for route in additional_host_routes %} - ip_netmask: {{ route }} @@ -34,39 +34,39 @@ network_config: mtu: {{ interface_mtu }} vlan_id: 44 addresses: - - ip_netmask: 172.21.0.{{ ip_address_suffix }}/24 - - ip_netmask: 172.21.0.2/32 + - ip_netmask: {{ external_addr_prefix }}{{ ip_address_suffix }}/{{ external_cidr }} + - ip_netmask: {{ external_addr_prefix }}2/{{ 128 if is_ipv6 else 32 }} routes: [] # internal - type: vlan mtu: {{ interface_mtu }} vlan_id: 20 addresses: - - ip_netmask: 172.17.0.{{ ip_address_suffix }}/24 - - ip_netmask: 172.17.0.2/32 + - ip_netmask: {{ internal_addr_prefix }}{{ ip_address_suffix }}/{{ internal_cidr }} + - ip_netmask: {{ internal_addr_prefix }}2/{{ 128 if is_ipv6 else 32 }} routes: [] # storage - type: vlan mtu: {{ interface_mtu }} vlan_id: 21 addresses: - - ip_netmask: 172.18.0.{{ ip_address_suffix }}/24 - - ip_netmask: 172.18.0.2/32 + - ip_netmask: {{ storage_addr_prefix }}{{ ip_address_suffix }}/{{ storage_cidr }} + - ip_netmask: {{ storage_addr_prefix }}2/{{ 128 if is_ipv6 else 32 }} routes: [] # storage_mgmt - type: vlan mtu: {{ interface_mtu }} vlan_id: 23 addresses: - - ip_netmask: 172.20.0.{{ ip_address_suffix }}/24 - - ip_netmask: 172.20.0.2/32 + - ip_netmask: {{ storage_mgmt_addr_prefix }}{{ ip_address_suffix }}/{{ storage_mgmt_cidr }} + - ip_netmask: {{ storage_mgmt_addr_prefix}}2/{{ 128 if is_ipv6 else 32 }} routes: [] # tenant - type: vlan mtu: {{ interface_mtu }} vlan_id: 22 addresses: - - ip_netmask: 172.19.0.{{ ip_address_suffix }}/24 + - ip_netmask: {{ tenant_addr_prefix }}{{ ip_address_suffix }}/{{ tenant_cidr }} routes: [] {%- for network in additional_networks if network.standalone_config %} {%- set net = network.standalone_config %} diff --git a/devsetup/standalone/network_data.j2 b/devsetup/standalone/network_data.j2 index 5c3b9e92..226606dc 100644 --- a/devsetup/standalone/network_data.j2 +++ b/devsetup/standalone/network_data.j2 @@ -1,63 +1,103 @@ - name: Storage mtu: 1500 vip: true - vlan: 21 + {% if is_ipv6 %} + ipv6: true + {% endif %} name_lower: storage dns_domain: storage.mydomain.tld. service_net_map_replace: storage subnets: storage_subnet: - ip_subnet: '172.18.0.0/24' - allocation_pools: [{'start': '172.18.0.4', 'end': '172.18.0.250'}] + {% if is_ipv6 %} + ipv6_subnet: '{{ storage_addr_prefix }}0/{{ storage_cidr }}' + ipv6_allocation_pools: [{'start': '{{ storage_addr_prefix }}4', 'end': '{{ storage_addr_prefix }}150'}] + {%- else %} + ip_subnet: '{{ storage_addr_prefix }}0/{{ storage_cidr }}' + allocation_pools: [{'start': '{{ storage_addr_prefix }}4', 'end': '{{ storage_addr_prefix }}150'}] + {% endif %} - name: StorageMgmt mtu: 1500 vip: true + {% if is_ipv6 %} + ipv6: true + {% endif %} vlan: 23 name_lower: storage_mgmt dns_domain: storagemgmt.mydomain.tld. service_net_map_replace: storage_mgmt subnets: storage_mgmt_subnet: - ip_subnet: '172.20.0.0/24' - allocation_pools: [{'start': '172.20.0.4', 'end': '172.20.0.250'}] + {% if is_ipv6 %} + ipv6_subnet: '{{ storage_mgmt_addr_prefix }}0/{{ storage_mgmt_cidr }}' + ipv6_allocation_pools: [{'start': '{{ storage_mgmt_addr_prefix }}4', 'end': '{{ storage_mgmt_addr_prefix }}250'}] + {%- else %} + ip_subnet: '{{ storage_mgmt_addr_prefix }}0/{{ storage_mgmt_cidr }}' + allocation_pools: [{'start': '{{ storage_mgmt_addr_prefix }}4', 'end': '{{ storage_mgmt_addr_prefix }}250'}] + {% endif %} - name: InternalApi mtu: 1500 vip: true + {% if is_ipv6 %} + ipv6: true + {% endif %} vlan: 20 name_lower: internal_api dns_domain: internal-api.mydomain.tld. service_net_map_replace: internal_api subnets: internal_api_subnet: - ip_subnet: '172.17.0.0/24' - allocation_pools: [{'start': '172.17.0.4', 'end': '172.17.0.250'}] + {% if is_ipv6 %} + ipv6_subnet: '{{ internal_addr_prefix }}0/{{ internal_cidr }}' + ipv6_allocation_pools: [{'start': '{{ internal_addr_prefix }}4', 'end': '{{ internal_addr_prefix }}250'}] + {%- else %} + ip_subnet: '{{ internal_addr_prefix }}0/{{ internal_cidr }}' + allocation_pools: [{'start': '{{ internal_addr_prefix }}4', 'end': '{{ internal_addr_prefix }}250'}] + {% endif %} - name: Tenant mtu: 1500 vip: false # Tenant network does not use VIPs + {% if is_ipv6 %} + ipv6: true + {% endif %} vlan: 22 name_lower: tenant dns_domain: tenant.mydomain.tld. service_net_map_replace: tenant subnets: tenant_subnet: - ip_subnet: '172.19.0.0/24' - allocation_pools: [{'start': '172.19.0.4', 'end': '172.19.0.250'}] + {% if is_ipv6 %} + ipv6_subnet: '{{ tenant_addr_prefix }}0/{{ tenant_cidr }}' + ipv6_allocation_pools: [{'start': '{{ tenant_addr_prefix }}4', 'end': '{{ tenant_addr_prefix }}250'}] + {%- else %} + ip_subnet: '{{ tenant_addr_prefix }}0/{{ tenant_cidr }}' + allocation_pools: [{'start': '{{ internal_addr_prefix }}4', 'end': '{{ internal_addr_prefix }}250'}] + {% endif %} - name: External mtu: 1500 vip: true - vlan: 44 + {% if is_ipv6 %} + ipv6: true + {% else %} gateway_ip: '172.21.0.1' + {% endif %} + vlan: 44 name_lower: external dns_domain: external.mydomain.tld. service_net_map_replace: external subnets: external_subnet: - ip_subnet: '172.21.0.0/24' - allocation_pools: [{'start': '172.21.0.4', 'end': '172.21.0.250'}] + {% if is_ipv6 %} + ipv6_subnet: '{{ external_addr_prefix }}0/{{ external_cidr }}' + ipv6_allocation_pools: [{'start': '{{ external_addr_prefix }}4', 'end': '{{ external_addr_prefix }}250'}] + {%- else %} + ip_subnet: '{{ external_addr_prefix }}0/{{ external_cidr }}' + allocation_pools: [{'start': '{{ external_addr_prefix }}4', 'end': '{{ external_addr_prefix }}250'}] + {% endif %} {% for network in additional_networks if network.standalone_config -%} {%- set net = network.standalone_config -%} diff --git a/devsetup/standalone/openstack.sh b/devsetup/standalone/openstack.j2 similarity index 98% rename from devsetup/standalone/openstack.sh rename to devsetup/standalone/openstack.j2 index 9bd57541..2da31910 100755 --- a/devsetup/standalone/openstack.sh +++ b/devsetup/standalone/openstack.j2 @@ -32,10 +32,10 @@ OCTAVIA_ENABLED=${OCTAVIA_ENABLED:-false} # The deployed_network.yaml file hard codes the IPs and VIPs configured from the network.sh export NEUTRON_INTERFACE=eth0 -export CTLPLANE_IP=${IP:-192.168.122.100} -export CTLPLANE_VIP=${CTLPLANE_IP%.*}.99 -export CIDR=24 -export GATEWAY=${GATEWAY:-192.168.122.1} +export CTLPLANE_IP=${IP:-{{ ctlplane_ip }}} +export CTLPLANE_VIP={{ ctlplane_vip }} +export CIDR={{ ctlplane_cidr }} +export GATEWAY=${GATEWAY:-{{ gateway_ip }}} export BRIDGE="br-ctlplane" if [ "$COMPUTE_DRIVER" = "ironic" ]; then BRIDGE_MAPPINGS=${BRIDGE_MAPPINGS:-"datacentre:${BRIDGE},baremetal:br-baremetal"}