tripleo-common/workbooks/validations.yaml
Dmitry Tantsur 28fe746bfe Do not try to validate nodes that are not available
* Do not validate boot_option and images for unavailable nodes
* Do not count unavailable nodes as available when calculating
  node counts.

Change-Id: I1953384c42763964f4a3456a6d560a89a919f88b
2017-06-15 15:42:20 +02:00

775 lines
25 KiB
YAML

---
version: '2.0'
name: tripleo.validations.v1
description: TripleO Validations Workflows v1
workflows:
run_validation:
input:
- validation_name
- plan: overcloud
- queue_name: tripleo
tasks:
notify_running:
on-complete: run_validation
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.run_validation
payload:
validation_name: <% $.validation_name %>
plan: <% $.plan %>
status: RUNNING
execution: <% execution() %>
run_validation:
on-success: send_message
on-error: set_status_failed
action: tripleo.validations.run_validation validation=<% $.validation_name %> plan=<% $.plan %>
publish:
status: SUCCESS
stdout: <% task(run_validation).result.stdout %>
stderr: <% task(run_validation).result.stderr %>
set_status_failed:
on-complete: send_message
publish:
status: FAILED
stdout: <% task(run_validation).result.stdout %>
stderr: <% task(run_validation).result.stderr %>
send_message:
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.run_validation
payload:
validation_name: <% $.validation_name %>
plan: <% $.plan %>
status: <% $.get('status', 'SUCCESS') %>
stdout: <% $.stdout %>
stderr: <% $.stderr %>
execution: <% execution() %>
on-success:
- fail: <% $.get('status') = "FAILED" %>
run_validations:
input:
- validation_names: []
- plan: overcloud
- queue_name: tripleo
tasks:
notify_running:
on-complete: run_validations
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.run_validations
payload:
validation_names: <% $.validation_names %>
plan: <% $.plan %>
status: RUNNING
execution: <% execution() %>
run_validations:
on-success: send_message
on-error: set_status_failed
workflow: tripleo.validations.v1.run_validation validation_name=<% $.validation %> plan=<% $.plan %> queue_name=<% $.queue_name %>
with-items: validation in <% $.validation_names %>
publish:
status: SUCCESS
set_status_failed:
on-complete: send_message
publish:
status: FAILED
send_message:
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.run_validations
payload:
validation_names: <% $.validation_names %>
plan: <% $.plan %>
status: <% $.get('status', 'SUCCESS') %>
execution: <% execution() %>
on-success:
- fail: <% $.get('status') = "FAILED" %>
run_groups:
input:
- group_names: []
- plan: overcloud
- queue_name: tripleo
tasks:
find_validations:
on-success: notify_running
action: tripleo.validations.list_validations groups=<% $.group_names %>
publish:
validations: <% task(find_validations).result %>
notify_running:
on-complete: run_validation_group
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.run_validations
payload:
group_names: <% $.group_names %>
validation_names: <% $.validations.id %>
plan: <% $.plan %>
status: RUNNING
execution: <% execution() %>
run_validation_group:
on-success: send_message
on-error: set_status_failed
workflow: tripleo.validations.v1.run_validation validation_name=<% $.validation %> plan=<% $.plan %> queue_name=<% $.queue_name %>
with-items: validation in <% $.validations.id %>
publish:
status: SUCCESS
set_status_failed:
on-complete: send_message
publish:
status: FAILED
send_message:
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.run_groups
payload:
group_names: <% $.group_names %>
validation_names: <% $.validations.id %>
plan: <% $.plan %>
status: <% $.get('status', 'SUCCESS') %>
execution: <% execution() %>
on-success:
- fail: <% $.get('status') = "FAILED" %>
list:
input:
- group_names: []
tasks:
find_validations:
action: tripleo.validations.list_validations groups=<% $.group_names %>
list_groups:
tasks:
find_groups:
action: tripleo.validations.list_groups
add_validation_ssh_key_parameter:
input:
- container
- queue_name: tripleo
tasks:
test_validations_enabled:
action: tripleo.validations.enabled
on-success: get_pubkey
on-error: unset_validation_key_parameter
get_pubkey:
action: tripleo.validations.get_pubkey
on-success: set_validation_key_parameter
publish:
pubkey: <% task(get_pubkey).result %>
set_validation_key_parameter:
action: tripleo.parameters.update
input:
parameters:
node_admin_extra_ssh_keys: <% $.pubkey %>
container: <% $.container %>
# NOTE(shadower): We need to clear keys from a previous deployment
unset_validation_key_parameter:
action: tripleo.parameters.update
input:
parameters:
node_admin_extra_ssh_keys: ""
container: <% $.container %>
copy_ssh_key:
input:
- overcloud_admin: heat-admin
- queue_name: tripleo
tasks:
get_servers:
action: nova.servers_list
on-success: get_pubkey
publish:
servers: <% task(get_servers).result._info %>
get_pubkey:
action: tripleo.validations.get_pubkey
on-success: deploy_ssh_key
publish:
pubkey: <% task(get_pubkey).result %>
deploy_ssh_key:
workflow: tripleo.deployment.v1.deploy_on_server
with-items: server in <% $.servers %>
input:
server_name: <% $.server.name %>
server_uuid: <% $.server.id %>
config: |
#!/bin/bash
if ! grep "<% $.pubkey %>" /home/<% $.overcloud_admin %>/.ssh/authorized_keys; then
echo "<% $.pubkey %>" >> /home/<% $.overcloud_admin %>/.ssh/authorized_keys
fi
config_name: copy_ssh_key
group: script
queue_name: <% $.queue_name %>
check_boot_images:
input:
- deploy_kernel_name: 'bm-deploy-kernel'
- deploy_ramdisk_name: 'bm-deploy-ramdisk'
- run_validations: true
- queue_name: tripleo
output:
errors: <% $.errors %>
warnings: <% $.warnings %>
kernel_id: <% $.kernel_id %>
ramdisk_id: <% $.ramdisk_id %>
tasks:
check_run_validations:
on-complete:
- get_images: <% $.run_validations %>
- send_message: <% not $.run_validations %>
get_images:
action: glance.images_list
on-success: check_images
publish:
images: <% task(get_images).result %>
check_images:
action: tripleo.validations.check_boot_images
input:
images: <% $.images %>
deploy_kernel_name: <% $.deploy_kernel_name %>
deploy_ramdisk_name: <% $.deploy_ramdisk_name %>
on-success: send_message
on-error: fail_check_images
publish:
kernel_id: <% task(check_images).result.kernel_id %>
ramdisk_id: <% task(check_images).result.ramdisk_id %>
warnings: <% task(check_images).result.warnings %>
errors: <% task(check_images).result.errors %>
publish-on-error:
kernel_id: <% task(check_images).result.kernel_id %>
ramdisk_id: <% task(check_images).result.ramdisk_id %>
warnings: <% task(check_images).result.warnings %>
errors: <% task(check_images).result.errors %>
fail_check_images:
on-success: send_message
publish:
status: FAILED
message: <% task(check_images).result %>
send_message:
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.check_boot_images
payload:
status: <% $.get('status', 'SUCCESS') %>
message: <% $.get('message', '') %>
execution: <% execution() %>
kernel_id: <% $.kernel_id %>
ramdisk_id: <% $.ramdisk_id %>
errors: <% $.errors %>
warnings: <% $.warnings %>
on-success:
- fail: <% $.get('status') = "FAILED" %>
collect_flavors:
input:
- roles_info: {}
- run_validations: true
- queue_name: tripleo
output:
errors: <% $.errors %>
warnings: <% $.warnings %>
flavors: <% $.flavors %>
tasks:
check_run_validations:
on-complete:
- check_flavors: <% $.run_validations %>
- send_message: <% not $.run_validations %>
check_flavors:
action: tripleo.validations.check_flavors
input:
roles_info: <% $.roles_info %>
on-success: send_message
on-error: fail_check_flavors
publish:
flavors: <% task(check_flavors).result.flavors %>
errors: <% task(check_flavors).result.errors %>
warnings: <% task(check_flavors).result.warnings %>
publish-on-error:
flavors: {}
errors: <% task(check_flavors).result.errors %>
warnings: <% task(check_flavors).result.warnings %>
fail_check_flavors:
on-success: send_message
publish:
status: FAILED
message: <% task(check_flavors).result %>
send_message:
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.collect_flavors
payload:
status: <% $.get('status', 'SUCCESS') %>
message: <% $.get('message', '') %>
execution: <% execution() %>
flavors: <% $.flavors %>
errors: <% $.errors %>
warnings: <% $.warnings %>
on-success:
- fail: <% $.get('status') = "FAILED" %>
check_ironic_boot_configuration:
input:
- kernel_id: null
- ramdisk_id: null
- run_validations: true
- queue_name: tripleo
output:
errors: <% $.errors %>
warnings: <% $.warnings %>
tasks:
check_run_validations:
on-complete:
- get_ironic_nodes: <% $.run_validations %>
- send_message: <% not $.run_validations %>
get_ironic_nodes:
action: ironic.node_list
on-success: check_node_boot_configuration
on-error: failed_get_ironic_nodes
input:
provision_state: available
maintenance: false
detail: true
publish:
nodes: <% task(get_ironic_nodes).result %>
failed_get_ironic_nodes:
on-success: send_message
publish:
status: FAILED
message: <% task(get_ironic_nodes).result %>
check_node_boot_configuration:
action: tripleo.validations.check_node_boot_configuration
input:
node: <% $.node %>
kernel_id: <% $.kernel_id %>
ramdisk_id: <% $.ramdisk_id %>
with-items: node in <% $.nodes %>
on-success: send_message
on-error: fail_check_node_boot_configuration
publish:
errors: <% task(check_node_boot_configuration).result.errors.flatten() %>
warnings: <% task(check_node_boot_configuration).result.warnings.flatten() %>
publish-on-error:
errors: <% task(check_node_boot_configuration).result.errors.flatten() %>
warnings: <% task(check_node_boot_configuration).result.warnings.flatten() %>
fail_check_node_boot_configuration:
on-success: send_message
publish:
status: FAILED
message: <% task(check_node_boot_configuration).result %>
send_message:
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.check_ironic_boot_configuration
payload:
status: <% $.get('status', 'SUCCESS') %>
message: <% $.get('message', '') %>
execution: <% execution() %>
errors: <% $.errors %>
warnings: <% $.warnings %>
on-success:
- fail: <% $.get('status') = "FAILED" %>
verify_profiles:
input:
- flavors: []
- run_validations: true
- queue_name: tripleo
output:
errors: <% $.errors %>
warnings: <% $.warnings %>
tasks:
check_run_validations:
on-complete:
- get_ironic_nodes: <% $.run_validations %>
- send_message: <% not $.run_validations %>
get_ironic_nodes:
action: ironic.node_list
on-success: verify_profiles
on-error: failed_get_ironic_nodes
input:
maintenance: false
detail: true
publish:
nodes: <% task(get_ironic_nodes).result %>
failed_get_ironic_nodes:
on-success: send_message
publish:
status: FAILED
message: <% task(get_ironic_nodes).result %>
verify_profiles:
action: tripleo.validations.verify_profiles
input:
nodes: <% $.nodes %>
flavors: <% $.flavors %>
on-success: send_message
on-error: fail_verify_profiles
publish:
errors: <% task(verify_profiles).result.errors %>
warnings: <% task(verify_profiles).result.warnings %>
publish-on-error:
errors: <% task(verify_profiles).result.errors %>
warnings: <% task(verify_profiles).result.warnings %>
fail_verify_profiles:
on-success: send_message
publish:
status: Failed
message: <% task(verify_profiles).result %>
send_message:
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.verify_profiles
payload:
status: <% $.get('status', 'SUCCESS') %>
message: <% $.get('message', '') %>
execution: <% execution() %>
errors: <% $.errors %>
warnings: <% $.warnings %>
on-success:
- fail: <% $.get('status') = "FAILED" %>
check_default_nodes_count:
input:
- stack_id: overcloud
- parameters: {}
- default_role_counts: {}
- run_validations: true
- queue_name: tripleo
output:
statistics: <% $.statistics %>
errors: <% $.errors %>
warnings: <% $.warnings %>
tasks:
check_run_validations:
on-complete:
- get_hypervisor_statistics: <% $.run_validations %>
- send_message: <% not $.run_validations %>
get_hypervisor_statistics:
action: nova.hypervisors_statistics
on-success: get_stack
on-error: fail_get_hypervisor_statistics
publish:
statistics: <% task(get_hypervisor_statistics).result %>
fail_get_hypervisor_statistics:
on-success: send_message
publish:
status: FAILED
message: <% task(get_hypervisor_statistics).result %>
errors: []
warnings: []
statistics: null
get_stack:
action: heat.stacks_get
input:
stack_id: <% $.stack_id %>
on-success: get_associated_nodes
on-error: get_associated_nodes
publish:
stack: <% task(get_stack).result %>
publish-on-error:
stack: null
get_associated_nodes:
action: ironic.node_list
on-success: get_available_nodes
on-error: fail_get_associated_nodes
input:
associated: true
publish:
associated_nodes: <% task(get_associated_nodes).result %>
fail_get_associated_nodes:
on-success: send_message
publish:
status: FAILED
message: <% task(get_associated_nodes).result %>
errors: []
warnings: []
get_available_nodes:
action: ironic.node_list
on-success: check_nodes_count
on-error: fail_get_available_nodes
input:
provision_state: available
associated: false
maintenance: false
publish:
available_nodes: <% task(get_available_nodes).result %>
fail_get_available_nodes:
on-success: send_message
publish:
status: FAILED
message: <% task(get_available_nodes).result %>
errors: []
warnings: []
check_nodes_count:
action: tripleo.validations.check_nodes_count
input:
statistics: <% $.statistics %>
stack: <% $.stack %>
associated_nodes: <% $.associated_nodes %>
available_nodes: <% $.available_nodes %>
parameters: <% $.parameters %>
default_role_counts: <% $.default_role_counts %>
on-success: send_message
on-error: fail_check_nodes_count
publish:
errors: <% task(check_nodes_count).result.errors %>
warnings: <% task(check_nodes_count).result.warnings %>
fail_check_nodes_count:
on-success: send_message
publish:
status: FAILED
message: <% task(check_nodes_count).result %>
statistics: null
errors: <% task(check_nodes_count).result.errors %>
warnings: <% task(check_nodes_count).result.warnings %>
send_message:
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.check_hypervisor_stats
payload:
status: <% $.get('status', 'SUCCESS') %>
message: <% $.get('message', '') %>
execution: <% execution() %>
statistics: <% $.statistics %>
errors: <% $.errors %>
warnings: <% $.warnings %>
on-success:
- fail: <% $.get('status') = "FAILED" %>
check_pre_deployment_validations:
input:
- deploy_kernel_name: 'bm-deploy-kernel'
- deploy_ramdisk_name: 'bm-deploy-ramdisk'
- roles_info: {}
- stack_id: overcloud
- parameters: {}
- default_role_counts: {}
- run_validations: true
- queue_name: tripleo
output:
errors: <% $.errors %>
warnings: <% $.warnings %>
kernel_id: <% $.kernel_id %>
ramdisk_id: <% $.ramdisk_id %>
flavors: <% $.flavors %>
statistics: <% $.statistics %>
tasks:
init_messages:
on-success: check_boot_images
publish:
errors: []
warnings: []
check_boot_images:
workflow: check_boot_images
input:
deploy_kernel_name: <% $.deploy_kernel_name %>
deploy_ramdisk_name: <% $.deploy_ramdisk_name %>
run_validations: <% $.run_validations %>
queue_name: <% $.queue_name %>
publish:
errors: <% $.errors + task(check_boot_images).result.errors %>
warnings: <% $.warnings + task(check_boot_images).result.warnings %>
kernel_id: <% task(check_boot_images).result.kernel_id %>
ramdisk_id: <% task(check_boot_images).result.ramdisk_id %>
publish-on-error:
errors: <% $.errors + task(check_boot_images).result.errors %>
warnings: <% $.warnings + task(check_boot_images).result.warnings %>
kernel_id: <% task(check_boot_images).result.kernel_id %>
ramdisk_id: <% task(check_boot_images).result.ramdisk_id %>
status: FAILED
on-success: collect_flavors
on-error: collect_flavors
collect_flavors:
workflow: collect_flavors
input:
roles_info: <% $.roles_info %>
run_validations: <% $.run_validations %>
queue_name: <% $.queue_name %>
publish:
errors: <% $.errors + task(collect_flavors).result.errors %>
warnings: <% $.warnings + task(collect_flavors).result.warnings %>
flavors: <% task(collect_flavors).result.flavors %>
publish-on-error:
errors: <% $.errors + task(collect_flavors).result.errors %>
warnings: <% $.warnings + task(collect_flavors).result.warnings %>
flavors: <% task(collect_flavors).result.flavors %>
status: FAILED
on-success: check_ironic_boot_configuration
on-error: check_ironic_boot_configuration
check_ironic_boot_configuration:
workflow: check_ironic_boot_configuration
input:
kernel_id: <% $.kernel_id %>
ramdisk_id: <% $.ramdisk_id %>
run_validations: <% $.run_validations %>
queue_name: <% $.queue_name %>
publish:
errors: <% $.errors + task(check_ironic_boot_configuration).result.errors %>
warnings: <% $.warnings + task(check_ironic_boot_configuration).result.warnings %>
publish-on-error:
errors: <% $.errors + task(check_ironic_boot_configuration).result.errors %>
warnings: <% $.warnings + task(check_ironic_boot_configuration).result.warnings %>
status: FAILED
on-success: verify_profiles
on-error: verify_profiles
verify_profiles:
workflow: verify_profiles
input:
flavors: <% $.flavors %>
run_validations: <% $.run_validations %>
queue_name: <% $.queue_name %>
publish:
errors: <% $.errors + task(verify_profiles).result.errors %>
warnings: <% $.warnings + task(verify_profiles).result.warnings %>
publish-on-error:
errors: <% $.errors + task(verify_profiles).result.errors %>
warnings: <% $.warnings + task(verify_profiles).result.warnings %>
status: FAILED
on-success: check_default_nodes_count
on-error: check_default_nodes_count
check_default_nodes_count:
workflow: check_default_nodes_count
input:
stack_id: <% $.stack_id %>
parameters: <% $.parameters %>
default_role_counts: <% $.default_role_counts %>
run_validations: <% $.run_validations %>
queue_name: <% $.queue_name %>
publish:
errors: <% $.errors + task(check_default_nodes_count).result.errors %>
warnings: <% $.warnings + task(check_default_nodes_count).result.warnings %>
statistics: <% task(check_default_nodes_count).result.statistics %>
publish-on-error:
errors: <% $.errors + task(check_default_nodes_count).result.errors %>
warnings: <% $.warnings + task(check_default_nodes_count).result.warnings %>
statistics: <% task(check_default_nodes_count).result.statistics %>
status: FAILED
on-success: send_message
on-error: send_message
send_message:
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.validations.v1.check_hypervisor_stats
payload:
status: <% $.get('status', 'SUCCESS') %>
message: <% $.get('message', '') %>
execution: <% execution() %>
kernel_id: <% $.kernel_id %>
ramdisk_id: <% $.ramdisk_id %>
flavors: <% $.flavors %>
statistics: <% $.statistics %>
errors: <% $.errors %>
warnings: <% $.warnings %>
on-success:
- fail: <% $.get('status') = "FAILED" %>