From 17df29d9d71f8bf149d4cb5e21f39c3e85914b4a Mon Sep 17 00:00:00 2001 From: liubo Date: Tue, 24 Sep 2019 10:48:54 +0800 Subject: [PATCH] update config check 2.1 (#973) * Add config check * Update config check (#971) --- deploy.yml | 7 +++ roles/check_config/tasks/check_pd_config.yml | 42 ++++++++++++++++ .../check_config/tasks/check_tidb_config.yml | 43 ++++++++++++++++ .../check_config/tasks/check_tikv_config.yml | 49 +++++++++++++++++++ roles/check_config/tasks/main.yml | 19 +++++++ rolling_update.yml | 7 +++ 6 files changed, 167 insertions(+) create mode 100644 roles/check_config/tasks/check_pd_config.yml create mode 100644 roles/check_config/tasks/check_tidb_config.yml create mode 100644 roles/check_config/tasks/check_tikv_config.yml create mode 100644 roles/check_config/tasks/main.yml diff --git a/deploy.yml b/deploy.yml index 37383f7cd..a46ac8d2e 100644 --- a/deploy.yml +++ b/deploy.yml @@ -38,6 +38,13 @@ roles: - check_config_dynamic +- name: Pre-check for configuration + hosts: pd_servers[0] + tags: + - check_config + roles: + - check_config + - name: deploying node_exporter hosts: monitored_servers tags: diff --git a/roles/check_config/tasks/check_pd_config.yml b/roles/check_config/tasks/check_pd_config.yml new file mode 100644 index 000000000..b6093389d --- /dev/null +++ b/roles/check_config/tasks/check_pd_config.yml @@ -0,0 +1,42 @@ +--- + +- name: Load PD vars + include_vars: file={{ playbook_dir }}/roles/pd/defaults/main.yml name=pd_vars_check + +- name: "Load customized config: tidb-ansible/conf/pd.yml" + include_vars: file={{ playbook_dir }}/conf/pd.yml name=pd_conf_custom_check + +- name: Load default config + include_vars: file={{ playbook_dir }}/roles/pd/vars/default.yml name=pd_conf_default_check + +- name: Generate dynamic config + set_fact: + pd_conf_generated_check: + replication: + location-labels: "{{ pd_vars_check.location_labels }}" + security: + cacert-path: >- + {%- if enable_tls|default(false) -%}{{ pd_cert_dir }}/ca.pem{%- else -%}{%- endif -%} + cert-path: >- + {%- if enable_tls|default(false) -%}{{ pd_cert_dir }}/pd-server-{{ pd_host }}.pem{%- else -%}{%- endif -%} + key-path: >- + {%- if enable_tls|default(false) -%}{{ pd_cert_dir }}/pd-server-{{ pd_host }}-key.pem{%- else -%}{%- endif -%} + +- name: Generate final config + set_fact: + pd_conf: "{{ pd_conf_custom_check | with_default_dicts(pd_conf_generated_check, pd_conf_default_check) }}" + +- name: Create configuration file + template: src={{ playbook_dir }}/roles/pd/templates/pd.toml.j2 dest={{ tidb_check_dir }}/pd.toml mode=0644 backup=yes + +- name: Deploy PD binary + copy: src="{{ resources_dir }}/bin/pd-server" dest="{{ tidb_check_dir }}/" mode=0755 backup=yes + +- name: Check PD config + shell: cd {{ tidb_check_dir }} && ./pd-server -config ./pd.toml -config-check + register: pd_check_result + +- name: Check result + fail: + msg: "PD config error" + when: "'successful' not in pd_check_result.stdout" diff --git a/roles/check_config/tasks/check_tidb_config.yml b/roles/check_config/tasks/check_tidb_config.yml new file mode 100644 index 000000000..37ac4cc63 --- /dev/null +++ b/roles/check_config/tasks/check_tidb_config.yml @@ -0,0 +1,43 @@ +--- + +- name: Load TiDB default vars + include_vars: file={{ playbook_dir }}/roles/tidb/defaults/main.yml name=tidb_vars_check + +- name: Load TiDB group vars + include_vars: file={{ playbook_dir }}/group_vars/tidb_servers.yml name=tidb_vars_check + +- name: "Load customized config: tidb-ansible/conf/tidb.yml" + include_vars: file={{ playbook_dir }}/conf/tidb.yml name=tidb_conf_custom_check + +- name: Load default config + include_vars: file={{ playbook_dir }}/roles/tidb/vars/default.yml name=tidb_conf_default_check + +- name: generate dynamic config + set_fact: + tidb_conf_generated_check: + security: + cluster-ssl-ca: >- + {%- if enable_tls|default(false) -%}{{ tidb_cert_dir }}/ca.pem{%- else -%}{%- endif -%} + cluster-ssl-cert: >- + {%- if enable_tls|default(false) -%}{{ tidb_cert_dir }}/tidb-server-{{ tidb_host }}.pem{%- else -%}{%- endif -%} + cluster-ssl-key: >- + {%- if enable_tls|default(false) -%}{{ tidb_cert_dir }}/tidb-server-{{ tidb_host }}-key.pem{%- else -%}{%- endif -%} + +- name: Generate final config + set_fact: + tidb_conf: "{{ tidb_conf_custom_check | with_default_dicts(tidb_conf_generated_check, tidb_conf_default_check) }}" + +- name: Create configuration file + template: src={{ playbook_dir }}/roles/tidb/templates/tidb.toml.j2 dest={{ tidb_check_dir }}/tidb.toml mode=0644 backup=yes + +- name: Deploy TiDB binary + copy: src="{{ resources_dir }}/bin/tidb-server" dest="{{ tidb_check_dir }}/" mode=0755 backup=yes + +- name: Check TiDB config + shell: cd {{ tidb_check_dir }} && ./tidb-server -config ./tidb.toml -config-check + register: tidb_check_result + +- name: Check result + fail: + msg: "TiDB config error" + when: "'successful' not in tidb_check_result.stdout" diff --git a/roles/check_config/tasks/check_tikv_config.yml b/roles/check_config/tasks/check_tikv_config.yml new file mode 100644 index 000000000..aeabda73b --- /dev/null +++ b/roles/check_config/tasks/check_tikv_config.yml @@ -0,0 +1,49 @@ +--- + +- set_fact: + tikv_log_dir: "{{ deploy_dir }}/log" + +- name: Load TiKV vars + include_vars: file={{ playbook_dir }}/roles/tikv/defaults/main.yml name=tikv_vars_check + +- name: "Load customized config: tidb-ansible/conf/tikv.yml" + include_vars: file={{ playbook_dir }}/conf/tikv.yml name=tikv_conf_custom_check + +- name: Load default config + include_vars: file={{ playbook_dir }}/roles/tikv/vars/default.yml name=tikv_conf_default_check + +- name: generate dynamic config + set_fact: + tikv_conf_generated_check: + server: + labels: "{{ tikv_vars_check.labels }}" + rocksdb: + wal-dir: "{{ tikv_vars_check.wal_dir }}" + raftstore: + raftdb-path: "{{ tikv_vars_check.raftdb_path }}" + security: + ca-path: >- + {%- if enable_tls|default(false) -%}{{ tikv_cert_dir }}/ca.pem{%- else -%}{%- endif -%} + cert-path: >- + {%- if enable_tls|default(false) -%}{{ tikv_cert_dir }}/tikv-server-{{ tikv_host }}.pem{%- else -%}{%- endif -%} + key-path: >- + {%- if enable_tls|default(false) -%}{{ tikv_cert_dir }}/tikv-server-{{ tikv_host }}-key.pem{%- else -%}{%- endif -%} + +- name: Generate final config + set_fact: + tikv_conf: "{{ tikv_conf_custom_check | with_default_dicts(tikv_conf_generated_check, tikv_conf_default_check) }}" + +- name: Create configuration file + template: src={{ playbook_dir }}/roles/tikv/templates/tikv.toml.j2 dest={{ tidb_check_dir }}/tikv.toml mode=0644 backup=yes + +- name: Deploy TiKV binary + copy: src="{{ resources_dir }}/bin/tikv-server" dest="{{ tidb_check_dir }}/" mode=0755 backup=yes + +- name: Check TiKV config + shell: cd {{ tidb_check_dir }} && ./tikv-server --pd-endpoints pd:port --config ./tikv.toml --config-check + register: tikv_check_result + +- name: Check result + fail: + msg: "TiKV config error" + when: "'successful' not in tikv_check_result.stdout" diff --git a/roles/check_config/tasks/main.yml b/roles/check_config/tasks/main.yml new file mode 100644 index 000000000..101910637 --- /dev/null +++ b/roles/check_config/tasks/main.yml @@ -0,0 +1,19 @@ +--- + +- set_fact: + tidb_check_dir: "/tmp/tidb_check_config" + +- name: Create temporary check directory + file: name={{ tidb_check_dir }} state=directory + +- name: Check PD config + include_tasks: check_pd_config.yml + +- name: Check TiKV config + include_tasks: check_tikv_config.yml + +- name: Check TiDB config + include_tasks: check_tidb_config.yml + +- name: Delete temporary check directory + file: name={{ tidb_check_dir }} state=absent diff --git a/rolling_update.yml b/rolling_update.yml index e4d5dfaee..1d9d25468 100644 --- a/rolling_update.yml +++ b/rolling_update.yml @@ -55,6 +55,13 @@ - current_version.stdout_lines[0].replace(' ','').split(':')[1] < "v2.0.1" - tidb_version >= "v2.1.0" or tidb_version == "latest" +- name: Pre-check for configuration + hosts: pd_servers[0] + tags: + - check_config + roles: + - check_config + - hosts: pd_servers[0] any_errors_fatal: true serial: 1