Ask Your Question
2

Heat Template: Using get_param within get_file

asked 2015-07-08 10:07:31 -0500

Nastooh gravatar image

updated 2015-07-08 11:27:31 -0500

Hi
Have a simple template that defines config_file as a parameter and would like to pass it as an argument to get_file:

heat_template_version: 2013-05-23
description: Template that installs a mesos nodes.
parameters:
...
config_file:
    type: string
    label: Config File
    description: Path to config file
    default: config.sh
resources:
  instance:
    type: OS::Nova::Server
    properties:
...
      user_data_format: RAW
      user_data:
          str_replace:
          params:
          ....
          template: { get_file: { get_param: config_file } }
...

This fails with the following message:

Create Failed
Resource Create Failed: Stackvalidationfailed: Property Error : Instance: User Data No Content Found In The "Files" Section For Get File Path: Config.Sh

Tried the following as well:

...
           str_replace:
          params:
           ConfigFile: { get_param: config_file }
          template: |
           { get_file: ConfigFile }
...

(Note that "|" is needed, otherwise I get the following error message:

 Could not fetch contents for file:///xxx/ConfigFile

)
The above gets further and instantiates a node; however, script is not executed during cloud-init:

...
ci-info: |   0   |   0.0.0.0   | 10.40.50.1 |    0.0.0.0    |    eth0   |   UG  |
ci-info: |   1   |  10.40.50.0 |  0.0.0.0   | 255.255.255.0 |    eth0   |   U   |
ci-info: +-------+-------------+------------+---------------+-----------+-------+
2015-07-08 14:56:37,317 - __init__.py[WARNING]: Unhandled non-multipart (text/x-not-multipart) userdata: '{ get_file: config...'
Generating public/private rsa key pair.
...

Any thoughts?
(should mention that all is fine if I directly insert the file name in get_file.)
Cheers,

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted
2

answered 2015-07-15 11:14:48 -0500

zaneb gravatar image

There are two parts to get_file: one is in the engine, where it retrieves the file from the dict of files provided by the client. This part should work fine with the filename dynamically specified by get_param.

The other part is in the client. It parses the template looking for get_file and automatically adds any files found to the files dict, so that everything appears to work as if by magic. However, this part can't resolve get_param (there isn't a complete copy of the template parsing code in the client). So if you want to use this mechanism then you need to explicitly include the extra file yourself.

edit flag offensive delete link more

Comments

Such a shame. Isn't this really a bug, though?

Nastooh gravatar imageNastooh ( 2015-07-15 12:24:36 -0500 )edit

Arguably it's a missing feature.

zaneb gravatar imagezaneb ( 2015-07-15 13:13:11 -0500 )edit

Thanks for the clarification Zaneb, i was trying to use "get_param" with "get_file". config_drive: "true" user_data_format: RAW user_data : get_file: { get_param : config_file } I got error" user_data No content found in the "files" section for get_file path: cloudfile.sh"

TejasG gravatar imageTejasG ( 2016-04-27 09:41:32 -0500 )edit

just wondering is there any way we can control the content of "files" directory? or another way to pass filename/file path as
parameter ?

TejasG gravatar imageTejasG ( 2016-04-27 09:43:27 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Get to know Ask OpenStack

Resources for moderators

Question Tools

1 follower

Stats

Asked: 2015-07-08 10:07:31 -0500

Seen: 3,414 times

Last updated: Jul 15 '15