--- # 检查前置条件 - name: 检查前置条件 include_tasks: check_prerequisites.yml # 安装依赖包 - name: 安装必要的系统工具 (RedHat系列) package: name: - yum-utils - device-mapper-persistent-data - lvm2 state: present when: ansible_facts['os_family'] == "RedHat" - name: 安装必要的系统工具 (Debian系列) apt: name: - apt-transport-https - ca-certificates - curl - gnupg-agent - software-properties-common state: present when: ansible_facts['os_family'] == "Debian" - name: 安装必要的系统工具 (Darwin) homebrew: name: - docker state: present when: ansible_facts['os_family'] == "Darwin" # 添加Docker仓库 - name: 添加Docker仓库 get_url: url: "{{ docker_repository }}" dest: /etc/yum.repos.d/docker-ce.repo mode: '0644' when: ansible_facts['os_family'] == "RedHat" # 安装Docker - name: 安装Docker package: name: "{{ docker_packages }}" state: present when: docker_check.rc != 0 # 启动Docker服务 - name: 启动并启用Docker服务 systemd: name: docker state: started enabled: yes # 创建OpenGauss数据目录 - name: 创建OpenGauss数据目录 file: path: "{{ opengauss_data_dir }}" state: directory mode: '0777' # 拉取官方OpenGauss镜像 - name: 拉取OpenGauss Docker镜像 docker_image: name: "opengauss/opengauss-server:{{ opengauss_version }}" source: pull register: pull_image_result # 停止并移除已存在的容器(如果存在) - name: 检查容器是否存在 command: docker ps -a -f name={{ opengauss_container_name }} register: container_exists changed_when: false ignore_errors: true - name: 移除已存在的容器 command: docker rm -f {{ opengauss_container_name }} when: opengauss_container_name in container_exists.stdout ignore_errors: true # 运行OpenGauss容器 - name: 运行OpenGauss Docker容器 docker_container: name: "{{ opengauss_container_name }}" image: "opengauss/opengauss-server:{{ opengauss_version }}" state: started privileged: yes restart_policy: always ports: - "{{ opengauss_host_port }}:{{ opengauss_port }}" env: GS_PASSWORD: "{{ opengauss_password | string }}" GS_NODENAME: "{{ opengauss_nodename | string }}" GS_USERNAME: "{{ opengauss_username | string }}" GS_USER_PASSWORD: "{{ opengauss_password | string }}" GS_PORT: "{{ opengauss_port | string }}" GS_DB: "{{ opengauss_dbname | string }}" volumes: - "{{ opengauss_data_dir }}:{{ opengauss_container_data_dir }}" healthcheck: test: ["CMD-SHELL", "gs_ctl query -D {{ opengauss_container_data_dir }}"] interval: 10s timeout: 5s retries: 3 # 等待OpenGauss服务启动 - name: 等待OpenGauss服务启动 pause: seconds: 60 # 增加等待时间确保服务完全启动 # 检查OpenGauss连接 - name: 检查OpenGauss容器状态 command: docker ps -f name={{ opengauss_container_name }} --format "{{ '{{' }}.Status{{ '}}' }}" register: container_status changed_when: false retries: 5 delay: 10 until: container_status.stdout.find("healthy") != -1 or container_status.stdout.find("Up") != -1 - name: 显示OpenGauss容器状态 debug: msg: "OpenGauss容器状态: {{ container_status.stdout }}" # 验证数据库连接 - name: 等待数据库端口可用 wait_for: host: localhost port: "{{ opengauss_port }}" timeout: 300 state: started - name: 测试数据库连接 command: > docker exec {{ opengauss_container_name }} gsql -d {{ opengauss_dbname }} -U {{ opengauss_username }} -W {{ opengauss_password }} -p {{ opengauss_port }} -c "SELECT version();" register: db_test changed_when: false ignore_errors: true - name: 显示数据库连接测试结果 debug: msg: "数据库连接测试结果: {{ db_test.stdout if db_test.rc == 0 else db_test.stderr }}"