summaryrefslogtreecommitdiffstats
path: root/roles/etcd/tasks/main.yml
blob: c09da3b6101edf324a6ccef099aad95fe5136070 (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
126
127
128
129
130
131
132
133
134
---
- name: Set hostname and ip facts
  set_fact:
    # Store etcd_hostname and etcd_ip such that they will be available
    # in hostvars. Defaults for these variables are set in etcd_common.
    etcd_hostname: "{{ etcd_hostname }}"
    etcd_ip: "{{ etcd_ip }}"

- name: Install etcd
  package: name=etcd{{ '-' + etcd_version if etcd_version is defined else '' }} state=present
  when: not etcd_is_containerized | bool

- name: Pull etcd container
  command: docker pull {{ openshift.etcd.etcd_image }}
  register: pull_result
  changed_when: "'Downloaded newer image' in pull_result.stdout"
  when:
  - etcd_is_containerized | bool
  - not openshift.common.is_etcd_system_container | bool

- name: Install etcd container service file
  template:
    dest: "/etc/systemd/system/etcd_container.service"
    src: etcd.docker.service
  when:
  - etcd_is_containerized | bool
  - not openshift.common.is_etcd_system_container | bool


# Start secondary etcd instance for third party integrations
# TODO: Determine an alternative to using thirdparty variable

- name: Create configuration directory
  file:
    path: "{{ etcd_conf_dir }}"
    state: directory
    mode: 0700
  when: etcd_is_thirdparty | bool

  # TODO: retest with symlink to confirm it does or does not function
- name: Copy service file for etcd instance
  copy:
    src: /usr/lib/systemd/system/etcd.service
    dest: "/etc/systemd/system/{{ etcd_service }}.service"
    remote_src: True
  when: etcd_is_thirdparty | bool

- name: Create third party etcd service.d directory exists
  file:
    path: "{{ etcd_systemd_dir }}"
    state: directory
  when: etcd_is_thirdparty | bool

- name: Configure third part etcd service unit file
  template:
    dest: "{{ etcd_systemd_dir }}/custom.conf"
    src: custom.conf.j2
  when: etcd_is_thirdparty

  # TODO: this task may not be needed with Validate permissions
- name: Ensure etcd datadir exists
  file:
    path: "{{ etcd_data_dir }}"
    state: directory
    mode: 0700
  when: etcd_is_containerized | bool

- name: Ensure etcd datadir ownership for thirdparty datadir
  file:
    path: "{{ etcd_data_dir }}"
    state: directory
    mode: 0700
    owner: etcd
    group: etcd
    recurse: True
  when: etcd_is_thirdparty | bool

  # TODO: Determine if the below reload would work here, for now just reload
- name:
  command: systemctl daemon-reload
  when: etcd_is_thirdparty | bool

- name: Disable system etcd when containerized
  systemd:
    name: etcd
    state: stopped
    enabled: no
    masked: yes
    daemon_reload: yes
  when:
  - etcd_is_containerized | bool
  - not openshift.common.is_etcd_system_container | bool
  register: task_result
  failed_when: "task_result|failed and 'could not' not in task_result.msg|lower"

- name: Install etcd container service file
  template:
    dest: "/etc/systemd/system/etcd_container.service"
    src: etcd.docker.service
  when: etcd_is_containerized | bool and not openshift.common.is_etcd_system_container | bool

- name: Install Etcd system container
  include: system_container.yml
  when: etcd_is_containerized | bool and openshift.common.is_etcd_system_container | bool

- name: Validate permissions on the config dir
  file:
    path: "{{ etcd_conf_dir }}"
    state: directory
    owner: "{{ 'etcd' if not etcd_is_containerized | bool else omit }}"
    group: "{{ 'etcd' if not etcd_is_containerized | bool else omit }}"
    mode: 0700

- name: Write etcd global config file
  template:
    src: etcd.conf.j2
    dest: "{{ etcd_conf_file }}"
    backup: true
  notify:
  - restart etcd

- name: Enable etcd
  systemd:
    name: "{{ etcd_service }}"
    state: started
    enabled: yes
  register: start_result

- include: etcdctl.yml
  when: openshift_etcd_etcdctl_profile | default(true) | bool

- name: Set fact etcd_service_status_changed
  set_fact:
    etcd_service_status_changed: "{{ start_result | changed }}"