Simple Software Configuration

https://blueprints.launchpad.net/murano/+spec/simple-software-configuration

The purpose is to add to Murano core-library new functionality allowing to simplify the process of software configuration.

Problem description

At the moment a developer of murano applications often has difficulties with configuration of software on the instance. They are related with fact that developer always has to create execution plans even in situations when some short scripts must be executed on VM.

For example, developer wants to run mysql service. In this case he should:

  • Prepare template file for execution plan

  • Prepare script containing only something like this:

service mysql-server start

  • Describe in code of class the sending of plan to the murano agent

It is proposed to update the murano core-library to allow to user make express software configuration instructions without writing explicit configuration scripts and execution plans for Murano Agent in order to develop applications faster, and have concise and clear workflows.

Proposed change

The extension of library will support only Linux instances.

The new class io.murano.configuration.Linux will be added. In initial implementation this class has two methods:

runCommand:
  Arguments:
    - agent:
        Contract: $.class(sys:Agent)
    - command:
        Contract: $.string().notNull()
    - helpText:
        Contract: $.string()
  • runCommand method sends specified string containing CLI command to murano-agent and then it will be executed.

    Arguments:

    • agent - instance of murano-agent

    • command - string with CLI command

    • helpTest - string (optional), description for logging. Will be used as name of execution plan. If it is Null value of command will be used.

putFile:
  Arguments:
    - agent:
        Contract: $.class(sys:Agent)
    - fileContent:
        Contract: $.string().notNull()
    - path:
        Contract: $.string().notNull()
    - helpText:
        Contract: $.string()
  • putFile method takes content of file and writes it to specified path on VM

    Arguments:

    • agent - instance of murano-agent

    • fileContent - string, content of file

    • path - string, path for writing

    • helpTest - string (optional), description for logging. Will be used as name of execution plan. If it is Null, value of path will be used.

The both methods actually use the same procedure of sending the execution plans to the agent and require corresponding templates for that, but hide from a developer this routine.

Example of usage

The next example describes how new feature can be used. This code demonstrates workflow of method in WordPress application, which used for re-configuration of database settings.

changeDatabaseConnection:
  Arguments:
    - dbHost:
        Contract: $.string().notNull()
    - dbName:
        Contract: $.string().notNull()
    - dbUser:
        Contract: $.string().notNull()
    - dbPassword:
        Contract: $.string().notNull()
  Body:
    - $resources: new(sys:Resources)
    # Creating instance of Linux class
    - $linux: new(conf:Linux)
    # First we need to stop server. 'runCommand' can be used here
    - $linux.runCommand($.instance.agent, 'service apache2 stop')
    # Creating a dictionary for replacement
    - $configReplacements:
        "%DB_HOST%": $dbHost
        "%DB_NAME%": $dbName
        "%DB_USER%": $dbUser
        "%DB_PASS%": $dbPassword
    # Making a replacement. `wp-config.php' is included to package
    - $confFileContent: $resources.string('wp-config.php').replace($configReplacements)
    # Putting ready content to necessary path on VM
    - $linux.putFile($.instance.agent, $confFileContent, '/var/www/html/wordpress/wp-config.php')
    # Now we can start Apache again
    - $linux.runCommand($.instance.agent, 'service apache2 start')

Alternatives

Instead of using the common procedure with creating execution plans and communication with murano-agent some software configuration resources of heat probably can be used. During updating of library it can be used in the future.

Data model impact

None

REST API impact

None

Versioning impact

None

Other end user impact

None

Deployer impact

None

Developer impact

Application developers will be able to use new functionality in their apps. Existing apps will not be affected.

Murano-dashboard / Horizon impact

None

Implementation

Assignee(s)

Primary assignee:

ddovbii

Work Items

  • Create new class io.murano.configuration.Linux

  • Implement methods putFile and runCommand

  • Update Murano PL docs

Dependencies

None

References

None