diff --git a/.gitignore b/.gitignore
index 7b9c30c8c0a08148cdeb52f501a2a408fd516841..36bd50c5974888212ddb4d87ceb5f3286dd79c22 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,8 @@
downloaded_files
inventories/opengauss/credentials
inventories/opengauss/assembled_vars
+inventories/opengauss/report*
vagrant/.vagrant
vagrant/packer_cache
-vagrant/output*
\ No newline at end of file
+vagrant/output*
+log
\ No newline at end of file
diff --git a/01-deploy.yml b/01-deploy.yml
index 2f0de54ea5641b054584e461615b9e5429e0d280..dc2c37108dfaf32620e2d3b3183e663177ddff99 100644
--- a/01-deploy.yml
+++ b/01-deploy.yml
@@ -1,8 +1,8 @@
# code: language=ansible
- name: Deploy openGauss
- hosts: openGauss
+ hosts: opengauss
become: true
become_flags: "-i"
roles:
- - openGauss
\ No newline at end of file
+ - opengauss
\ No newline at end of file
diff --git a/README.md b/README.md
index 403ba1fc323a0b7d4fd05988f745235c92504740..505c674354ca324980328cb674f65810c5061508 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,7 @@
# 已适配的 openGauss 版本
+* 5.1.0
* 5.0.0
# 优势特点
@@ -57,6 +58,7 @@
# 更新日志
* 2023-10-13: 支持集群扩容。
+* 2023-10-18: 支持 openEuler 20.03 LTS SP3。
# 开发指南
diff --git a/ansible.cfg b/ansible.cfg
index 6b038f562135cac635b63e2e7c8fab450e3682bd..b38abadda75ec7db03fd12b6ebe6a351abe40d90 100644
--- a/ansible.cfg
+++ b/ansible.cfg
@@ -9,6 +9,9 @@ pipelining = True
become = True
host_key_checking = False
deprecation_warnings = False
-callback_whitelist = profile_tasks
+callback_whitelist = profile_tasks,log_plays
display_skipped_hosts = False
#stdout_callback = yaml
+
+[callback_log_plays]
+log_folder = ./log/
\ No newline at end of file
diff --git a/docs/00-how-to.md b/docs/00-how-to.md
index 65a76b14064568d23fd6b21efb5a03556fcaa3ff..b87f6e608a18192318009b52aa4fb5dc9485614a 100644
--- a/docs/00-how-to.md
+++ b/docs/00-how-to.md
@@ -1,5 +1,8 @@
-本文内容适合对熟悉 Ansible 的同学看。如果你对 Ansible 不了解,请看 [创建 Ansible 容器](01-ansible-in-docker.md),使用 docker 快速搭建一个可以运行本项目的 ansible 环境,降低对操作系统的依赖。
+本文内容适合对熟悉 Ansible 的同学看。
+如果你对 Ansible 不了解,请看 [创建 Ansible 容器](01-ansible-in-docker.md),使用 docker 快速搭建一个可以运行本项目的 ansible 环境,降低对操作系统的依赖。
+
+***整个说明文档里所提到的文件目录,均以 Ansible 容器环境内为例,不再另外说明。***
# hosts.ini 示例
@@ -15,7 +18,7 @@ master 组仅可以配置 1 台机器。follower 可以多台。cascade 可选
[opengauss_cascade]
192.168.56.13
-[openGauss:children]
+[opengauss:children]
opengauss_master
opengauss_follower
opengauss_cascade
@@ -25,17 +28,34 @@ opengauss_cascade
```
- name: Deploy openGauss
- hosts: openGauss
+ hosts: opengauss
become: true
become_flags: "-i"
roles:
- - openGauss
+ - opengauss
```
# 效果展示
-本地物理机,启动 6 台虚拟机,用时 9 分 30 秒完成 1 主 4 从 1 级联的架构部署。
+## 物理环境
+
+* Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz × 2
+* 12GB×8, DDR3 1333
+* WD40EZAZ-00S 单块 SATA 磁盘
+
+## 虚拟机环境
+
+ * VirtualBox 7.0
+ * 4vCPU + 4GB RAM 虚拟机共 9 台
+ * openEuler release 20.03 (LTS-SP3)
+
+## 最终部署效果
+
+1 主 2 备 2 级联,耗时 15 分钟(安装包已下载的前提下)。
+
+
+
-
+从上图的架构,扩容为 1 主 4 备 4 级联,耗时 21 分钟。
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/02-pre-set.md b/docs/02-pre-set.md
index b2bb130327bb0ca53e9750e19d1ec1526a7e157e..43c4380b83941e2bd0e630f38944356efa6eda15 100644
--- a/docs/02-pre-set.md
+++ b/docs/02-pre-set.md
@@ -1,6 +1,6 @@
# 执行 playbook 之前的准备工作。
-## 修改 `ansible-docker\inventories\opengauss\hosts.ini` 文件
+## 修改 `/workdir/inventories/opengauss/hosts.ini` 文件
这个文件是对你要部署的机器,进行一个分组编排,以及 ssh 信息填写。以 1 主 1 从 1 级联的架构为例,它的内容如下:
@@ -18,13 +18,13 @@
192.168.56.13
; 以上 3 个分组的合并组,勿动。
-[openGauss:children]
+[opengauss:children]
opengauss_master
opengauss_follower
opengauss_cascade
; 机器的 SSH 信息,请根据你的实际情况修改。
-[openGauss:vars]
+[opengauss:vars]
; ssh 用户名,如果不是 root 用户,请确保它有 sudo 权限。
ansible_ssh_user=vagrant
; ssh 密码
@@ -35,9 +35,11 @@ ansible_ssh_port=22
## 修改默认运行值。
-本项目的默认配置参数,存放在 `roles\openGauss\defaults\main.yml`,你可以参考这个文件的内容,根据实际需要做一些定制。*** 但不建议直接修改它,以考虑对不同的服务器仓库进行维护 ***
+本项目的默认配置参数,存放在 `/workdir/roles/opengauss/defaults/main.yml`,你可以参考这个文件的内容,根据实际需要做一些定制。
-建议的自定义方法,是将 `roles\openGauss\defaults\main.yml` 拷贝到 `ansible-docker\inventories\opengauss\group_vars\openGauss.yml`,再进行编辑。
+***但不建议直接修改它,以考虑对不同的服务器仓库进行维护。***
+
+建议的自定义方法,是将 `/workdir/roles/opengauss/defaults/main.yml` 拷贝到 `/workdir/inventories/opengauss/group_vars/opengauss.yml`,再进行编辑。
部分变量是可以替换或扩展的。例如
@@ -58,7 +60,7 @@ opengauss_sysctl:
net.ipv4.tcp_synack_retries: 5
```
-通过 `roles\pre-tasks\tasks\vars_combine.yml` 的处理后,我们可以得到一组合并后的变量
+通过 `roles/pre-tasks/tasks/vars_combine.yml` 的处理后,我们可以得到一组合并后的变量
```
combined_vars:
@@ -72,6 +74,6 @@ combined_vars:
# 使用自定义的 cluster_config.xml
-如果你需要手动定制集群,这里也是支持的,只需要把写好的 `cluster_config.xml` 改名为 `cluster_config.xml.j2`,存放到 `ansible-docker/inventories/opengauss/templates/cluster_config.xml.j2`,部署时会优先使用你的自定义配置。
+如果你需要手动定制集群,这里也是支持的,只需要把写好的 `cluster_config.xml` 改名为 `cluster_config.xml.j2`,存放到 `/workdir/inventories/opengauss/templates/cluster_config.xml.j2`,部署时会优先使用你的自定义配置。
接下来就可以[开始部署](03-deploy.md)
\ No newline at end of file
diff --git a/docs/03-deploy.md b/docs/03-deploy.md
index 17f8b6cc7617596686a9976ea7d2c2a44f7cc4b6..764b302f846bcc5cf1012abdf43edf680957705e 100644
--- a/docs/03-deploy.md
+++ b/docs/03-deploy.md
@@ -27,10 +27,10 @@
这里的 `pansible` 是我预置的命令别名,对应的是 `ansible-playbook`。
-1. 部署过程中自动生成的公私钥,以及账号密码,存放在 `ansible-docker/inventories/opengauss/credentials`
+1. 部署过程中自动生成的公私钥,以及账号密码,存放在 `/workdir/inventories/opengauss/credentials`
```
- ls -l ansible-docker/inventories/opengauss/credentials/
+ ls -l /workdir/inventories/opengauss/credentials/
total 24
-rw------- 1 root root 387 9月24日 14:24 opengauss_id_om
-rw-r--r-- 1 root root 82 9月24日 14:24 opengauss_id_om.pub
@@ -40,6 +40,10 @@
-rw------- 1 root root 17 9月24日 13:36 opengauss_root_pass
```
+1. 最后生成部署报告文件,存放在 `/workdir/inventories/opengauss/report.md`
+
+ 
+
# 顺利部署后,你可看到一下输出内容
## 单节点
@@ -56,15 +60,15 @@
[opengauss_cascade]
-[openGauss:children]
+[opengauss:children]
opengauss_master
opengauss_follower
opengauss_cascade
```
-## 1 主 1 从
+## 1 主 1 备
-
+
对应的 hosts.ini 分组编排内容
@@ -77,15 +81,15 @@ opengauss_cascade
[opengauss_cascade]
-[openGauss:children]
+[opengauss:children]
opengauss_master
opengauss_follower
opengauss_cascade
```
-## 1 主 1 从 1 级联
+## 1 主 1 备 1 级联
-
+
对应的 hosts.ini 分组编排内容
@@ -99,15 +103,15 @@ opengauss_cascade
[opengauss_cascade]
192.168.56.16
-[openGauss:children]
+[opengauss:children]
opengauss_master
opengauss_follower
opengauss_cascade
```
-## 1 主 2 从
+## 1 主 2 备
-
+
对应的 hosts.ini 分组编排内容
@@ -121,7 +125,7 @@ opengauss_cascade
[opengauss_cascade]
-[openGauss:children]
+[opengauss:children]
opengauss_master
opengauss_follower
opengauss_cascade
diff --git a/docs/04-expansion.md b/docs/04-expansion.md
index 36605b23989ea500943d876d7440cf3139513f0d..40ff58c93c0952c28f7acc68edf82148ca77784e 100644
--- a/docs/04-expansion.md
+++ b/docs/04-expansion.md
@@ -1,12 +1,12 @@
# 集群扩容
-*** !!!注意!!! ***
+***!!!注意!!!***
-*** 扩容有风险,操作前请仔细阅读 https://docs.opengauss.org/zh/docs/5.0.0/docs/ToolandCommandReference/gs_expansion.html ***
+***实验功能,切勿在生产环境中使用。***
-*** 仅建议在部署初期,数据量小的情况下,使用本项目进行扩容。 ***
+***扩容有风险,操作前请仔细阅读 https://docs.opengauss.org/zh/docs/5.0.0/docs/ToolandCommandReference/gs_expansion.html***
-## 修改 `ansible-docker\inventories\opengauss\hosts.ini` 文件
+## 修改 `/workdir/inventories/opengauss/hosts.ini` 文件
备机数量不可超过 8 台。
diff --git a/docs/imgs/23-09-20_1243_661.png b/docs/imgs/23-09-20_1243_661.png
deleted file mode 100644
index 43095cdca0c4d90ce29f3c5977edf0f99014c790..0000000000000000000000000000000000000000
Binary files a/docs/imgs/23-09-20_1243_661.png and /dev/null differ
diff --git a/docs/imgs/23-09-20_923_628.png b/docs/imgs/23-09-20_923_628.png
deleted file mode 100644
index f7c7306fd3c306f7fe5c22ad2400a325f757ea39..0000000000000000000000000000000000000000
Binary files a/docs/imgs/23-09-20_923_628.png and /dev/null differ
diff --git a/docs/imgs/23-10-26_1187_866.png b/docs/imgs/23-10-26_1187_866.png
new file mode 100644
index 0000000000000000000000000000000000000000..218b8cce2b02010740807d32ca9a2bdb28a9c075
Binary files /dev/null and b/docs/imgs/23-10-26_1187_866.png differ
diff --git a/docs/imgs/23-10-26_1190_1072.png b/docs/imgs/23-10-26_1190_1072.png
new file mode 100644
index 0000000000000000000000000000000000000000..0377b6835ccbf2816c9e008a9f9f3fd83f968dcb
Binary files /dev/null and b/docs/imgs/23-10-26_1190_1072.png differ
diff --git a/docs/imgs/23-10-26_972_1236.png b/docs/imgs/23-10-26_972_1236.png
new file mode 100644
index 0000000000000000000000000000000000000000..8f2d0771d2296caf69d51fd85e8445d6a5b68cdc
Binary files /dev/null and b/docs/imgs/23-10-26_972_1236.png differ
diff --git a/inventories/opengauss/group_vars/all/defaults.yml b/inventories/opengauss/group_vars/all/defaults.yml
deleted file mode 100644
index 0c13c88c4850ef39713cb2e4546dbe7534195546..0000000000000000000000000000000000000000
--- a/inventories/opengauss/group_vars/all/defaults.yml
+++ /dev/null
@@ -1 +0,0 @@
-# ansible_python_interpreter: "python3"
\ No newline at end of file
diff --git a/inventories/opengauss/group_vars/opengauss.yml b/inventories/opengauss/group_vars/opengauss.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d0f31c0d14758833c2a63cd0561aa6ddfa722671
--- /dev/null
+++ b/inventories/opengauss/group_vars/opengauss.yml
@@ -0,0 +1,3 @@
+# ansible_python_interpreter: "python3"
+
+opengauss_version: 5.0.0
diff --git a/inventories/opengauss/hosts.ini b/inventories/opengauss/hosts.ini
index df3cb66121e45a432a2ff9b7c994e9b01ba8ffbc..12aa6e78e674b3638236ccbcbd628a2c867f1f0b 100644
--- a/inventories/opengauss/hosts.ini
+++ b/inventories/opengauss/hosts.ini
@@ -1,23 +1,40 @@
; 主机,仅设置 1 个目标机。
[opengauss_master]
-192.168.56.11
+192.168.56.17
; 备机,可设置若干个或留空。不可大于 8。
[opengauss_follower]
+192.168.56.11
+192.168.56.15
192.168.56.12
+192.168.56.13
; 级联机,可设置若干个或留空。
[opengauss_cascade]
-192.168.56.13
+192.168.56.19
+192.168.56.18
+192.168.56.16
+192.168.56.14
; 以上 3 个分组的合并组,勿动。
-[openGauss:children]
+[opengauss:children]
+opengauss_master
+opengauss_follower
+opengauss_cascade
+
+; 同步复制节点分组
+[opengauss_sync_nodes:children]
opengauss_master
opengauss_follower
+
+;
+; 备节点分组
+[opengauss_replica_nodes:children]
opengauss_cascade
+opengauss_follower
; 机器的 SSH 信息,请根据你的实际情况修改。
-[openGauss:vars]
+[opengauss:vars]
; ssh 用户名,如果不是 root 用户,请确保它有 sudo 权限。
ansible_ssh_user=vagrant
; ssh 密码
diff --git a/roles/openGauss/meta/main.yml b/roles/openGauss/meta/main.yml
deleted file mode 100644
index 4c3689d8406ab31181bc16cdf7b07c56665ab984..0000000000000000000000000000000000000000
--- a/roles/openGauss/meta/main.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-dependencies:
- - name: pre-tasks
- tags:
- - always
\ No newline at end of file
diff --git a/roles/openGauss/tasks/main.yml b/roles/openGauss/tasks/main.yml
deleted file mode 100644
index df9b701debea28726a58a6e192a5b35c9faf6cd3..0000000000000000000000000000000000000000
--- a/roles/openGauss/tasks/main.yml
+++ /dev/null
@@ -1,66 +0,0 @@
----
-# tasks file for openGauss
-
-- name: Tasks always run
- tags: always
- block:
- - name: Combine vars
- ansible.builtin.import_role:
- name: "pre-tasks"
- tasks_from: "vars_combine.yml"
-
- - name: Set runtime facts
- ansible.builtin.import_tasks: runtime_facts.yml
-
-- name: Deploy cluster
- block:
- - name: Check cluster status
- ansible.builtin.command: "gs_om -t status"
- changed_when: false
- become_user: "{{ og_user }}"
- delegate_to: "{{ og_master }}"
- run_once: true
-
- rescue:
- - name: Start pre tasks
- ansible.builtin.import_tasks: pre_tasks.yml
-
- - name: Start deploy
- run_once: true
- delegate_to: "{{ og_master }}"
- ansible.builtin.import_tasks: deploy/main.yml
-
-- name: Expand cluster
- block:
- - name: Check node status
- ansible.builtin.command: "gs_om -t status --detail -h {{ og_hostname }}"
- changed_when: false
- become_user: "{{ og_user }}"
- delegate_to: "{{ og_master }}"
- register: check_node
- when: "inventory_hostname != og_master"
-
- rescue:
- - name: Hosts below will be added into cluster
- ansible.builtin.set_fact:
- og_expansion: true
- when:
- - "check_node is defined"
- - "check_node is failed"
-
- - name: Start pre tasks
- ansible.builtin.import_tasks: pre_tasks.yml
-
- - name: Start deploy
- run_once: true
- delegate_to: "{{ og_master }}"
- ansible.builtin.import_tasks: deploy/main.yml
-
-- name: Run post tasks
- ansible.builtin.import_tasks: post_tasks.yml
-
-- name: Generate reports
- ansible.builtin.import_tasks: report.yml
- tags:
- - never
- - report
diff --git a/roles/openGauss/tasks/os/user.yml b/roles/openGauss/tasks/os/user.yml
deleted file mode 100644
index cdcd6f44c4b97a11ae6ed49762736a1c380a173a..0000000000000000000000000000000000000000
--- a/roles/openGauss/tasks/os/user.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-- name: "Create group '{{ og_group }}'"
- group:
- name: "{{ og_group }}"
-
-- name: "Create user '{{ og_user }}'"
- user:
- name: "{{ og_user }}"
- group: "{{ og_group }}"
- shell: "/bin/bash"
- password: "{{ og_user_pass }}"
- update_password: on_create
-
-- name: "Fix home permission in some cases"
- file:
- path: "/home/{{ og_user }}"
- state: directory
- owner: "{{ og_user }}"
- group: "{{ og_group }}"
- recurse: true
-
-- name: "Touch /home/{{ og_user }}/.bashrc"
- file:
- path: "/home/{{ og_user }}/.bashrc"
- state: touch
- owner: "{{ og_user }}"
- group: "{{ og_group }}"
\ No newline at end of file
diff --git a/roles/openGauss/templates/cluster_config.xml.j2 b/roles/openGauss/templates/cluster_config.xml.j2
deleted file mode 100644
index ed6f4d75bcfbef2bebf38b5c5b0fe2a19b6d00e4..0000000000000000000000000000000000000000
--- a/roles/openGauss/templates/cluster_config.xml.j2
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{% for node in og_all_nodes %}
-
-
-
-
-
-
-{% if node in groups['opengauss_master'] %}
- {% if (groups['openGauss'] | count) > 2 %}
-
-
-
-
-
-
-
-
-
- {% endif %}
-
-
-
-
-
-
-{% endif %}
-
-{%
- if node not in groups['opengauss_master']
- and (groups['openGauss'] | count) > 2
-%}
-
-
-
-
-
- {% if node in groups['opengauss_cascade'] %}
-
- {% endif %}
-{% endif %}
-
-{% endfor %}
-
-
-
diff --git a/roles/openGauss/README.md b/roles/opengauss/README.md
similarity index 91%
rename from roles/openGauss/README.md
rename to roles/opengauss/README.md
index a3b44f93b3ec8efc1f1a23fc9291c8fc2e325eac..660ff95b0bc156d198cd99d2d3e49d95fd5b8645 100644
--- a/roles/openGauss/README.md
+++ b/roles/opengauss/README.md
@@ -8,7 +8,7 @@
1. 1 主 4 从 1 级联的架构,十分钟内部署完成(不含安装包的下载时间)。
1. 自动匹配 CPU 架构以及操作系统。
-1. 支持自定义 cluster_config.xml.j2 模板,优先使用 `{{ inventory_dir }}/templates/openGauss/cluster_config.xml.j2`。
+1. 支持自定义 cluster_config.xml.j2 模板,优先使用 `{{ inventory_dir }}/templates/opengauss/cluster_config.xml.j2`。
1. 默认自动生成数据库管理员密码,也可自定义变量进行替换。全程自动化,无交互步骤。
1. 部署完成后,从 `/root/.ssh/authorized_keys` 里移除相关公钥,而非删除 `/root/.ssh` 目录。
1. 本地生成的公密钥、账号密码,均存放在 `{{ inventory_dir }}/credentials` 目录内。
@@ -22,7 +22,7 @@
user_group: dbgrp
```
- 自定义变量文件 `{{ inventory_dir }}/group_vars/openGauss.yml`
+ 自定义变量文件 `{{ inventory_dir }}/group_vars/opengauss.yml`
```
opengauss_env:
@@ -57,7 +57,7 @@ master 组仅可以配置 1 台机器。follower 可以多台。cascade 可选
[opengauss_cascade]
192.168.56.13
-[openGauss:children]
+[opengauss:children]
opengauss_master
opengauss_follower
opengauss_cascade
@@ -67,7 +67,7 @@ opengauss_cascade
```
- name: Deploy openGauss database
- hosts: openGauss
+ hosts: opengauss
become: true
roles:
- openGauss
diff --git a/roles/openGauss/defaults/main.yml b/roles/opengauss/defaults/main.yml
similarity index 63%
rename from roles/openGauss/defaults/main.yml
rename to roles/opengauss/defaults/main.yml
index 127f79ef47675e5da210b5d2339d2c86eda06081..b71fc4f2f9e043bd84e075225f2879cf7b0b91cb 100644
--- a/roles/openGauss/defaults/main.yml
+++ b/roles/opengauss/defaults/main.yml
@@ -7,10 +7,14 @@ opengauss_version: 5.0.0
# 安装目录
opengauss_home: /opt/openGauss
-# 其它目录,对应 cluster_config.xml 的内容。具体请看 https://docs.opengauss.org/zh/docs/{{ opengauss_version }}/docs/InstallationGuide/%E5%88%9B%E5%BB%BAXML%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html
+# 是否禁用 bash history。生产环境请设为 true,测试环境为 false。
+og_disable_history: false
+
+# 其它目录,对应 cluster_config.xml 的内容。
+# 具体请看 https://docs.opengauss.org/zh/docs/{{ opengauss_version }}/docs/InstallationGuide/%E5%88%9B%E5%BB%BAXML%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html
opengauss_paths:
gaussdbAppPath: "{{ opengauss_home }}/install/app"
- gaussdbLogPath: "/var/log/openGauss"
+ gaussdbLogPath: "/var/log/"
tmpMppdbPath: "{{ opengauss_home }}/tmp"
corePath: "{{ opengauss_home }}/corefile"
gaussdbToolPath: "{{ opengauss_home }}/install/om"
@@ -20,18 +24,36 @@ opengauss_paths:
opengauss_env:
user_name: omm
user_group: dbgrp
- user_pass: "{{ lookup('password', inventory_dir + '/credentials/opengauss_omm_pass', chars=['ascii_letters', 'digits']) | password_hash }}"
+ user_pass: >-
+ {{
+ lookup(
+ 'password',
+ inventory_dir + '/credentials/opengauss_omm_pass',
+ chars=['ascii_letters', 'digits', 'punctuation'],
+ length=8
+ ) | password_hash
+ }}
iface_mtu: 8192
clusterName: openGauss
dataPortBase: 15400
cmServerPortBase: 15300
- cmServerPortStandby: 15500
azName: AZ1
+ swap_off: true # 关闭 swap
+ syncNum: 0 # dataNode1_syncNum
+ # locale: SQL_ASCII
# 数据库安装配置
opengauss_db_set:
locale: en_US.utf8
- root_pass: "{{ lookup('password', inventory_dir + '/credentials/opengauss_root_pass', chars=['ascii_letters', 'digits'], length=16) }}"
+ root_pass: >-
+ {{
+ lookup(
+ 'password',
+ inventory_dir + '/credentials/opengauss_root_pass',
+ chars=['ascii_letters', 'digits', 'hexdigits'],
+ length=16
+ )
+ }}
# Sysctl 的配置,可自行扩展。
# 参考官方文档->初始化安装环境->配置操作系统参数
@@ -60,5 +82,11 @@ opengauss_download:
openeuler_20: "{{ ogengauss_dl_server }}/{{ opengauss_version }}/x86_openEuler/openGauss-{{ opengauss_version }}-openEuler-64bit-all.tar.gz"
centos_7: "{{ ogengauss_dl_server }}/{{ opengauss_version }}/x86/openGauss-{{ opengauss_version }}-CentOS-64bit-all.tar.gz"
-# 初始化 og_expansion 值
+# 默认初始值
+og_hostname: "og{{ inventory_hostname | ipaddr('int') }}"
+og_all_nodes: "{{ groups['opengauss'] | sort }}"
+og_master: "{{ groups['opengauss_master'] | first }}"
+og_replicas: "{{ groups['opengauss_replica_nodes'] | sort }}"
+og_upload_path: "/opt/software/openGauss"
+og_cm_enabled: "{{ (groups['opengauss'] | count) > 2 }}"
og_expansion: false
diff --git a/roles/openGauss/handlers/main.yml b/roles/opengauss/handlers/main.yml
similarity index 100%
rename from roles/openGauss/handlers/main.yml
rename to roles/opengauss/handlers/main.yml
diff --git a/roles/opengauss/meta/main.yml b/roles/opengauss/meta/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a5678ae841f86e0b856ab6403bdcd37f33913512
--- /dev/null
+++ b/roles/opengauss/meta/main.yml
@@ -0,0 +1,13 @@
+galaxy_info:
+ author: haibin.l@linkingcloud.com
+ description: openGauss auto deploy
+ company: https://linkingcloud.cn/
+
+ license: MulanPSL-2.0
+
+ min_ansible_version: "2.1"
+
+dependencies:
+ - name: pre_tasks
+ tags:
+ - always
diff --git a/roles/openGauss/tasks/deploy/add_auth.yml b/roles/opengauss/tasks/deploy/add_auth.yml
similarity index 100%
rename from roles/openGauss/tasks/deploy/add_auth.yml
rename to roles/opengauss/tasks/deploy/add_auth.yml
diff --git a/roles/opengauss/tasks/deploy/cluster_check.yml b/roles/opengauss/tasks/deploy/cluster_check.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3bdad597d8f45c417a864ce242393f44e3545853
--- /dev/null
+++ b/roles/opengauss/tasks/deploy/cluster_check.yml
@@ -0,0 +1,50 @@
+- name: Check cluster status
+ block:
+ - name: "Query cluster detail"
+ ansible.builtin.command: >-
+ gs_om -t status --detail
+ changed_when: false
+ register: cluster_detail
+ become_user: "{{ og_user }}"
+ delegate_to: "{{ og_master }}"
+ run_once: true
+
+ rescue:
+ - name: Start pre tasks
+ ansible.builtin.import_tasks:
+ file: pre_tasks.yml
+ become_user: root
+
+ - name: Start deploy
+ ansible.builtin.import_tasks:
+ file: deploy/main.yml
+ delegate_to: "{{ og_master }}"
+ run_once: true
+
+- name: Check expansion status
+ when: "cluster_detail is succeeded"
+ block:
+ - name: Create expansion list
+ ansible.builtin.add_host:
+ hostname: "{{ item }}"
+ groups:
+ - opengauss_expand
+ loop: "{{ og_replicas }}"
+ when: "item not in cluster_detail.stdout"
+ run_once: true
+
+ - name: Start pre tasks
+ ansible.builtin.include_tasks:
+ file: pre_tasks.yml
+ when:
+ - "groups['opengauss_expand'] is defined"
+ - "inventory_hostname in groups['opengauss_expand']"
+
+ - name: Start expansion
+ ansible.builtin.import_tasks:
+ file: expansion.yml
+ vars:
+ og_expansion: true
+ delegate_to: "{{ og_master }}"
+ when: "groups['opengauss_expand'] is defined"
+ run_once: true
diff --git a/roles/opengauss/tasks/deploy/expansion.yml b/roles/opengauss/tasks/deploy/expansion.yml
new file mode 100644
index 0000000000000000000000000000000000000000..af64d2b1c21983cfac460a2dbe46e259688ccadd
--- /dev/null
+++ b/roles/opengauss/tasks/deploy/expansion.yml
@@ -0,0 +1,118 @@
+- name: Expansion list
+ ansible.builtin.debug:
+ msg: "{{ groups['opengauss_expand'] }}"
+
+# - name: Debug
+# ansible.builtin.debug:
+# msg: "{{ split_line }}"
+# loop: "{{ cluster_detail.stdout_lines | sort }}"
+# loop_control:
+# loop_var: line
+# when: "'cmserver' in line"
+# vars:
+# split_line: "{{ line | regex_replace(' {1,}', '|') | split('|') }}"
+
+- name: Create current cmserver list
+ loop: "{{ cluster_detail.stdout_lines | sort }}"
+ loop_control:
+ loop_var: line
+ when: "'cmserver' in line"
+ ansible.builtin.add_host:
+ hostname: "{{ node_info[3] }}_{{ node_info[1] }}"
+ groups:
+ - opengauss_cm
+ node_ip: "{{ node_info[2] }}"
+ vars:
+ node_info: "{{ line | regex_replace(' {1,}', '|') | split('|') }}"
+
+- name: Current config manager servers
+ ansible.builtin.debug:
+ msg: "{{ groups['opengauss_cm'] }}"
+ when: "groups['opengauss_cm'] is defined"
+
+- name: Set 'og_expand_cm_ips' facts
+ ansible.builtin.set_fact:
+ og_expand_cm_ips: >-
+ {%- for node in (groups['opengauss_cm'] | sort) -%}
+ {{ hostvars[node]['node_ip'] }}
+ {{ (loop.nextitem is defined) | ternary(',', '') }}
+ {%- endfor -%}
+ {%- if groups['opengauss_expand'] is defined -%}
+ {%- for node in (groups['opengauss_expand'] | sort) -%}
+ ,{{ node }}
+ {%- endfor -%}
+ {%- endif -%}
+ og_cm_names: >-
+ {%- for node in (groups['opengauss_cm'] | sort) -%}
+ og{{ hostvars[node]['node_ip'] | ipaddr('int') }}
+ {{ (loop.nextitem is defined) | ternary(',', '') }}
+ {%- endfor -%}
+ {%- if groups['opengauss_expand'] is defined -%}
+ {%- for node in (groups['opengauss_expand'] | sort) -%}
+ ,og{{ node | ipaddr('int') }}
+ {%- endfor -%}
+ {%- endif -%}
+ when: "groups['opengauss_cm'] is defined"
+
+# - name: Debug
+# ansible.builtin.debug:
+# msg: "{{ split_line }}"
+# loop: "{{ cluster_detail.stdout_lines | sort }}"
+# loop_control:
+# loop_var: line
+# when: "(og_data_path + '/dn') in line"
+# vars:
+# split_line: "{{ line | regex_replace(' {1,}', '|') | split('|') }}"
+
+- name: Create current data node list
+ loop: "{{ cluster_detail.stdout_lines | sort }}"
+ loop_control:
+ loop_var: line
+ when: "(og_data_path + '/dn') in line"
+ ansible.builtin.add_host:
+ hostname: "{{ node_info[3] }}_{{ node_info[1] }}"
+ groups:
+ - opengauss_dn
+ node_ip: "{{ node_info[2] }}"
+ node_name: "{{ node_info[1] }}"
+ vars:
+ node_info: "{{ line | regex_replace(' {1,}', '|') | split('|') }}"
+
+- name: Current data nodes
+ ansible.builtin.debug:
+ msg: "{{ groups['opengauss_dn'] }}"
+ when: "groups['opengauss_dn'] is defined"
+
+- name: Set 'og_data_nodes' facts
+ ansible.builtin.set_fact:
+ og_data_nodes: >-
+ {{ og_data_path }}/dn
+ {%- for node in (groups['opengauss_dn'] | sort) if (hostvars[node]['node_ip'] != og_master) -%}
+ ,{{ hostvars[node]['node_name'] }},{{ og_data_path }}/dn
+ {%- endfor -%}
+ {%- for node in (groups['opengauss_expand'] | sort) -%}
+ ,og{{ node | ipaddr('int') }},{{ og_data_path }}/dn
+ {%- endfor -%}
+ og_expansion: "{{ groups['opengauss_expand'] is defined }}"
+ when: "groups['opengauss_dn'] is defined"
+
+- name: Cluster will be expand
+ when: og_expansion
+ block:
+ - name: Update /etc/hosts
+ ansible.builtin.blockinfile:
+ path: /etc/hosts
+ marker: "# {mark} OPENGAUSS NODES"
+ block: |
+ {% for node in og_all_nodes %}
+ {{ node }} og{{ node | ipaddr('int') }} og-{{ node | replace('.', '-') }}
+ {% endfor %}
+ delegate_to: "{{ node }}"
+ loop: "{{ og_all_nodes }}"
+ loop_control:
+ loop_var: node
+
+ - name: Start expand
+ ansible.builtin.import_tasks:
+ file: deploy/main.yml
+ delegate_to: "{{ og_master }}"
diff --git a/roles/openGauss/tasks/deploy/install.yml b/roles/opengauss/tasks/deploy/install.yml
similarity index 33%
rename from roles/openGauss/tasks/deploy/install.yml
rename to roles/opengauss/tasks/deploy/install.yml
index 6f76ace3f3a4efbf5a5e0ee58268eae3e60f0ce6..b49ab6072f9c8273b13565b151e8ef7e695553bb 100644
--- a/roles/openGauss/tasks/deploy/install.yml
+++ b/roles/opengauss/tasks/deploy/install.yml
@@ -4,56 +4,44 @@
dest: "{{ og_upload_path }}/cluster_config.xml"
owner: "{{ og_user }}"
group: "{{ og_group }}"
- mode: "0600"
+ mode: "0644"
backup: true
lstrip_blocks: true
with_first_found:
- "{{ inventory_dir }}/templates/cluster_config.xml.j2"
- "cluster_config.xml.j2"
-- debug:
- msg: "{{ og_expansion }}"
-
- name: First time deploy
when: "not og_expansion"
block:
- name: Starting pre install
- ansible.builtin.command: "python3 gs_preinstall -U {{ og_user }} -G {{ og_group }} -X {{ og_upload_path }}/cluster_config.xml --non-interactive"
+ ansible.builtin.command: >-
+ {{ og_upload_path }}/script/gs_preinstall \
+ -U {{ og_user }} \
+ -G {{ og_group }} \
+ -X {{ og_upload_path }}/cluster_config.xml \
+ --non-interactive
changed_when: false
- args:
- chdir: "{{ og_upload_path }}/script"
- name: Deploy openGauss
- ansible.builtin.shell: |
- . /home/{{ og_user }}/.bashrc && \
- python3 gs_install \
+ ansible.builtin.command: >-
+ gs_install \
-X {{ og_upload_path }}/cluster_config.xml \
- --gsinit-parameter="--pwpasswd={{ combined_vars.opengauss_db_set.root_pass }}"
+ --gsinit-parameter="--pwpasswd={{ og_db_pass }}" \
+ --gsinit-parameter="--locale={{ og_locale }}"
changed_when: false
- args:
- chdir: "{{ og_home }}/install/om/script"
become_user: "{{ og_user }}"
+ become_flags: "-i"
-- name: Expand cluster
- when: "og_expansion"
- block:
- - name: Get cluster status detail
- ansible.builtin.command: "gs_om -t status --detail"
- changed_when: false
- become_user: "{{ og_user }}"
- register: cluster_status
+- name: Starting expand
+ ansible.builtin.shell: |
+ . /home/{{ og_user }}/.bashrc
- - name: Starting expand
- ansible.builtin.shell: >-
- . /home/{{ og_user }}/.bashrc &&
- python3 gs_expansion -U {{ og_user }} -G {{ og_group }} -X {{ og_upload_path }}/cluster_config.xml -h {{ expansion_list }}
- args:
- chdir: "{{ og_upload_path }}/script"
- vars:
- expansion_list: >-
- {%- for node in og_all_nodes
- if node not in cluster_status.stdout
- -%}
- {{ node }}{{ (loop.nextitem is defined) | ternary(',', '') }}
- {%- endfor -%}
- changed_when: false
+ {{ og_upload_path }}/script/gs_expansion \
+ -U {{ og_user }} \
+ -G {{ og_group }} \
+ -X {{ og_upload_path }}/cluster_config.xml \
+ -h {{ groups['opengauss_expand'] | join(',') }}
+ become_user: root
+ changed_when: false
+ when: "og_expansion"
diff --git a/roles/openGauss/tasks/deploy/known_hosts.yml b/roles/opengauss/tasks/deploy/known_hosts.yml
similarity index 93%
rename from roles/openGauss/tasks/deploy/known_hosts.yml
rename to roles/opengauss/tasks/deploy/known_hosts.yml
index 5d4d0167a3e1d7a2acbc18fffe293608e04108f5..286b335d1cfe3dcf8445980f79302690ecbbd357 100644
--- a/roles/openGauss/tasks/deploy/known_hosts.yml
+++ b/roles/opengauss/tasks/deploy/known_hosts.yml
@@ -1,4 +1,4 @@
-- name: "Update known_hosts"
+- name: "Update .ssh/known_hosts"
ansible.builtin.blockinfile:
path: "{{ og_ssh.home }}/.ssh/known_hosts"
owner: "{{ og_ssh.user }}"
diff --git a/roles/openGauss/tasks/deploy/main.yml b/roles/opengauss/tasks/deploy/main.yml
similarity index 43%
rename from roles/openGauss/tasks/deploy/main.yml
rename to roles/opengauss/tasks/deploy/main.yml
index 620b7210984d94aeca5b095cf7991705c91e0700..b7ed008ba32daf1f85843e45dcc4ec072decd48f 100644
--- a/roles/openGauss/tasks/deploy/main.yml
+++ b/roles/opengauss/tasks/deploy/main.yml
@@ -1,5 +1,6 @@
- name: Scan hosts key
- ansible.builtin.command: "ssh-keyscan -p {{ host_port }} {{ node }},og{{ node | ipaddr('int') }}"
+ ansible.builtin.command: >-
+ ssh-keyscan -p {{ host_port }} {{ node }},og{{ node | ipaddr('int') }}
changed_when: false
loop: "{{ og_all_nodes }}"
loop_control:
@@ -9,7 +10,8 @@
register: known_host_keys
- name: Config known hosts
- ansible.builtin.include_tasks: deploy/known_hosts.yml
+ ansible.builtin.include_tasks:
+ file: deploy/known_hosts.yml
with_items:
- user: root
group: root
@@ -21,19 +23,27 @@
loop_var: og_ssh
- name: Config authorized keys
- ansible.builtin.include_tasks: deploy/add_auth.yml
+ ansible.builtin.include_tasks:
+ file: deploy/add_auth.yml
loop: "{{ og_all_nodes }}"
loop_control:
loop_var: node
-- name: Check gs_om command
- ansible.builtin.shell: "which gs_om || echo 'not installed'"
- changed_when: false
- register: gs_com_st
+- name: Starting deploy or expand
+ delegate_to: "{{ og_master }}"
+ block:
+ - name: Check gs_om command
+ ansible.builtin.command:
+ cmd: which gs_om
+ become_user: "{{ og_user }}"
+ changed_when: false
-- name: Upload packages
- ansible.builtin.import_tasks: deploy/upload.yml
- when: "'not installed' in gs_com_st.stdout_lines"
+ rescue:
+ - name: Upload packages
+ ansible.builtin.import_tasks:
+ file: deploy/upload.yml
-- name: Start install
- ansible.builtin.import_tasks: deploy/install.yml
+ always:
+ - name: In progressing
+ ansible.builtin.import_tasks:
+ file: deploy/install.yml
diff --git a/roles/openGauss/tasks/deploy/upload.yml b/roles/opengauss/tasks/deploy/upload.yml
similarity index 66%
rename from roles/openGauss/tasks/deploy/upload.yml
rename to roles/opengauss/tasks/deploy/upload.yml
index 59c97d420c7e5b5ddc786c6a7d58a437deaea8d3..cc2145bff05a0b4df4a1d525230d9841360dbd5f 100644
--- a/roles/openGauss/tasks/deploy/upload.yml
+++ b/roles/opengauss/tasks/deploy/upload.yml
@@ -6,16 +6,25 @@
state: directory
mode: "0755"
- - name: "Extracting {{ og_pkg_url | basename }}"
+ - name: "Uploading {{ og_pkg_name }}"
ansible.builtin.unarchive:
- src: "{{ playbook_dir }}/downloaded_files/{{ og_pkg_url | basename }}"
+ src: "{{ playbook_dir }}/downloaded_files/{{ og_pkg_name }}"
dest: "{{ og_upload_path }}/"
+ list_files: true
+ creates: "{{ og_upload_path }}/version.cfg"
+ register: og_upload
- - name: "Extracting {{ og_pkg_url | basename | replace('all', 'om') }}"
+ - name: "Extracting om tar file"
ansible.builtin.unarchive:
remote_src: true
- src: "{{ og_upload_path }}/{{ og_pkg_url | basename | replace('all', 'om') }}"
+ src: "{{ og_upload_path }}/{{ file }}"
dest: "{{ og_upload_path }}/"
+ creates: "{{ og_upload_path }}/script/gs_om"
+ loop: "{{ og_upload.files | default([]) }}"
+ loop_control:
+ loop_var: file
+ when:
+ - "'om.tar.gz' in file"
rescue:
- name: "Get {{ og_pkg_url }}"
@@ -32,7 +41,7 @@
- name: Downloading
ansible.builtin.get_url:
url: "{{ og_pkg_url }}"
- dest: "{{ playbook_dir }}/downloaded_files/{{ og_pkg_url | basename }}"
+ dest: "{{ playbook_dir }}/downloaded_files/{{ og_pkg_name }}"
mode: "0644"
- name: Repeat tasks
diff --git a/roles/opengauss/tasks/main.yml b/roles/opengauss/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e52c96df099f58f30c43d33fef839ff41551df47
--- /dev/null
+++ b/roles/opengauss/tasks/main.yml
@@ -0,0 +1,51 @@
+---
+# tasks file for openGauss
+
+- name: Tasks always run
+ tags: always
+ block:
+ - name: Combine vars
+ ansible.builtin.import_role:
+ name: "pre_tasks"
+ tasks_from: "vars_combine.yml"
+
+ - name: Set runtime facts
+ ansible.builtin.import_tasks: runtime_facts.yml
+
+ - name: Check cluster status
+ ansible.builtin.import_tasks:
+ file: deploy/cluster_check.yml
+
+ # - name: Cluster will be expand
+ # when: og_expansion
+ # block:
+ # - name: Start pre tasks
+ # ansible.builtin.import_tasks:
+ # file: pre_tasks.yml
+ # when: "inventory_hostname in groups['opengauss_expand']"
+
+ # - name: Update /etc/hosts
+ # ansible.builtin.blockinfile:
+ # path: /etc/hosts
+ # marker: "# {mark} OPENGAUSS NODES"
+ # block: |
+ # {% for node in og_all_nodes %}
+ # {{ node }} og{{ node | ipaddr('int') }} og-{{ node | replace('.', '-') }}
+ # {% endfor %}
+ # delegate_to: "{{ node }}"
+ # loop: "{{ og_all_nodes }}"
+ # loop_control:
+ # loop_var: node
+ # run_once: true
+
+ # - name: Start deploy
+ # ansible.builtin.import_tasks:
+ # file: deploy/main.yml
+ # delegate_to: "{{ og_master }}"
+ # run_once: true
+
+ always:
+ - name: Run post tasks
+ ansible.builtin.import_tasks:
+ file: post_tasks.yml
+ tags: always
diff --git a/roles/openGauss/tasks/os/CentOS.yml b/roles/opengauss/tasks/os/CentOS.yml
similarity index 100%
rename from roles/openGauss/tasks/os/CentOS.yml
rename to roles/opengauss/tasks/os/CentOS.yml
diff --git a/roles/openGauss/tasks/os/Debian.yml b/roles/opengauss/tasks/os/Debian.yml
similarity index 100%
rename from roles/openGauss/tasks/os/Debian.yml
rename to roles/opengauss/tasks/os/Debian.yml
diff --git a/roles/openGauss/tasks/os/RedHat.yml b/roles/opengauss/tasks/os/RedHat.yml
similarity index 100%
rename from roles/openGauss/tasks/os/RedHat.yml
rename to roles/opengauss/tasks/os/RedHat.yml
diff --git a/roles/openGauss/tasks/os/common_set.yml b/roles/opengauss/tasks/os/common_set.yml
similarity index 74%
rename from roles/openGauss/tasks/os/common_set.yml
rename to roles/opengauss/tasks/os/common_set.yml
index 058df6c740996fc8715afbdbb5bb02226dafc66e..db7c9707b23af4e781d806fa4f6639542a507459 100644
--- a/roles/openGauss/tasks/os/common_set.yml
+++ b/roles/opengauss/tasks/os/common_set.yml
@@ -37,6 +37,7 @@
line: "HISTSIZE=0"
regex: "^HISTSIZE="
backup: true
+ when: "og_disable_history"
- name: Install dependencies
ansible.builtin.package:
@@ -87,10 +88,38 @@
changed_when: false
register: backiface
-- name: "The backIp1's is {{ backiface.stdout | trim }}"
+- name: "Set og_back_iface name"
ansible.builtin.set_fact:
og_back_iface: "{{ backiface.stdout | trim }}"
- name: "Set MTU on the fly: {{ combined_vars.opengauss_env.iface_mtu }}"
ansible.builtin.command: "ifconfig {{ og_back_iface }} mtu {{ combined_vars.opengauss_env.iface_mtu }}"
changed_when: false
+
+- name: Disable swap
+ when:
+ - "combined_vars.opengauss_env.swap_off"
+ - "ansible_swaptotal_mb > 0"
+ block:
+ - name: Find swap line in /etc/fstab
+ ansible.builtin.shell:
+ cmd: |
+ set -o pipefail &&
+ grep 'swap' /etc/fstab | grep -v '^#'
+ changed_when: false
+ register: swap_st
+
+ - name: Disable swap in /etc/fstab
+ ansible.builtin.replace:
+ path: /etc/fstab
+ regexp: "^{{ line }}"
+ replace: "#{{ line }}"
+ loop: "{{ swap_st.stdout_lines }}"
+ loop_control:
+ loop_var: line
+ when: "swap_st.stdout_lines is truthy"
+
+ - name: Disable swap by command
+ ansible.builtin.command:
+ swapoff -a
+ changed_when: false
diff --git a/roles/openGauss/tasks/os/not_supported.yml b/roles/opengauss/tasks/os/not_supported.yml
similarity index 100%
rename from roles/openGauss/tasks/os/not_supported.yml
rename to roles/opengauss/tasks/os/not_supported.yml
diff --git a/roles/openGauss/tasks/os/openEuler.yml b/roles/opengauss/tasks/os/openEuler.yml
similarity index 100%
rename from roles/openGauss/tasks/os/openEuler.yml
rename to roles/opengauss/tasks/os/openEuler.yml
diff --git a/roles/openGauss/tasks/os/ssh.yml b/roles/opengauss/tasks/os/ssh.yml
similarity index 68%
rename from roles/openGauss/tasks/os/ssh.yml
rename to roles/opengauss/tasks/os/ssh.yml
index c95055121cb220366091229262b30fbf4d78934d..b2e56b33d3f649f470df600d4209727ea40d5c74 100644
--- a/roles/openGauss/tasks/os/ssh.yml
+++ b/roles/opengauss/tasks/os/ssh.yml
@@ -1,18 +1,18 @@
- name: Config ssh on host
block:
- - name: "Create {{ og_ssh.home }}/.ssh"
- file:
+ - name: "Create '.ssh' under {{ og_ssh.home }}"
+ ansible.builtin.file:
path: "{{ og_ssh.home }}/.ssh"
state: directory
- mode: 0700
+ mode: "0700"
owner: "{{ og_ssh.user }}"
group: "{{ og_ssh.group }}"
- name: Upload ssh keys
- copy:
+ ansible.builtin.copy:
src: "{{ og_key }}"
dest: "{{ og_ssh.home }}/.ssh/{{ og_key | basename | replace('opengauss_', '') }}"
- mode: 0400
+ mode: "0400"
owner: "{{ og_ssh.user }}"
group: "{{ og_ssh.group }}"
backup: true
@@ -24,28 +24,28 @@
register: keys_list
- name: Failed when no keys founded
- fail:
+ ansible.builtin.fail:
msg: "SSH keys not existed"
when: "keys_list.skipped"
- # - name: Add authorized key
- # authorized_key:
- # user: "{{ og_ssh.user }}"
- # state: present
- # key: "{{ lookup('file', pub_key) }}"
- # with_fileglob:
- # - "{{ inventory_dir }}/credentials/opengauss_id*.pub"
- # loop_control:
- # loop_var: pub_key
- # label: "{{ og_ssh.home }}/.ssh/{{ pub_key | basename | replace('opengauss_', '') }}"
+ - name: Permit root login
+ ansible.builtin.lineinfile:
+ path: /etc/ssh/sshd_config
+ regexp: "^PermitRootLogin"
+ line: "PermitRootLogin yes"
+ backup: true
rescue:
- name: Generate ssh keys
+ delegate_to: localhost
+ become: false
+ run_once: true
block:
- - name: "Create {{ inventory_dir }}/credentials"
- file:
+ - name: "Create local path 'credentials' under {{ inventory_dir }}"
+ ansible.builtin.file:
path: "{{ inventory_dir }}/credentials"
state: directory
+ mode: "0755"
- name: Generate opengauss_id_om
openssh_keypair:
@@ -57,8 +57,8 @@
openssh_keypair:
path: "{{ inventory_dir }}/credentials/opengauss_id_rsa"
regenerate: never
- delegate_to: localhost
- become: false
- run_once: true
- - include_tasks: os/ssh.yml
\ No newline at end of file
+
+ - name: Repeat tasks
+ ansible.builtin.include_tasks:
+ file: os/ssh.yml
diff --git a/roles/opengauss/tasks/os/user.yml b/roles/opengauss/tasks/os/user.yml
new file mode 100644
index 0000000000000000000000000000000000000000..21c6d7d503bf3a2eb4299e38a8b50442b0543886
--- /dev/null
+++ b/roles/opengauss/tasks/os/user.yml
@@ -0,0 +1,30 @@
+- name: Create user on each node
+ delegate_to: "{{ node }}"
+ block:
+ - name: "Create group '{{ og_group }}'"
+ ansible.builtin.group:
+ name: "{{ og_group }}"
+
+ - name: "Create user '{{ og_user }}'"
+ ansible.builtin.user:
+ name: "{{ og_user }}"
+ group: "{{ og_group }}"
+ shell: "/bin/bash"
+ password: "{{ og_user_pass }}"
+ update_password: on_create
+
+ - name: "Fix home permission in some cases"
+ ansible.builtin.file:
+ path: "/home/{{ og_user }}"
+ state: directory
+ owner: "{{ og_user }}"
+ group: "{{ og_group }}"
+ recurse: true
+
+ - name: "Create .bashrc under /home/{{ og_user }}"
+ ansible.builtin.file:
+ path: "/home/{{ og_user }}/.bashrc"
+ state: touch
+ owner: "{{ og_user }}"
+ group: "{{ og_group }}"
+ mode: "0644"
diff --git a/roles/openGauss/tasks/post_tasks.yml b/roles/opengauss/tasks/post_tasks.yml
similarity index 79%
rename from roles/openGauss/tasks/post_tasks.yml
rename to roles/opengauss/tasks/post_tasks.yml
index 1d165c9b24f6dae82b59e6825aedcbcf0b3f956c..026d3e71910e84bc7f4a8640f247890910b63511 100644
--- a/roles/openGauss/tasks/post_tasks.yml
+++ b/roles/opengauss/tasks/post_tasks.yml
@@ -29,3 +29,11 @@
ansible.builtin.debug:
msg: |
{{ cluster_status.stdout_lines }}
+
+ - name: "Create report.md in {{ inventory_dir }}"
+ ansible.builtin.template:
+ src: report.md.j2
+ dest: "{{ inventory_dir }}/report.md"
+ mode: "0644"
+ delegate_to: localhost
+ become: false
diff --git a/roles/openGauss/tasks/pre_tasks.yml b/roles/opengauss/tasks/pre_tasks.yml
similarity index 77%
rename from roles/openGauss/tasks/pre_tasks.yml
rename to roles/opengauss/tasks/pre_tasks.yml
index fa2c03487cd650bbda17ca261466b208ca2e36ec..6bd44a423755dc0581b9543dc2b49578719aeb6a 100644
--- a/roles/openGauss/tasks/pre_tasks.yml
+++ b/roles/opengauss/tasks/pre_tasks.yml
@@ -14,10 +14,15 @@
- "os/not_supported.yml"
- name: Config user on hosts
- ansible.builtin.import_tasks: os/user.yml
+ ansible.builtin.include_tasks:
+ file: os/user.yml
+ with_items: "{{ groups['opengauss_expand'] | default(og_all_nodes) }}"
+ loop_control:
+ loop_var: node
- name: Config ssh on hosts
- ansible.builtin.include_tasks: os/ssh.yml
+ ansible.builtin.include_tasks:
+ file: os/ssh.yml
with_items:
- user: root
group: root
diff --git a/roles/openGauss/tasks/report.yml b/roles/opengauss/tasks/report.yml
similarity index 100%
rename from roles/openGauss/tasks/report.yml
rename to roles/opengauss/tasks/report.yml
diff --git a/roles/openGauss/tasks/runtime_facts.yml b/roles/opengauss/tasks/runtime_facts.yml
similarity index 37%
rename from roles/openGauss/tasks/runtime_facts.yml
rename to roles/opengauss/tasks/runtime_facts.yml
index e08cf82f2abe1e9facf29a36551ef3cd49f30f45..c92fd4229ce27b523ba238a80bb929a665f729f6 100644
--- a/roles/openGauss/tasks/runtime_facts.yml
+++ b/roles/opengauss/tasks/runtime_facts.yml
@@ -5,23 +5,30 @@
og_user_pass: "{{ combined_vars.opengauss_env.user_pass }}"
og_home: "{{ combined_vars.opengauss_home }}"
og_paths: "{{ combined_vars.opengauss_paths }}"
- og_pkg_url: >-
- {{ combined_vars.opengauss_download
- [ansible_architecture]
- [(ansible_distribution | replace(' ', '_') | lower)
- + '_'
- + ansible_distribution_major_version] }}
og_ver: "{{ combined_vars.opengauss_version }}"
- og_hostname: "og{{ inventory_hostname | ipaddr('int') }}"
og_data_path: "{{ combined_vars.opengauss_paths.dataPath }}"
- og_all_nodes: "{{ groups['openGauss'] | sort }}"
- og_master: "{{ groups['opengauss_master'] | first }}"
+ og_db_pass: "{{ combined_vars.opengauss_db_set.root_pass }}"
+ og_locale: "{{ combined_vars.opengauss_env.locale | default(ansible_env.LANG) }}"
+ og_cluster_config:
+ az_name: "{{ combined_vars.opengauss_env.azName | default('AZ1') }}"
+ az_priority: "{{ combined_vars.opengauss_env.azPriority | default('1') }}"
+ port_base: "{{ combined_vars.opengauss_env.cmServerPortBase }}"
+ port_data: "{{ combined_vars.opengauss_env.dataPortBase }}"
+ sync_num: "{{ combined_vars.opengauss_env.syncNum }}"
- name: Set runtime facts - 2
ansible.builtin.set_fact:
- og_upload_path: "/opt/software/{{ og_pkg_url | dirname | basename }}_{{ og_pkg_url | basename | replace('.tar.gz', '') }}"
- og_host_list: >-
- {%- for node in og_all_nodes -%}
- og{{ node | ipaddr('int') }}{{ (loop.nextitem is defined) | ternary(',', '') }}
- {%- endfor -%}
- og_ip_list: "{{ og_all_nodes | join(',') }}"
+ og_all_names: >-
+ og{{ og_master | ipaddr('int') }}{% for node in og_replicas %},og{{ node | ipaddr('int') }}{% endfor %}
+ og_all_ips: >-
+ {{ og_master }}{% for node in og_replicas %},{{ node }}{% endfor %}
+ og_all_dn_nodes: >-
+ {{ og_data_path }}/dn{% for node in og_replicas %},og{{ node | ipaddr('int') }},{{ og_data_path }}/dn{% endfor %}
+ og_pkg_url: >-
+ {{ combined_vars.opengauss_download
+ [ansible_architecture]
+ [(ansible_distribution | replace(' ', '_') | lower)
+ + '_'
+ + ansible_distribution_major_version]
+ | replace(opengauss_version, og_ver) }}
+ og_pkg_name: "openGauss_{{ og_ver }}_{{ ansible_distribution }}_{{ ansible_distribution_version }}_{{ ansible_architecture }}.tar.gz"
diff --git a/roles/opengauss/templates/cluster_config.xml.j2 b/roles/opengauss/templates/cluster_config.xml.j2
new file mode 100644
index 0000000000000000000000000000000000000000..57f21804873d475364cbe08706c4d4cbc5761f3d
--- /dev/null
+++ b/roles/opengauss/templates/cluster_config.xml.j2
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{ lookup('template', 'cluster_master.xml.j2') }}
+{% if (og_replicas | count) > 0 %}
+{{ lookup('template', 'cluster_replicas.xml.j2') }}
+{% endif %}
+
+
diff --git a/roles/opengauss/templates/cluster_master.xml.j2 b/roles/opengauss/templates/cluster_master.xml.j2
new file mode 100644
index 0000000000000000000000000000000000000000..b69e7029195b13c93450ecb8ecdfcc0bb1300abc
--- /dev/null
+++ b/roles/opengauss/templates/cluster_master.xml.j2
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% if og_cm_enabled %}
+
+
+
+
+
+
+
+
+
+{% endif %}
+
\ No newline at end of file
diff --git a/roles/opengauss/templates/cluster_replicas.xml.j2 b/roles/opengauss/templates/cluster_replicas.xml.j2
new file mode 100644
index 0000000000000000000000000000000000000000..f6dae6ead3b57d2aaa4e3536b05f463c7b52cb62
--- /dev/null
+++ b/roles/opengauss/templates/cluster_replicas.xml.j2
@@ -0,0 +1,19 @@
+
+
+{% for node in (groups['opengauss_replica_nodes'] | sort) %}
+
+
+
+
+
+
+{% if (groups['opengauss'] | count) > 2 %}
+
+
+
+
+{% endif %}
+
+
+{% endfor %}
+
diff --git a/roles/opengauss/templates/report.md.j2 b/roles/opengauss/templates/report.md.j2
new file mode 100644
index 0000000000000000000000000000000000000000..81bbb654e4572fff40be2f4e5dff6a5f9ead1b29
--- /dev/null
+++ b/roles/opengauss/templates/report.md.j2
@@ -0,0 +1,19 @@
+# 集群信息
+
+```
+{% for line in cluster_status.stdout_lines %}
+{{ line }}
+{% endfor %}
+```
+
+# 部署信息
+
+| | |
+|---|---|
+| 版本 | {{ og_ver }} |
+| 工作目录 | {{ og_home }} |
+| 数据目录 | {{ og_data_path }} |
+| Linux 用户名称 | {{ og_user }} |
+| Linux 用户密码 | {{ lookup('password', inventory_dir + '/credentials/opengauss_omm_pass', chars=['ascii_letters', 'digits']) }} |
+| Linux 用户组 | {{ og_group }} |
+| 数据库 root 密码 |{{ combined_vars.opengauss_db_set.root_pass }} |
\ No newline at end of file
diff --git a/roles/openGauss/tests/inventory b/roles/opengauss/tests/inventory
similarity index 100%
rename from roles/openGauss/tests/inventory
rename to roles/opengauss/tests/inventory
diff --git a/roles/openGauss/tests/test.yml b/roles/opengauss/tests/test.yml
similarity index 100%
rename from roles/openGauss/tests/test.yml
rename to roles/opengauss/tests/test.yml
diff --git a/roles/openGauss/vars/main.yml b/roles/opengauss/vars/main.yml
similarity index 100%
rename from roles/openGauss/vars/main.yml
rename to roles/opengauss/vars/main.yml
diff --git a/roles/pre-tasks/meta/main.yml b/roles/pre-tasks/meta/main.yml
deleted file mode 100644
index c572acc9f8b466bea50f2799b0ca1956418b862c..0000000000000000000000000000000000000000
--- a/roles/pre-tasks/meta/main.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-galaxy_info:
- author: your name
- description: your role description
- company: your company (optional)
-
- # If the issue tracker for your role is not on github, uncomment the
- # next line and provide a value
- # issue_tracker_url: http://example.com/issue/tracker
-
- # Choose a valid license ID from https://spdx.org - some suggested licenses:
- # - BSD-3-Clause (default)
- # - MIT
- # - GPL-2.0-or-later
- # - GPL-3.0-only
- # - Apache-2.0
- # - CC-BY-4.0
- license: license (GPL-2.0-or-later, MIT, etc)
-
- min_ansible_version: 2.1
-
- # If this a Container Enabled role, provide the minimum Ansible Container version.
- # min_ansible_container_version:
-
- #
- # Provide a list of supported platforms, and for each platform a list of versions.
- # If you don't wish to enumerate all versions for a particular platform, use 'all'.
- # To view available platforms and versions (or releases), visit:
- # https://galaxy.ansible.com/api/v1/platforms/
- #
- # platforms:
- # - name: Fedora
- # versions:
- # - all
- # - 25
- # - name: SomePlatform
- # versions:
- # - all
- # - 1.0
- # - 7
- # - 99.99
-
- galaxy_tags: []
- # List tags for your role here, one per line. A tag is a keyword that describes
- # and categorizes the role. Users find roles by searching for tags. Be sure to
- # remove the '[]' above, if you add tags to this list.
- #
- # NOTE: A tag is limited to a single word comprised of alphanumeric characters.
- # Maximum 20 tags per role.
-
-dependencies: []
- # List your role dependencies here, one per line. Be sure to remove the '[]' above,
- # if you add dependencies to this list.
diff --git a/roles/pre-tasks/README.md b/roles/pre_tasks/README.md
similarity index 100%
rename from roles/pre-tasks/README.md
rename to roles/pre_tasks/README.md
diff --git a/roles/pre-tasks/defaults/main.yml b/roles/pre_tasks/defaults/main.yml
similarity index 100%
rename from roles/pre-tasks/defaults/main.yml
rename to roles/pre_tasks/defaults/main.yml
diff --git a/roles/pre-tasks/handlers/main.yml b/roles/pre_tasks/handlers/main.yml
similarity index 100%
rename from roles/pre-tasks/handlers/main.yml
rename to roles/pre_tasks/handlers/main.yml
diff --git a/roles/pre_tasks/meta/main.yml b/roles/pre_tasks/meta/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6b4ee8049e0faca2757de50338acd98c1871e7a2
--- /dev/null
+++ b/roles/pre_tasks/meta/main.yml
@@ -0,0 +1,8 @@
+galaxy_info:
+ author: haibin.l@linkingcloud.com
+ description: Pre tasks for openGauss deploy
+ company: https://linkingcloud.cn/
+
+ license: MulanPSL-2.0
+
+ min_ansible_version: "2.1"
diff --git a/roles/pre-tasks/tasks/main.yml b/roles/pre_tasks/tasks/main.yml
similarity index 60%
rename from roles/pre-tasks/tasks/main.yml
rename to roles/pre_tasks/tasks/main.yml
index 12ade9c3fe0815c6e372ebff84f07911cd2f588c..9ca5d2af2f85ba3757e30aff5a0245ae3fd9b151 100644
--- a/roles/pre-tasks/tasks/main.yml
+++ b/roles/pre_tasks/tasks/main.yml
@@ -2,36 +2,40 @@
# tasks file for pre-tasks
- name: Set timezone
- set_fact:
+ ansible.builtin.set_fact:
global_timezone: "Asia/Shanghai"
when: global_timezone is not defined
-- block:
+- name: Set network vars
+ when: "global_bond_iface is not defined"
+ block:
- name: Get iface name when 'global_bond_iface' is not defined
- shell: "ip a | grep {{ ansible_host | default(inventory_hostname) }} | awk '{print $NF}'"
+ ansible.builtin.shell: >-
+ set -o pipefail &&
+ ip a | grep {{ ansible_host | default(inventory_hostname) }} | awk '{print $NF}'
changed_when: false
register: iface_name
- name: Set 'global_bond_iface' var
- set_fact:
+ ansible.builtin.set_fact:
global_bond_iface: "{{ iface_name.stdout | trim }}"
global_bond_ip: "{{ ansible_host | default(inventory_hostname) }}"
- when: "global_bond_iface is not defined"
-- name: "Set `inventory_dir` equal to `playbook_dir`"
- set_fact:
- inventory_dir: "{{ playbook_dir }}"
- when:
- - inventory_dir is not defined
- - playbook_dir is defined
+# - name: "Set `inventory_dir` equal to `playbook_dir`"
+# ansible.builtin.set_fact:
+# inventory_dir: "{{ playbook_dir }}"
+# when:
+# - inventory_dir is not defined
+# - playbook_dir is defined
- name: Set python vars
- set_fact:
+ ansible.builtin.set_fact:
python_name: "{{ (ansible_python_interpreter | default(discovered_interpreter_python)) | basename }}"
pip_name: "{{ (ansible_python_interpreter | default(discovered_interpreter_python)) | basename | replace('python', 'pip') }}"
# This task must be the last
-- include_tasks: "{{ item }}"
+- name: Config system by distribuion and os family
+ ansible.builtin.include_tasks: "{{ item }}"
with_first_found:
- files:
- "os/{{ ansible_distribution }}.yml"
diff --git a/roles/pre-tasks/tasks/os/Kylin Linux Advanced Server_V10.yml b/roles/pre_tasks/tasks/os/Kylin Linux Advanced Server_V10.yml
similarity index 63%
rename from roles/pre-tasks/tasks/os/Kylin Linux Advanced Server_V10.yml
rename to roles/pre_tasks/tasks/os/Kylin Linux Advanced Server_V10.yml
index 3034251b8b24ea70617cb916432c01c73c1a9615..e97734ead9fa28d906483a480e3f6eef47b188b0 100644
--- a/roles/pre-tasks/tasks/os/Kylin Linux Advanced Server_V10.yml
+++ b/roles/pre_tasks/tasks/os/Kylin Linux Advanced Server_V10.yml
@@ -1,3 +1,3 @@
- name: Set custom vars
- set_fact:
+ ansible.builtin.set_fact:
custom_pkg_mgr: dnf
diff --git a/roles/pre-tasks/tasks/vars_combine.yml b/roles/pre_tasks/tasks/vars_combine.yml
similarity index 75%
rename from roles/pre-tasks/tasks/vars_combine.yml
rename to roles/pre_tasks/tasks/vars_combine.yml
index 4d90e6c5e23c7aa3c46f3d8b2176243231c6ec1b..e64f8a01be8131c665095e4b53d83c7e8d0c585c 100644
--- a/roles/pre-tasks/tasks/vars_combine.yml
+++ b/roles/pre_tasks/tasks/vars_combine.yml
@@ -10,10 +10,11 @@
# msg: "{{ temp_role_vars }}"
- name: Assembling group vars files
- assemble:
- src: "{{ inventory_dir }}/group_vars"
+ ansible.builtin.assemble:
+ src: "{{ inventory_dir }}/group_vars/"
dest: "{{ inventory_dir }}/assembled_vars/{{ group_names | hash('md5') }}.yml"
- regexp: "({{ group_names | join('|') }})"
+ regexp: "({{ group_names | sort | join('|') }})"
+ mode: "0644"
delegate_to: localhost
become: false
run_once: true
@@ -27,7 +28,7 @@
# msg: "{{ temp_group_vars }}"
- name: Combine vars from role and groups
- set_fact:
+ ansible.builtin.set_fact:
combined_vars: "{{ role_vars | combine(group_vars, recursive=true) }}"
vars:
role_vars: "{{ lookup('vars', 'temp_role_vars') }}"
@@ -40,11 +41,14 @@
# - meta: end_play
rescue:
- - name: "Create {{ inventory_dir }}/assembled_vars"
- file:
+ - name: "Create 'assembled_vars' path in {{ inventory_dir }}"
+ ansible.builtin.file:
path: "{{ inventory_dir }}/assembled_vars"
state: directory
+ mode: "0755"
delegate_to: localhost
become: false
+ run_once: true
- - include_tasks: vars_combine.yml
\ No newline at end of file
+ - name: Repeat tasks
+ ansible.builtin.include_tasks: vars_combine.yml
diff --git a/roles/pre-tasks/tests/inventory b/roles/pre_tasks/tests/inventory
similarity index 100%
rename from roles/pre-tasks/tests/inventory
rename to roles/pre_tasks/tests/inventory
diff --git a/roles/pre-tasks/tests/test.yml b/roles/pre_tasks/tests/test.yml
similarity index 100%
rename from roles/pre-tasks/tests/test.yml
rename to roles/pre_tasks/tests/test.yml
diff --git a/roles/pre-tasks/vars/main.yml b/roles/pre_tasks/vars/main.yml
similarity index 100%
rename from roles/pre-tasks/vars/main.yml
rename to roles/pre_tasks/vars/main.yml
diff --git a/vagrant/openEuler2003_x86_64.pkr.hcl b/vagrant/openEuler2003_x86_64.pkr.hcl
index e18a43ee91c8f95cbd94503f1c366cbbfba4a781..027cb3861e806cc71254af84e251030f33043aeb 100644
--- a/vagrant/openEuler2003_x86_64.pkr.hcl
+++ b/vagrant/openEuler2003_x86_64.pkr.hcl
@@ -8,15 +8,15 @@ packer {
}
source "virtualbox-iso" "openeuler" {
- guest_os_type = "CentOS_64"
+ // guest_os_type = "CentOS_64"
iso_url = "https://mirror.sjtu.edu.cn/openeuler/openEuler-22.03-LTS-SP2/ISO/x86_64/openEuler-22.03-LTS-SP2-netinst-x86_64-dvd.iso"
iso_checksum = "sha256:e7186579da6d16430bb8577e2989761e726af8166a08f7e02cde55a614b42d66"
ssh_username = "vagrant"
ssh_password = "vagrant"
shutdown_command = "echo 'vagrant' | sudo -S shutdown -P now"
boot_command = [
- "",
- ]
+ "",
+ ]
}
build {
diff --git a/vagrant/openEuler2203_x86_64.pkr.hcl b/vagrant/openEuler2203_x86_64.pkr.hcl
new file mode 100644
index 0000000000000000000000000000000000000000..40a529f12ad3e6020ef27dd69628306f39902122
--- /dev/null
+++ b/vagrant/openEuler2203_x86_64.pkr.hcl
@@ -0,0 +1,26 @@
+packer {
+ required_plugins {
+ virtualbox = {
+ version = "~> 1"
+ source = "github.com/hashicorp/virtualbox"
+ }
+ }
+}
+
+source "virtualbox-iso" "openeuler" {
+ guest_os_type = "CentOS"
+ iso_url = "https://mirror.sjtu.edu.cn/openeuler/openEuler-22.03-LTS-SP2/ISO/x86_64/openEuler-22.03-LTS-SP2-netinst-x86_64-dvd.iso"
+ iso_checksum = "sha256:e7186579da6d16430bb8577e2989761e726af8166a08f7e02cde55a614b42d66"
+ ssh_username = "vagrant"
+ ssh_password = "vagrant"
+ shutdown_command = "echo 'vagrant' | sudo -S shutdown -P now"
+ boot_command = [
+ "",
+ "",
+ ]
+}
+
+build {
+ sources = ["sources.virtualbox-iso.openeuler"]
+}
+