crowbar/crowbar-openstack

View on GitHub
chef/cookbooks/ironic/recipes/post_install.rb

Summary

Maintainability
A
1 hr
Test Coverage
#
# Copyright 2019 SUSE
#
# 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.
#
# Cookbook Name:: ironic
# Recipe:: post_install
#

keystone_settings = KeystoneHelper.keystone_settings(node, @cookbook_name)

# the image is uploaded via the glance API
glance_config = Barclamp::Config.load("openstack", "glance", node[:ironic][:glance_instance])
glance_insecure = CrowbarOpenStackHelper.insecure(glance_config)
openstack_args_glance = glance_insecure || keystone_settings["insecure"] ? "--insecure" : ""

env = "OS_USERNAME='#{keystone_settings["service_user"]}' "
env << "OS_PASSWORD='#{keystone_settings["service_password"]}' "
env << "OS_PROJECT_NAME='#{keystone_settings["service_tenant"]}' "
env << "OS_AUTH_URL='#{keystone_settings["internal_auth_url"]}' "
env << "OS_INTERFACE=internal "
env << "OS_IDENTITY_API_VERSION=3 "

kernel_image_prefix = "ir-deploy-kernel"
ramdisk_image_prefix = "ir-deploy-ramdisk"
image_path = "/srv/tftpboot/openstack-ironic-image"

# vmlinux symlink from openstack-ironic-image points to something like:
#   openstack-ironic-image.x86_64-9.0.0.kernel.4.12.14-95.13-default
# find all x.y.z version substrings and pick the first one to be used
# as version suffix
image_version_cmd = "$(readlink #{image_path}/vmlinux | egrep -o '[0-9]+\\.[0-9]+\\.[0-9]+' | head -n1)"

openstack_cmd = "#{env} openstack"

bash "upload_ironic_deploy_kernel_image" do
  code "#{openstack_cmd} #{openstack_args_glance} image create \
  --disk-format aki --container-format aki --public \
  --file #{image_path}/vmlinux #{kernel_image_prefix}-#{image_version_cmd}"
  not_if "#{openstack_cmd} #{openstack_args_glance} image list -f value -c Name | grep -q #{kernel_image_prefix}-#{image_version_cmd}"
  action :nothing
end

bash "upload_ironic_deploy_ramdisk_image" do
  code "#{openstack_cmd} #{openstack_args_glance} image create \
  --disk-format ari --container-format ari --public \
  --file #{image_path}/initrd #{ramdisk_image_prefix}-#{image_version_cmd}"
  not_if "#{openstack_cmd} #{openstack_args_glance} image list -f value -c Name | grep -q #{ramdisk_image_prefix}-#{image_version_cmd}"
  action :nothing
end

# This is to trigger the above resource to run :delayed, so that they run at
# the end of the chef-client run, after the ironic services have been restarted
# (in case of a config change)
execute "trigger-ironic-post-commands" do
  command "true"
  notifies :run, "bash[upload_ironic_deploy_kernel_image]", :delayed
  notifies :run, "bash[upload_ironic_deploy_ramdisk_image]", :delayed
end