summaryrefslogtreecommitdiffstats
path: root/deployed-server/deployed-server.yaml
blob: da5698e5ce3129418bac36c85f8872d2ee0594be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
heat_template_version: 2014-10-16
parameters:
  image:
    type: string
    default: unused
  flavor:
    type: string
    default: unused
  key_name:
    type: string
    default: unused
  security_groups:
    type: json
    default: []
  # Require this so we can validate the parent passes the
  # correct value
  user_data_format:
    type: string
  user_data:
    type: string
    default: ''
  name:
    type: string
    default: ''
  image_update_policy:
    type: string
    default: ''
  networks:
    type: comma_delimited_list
    default: ''
  metadata:
    type: json
    default: {}
  software_config_transport:
    default: POLL_SERVER_CFN
    type: string
  scheduler_hints:
    type: json
    description: Optional scheduler hints to pass to nova
    default: {}

resources:
  # We just need something which returns a unique ID, but we can't
  # use RandomString because RefId returns the value, not the physical
  # resource ID, SoftwareConfig should work as it returns a UUID
  deployed-server:
    type: OS::TripleO::DeployedServerConfig
    properties:
      user_data_format: SOFTWARE_CONFIG

  InstanceIdConfig:
    type: OS::Heat::StructuredConfig
    properties:
      group: os-apply-config
      config:
        instance-id: {get_attr: [deployed-server, "OS::stack_id"]}

  InstanceIdDeployment:
    type: OS::Heat::StructuredDeployment
    properties:
      config: {get_resource: InstanceIdConfig}
      server: {get_resource: deployed-server}

  HostsEntryConfig:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config: |
          #!/bin/bash
          set -eux
          mkdir -p $heat_outputs_path
          host=$(hostnamectl --static)
          echo -n "$host "  > $heat_outputs_path.hosts_entry
          host_ip=$(python -c "import socket; print socket.gethostbyname(\"$host\")")
          echo -n "$host_ip " >> $heat_outputs_path.hosts_entry
          echo >> $heat_outputs_path.hosts_entry
          cat $heat_outputs_path.hosts_entry
          echo -n $host_ip > $heat_outputs_path.ip_address
          cat $heat_outputs_path.ip_address
          echo -n $host > $heat_outputs_path.hostname
          cat $heat_outputs_path.hostname
      outputs:
        - name: hosts_entry
          description: hosts_entry
        - name: ip_address
          description: ip_address
        - name: hostname
          description: hostname

  HostsEntryDeployment:
    type: OS::Heat::SoftwareDeployment
    properties:
      config: {get_resource: HostsEntryConfig}
      server: {get_resource: deployed-server}

  ControlPlanePort:
    type: OS::TripleO::DeployedServer::ControlPlanePort
    properties:
      Hostname: {get_attr: [HostsEntryDeployment, hostname]}

outputs:
  # FIXME(shardy) this is needed because TemplateResource returns an
  # ARN not a UUID, which overflows the Deployment server_id column..
  OS::stack_id:
    value: {get_attr: [deployed-server, "OS::stack_id"]}
  networks:
    value:
      ctlplane:
        - {get_attr: [ControlPlanePort, ip_address]}
  name:
   value: {get_attr: [HostsEntryDeployment, hostname]}
  hosts_entry:
   value: {get_attr: [HostsEntryDeployment, hosts_entry]}
  ip_address:
    value: {get_attr: [HostsEntryDeployment, ip_address]}