# # ============LICENSE_START========================================== # =================================================================== # Copyright © 2017 AT&T Intellectual Property. All rights reserved. # =================================================================== # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied # See the License for the specific language governing permissions and # limitations under the License. # ============LICENSE_END============================================ # # ECOMP and OpenECOMP are trademarks # and service marks of AT&T Intellectual Property. # tosca_definitions_version: cloudify_dsl_1_3 imports: - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml - http://www.getcloudify.org/spec/openstack-plugin/1.4/plugin.yaml - http://www.getcloudify.org/spec/fabric-plugin/1.4.1/plugin.yaml - types/dns_types.yaml - types/sshkey_types.yaml inputs: centos7image_id: type: string ubuntu1604image_id: type: string flavor_id: type: string security_group: type: string public_net: type: string private_net: type: string openstack: {} keypair: type: string location_prefix: type: string location_domain: type: string key_filename: type: string codesource_url: type: string codesource_version: type: string cname: type: string default: dcae-orcl datacenter: type: string vm_init_clmg_00: type: string default: |- #!/bin/sh set -x DATACENTER= vm_init_clmg_01: type: string default: | CONSULVER=consul_0.8.3 CONSULNAME=${CONSULVER}_linux_amd64 MYIP=`curl -Ss http://169.254.169.254/2009-04-04/meta-data/local-ipv4` MYNAME=`hostname` echo >>/etc/hosts echo $MYIP $MYNAME >>/etc/hosts mkdir -p /opt/consul/config /opt/consul/data /opt/consul/bin # Download Consul curl -Ss https://releases.hashicorp.com/consul/${CONSULVER}/${CONSULNAME}.zip > ${CONSULNAME}.zip unzip -d /opt/consul/bin ${CONSULNAME}.zip rm ${CONSULNAME}.zip chmod +x /opt/consul/bin/consul cat < /opt/consul/config/consul.json { "bind_addr" : "0.0.0.0", "client_addr" : "0.0.0.0", "data_dir" : "/opt/consul/data", "datacenter": "$DATACENTER", "rejoin_after_leave": true, "http_api_response_headers": { "Access-Control-Allow-Origin" : "*" }, "server": false, "ui": false, "enable_syslog": true, "log_level": "info" } EOF cat < /lib/systemd/system/consul.service [Unit] Description=Consul Requires=network-online.target After=network.target [Service] Type=simple ExecStart=/opt/consul/bin/consul agent -config-dir=/opt/consul/config ExecReload=/bin/kill -HUP \$MAINPID [Install] WantedBy=multi-user.target EOF systemctl enable consul systemctl start consul yum install -y python-psycopg2 node_templates: key_pair: type: cloudify.openstack.nodes.KeyPair properties: private_key_path: { get_input: key_filename } use_external_resource: True resource_id: { get_input: keypair } openstack_config: &open_conf get_input: openstack private_net: type: cloudify.openstack.nodes.Network properties: use_external_resource: True resource_id: { get_input: private_net } openstack_config: *open_conf security_group: type: cloudify.openstack.nodes.SecurityGroup properties: use_external_resource: True resource_id: { get_input: security_group } openstack_config: *open_conf fixedip_vm00: type: cloudify.openstack.nodes.Port properties: port: extra_dhcp_opts: - opt_name: 'domain-name' opt_value: { get_input: location_domain } openstack_config: *open_conf relationships: - type: cloudify.relationships.contained_in target: private_net floatingip_vm00: type: cloudify.openstack.nodes.FloatingIP properties: openstack_config: *open_conf interfaces: cloudify.interfaces.lifecycle: create: inputs: args: floating_network_name: { get_input: public_net } dns_vm00: type: ccsdk.nodes.dns.arecord properties: fqdn: { concat: [ { get_input: location_prefix }, 'orcl00.', { get_input: location_domain } ] } openstack: *open_conf interfaces: cloudify.interfaces.lifecycle: create: inputs: args: ip_addresses: - { get_attribute: [ floatingip_vm00, floating_ip_address ] } relationships: - type: cloudify.relationships.depends_on target: floatingip_vm00 dns_cm: type: ccsdk.nodes.dns.arecord properties: fqdn: { concat: [ 'cloudify-manager-', { get_input: datacenter}, '.', { get_input: location_domain } ] } openstack: *open_conf interfaces: cloudify.interfaces.lifecycle: create: inputs: args: ip_addresses: - { get_attribute: [ floatingip_vm00, floating_ip_address ] } relationships: - type: cloudify.relationships.depends_on target: floatingip_vm00 dns_cname: type: ccsdk.nodes.dns.cnamerecord properties: fqdn: { concat: [ { get_input: cname }, '.', { get_input: location_domain } ] } openstack: *open_conf interfaces: cloudify.interfaces.lifecycle: create: inputs: args: cname: { get_property: [ dns_vm00, fqdn ] } relationships: - type: cloudify.relationships.depends_on target: dns_vm00 host_vm00: type: cloudify.openstack.nodes.Server properties: install_agent: false image: { get_input: centos7image_id } flavor: { get_input: flavor_id } management_network_name: { get_input: private_net } openstack_config: *open_conf interfaces: cloudify.interfaces.lifecycle: create: inputs: args: name: { concat: [ { get_input: location_prefix }, 'orcl00' ] } userdata: concat: - { get_input: vm_init_clmg_00 } - { get_input: datacenter } - |+ - { get_input: vm_init_clmg_01 } relationships: - type: cloudify.openstack.server_connected_to_port target: fixedip_vm00 - type: cloudify.openstack.server_connected_to_security_group target: security_group - type: cloudify.openstack.server_connected_to_floating_ip target: floatingip_vm00 - type: cloudify.openstack.server_connected_to_keypair target: key_pair - type: cloudify.relationships.depends_on target: dns_vm00 - type: cloudify.relationships.depends_on target: dns_cm outputs: public_ip: value: { get_attribute: [floatingip_vm00, floating_ip_address] }