Merge "network validation to ping test each interface"
This commit is contained in:
commit
d65027bd4a
27
all-nodes-validation.yaml
Normal file
27
all-nodes-validation.yaml
Normal file
@ -0,0 +1,27 @@
|
||||
heat_template_version: 2015-04-30
|
||||
|
||||
description: >
|
||||
Software Config to drive validations that occur on all nodes.
|
||||
Note, you need the heat-config-script element built into your
|
||||
images, due to the script group below.
|
||||
|
||||
parameters:
|
||||
PingTestIps:
|
||||
default: ''
|
||||
description: A string containing a space separated list of IP addresses used to ping test each available network interface.
|
||||
type: string
|
||||
|
||||
resources:
|
||||
AllNodesValidationsImpl:
|
||||
type: OS::Heat::SoftwareConfig
|
||||
properties:
|
||||
group: script
|
||||
inputs:
|
||||
- name: ping_test_ips
|
||||
default: {get_param: PingTestIps}
|
||||
config: {get_file: ./validation-scripts/all-nodes.sh}
|
||||
|
||||
outputs:
|
||||
OS::stack_id:
|
||||
description: The ID of the AllNodesValidationsImpl resource.
|
||||
value: {get_resource: AllNodesValidationsImpl}
|
@ -80,5 +80,8 @@ resource_registry:
|
||||
# Port assignments for service virtual IPs for the controller role
|
||||
OS::TripleO::Controller::Ports::RedisVipPort: network/ports/ctlplane_vip.yaml
|
||||
|
||||
# validation resources
|
||||
OS::TripleO::AllNodes::Validation: all-nodes-validation.yaml
|
||||
|
||||
parameter_defaults:
|
||||
EnablePackageInstall: false
|
||||
|
@ -65,3 +65,6 @@ resource_registry:
|
||||
|
||||
# Port assignments for service virtual IPs for the controller role
|
||||
OS::TripleO::Controller::Ports::RedisVipPort: network/ports/noop.yaml
|
||||
|
||||
# validation resources
|
||||
OS::TripleO::AllNodes::Validation: all-nodes-validation.yaml
|
||||
|
@ -1253,6 +1253,54 @@ resources:
|
||||
config: {get_attr: [allNodesConfig, config_id]}
|
||||
servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
|
||||
|
||||
# All Nodes Validations
|
||||
AllNodesValidationConfig:
|
||||
type: OS::TripleO::AllNodes::Validation
|
||||
properties:
|
||||
PingTestIps:
|
||||
list_join:
|
||||
- ' '
|
||||
- - {get_attr: [Controller, resource.0.external_ip_address]}
|
||||
- {get_attr: [Controller, resource.0.internal_api_ip_address]}
|
||||
- {get_attr: [Controller, resource.0.storage_ip_address]}
|
||||
- {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
|
||||
- {get_attr: [Controller, resource.0.tenant_ip_address]}
|
||||
|
||||
ControllerAllNodesValidationDeployment:
|
||||
type: OS::Heat::StructuredDeployments
|
||||
depends_on: ControllerAllNodesDeployment
|
||||
properties:
|
||||
config: {get_resource: AllNodesValidationConfig}
|
||||
servers: {get_attr: [Controller, attributes, nova_server_resource]}
|
||||
|
||||
ComputeAllNodesValidationDeployment:
|
||||
type: OS::Heat::StructuredDeployments
|
||||
depends_on: ComputeAllNodesDeployment
|
||||
properties:
|
||||
config: {get_resource: AllNodesValidationConfig}
|
||||
servers: {get_attr: [Compute, attributes, nova_server_resource]}
|
||||
|
||||
BlockStorageAllNodesValidationDeployment:
|
||||
type: OS::Heat::StructuredDeployments
|
||||
depends_on: BlockStorageAllNodesDeployment
|
||||
properties:
|
||||
config: {get_resource: AllNodesValidationConfig}
|
||||
servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
|
||||
|
||||
ObjectStorageAllNodesValidationDeployment:
|
||||
type: OS::Heat::StructuredDeployments
|
||||
depends_on: ObjectStorageAllNodesDeployment
|
||||
properties:
|
||||
config: {get_resource: AllNodesValidationConfig}
|
||||
servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
|
||||
|
||||
CephStorageAllNodesValidationDeployment:
|
||||
type: OS::Heat::StructuredDeployments
|
||||
depends_on: CephStorageAllNodesDeployment
|
||||
properties:
|
||||
config: {get_resource: AllNodesValidationConfig}
|
||||
servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
|
||||
|
||||
# Nested stack deployment runs after all other controller deployments
|
||||
ControllerNodesPostDeployment:
|
||||
type: OS::TripleO::ControllerPostDeployment
|
||||
|
29
validation-scripts/all-nodes.sh
Normal file
29
validation-scripts/all-nodes.sh
Normal file
@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
# For each unique remote IP (specified via Heat) we check to
|
||||
# see if one of the locally configured networks matches and if so we
|
||||
# attempt a ping test on that networks remote IP.
|
||||
function ping_controller_ips() {
|
||||
local REMOTE_IPS=$1
|
||||
|
||||
for REMOTE_IP in $(echo $REMOTE_IPS | sed -e "s| |\n|g" | sort -u); do
|
||||
|
||||
for LOCAL_NETWORK in $(ip r | grep -v default | cut -d " " -f 1); do
|
||||
local LOCAL_CIDR=$(echo $LOCAL_NETWORK | cut -d "/" -f 2)
|
||||
local LOCAL_NETMASK=$(ipcalc -m $LOCAL_NETWORK | grep NETMASK | cut -d "=" -f 2)
|
||||
local REMOTE_NETWORK=$(ipcalc -np $REMOTE_IP $LOCAL_NETMASK | grep NETWORK | cut -d "=" -f 2)
|
||||
|
||||
if [ $REMOTE_NETWORK/$LOCAL_CIDR == $LOCAL_NETWORK ]; then
|
||||
echo -n "Trying to ping $REMOTE_IP for local network $LOCAL_NETWORK..."
|
||||
if ! ping -c 1 $REMOTE_IP &> /dev/null; then
|
||||
echo "FAILURE"
|
||||
echo "$REMOTE_IP is not pingable. Local Network: $LOCAL_NETWORK" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "SUCCESS"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
ping_controller_ips "$ping_test_ips"
|
Loading…
x
Reference in New Issue
Block a user