Integration test for software-config tools
This test currently exercises the following hooks:
- script
- puppet
- cfn-init
This requires devstack building a custom image. Since gating doesn't
yet have a test image available the test is skipped by default via
config value skip_software_config_tests.
To run this test locally, build your own custom image and set
skip_software_config_tests=false in
heat_integrationtests/heat_integrationtests.conf
Change-Id: I9d27664638de95e52bc954e1fa00299e6711de90
diff --git a/scenario/templates/test_server_software_config.yaml b/scenario/templates/test_server_software_config.yaml
new file mode 100644
index 0000000..e6ecae4
--- /dev/null
+++ b/scenario/templates/test_server_software_config.yaml
@@ -0,0 +1,174 @@
+heat_template_version: 2014-10-16
+parameters:
+ key_name:
+ type: string
+ flavor:
+ type: string
+ image:
+ type: string
+ network:
+ type: string
+ signal_transport:
+ type: string
+ default: CFN_SIGNAL
+ dep1_foo:
+ default: fooooo
+ type: string
+ dep1_bar:
+ default: baaaaa
+ type: string
+ dep2a_bar:
+ type: string
+ default: barrr
+ dep3_foo:
+ default: fo
+ type: string
+ dep3_bar:
+ default: ba
+ type: string
+
+resources:
+
+ the_sg:
+ type: OS::Neutron::SecurityGroup
+ properties:
+ name: the_sg
+ description: Ping and SSH
+ rules:
+ - protocol: icmp
+ - protocol: tcp
+ port_range_min: 22
+ port_range_max: 22
+
+ cfg1:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: script
+ inputs:
+ - name: foo
+ - name: bar
+ outputs:
+ - name: result
+ config: {get_file: cfg1.sh}
+
+ cfg2a:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: cfn-init
+ inputs:
+ - name: bar
+ config:
+ config:
+ files:
+ /tmp/cfn-init-foo:
+ content:
+ get_input: bar
+ mode: '000644'
+
+ cfg2b:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: script
+ outputs:
+ - name: result
+ config: |
+ #!/bin/sh
+ echo -n "The file /tmp/cfn-init-foo contains `cat /tmp/cfn-init-foo` for server $deploy_server_id during $deploy_action" > $heat_outputs_path.result
+
+ cfg3:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: puppet
+ inputs:
+ - name: foo
+ - name: bar
+ outputs:
+ - name: result
+ config: {get_file: cfg3.pp}
+
+ dep1:
+ type: OS::Heat::SoftwareDeployment
+ properties:
+ config:
+ get_resource: cfg1
+ server:
+ get_resource: server
+ input_values:
+ foo: {get_param: dep1_foo}
+ bar: {get_param: dep1_bar}
+ signal_transport: {get_param: signal_transport}
+
+ dep2a:
+ type: OS::Heat::StructuredDeployment
+ properties:
+ name: 10_dep2a
+ signal_transport: NO_SIGNAL
+ config:
+ get_resource: cfg2a
+ server:
+ get_resource: server
+ input_values:
+ bar: {get_param: dep2a_bar}
+
+ dep2b:
+ type: OS::Heat::SoftwareDeployment
+ properties:
+ name: 20_dep2b
+ config:
+ get_resource: cfg2b
+ server:
+ get_resource: server
+ signal_transport: {get_param: signal_transport}
+
+ dep3:
+ type: OS::Heat::SoftwareDeployment
+ properties:
+ config:
+ get_resource: cfg3
+ server:
+ get_resource: server
+ input_values:
+ foo: {get_param: dep3_foo}
+ bar: {get_param: dep3_bar}
+ signal_transport: {get_param: signal_transport}
+
+ cfg_user_data:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ config: |
+ #!/bin/sh
+ echo "user data script"
+
+ server:
+ type: OS::Nova::Server
+ properties:
+ image: {get_param: image}
+ flavor: {get_param: flavor}
+ key_name: {get_param: key_name}
+ security_groups:
+ - {get_resource: the_sg}
+ networks:
+ - network: {get_param: network}
+ user_data_format: SOFTWARE_CONFIG
+ software_config_transport: POLL_TEMP_URL
+ user_data: {get_resource: cfg_user_data}
+
+outputs:
+ res1:
+ value:
+ result: {get_attr: [dep1, result]}
+ stdout: {get_attr: [dep1, deploy_stdout]}
+ stderr: {get_attr: [dep1, deploy_stderr]}
+ status_code: {get_attr: [dep1, deploy_status_code]}
+ res2:
+ value:
+ result: {get_attr: [dep2b, result]}
+ stdout: {get_attr: [dep2b, deploy_stdout]}
+ stderr: {get_attr: [dep2b, deploy_stderr]}
+ status_code: {get_attr: [dep2b, deploy_status_code]}
+ res3:
+ value:
+ result: {get_attr: [dep3, result]}
+ stdout: {get_attr: [dep3, deploy_stdout]}
+ stderr: {get_attr: [dep3, deploy_stderr]}
+ status_code: {get_attr: [dep3, deploy_status_code]}