add a non-existence parameter GVT in the stack-create operation.
it returns the exception "u'UnknownUserParameter: The Parameter (GVT) was not defined in template"
But when i translate this exception message to chinese (zh_CN), and msgfmt po to mo, start the service in zh_CN.utf8 locale (per https://wiki.openstack.org/wiki/I18NSupport).
I see the follow error in stack-create operation:
yanglei@yanglei-ThinkCentre-M58:~/installed_openstack_devstack/heat$ heat -d -v stack-create "teststack" -f /var/log/heat/templates/WordPress_Single_Instance.template -P "GVT=GVTTest;InstanceType=m1.large;DBUsername=wp;DBPassword=verybadpassword;KeyName=heat_key;LinuxDistribution=F17"
INFO (connectionpool:195) Starting new HTTP connection (1): 127.0.0.1
DEBUG (connectionpool:289) "POST /v2.0/tokens HTTP/1.1" 200 8647
DEBUG (http:111) curl -i -X POST -H 'X-Auth-User: admin' -H 'X-Auth-Token: MIIPOwYJKoZIhvcNAQcCoIIPLDCCDygCAQExCTAHBgUrDgMCGjCCDZEGCSqGSIb3DQEHAaCCDYIEgg1+eyJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxMy0wNy0xMFQwNTo0ODo0MC45NDE3MzUiLCAiZXhwaXJlcyI6ICIyMDEzLTA3LTExVDA1OjQ4OjQwWiIsICJpZCI6ICJwbGFjZWhvbGRlciIsICJ0ZW5hbnQiOiB7ImRlc2NyaXB0aW9uIjogbnVsbCwgImVuYWJsZWQiOiB0cnVlLCAiaWQiOiAiNzVjZjc3ODM3NGYwNGRjNWIwZGJiZGVlMDhlMmYzNTUiLCAibmFtZSI6ICJhZG1pbiJ9fSwgInNlcnZpY2VDYXRhbG9nIjogW3siZW5kcG9pbnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo4Nzc0L3YyLzc1Y2Y3NzgzNzRmMDRkYzViMGRiYmRlZTA4ZTJmMzU1IiwgInJlZ2lvbiI6ICJSZWdpb25PbmUiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo4Nzc0L3YyLzc1Y2Y3NzgzNzRmMDRkYzViMGRiYmRlZTA4ZTJmMzU1IiwgImlkIjogIjYwNGQ5YWZiOTc4ZDRjMGI4MjQ0OGFjN2Q4OTdmZjJiIiwgInB1YmxpY1VSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjg3NzQvdjIvNzVjZjc3ODM3NGYwNGRjNWIwZGJiZGVlMDhlMmYzNTUifV0sICJlbmRwb2ludHNfbGlua3MiOiBbXSwgInR5cGUiOiAiY29tcHV0ZSIsICJuYW1lIjogIm5vdmEifSwgeyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjk2OTYvIiwgInJlZ2lvbiI6ICJSZWdpb25PbmUiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo5Njk2LyIsICJpZCI6ICIyYjZmMTBmYjZhY2E0OTFhYTVkM2M0N2U5ODNiMDY0YiIsICJwdWJsaWNVUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo5Njk2LyJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJuZXR3b3JrIiwgIm5hbWUiOiAicXVhbnR1bSJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6MzMzMyIsICJyZWdpb24iOiAiUmVnaW9uT25lIiwgImludGVybmFsVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6MzMzMyIsICJpZCI6ICIwMDNiMTg5ZjU1N2E0OGNlODU3MmEzYjUzY2M4YjFmOCIsICJwdWJsaWNVUkwiOiAiaHR0cDovLzEyNy4wLjAuMTozMzMzIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogInMzIiwgIm5hbWUiOiAiczMifSwgeyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjkyOTIiLCAicmVnaW9uIjogIlJlZ2lvbk9uZSIsICJpbnRlcm5hbFVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjkyOTIiLCAiaWQiOiAiMmE5YzdjZmFjYjVkNDMzYWJmMWFmZmYzOGFlOWZjNmMiLCAicHVibGljVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6OTI5MiJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJpbWFnZSIsICJuYW1lIjogImdsYW5jZSJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6ODc3NyIsICJyZWdpb24iOiAiUmVnaW9uT25lIiwgImludGVybmFsVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6ODc3NyIsICJpZCI6ICIzNTFlZTgzZDVlMGI0NjQ4YTAwMzI0YjI4M2VhODIxMSIsICJwdWJsaWNVUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo4Nzc3In1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogIm1ldGVyaW5nIiwgIm5hbWUiOiAiY2VpbG9tZXRlciJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC92MSIsICJyZWdpb24iOiAiUmVnaW9uT25lIiwgImludGVybmFsVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC92MSIsICJpZCI6ICI2YmU3OGZhZmQ1MTU0MjEwODI4YjhkYjQ3MWVkYjI1NCIsICJwdWJsaWNVUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3YxIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogImNsb3VkZm9ybWF0aW9uIiwgIm5hbWUiOiAiaGVhdC1jZm4ifSwgeyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjg3NzYvdjEvNzVjZjc3ODM3NGYwNGRjNWIwZGJiZGVlMDhlMmYzNTUiLCAicmVnaW9uIjogIlJlZ2lvbk9uZSIsICJpbnRlcm5hbFVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjg3NzYvdjEvNzVjZjc3ODM3NGYwNGRjNWIwZGJiZGVlMDhlMmYzNTUiLCAiaWQiOiAiMzU3YTBlYTc2NGUxNGFlM2ExYzZmYjIzMTgzNWZkYzMiLCAicHVibGljVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6ODc3Ni92MS83NWNmNzc4Mzc0ZjA0ZGM1YjBkYmJkZWUwOGUyZjM1NSJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJ2b2x1bWUiLCAibmFtZSI6ICJjaW5kZXIifSwgeyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjg3NzMvc2VydmljZXMvQWRtaW4iLCAicmVnaW9uIjogIlJlZ2lvbk9uZSIsICJpbnRlcm5hbFVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjg3NzMvc2VydmljZXMvQ2xvdWQiLCAiaWQiOiAiM2VkMDk1MDBiNjAzNGE1NGI2Mjg4NzE2ZTNiN2I0MjEiLCAicHVibGljVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6ODc3My9zZXJ2aWNlcy9DbG91ZCJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJlYzIiLCAibmFtZSI6ICJlYzIifSwgeyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjgwMDQvdjEvNzVjZjc3ODM3NGYwNGRjNWIwZGJiZGVlMDhlMmYzNTUiLCAicmVnaW9uIjogIlJlZ2lvbk9uZSIsICJpbnRlcm5hbFVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjgwMDQvdjEvNzVjZjc3ODM3NGYwNGRjNWIwZGJiZGVlMDhlMmYzNTUiLCAiaWQiOiAiMmFiNmRhZWU1ODkyNDU2Yzk0ZmVkNTM3NDU1ZmRjYjQiLCAicHVibGljVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6ODAwNC92MS83NWNmNzc4Mzc0ZjA0ZGM1YjBkYmJkZWUwOGUyZjM1NSJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJvcmNoZXN0cmF0aW9uIiwgIm5hbWUiOiAiaGVhdCJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6MzUzNTcvdjIuMCIsICJyZWdpb24iOiAiUmVnaW9uT25lIiwgImludGVybmFsVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6NTAwMC92Mi4wIiwgImlkIjogIjNmZDEwZThkNGQxNDRlMzhiMzQ5MjAzNDAyZGIzNGFkIiwgInB1YmxpY1VSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjUwMDAvdjIuMCJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJpZGVudGl0eSIsICJuYW1lIjogImtleXN0b25lIn1dLCAidXNlciI6IHsidXNlcm5hbWUiOiAiYWRtaW4iLCAicm9sZXNfbGlua3MiOiBbXSwgImlkIjogIjRhMjQzMjY1OGRkYTRjNjRiOTBmMGZhNDMzYTUxMzJiIiwgInJvbGVzIjogW3sibmFtZSI6ICJhZG1pbiJ9XSwgIm5hbWUiOiAiYWRtaW4ifSwgIm1ldGFkYXRhIjogeyJpc19hZG1pbiI6IDAsICJyb2xlcyI6IFsiOTMzYWFiN2VjMDdmNDJlNjllNzMwYjQ5NWVmMTRhMjgiXX19fTGCAYEwggF9AgEBMFwwVzELMAkGA1UEBhMCVVMxDjAMBgNVBAgTBVVuc2V0MQ4wDAYDVQQHEwVVbnNldDEOMAwGA1UEChMFVW5zZXQxGDAWBgNVBAMTD3d3dy5leGFtcGxlLmNvbQIBATAHBgUrDgMCGjANBgkqhkiG9w0BAQEFAASCAQAlcstU1ufw84Vq8gCAGpix2Ly+-Kg9K2lheSVwxqRfIQn-1NdZWIS1RNFBCuIc539WQEzWE1RIHY8jiXrllgattuktLUdYDWuxxR2NsUXe-26+Yo5v44R46uyRfluH1x8A2o+qFWgw6SjYZoRlC7pgKSnHfRnvBv6Xc9YyLMTHef+Ye0hNIOISA1q0RwUtAX8tTBrrTFtmNiTzkocgKGRw3PTFs-7oFWuBSYqoFOlHazgCNYfdZvmcJWR6HBVlDAkdZJXP5zZog4TmbQCzpz5JyXQXJ+7Z1Bzoru1PS8u6vojMLBHLCVoix3ROiwXAd5Z16Eew3Rskceu7P+cABAaj' -H 'X-Auth-Key: passw0rd' -H 'Accept: application/json' -H 'User-Agent: python-heatclient' -H 'Content-Type: application/json' -d '{"stack_name": "teststack", "disable_rollback": true, "parameters": {"DBUsername": "wp", "LinuxDistribution": "F17", "KeyName": "heat_key", "DBPassword": "verybadpassword", "InstanceType": "m1.large", "GVT": "GVTTest"}, "template": {"Description": "AWS CloudFormation Sample Template WordPress_Single_Instance: WordPress is web software you can use to create a beautiful website or blog. This template installs a single-instance WordPress deployment using a local MySQL database to store the data.", "Parameters": {"DBUsername": {"ConstraintDescription": "must begin with a letter and contain only alphanumeric characters.", "Description": "The WordPress database admin account username", "Default": "admin", "MinLength": "1", "AllowedPattern": "[a-zA-Z][a-zA-Z0-9]*", "NoEcho": "true", "MaxLength": "16", "Type": "String"}, "LinuxDistribution": {"Default": "F17", "Type": "String", "Description": "Distribution of choice", "AllowedValues": ["F18", "F17", "U10", "RHEL-6.1", "RHEL-6.2", "RHEL-6.3"]}, "DBRootPassword": {"ConstraintDescription": "must contain only alphanumeric characters.", "Description": "Root password for MySQL", "Default": "admin", "MinLength": "1", "AllowedPattern": "[a-zA-Z0-9]*", "NoEcho": "true", "MaxLength": "41", "Type": "String"}, "KeyName": {"Type": "String", "Description": "Name of an existing EC2 KeyPair to enable SSH access to the instances"}, "DBName": {"ConstraintDescription": "must begin with a letter and contain only alphanumeric characters.", "Description": "The WordPress database name", "Default": "wordpress", "MinLength": "1", "AllowedPattern": "[a-zA-Z][a-zA-Z0-9]*", "MaxLength": "64", "Type": "String"}, "DBPassword": {"ConstraintDescription": "must contain only alphanumeric characters.", "Description": "The WordPress database admin account password", "Default": "admin", "MinLength": "1", "AllowedPattern": "[a-zA-Z0-9]*", "NoEcho": "true", "MaxLength": "41", "Type": "String"}, "InstanceType": {"Default": "m1.large", "ConstraintDescription": "must be a valid EC2 instance type.", "Type": "String", "Description": "WebServer EC2 instance type", "AllowedValues": ["t1.micro", "m1.small", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "c1.medium", "c1.xlarge", "cc1.4xlarge"]}}, "AWSTemplateFormatVersion": "2010-09-09", "Outputs": {"WebsiteURL": {"Description": "URL for Wordpress wiki", "Value": {"Fn::Join": ["", ["http://", {"Fn::GetAtt": ["WikiDatabase", "PublicIp"]}, "/wordpress"]]}}}, "Resources": {"WikiDatabase": {"Type": "AWS::EC2::Instance", "Properties": {"UserData": {"Fn::Base64": {"Fn::Join": ["", ["#!/bin/bash -v\n", "/opt/aws/bin/cfn-init\n", "# Setup MySQL root password and create a user\n", "mysqladmin -u root password '", {"Ref": "DBRootPassword"}, "'\n", "cat << EOF | mysql -u root --password='", {"Ref": "DBRootPassword"}, "'\n", "CREATE DATABASE ", {"Ref": "DBName"}, ";\n", "GRANT ALL PRIVILEGES ON ", {"Ref": "DBName"}, ".* TO \"", {"Ref": "DBUsername"}, "\"@\"localhost\"\n", "IDENTIFIED BY \"", {"Ref": "DBPassword"}, "\";\n", "FLUSH PRIVILEGES;\n", "EXIT\n", "EOF\n", "sed -i \"/Deny from All/d\" /etc/httpd/conf.d/wordpress.conf\n", "sed -i \"s/Require local/Require all granted/\" /etc/httpd/conf.d/wordpress.conf\n", "sed --in-place --e s/database_name_here/", {"Ref": "DBName"}, "/ --e s/username_here/", {"Ref": "DBUsername"}, "/ --e s/password_here/", {"Ref": "DBPassword"}, "/ /usr/share/wordpress/wp-config.php\n", "systemctl restart httpd.service\n"]]}}, "KeyName": {"Ref": "KeyName"}, "InstanceType": {"Ref": "InstanceType"}, "ImageId": {"Fn::FindInMap": ["DistroArch2AMI", {"Ref": "LinuxDistribution"}, {"Fn::FindInMap": ["AWSInstanceType2Arch", {"Ref": "InstanceType"}, "Arch"]}]}}, "Metadata": {"AWS::CloudFormation::Init": {"config": {"services": {"systemd": {"httpd": {"ensureRunning": "true", "enabled": "true"}, "mysqld": {"ensureRunning": "true", "enabled": "true"}}}, "packages": {"yum": {"httpd": [], "wordpress": [], "mysql-server": [], "mysql": []}}}}}}}, "Mappings": {"DistroArch2AMI": {"RHEL-6.2": {"32": "rhel62-i386-cfntools", "64": "rhel62-x86_64-cfntools"}, "RHEL-6.3": {"32": "rhel63-i386-cfntools", "64": "rhel63-x86_64-cfntools"}, "RHEL-6.1": {"32": "rhel61-i386-cfntools", "64": "rhel61-x86_64-cfntools"}, "F18": {"32": "F18-i386-cfntools", "64": "F18-x86_64-cfntools"}, "U10": {"32": "U10-i386-cfntools", "64": "U10-x86_64-cfntools"}, "F17": {"32": "F17-i386-cfntools", "64": "F17-x86_64-cfntools"}}, "AWSInstanceType2Arch": {"m1.large": {"Arch": "64"}, "m2.2xlarge": {"Arch": "64"}, "m1.small": {"Arch": "32"}, "c1.medium": {"Arch": "32"}, "m1.xlarge": {"Arch": "64"}, "m2.xlarge": {"Arch": "64"}, "t1.micro": {"Arch": "32"}, "m2.4xlarge": {"Arch": "64"}, "c1.xlarge": {"Arch": "64"}, "cc1.4xlarge": {"Arch": "64"}}}}, "timeout_mins": 60}' http://127.0.0.1:8004/v1/75cf778374f04dc5b0dbbdee08e2f355/stacks
DEBUG (http:121)
HTTP/1.1 500 Internal Server Error
date: Wed, 10 Jul 2013 05:48:41 GMT
content-length: 3219
content-type: text/plain
connection: close
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/eventlet/wsgi.py", line 383, in handle_one_response
result = self.application(self.environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
resp = self.call_func(req, *args, **self.kwargs)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
return self.func(req, *args, **kwargs)
File "/home/yanglei/installed_openstack_devstack/heat/heat/common/wsgi.py", line 306, in __call__
response = req.get_response(self.application)
File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1296, in send
application, catch_exc_info=False)
File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1260, in call_application
app_iter = application(self.environ, start_response)
File "/home/yanglei/installed_openstack_devstack/python-keystoneclient/keystoneclient/middleware/auth_token.py", line 463, in __call__
return self.app(env, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
resp = self.call_func(req, *args, **self.kwargs)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
return self.func(req, *args, **kwargs)
File "/home/yanglei/installed_openstack_devstack/heat/heat/common/wsgi.py", line 306, in __call__
response = req.get_response(self.application)
File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1296, in send
application, catch_exc_info=False)
File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1260, in call_application
app_iter = application(self.environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
return resp(environ, start_response)
File "/usr/lib/python2.7/dist-packages/routes/middleware.py", line 131, in __call__
response = self.app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
return resp(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
resp = self.call_func(req, *args, **self.kwargs)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
return self.func(req, *args, **kwargs)
File "/home/yanglei/installed_openstack_devstack/heat/heat/common/wsgi.py", line 565, in __call__
request, **action_args)
File "/home/yanglei/installed_openstack_devstack/heat/heat/common/wsgi.py", line 610, in dispatch
return method(*args, **kwargs)
File "/home/yanglei/installed_openstack_devstack/heat/heat/api/openstack/v1/util.py", line 30, in handle_stack_method
return handler(controller, req, **kwargs)
File "/home/yanglei/installed_openstack_devstack/heat/heat/api/openstack/v1/stacks.py", line 224, in create
return util.remote_error(ex)
File "/home/yanglei/installed_openstack_devstack/heat/heat/api/openstack/v1/util.py", line 90, in remote_error
raise Exc(str(ex))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-36: ordinal not in range(128)
There are too many "str(" in heat project. /wiki.openstack .org/wiki/ Encoding
It seems as if heat need to encode/decode like other core projects doing.
per https:/