summaryrefslogtreecommitdiffstats
path: root/puppet/all-nodes-config.yaml
blob: 3b96698580615c958acd7023b5fac27f1ceb5abe (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
116
117
118
119
120
121
122
123
124
125
heat_template_version: 2016-10-14
description: 'All Nodes Config for Puppet'

parameters:
  hosts:
    type: comma_delimited_list
  # FIXME(shardy) this can be comma_delimited_list when
  # https://bugs.launchpad.net/heat/+bug/1617019 is fixed
  enabled_services:
    type: string
  controller_ips:
    type: comma_delimited_list
  service_ips:
    type: json
  service_node_names:
    type: json
  controller_names:
    type: comma_delimited_list
  memcache_node_ips:
    type: comma_delimited_list
  keystone_public_api_node_ips:
    type: comma_delimited_list
  keystone_admin_api_node_ips:
    type: comma_delimited_list
  DeployIdentifier:
    type: string
    description: >
      Setting this to a unique value will re-run any deployment tasks which
      perform configuration on a Heat stack-update.
  UpdateIdentifier:
    type: string
    description: >
      Setting to a previously unused value during stack-update will trigger
      package update on all nodes
  StackAction:
    type: string
    description: >
      Heat action on performed top-level stack.
    constraints:
    - allowed_values: ['CREATE', 'UPDATE']

resources:

  allNodesConfigImpl:
    type: OS::Heat::StructuredConfig
    properties:
      group: os-apply-config
      config:
        hosts:
          list_join:
          - "\n"
          - {get_param: hosts}
        hiera:
          datafiles:
            bootstrap_node:
              mapped_data:
                bootstrap_nodeid: {get_input: bootstrap_nodeid}
                bootstrap_nodeid_ip: {get_input: bootstrap_nodeid_ip}
            all_nodes:
              mapped_data:
                map_merge:
                  - enabled_services: {get_param: enabled_services}
                  # This writes out a mapping of service_name_enabled: 'true'
                  # For any services not enabled, hiera foo_enabled will
                  # return nil, as it's undefined
                  - map_merge:
                      repeat:
                        template:
                          # Note this must be string 'true' due to
                          # https://bugs.launchpad.net/heat/+bug/1617203
                          SERVICE_enabled: 'true'
                        for_each:
                          SERVICE:
                            str_split: [',', {get_param: enabled_services}]
                  # provides a mapping of service_name_ips to a list of IPs
                  - {get_param: service_ips}
                  - {get_param: service_node_names}
                  - controller_node_ips:
                      list_join:
                      - ','
                      - {get_param: controller_ips}
                    controller_node_names:
                      list_join:
                      - ','
                      - {get_param: controller_names}
                    memcached_node_ips_v6:
                      str_replace:
                        template: "['inet6:[SERVERS_LIST]']"
                        params:
                          SERVERS_LIST:
                            list_join:
                            - "]','inet6:["
                            - {get_param: memcache_node_ips}
                    keystone_public_api_node_ips:
                      str_replace:
                        template: "['SERVERS_LIST']"
                        params:
                          SERVERS_LIST:
                            list_join:
                            - "','"
                            - {get_param: keystone_public_api_node_ips}
                    keystone_admin_api_node_ips:
                      str_replace:
                        template: "['SERVERS_LIST']"
                        params:
                          SERVERS_LIST:
                            list_join:
                            - "','"
                            - {get_param: keystone_admin_api_node_ips}

                    deploy_identifier: {get_param: DeployIdentifier}
                    update_identifier: {get_param: UpdateIdentifier}
                    stack_action: {get_param: StackAction}

outputs:
  config_id:
    description: The ID of the allNodesConfigImpl resource.
    value:
      {get_resource: allNodesConfigImpl}
  hosts_entries:
    description: |
      The content that should be appended to your /etc/hosts if you want to get
      hostname-based access to the deployed nodes (useful for testing without
      setting up a DNS).
    value: {get_attr: [allNodesConfigImpl, config, hosts]}