Merge "Remove empty metadata_settings from iscsid and multipathd templates"
[apex-tripleo-heat-templates.git] / docker / services / ironic-conductor.yaml
1 heat_template_version: pike
2
3 description: >
4   OpenStack containerized Ironic Conductor service
5
6 parameters:
7   DockerIronicConductorImage:
8     description: image
9     type: string
10   DockerIronicConfigImage:
11     description: The container image to use for the ironic config_volume
12     type: string
13   EndpointMap:
14     default: {}
15     description: Mapping of service endpoint -> protocol. Typically set
16                  via parameter_defaults in the resource registry.
17     type: json
18   ServiceData:
19     default: {}
20     description: Dictionary packing service data
21     type: json
22   ServiceNetMap:
23     default: {}
24     description: Mapping of service_name -> network name. Typically set
25                  via parameter_defaults in the resource registry.  This
26                  mapping overrides those in ServiceNetMapDefaults.
27     type: json
28   DefaultPasswords:
29     default: {}
30     type: json
31   RoleName:
32     default: ''
33     description: Role name on which the service is applied
34     type: string
35   RoleParameters:
36     default: {}
37     description: Parameters specific to the role
38     type: json
39
40 resources:
41
42   ContainersCommon:
43     type: ./containers-common.yaml
44
45   MySQLClient:
46     type: ../../puppet/services/database/mysql-client.yaml
47
48   IronicConductorBase:
49     type: ../../puppet/services/ironic-conductor.yaml
50     properties:
51       EndpointMap: {get_param: EndpointMap}
52       ServiceData: {get_param: ServiceData}
53       ServiceNetMap: {get_param: ServiceNetMap}
54       DefaultPasswords: {get_param: DefaultPasswords}
55       RoleName: {get_param: RoleName}
56       RoleParameters: {get_param: RoleParameters}
57
58 outputs:
59   role_data:
60     description: Role data for the Ironic Conductor role.
61     value:
62       service_name: {get_attr: [IronicConductorBase, role_data, service_name]}
63       config_settings:
64         map_merge:
65           - get_attr: [IronicConductorBase, role_data, config_settings]
66           # to avoid hard linking errors we store these on the same
67           # volume/device as the ironic master_path
68           # https://github.com/docker/docker/issues/7457
69           - ironic::drivers::pxe::tftp_root: /var/lib/ironic/tftpboot
70           - ironic::drivers::pxe::tftp_master_path: /var/lib/ironic/tftpboot/master_images
71           - ironic::pxe::tftp_root: /var/lib/ironic/tftpboot
72           - ironic::pxe::http_root: /var/lib/ironic/httpboot
73           - ironic::conductor::http_root: /var/lib/ironic/httpboot
74       step_config: &step_config
75         list_join:
76           - "\n"
77           - - {get_attr: [IronicConductorBase, role_data, step_config]}
78             - {get_attr: [MySQLClient, role_data, step_config]}
79       service_config_settings: {get_attr: [IronicConductorBase, role_data, service_config_settings]}
80       # BEGIN DOCKER SETTINGS
81       puppet_config:
82         config_volume: ironic
83         puppet_tags: ironic_config
84         step_config: *step_config
85         config_image: {get_param: DockerIronicConfigImage}
86       kolla_config:
87         /var/lib/kolla/config_files/ironic_conductor.json:
88           command: /usr/bin/ironic-conductor
89           config_files:
90             - source: "/var/lib/kolla/config_files/src/*"
91               dest: "/"
92               merge: true
93               preserve_properties: true
94           permissions:
95             - path: /var/lib/ironic
96               owner: ironic:ironic
97               recurse: true
98             - path: /var/log/ironic
99               owner: ironic:ironic
100               recurse: true
101       docker_config:
102         step_4:
103           ironic_conductor:
104             start_order: 80
105             image: {get_param: DockerIronicConductorImage}
106             net: host
107             privileged: true
108             restart: always
109             volumes:
110               list_concat:
111                 - {get_attr: [ContainersCommon, volumes]}
112                 -
113                   - /var/lib/kolla/config_files/ironic_conductor.json:/var/lib/kolla/config_files/config.json:ro
114                   - /var/lib/config-data/puppet-generated/ironic/:/var/lib/kolla/config_files/src:ro
115                   - /lib/modules:/lib/modules:ro
116                   - /sys:/sys
117                   - /dev:/dev
118                   - /run:/run #shared?
119                   - /var/lib/ironic:/var/lib/ironic
120                   - /var/log/containers/ironic:/var/log/ironic
121             environment:
122               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
123       host_prep_tasks:
124         - name: create persistent directories
125           file:
126             path: "{{ item }}"
127             state: directory
128           with_items:
129             - /var/log/containers/ironic
130             - /var/lib/ironic
131         - name: stat /httpboot
132           stat: path=/httpboot
133           register: stat_httpboot
134         - name: stat /tftpboot
135           stat: path=/tftpboot
136           register: stat_tftpboot
137         - name: stat /var/lib/ironic/httpboot
138           stat: path=/var/lib/ironic/httpboot
139           register: stat_ironic_httpboot
140         - name: stat /var/lib/ironic/tftpboot
141           stat: path=/var/lib/ironic/tftpboot
142           register: stat_ironic_tftpboot
143         # cannot use 'copy' module as with 'remote_src' it doesn't support recursion
144         - name: migrate /httpboot to containerized (if applicable)
145           command: /bin/cp -R /httpboot /var/lib/ironic/httpboot
146           when: stat_httpboot.stat.exists and not stat_ironic_httpboot.stat.exists
147         - name: migrate /tftpboot to containerized (if applicable)
148           command: /bin/cp -R /tftpboot /var/lib/ironic/tftpboot
149           when: stat_tftpboot.stat.exists and not stat_ironic_tftpboot.stat.exists
150         # Even if there was nothing to copy from original locations,
151         # we need to create the dirs before starting the containers
152         - name: ensure ironic pxe directories exist
153           file:
154             path: /var/lib/ironic/{{ item }}
155             state: directory
156           with_items:
157             - httpboot
158             - tftpboot
159       upgrade_tasks:
160         - name: Stop and disable ironic_conductor service
161           tags: step2
162           service: name=openstack-ironic-conductor state=stopped enabled=no