murano/meta/io.murano/Classes/resources/LinuxMuranoInstance.yaml

111 lines
4.2 KiB
YAML

Namespaces:
=: io.murano.resources
sys: io.murano.system
std: io.murano
Name: LinuxMuranoInstance
Extends:
- LinuxInstance
Methods:
prepareUserData:
Body:
- $userData: $.generateUserData()
- Return:
data: $._generateInstanceConfigResources($userData)
format: RAW
_generateInstanceConfigResources:
Arguments:
- userData:
Contract: $.string().notNull()
Body:
- $region: $.getRegion()
- $resources: new(sys:Resources)
- $muranoInitConf: $.generateCloudConfig()
- $bootScriptResourceName: format('boot_script_{0}', $.name)
- $userDataResourceName: format('user_data-{0}', $.name)
- $bootConfigResourceName: format('boot_config-{0}', $.name)
- $template:
resources:
$bootConfigResourceName:
type: 'OS::Heat::CloudConfig'
properties:
cloud_config: $muranoInitConf
$bootScriptResourceName:
type: 'OS::Heat::SoftwareConfig'
properties:
group: ungrouped
config: $userData
$userDataResourceName:
type: 'OS::Heat::MultipartMime'
properties:
parts:
- config: {get_resource: $bootConfigResourceName}
- config: {get_resource: $bootScriptResourceName}
- $.setAttr(resourceCloudConfig, [$bootScriptResourceName, $userDataResourceName, $bootConfigResourceName])
- $region.stack.updateTemplate($template)
- Return: {get_resource: $userDataResourceName}
generateCloudConfig:
Body:
- $resources: new(sys:Resources)
- $muranoInitConf: $resources.yaml('murano-init.conf').bind(dict(
instanceHostname => $.name
))
- Return: $muranoInitConf
generateUserData:
Body:
- $region: $.getRegion()
- $rabbitMqParams: $region.getConfig().agentRabbitMq
- $resources: new(sys:Resources)
- $configFile: $resources.string('Agent-v2.template')
- $initScript: $resources.string('linux-init.sh')
- $muranoScript: $resources.string('murano-init.sh')
- $muranoAgentConf: $resources.string('murano-agent.conf')
- $muranoAgentService: $resources.string('murano-agent.service')
- $muranoAgent: $resources.string('murano-agent')
- $configReplacements:
"%RABBITMQ_HOST%": $rabbitMqParams.host
"%RABBITMQ_PORT%": $rabbitMqParams.port
"%RABBITMQ_USER%": $rabbitMqParams.login
"%RABBITMQ_PASSWORD%": $rabbitMqParams.password
"%RABBITMQ_VHOST%": $rabbitMqParams.virtual_host
"%RABBITMQ_SSL%": str($rabbitMqParams.ssl).toLower()
"%RABBITMQ_INSECURE%": str($rabbitMqParams.insecure).toLower()
"%RABBITMQ_INPUT_QUEUE%": $.agent.queueName()
"%RESULT_QUEUE%": $region.agentListener.queueName()
"%SIGNING_KEY%": $.agent.signingKey('\t')
- $scriptReplacements:
"%AGENT_CONFIG_BASE64%": base64encode($configFile.replace($configReplacements))
"%INTERNAL_HOSTNAME%": $.name
"%MURANO_SERVER_ADDRESS%": coalesce(config(file_server), $rabbitMqParams.host)
- If: config(rabbitmq, ca_certs)
Then:
- $scriptReplacements["%CA_ROOT_CERT_BASE64%"]: base64encode(config(rabbitmq, ca_certs, true))
Else:
- $scriptReplacements["%CA_ROOT_CERT_BASE64%"]: ''
- $muranoReplacements:
"%MURANO_AGENT_CONF%": base64encode($muranoAgentConf)
"%MURANO_AGENT_SERVICE%": base64encode($muranoAgentService)
"%MURANO_AGENT%": base64encode($muranoAgent)
- $userData: $muranoScript.replace($muranoReplacements) + $initScript.replace($scriptReplacements)
- Return: $userData
releaseResources:
Body:
- $region: $.getRegion()
- $template: $region.stack.current()
- If: $template.get(resources) and $template.get(outputs)
Then:
- $resourcesToDelete: $.getAttr(resourceCloudConfig, [])
- $template.resources: $template.resources.deleteAll($resourcesToDelete)
- $region.stack.setTemplate($template)
- super($, $.releaseResources())