application software configuration using heat
play

Application software configuration using Heat Steve Baker Senior - PowerPoint PPT Presentation

Application software configuration using Heat Steve Baker Senior Software Engineer, Red Hat sbaker@redhat.com irc stevebaker #heat Application software configuration using Heat Configuration vs Orchestration New heat software config


  1. Application software configuration using Heat Steve Baker Senior Software Engineer, Red Hat sbaker@redhat.com irc stevebaker #heat

  2. Application software configuration using Heat ● Configuration vs Orchestration ● New heat software config and deployment resources ● Integrating configuration tools

  3. Software <> Orchestration Configuration

  4. Separation of concerns is important

  5. Choosing an abstraction involves compromise

  6. CloudFormation cfn-init example "Resources" : { "WikiDatabase": { "Type": "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "packages" : { "yum" : { "mysql" : [], "mysql-server" : [], "httpd" : [], "wordpress" : [] } }, "services" : { "systemd" : { "mysqld" : { "enabled" : "true", "ensureRunning" : "true" }, "httpd" : { "enabled" : "true", "ensureRunning" : "true" } } } } } },

  7. CloudFormation cfn-init example "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" : "DBUs "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.con "sed --in-place --e s/database_name_here/", { "Ref" : "DBName" }, "/ --e s/usern "systemctl restart httpd.service\n", "firewall-cmd --add-service=http\n", "firewall-cmd --permanent --add-service=http\n" ]]} }

  8. Both have roles to play in the stack

  9. Configuration resource ● API backed store of configuration data ● Stores configuration script ● Defines inputs and outputs schema ● Tool specific options ● Are immutable and can be passed by referenced

  10. Boot configuration with cloud-init one_init: server_init: type: OS::Heat::CloudConfig type: OS::Heat::MultipartMime properties: properties: cloud_config: parts: write_files: - config: {get_resource: one_init} - path: /tmp/one - config: {get_resource: two_init} content: "The one is bar" server: two_init: type: OS::Nova::Server type: OS::Heat::SoftwareConfig properties: properties: image: {get_param: image} config: | flavor: {get_param: flavor} #!/bin/sh key_name: {get_param: key_name} echo "The two is bar" > /tmp/two user_data_format: RAW user_data: get_resource: server_init

  11. Deployment resources ● Maps one config resource to one server resource ● Allows assignment of server-specific input values ● Remains in-progress until receiving completed signal ● Stores outputs for other resources to consume as resource attributes ● Can deploy on any heat action, not just CREATE, UPDATE ● Stores additional outputs from hook invocation ● stdin, stdout, status_code

  12. Deployment illustrated config deployment server

  13. Deployment illustrated server config deployment

  14. Deployments illustrated server deployment config deployment config deployment

  15. Deployments illustrated server 1 server 2 config deployment deployment config config config deployment deployment config config deployment deployment

  16. Deployments illustrated server 1 server 2 config deployment deployment config config config deployment deployment config config deployment deployment

  17. Deployments illustrated server 1 server 2 config deployment deployment config config config deployment deployment config config deployment deployment

  18. Deployments illustrated server 1 server 2 config deployment deployment config config config deployment deployment config config deployment deployment

  19. Deployments illustrated server 1 server 2 config deployment deployment config config config deployment deployment config config deployment deployment

  20. Deployments illustrated server 1 server 2 config deployment deployment config config config deployment deployment config config deployment deployment

  21. Deployments illustrated server 1 server 2 config deployment deployment config config config deployment deployment config config deployment deployment

  22. Deployments illustrated server 1 server 2 config deployment deployment config config config deployment deployment config config deployment deployment

  23. Deployments illustrated server 1 server 2 config deployment deployment config config config deployment deployment config config deployment deployment

  24. Scaling deployments illustrated config deployment server pool member load balancer pool

  25. Scaling deployments illustrated config deployment deployment deployment server server server pool member pool member pool member load balancer pool

  26. Deployment extra inputs ● deploy_server_id ● deploy_action ● deploy_stack_id, deploy_resource_name ● deploy_signal_id ● deploy_auth_url, deploy_username, deploy_password, deploy_project_id, deploy_user_id

  27. get_file intrinsic function ● python-heatclient fetches local files and URLs ● Contents of get_file calls included in heat stack-create request ● Initial support for including binary files

  28. Script and cfn-init example deployment: config: type: OS::Heat::StructuredDeployment type: OS::Heat::StructuredConfig properties: properties: name: 10_deployment group: cfn-init signal_transport: NO_SIGNAL inputs: config: - name: bar get_resource: config config: server: config: get_resource: server files: input_values: /tmp/foo: bar: baaaaa content: get_input: bar deploy_check_tmp_foo: mode: '000644' type: OS::Heat::SoftwareDeployment properties: check_tmp_foo: name: 30_deploy_check_tmp_foo type: OS::Heat::SoftwareConfig config: properties: get_resource: check_tmp_foo group: script server: outputs: get_resource: server - name: result config: {get_file: check_tmp_foo.sh}

  29. Script and cfn-init example 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} user_data_format: SOFTWARE_CONFIG #!/bin/sh echo -n "The file /tmp/foo contains `cat /tmp/foo` for server $deploy_server_id \ during $deploy_action" > $heat_outputs_path.result

  30. Puppet example deployment: config: type: OS::Heat::SoftwareDeployment type: OS::Heat::SoftwareConfig properties: properties: config: group: puppet get_resource: config inputs: server: - name: foo get_resource: server - name: bar input_values: outputs: foo: fooooo - name: result bar: baaaaa config: get_file: puppet-manifest.pp

  31. Puppet example file {'barfile': server: ensure => file, type: OS::Nova::Server mode => 0644, properties: path => "/tmp/$::bar", image: {get_param: image} content => "$::foo", flavor: {get_param: flavor} } key_name: {get_param: key_name} file {'output_result': security_groups: ensure => file, - {get_resource: the_sg} path => "$::heat_outputs_path.result", user_data_format: SOFTWARE_CONFIG mode => 0644, content => "The file /tmp/$::bar contains $::foo", }

  32. Image based example BlockStorageConfig: BlockStorage0Deployment: type: OS::Heat::StructuredConfig type: OS::Heat::StructuredDeployment properties: properties: group: os-apply-config server: {get_resource: BlockStorage0} config: config: {get_resource: BlockStorageConfig} cinder: input_values: db: {get_input: cinder_dsn} cinder_dsn: volume_size_mb: '5000' str_replace: service-password: template: | get_param: CinderPassword mysql://cinder:unset@address/cinder iscsi-helper: params: get_param: CinderISCSIHelper address: admin-password: get_attr: get_param: AdminPassword - controller0 - networks - ctlplane - 0

  33. Hooks ● Consumes JSON from stdin, writes JSON to stdout ● Invokes configuration script with a particular tool ● Maps config inputs to some tool-specific concepts, e.g. ● Environment variables (scripts) ● Facts (puppet) ● Discovers output values after config tool execution

  34. Hooks illustrated heat nova os-collect-config os-refresh-config os-apply-config heat-config puppet-hook cfn-init-hook shell-hook foo-hook puppet apply cfn-init your config script foo script

  35. Available hooks ● Script ● cfn-init ● Puppet ● Golden image configuration (not actually a hook!)

Recommend


More recommend