Merge "Restructure Designate CI jobs"
diff --git a/.zuul.yaml b/.zuul.yaml
deleted file mode 100644
index eab10ad..0000000
--- a/.zuul.yaml
+++ /dev/null
@@ -1,50 +0,0 @@
-- job:
-    name: designate-bind9-stable-2025-1
-    parent: designate-bind9
-    nodeset: openstack-single-node-noble
-    override-checkout: stable/2025.1
-
-- job:
-    name: designate-bind9-stable-2024-2
-    parent: designate-bind9
-    nodeset: openstack-single-node-jammy
-    override-checkout: stable/2024.2
-
-- job:
-    name: designate-bind9-stable-2024-1
-    parent: designate-bind9
-    nodeset: openstack-single-node-jammy
-    override-checkout: stable/2024.1
-
-- job:
-    name: designate-bind9-multipool
-    parent: designate-base
-    nodeset: openstack-single-node-jammy
-    vars:
-      devstack_localrc:
-        DESIGNATE_BACKEND_DRIVER: multipool-bind9
-      devstack_local_conf:
-        post-config:
-          "$DESIGNATE_CONF":
-            service:central:
-              scheduler_filters: "pool_id_attribute, in_doubt_default_pool"
-        test-config:
-          "$TEMPEST_CONFIG":
-            dns_feature_enabled:
-              test_multipool_with_delete_opt: True
-      tempest_test_regex: ^designate_tempest_plugin.tests.scenario.v2.test_designate_multipool.DesignateMultiPoolTest
-
-- project:
-    templates:
-      - designate-devstack-jobs
-      - check-requirements
-      - publish-openstack-docs-pti
-      - tempest-plugin-jobs
-      - release-notes-jobs-python3
-    check:
-      jobs:
-        - designate-bind9-stable-2025-1
-        - designate-bind9-stable-2024-2
-        - designate-bind9-stable-2024-1
-        - designate-bind9-multipool
-        - neutron-tempest-plugin-designate-scenario
diff --git a/playbooks/designate-bind9/post.yaml b/playbooks/designate-bind9/post.yaml
new file mode 100644
index 0000000..97beb0b
--- /dev/null
+++ b/playbooks/designate-bind9/post.yaml
@@ -0,0 +1,4 @@
+- hosts: all
+  become: True
+  roles:
+    - bind-logs-conf
diff --git a/playbooks/designate-pdns4/post.yaml b/playbooks/designate-pdns4/post.yaml
new file mode 100644
index 0000000..103755c
--- /dev/null
+++ b/playbooks/designate-pdns4/post.yaml
@@ -0,0 +1,4 @@
+- hosts: all
+  become: True
+  roles:
+    - pdns4-logs-conf
diff --git a/roles/bind-logs-conf/defaults/main.yaml b/roles/bind-logs-conf/defaults/main.yaml
new file mode 100644
index 0000000..f8fb8de
--- /dev/null
+++ b/roles/bind-logs-conf/defaults/main.yaml
@@ -0,0 +1 @@
+stage_dir: "{{ ansible_user_dir }}"
diff --git a/roles/bind-logs-conf/tasks/main.yaml b/roles/bind-logs-conf/tasks/main.yaml
new file mode 100644
index 0000000..9fded23
--- /dev/null
+++ b/roles/bind-logs-conf/tasks/main.yaml
@@ -0,0 +1,38 @@
+- name: Ensure target directory exists
+  file:
+    path: "{{ stage_dir }}/etc/bind"
+    state: directory
+
+- name: Find bind config files
+  find:
+    path: /etc/bind
+    file_type: any
+  register: bind_configs
+
+- name: Dereference bind configs
+  stat:
+    path: "{{ item.path }}"
+  with_items: "{{ bind_configs.files }}"
+  register: bind_configs_deref
+
+- name: Link configurations
+  file:
+    src: "{{ item.stat.lnk_source | default(item.stat.path) }}"
+    dest: "{{ stage_dir }}/etc/bind/{{ item.stat.path | basename }}"
+    state: hard
+  with_items: "{{ bind_configs_deref.results }}"
+  when: item.stat.isreg or item.stat.islnk
+
+# NOTE(frickler) Copied from devstack role export-devstack-journal
+- name: Ensure {{ stage_dir }}/logs exists
+  become: true
+  file:
+    path: "{{ stage_dir }}/logs"
+    state: directory
+    owner: "{{ ansible_user }}"
+
+- name: Collect bind journal
+  become: true
+  shell:
+    cmd: |
+      journalctl -o short-precise --unit named > {{ stage_dir }}/logs/bind9.txt
diff --git a/roles/pdns4-logs-conf/defaults/main.yaml b/roles/pdns4-logs-conf/defaults/main.yaml
new file mode 100644
index 0000000..f8fb8de
--- /dev/null
+++ b/roles/pdns4-logs-conf/defaults/main.yaml
@@ -0,0 +1 @@
+stage_dir: "{{ ansible_user_dir }}"
diff --git a/roles/pdns4-logs-conf/tasks/main.yaml b/roles/pdns4-logs-conf/tasks/main.yaml
new file mode 100644
index 0000000..716274d
--- /dev/null
+++ b/roles/pdns4-logs-conf/tasks/main.yaml
@@ -0,0 +1,38 @@
+- name: Ensure target directory exists
+  file:
+    path: "{{ stage_dir }}/etc/powerdns"
+    state: directory
+
+- name: Find pdns config files
+  find:
+    path: /etc/powerdns
+    file_type: any
+  register: pdns_configs
+
+- name: Dereference pdns4 configs
+  stat:
+    path: "{{ item.path }}"
+  with_items: "{{ pdns_configs.files }}"
+  register: pdns_configs_deref
+
+- name: Link configurations
+  file:
+    src: "{{ item.stat.lnk_source | default(item.stat.path) }}"
+    dest: "{{ stage_dir }}/etc/powerdns/{{ item.stat.path | basename }}"
+    state: hard
+  with_items: "{{ pdns_configs_deref.results }}"
+  when: item.stat.isreg or item.stat.islnk
+
+# NOTE(frickler) Copied from devstack role export-devstack-journal
+- name: Ensure {{ stage_dir }}/logs exists
+  become: true
+  file:
+    path: "{{ stage_dir }}/logs"
+    state: directory
+    owner: "{{ ansible_user }}"
+
+- name: Collect pdns journal
+  become: true
+  shell:
+    cmd: |
+      journalctl -o short-precise --unit pdns > {{ stage_dir }}/logs/pdns.txt.gz
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
new file mode 100644
index 0000000..0cc2e66
--- /dev/null
+++ b/zuul.d/jobs.yaml
@@ -0,0 +1,144 @@
+- job:
+    name: designate-core
+    parent: devstack-tempest
+    nodeset: openstack-single-node-noble
+    vars: &base_vars
+      devstack_localrc:
+        DESIGNATE_SERVICE_PORT_DNS: 5322
+        TEMPEST_PLUGINS: /opt/stack/designate-tempest-plugin
+        API_WORKERS: 2
+      devstack_plugins:
+        designate: https://opendev.org/openstack/designate
+        designate-tempest-plugin: https://opendev.org/openstack/designate-tempest-plugin.git
+      devstack_services:
+        designate: true
+        s-account: false
+        s-container: false
+        s-object: false
+        s-proxy: false
+        cinder: false
+        c-api: false
+        c-bak: false
+        c-vol: false
+      tox_envlist: all
+      tempest_test_regex: |
+        designate_tempest_plugin.*
+    required-projects: &base_required_projects
+      - openstack/designate
+      - openstack/designate-dashboard
+      - openstack/designate-tempest-plugin
+      - openstack/python-designateclient
+    timeout: 4200
+    irrelevant-files: &base_irrelevant_files
+      - ^.*\.rst$
+      - ^api-ref/.*$
+      - ^doc/.*$
+      - ^releasenotes/.*$
+
+- job:
+    name: designate-bind9-core
+    post-run: playbooks/designate-bind9/post.yaml
+    parent: designate-core
+
+- job:
+    name: designate-bind9-with-keystone-default-roles
+    post-run: playbooks/designate-bind9/post.yaml
+    parent: designate-core
+    nodeset: openstack-single-node-noble
+    vars:
+      devstack_local_conf:
+        post-config:
+          $DESIGNATE_CONF:
+            oslo_policy:
+              enforce_new_defaults: False
+              enforce_scope: False
+        test-config:
+          "$TEMPEST_CONFIG":
+            dns_feature_enabled:
+              enforce_new_defaults: False
+            enforce_scope:
+              designate: False
+
+- job:
+    name: designate-bind9-core-catalog-zones
+    parent: designate-bind9-core
+    vars:
+      devstack_localrc:
+        DESIGNATE_USE_CATALOG_ZONES: true
+
+- job:
+    name: designate-pdns4-core
+    post-run: playbooks/designate-pdns4/post.yaml
+    parent: designate-core
+    vars:
+      devstack_localrc:
+        DESIGNATE_BACKEND_DRIVER: pdns4
+
+- job:
+    name: designate-pdns4-postgres-core
+    parent: designate-pdns4-core
+    vars:
+      devstack_services:
+        mysql: False
+        postgresql: True
+    voting: false
+
+- job:
+    name: designate-bind9-stable-2024-1
+    parent: designate-bind9-core
+    nodeset: openstack-single-node-jammy
+    override-checkout: stable/2024.1
+
+- job:
+    name: designate-bind9-stable-2024-2
+    parent: designate-bind9-core
+    nodeset: openstack-single-node-jammy
+    override-checkout: stable/2024.2
+
+- job:
+    name: designate-bind9-stable-2025-1
+    parent: designate-bind9-core
+    nodeset: openstack-single-node-noble
+    override-checkout: stable/2025.1
+
+- job:
+    name: designate-bind9-multipool
+    parent: designate-core
+    nodeset: openstack-single-node-noble
+    vars:
+      devstack_localrc:
+        DESIGNATE_BACKEND_DRIVER: multipool-bind9
+      devstack_local_conf:
+        post-config:
+          "$DESIGNATE_CONF":
+            service:central:
+              scheduler_filters: "pool_id_attribute, in_doubt_default_pool"
+        test-config:
+          "$TEMPEST_CONFIG":
+            dns_feature_enabled:
+              test_multipool_with_delete_opt: True
+      tempest_test_regex: ^designate_tempest_plugin.tests.scenario.v2.test_designate_multipool.DesignateMultiPoolTest
+
+# IPv6
+- job:
+    name: designate-core-only-ipv6
+    parent: devstack-tempest-ipv6
+    nodeset: openstack-single-node-noble
+    description: |
+      Designate devstack-tempest base job for IPv6-only deployment
+    irrelevant-files: *base_irrelevant_files
+    required-projects: *base_required_projects
+    vars: *base_vars
+
+- job:
+    name: designate-only-ipv6-bind9
+    post-run: playbooks/designate-bind9/post.yaml
+    parent: designate-core-only-ipv6
+
+- job:
+    name: designate-only-ipv6-pdns4
+    post-run: playbooks/designate-pdns4/post.yaml
+    parent: designate-core-only-ipv6
+    vars:
+      devstack_localrc:
+        DESIGNATE_BACKEND_DRIVER: pdns4
diff --git a/zuul.d/projects.yaml b/zuul.d/projects.yaml
new file mode 100644
index 0000000..e91538b
--- /dev/null
+++ b/zuul.d/projects.yaml
@@ -0,0 +1,36 @@
+- project:
+    templates:
+      - designate-devstack-jobs
+      - check-requirements
+      - publish-openstack-docs-pti
+      - tempest-plugin-jobs
+      - release-notes-jobs-python3
+    check:
+      jobs:
+        - designate-bind9-core
+        - designate-bind9-with-keystone-default-roles
+        - designate-pdns4-core
+        - designate-bind9-stable-2025-1
+        - designate-bind9-stable-2024-2
+        - designate-bind9-stable-2024-1
+        - designate-bind9-multipool
+        - neutron-tempest-plugin-designate-scenario
+        - designate-only-ipv6-pdns4
+        - designate-only-ipv6-bind9
+    queue: designate
+    gate:
+      fail-fast: true
+      jobs:
+        - designate-bind9-core
+        - designate-bind9-with-keystone-default-roles
+        - designate-pdns4-core
+        - designate-bind9-stable-2025-1
+        - designate-bind9-stable-2024-2
+        - designate-bind9-stable-2024-1
+        - designate-bind9-multipool
+        - neutron-tempest-plugin-designate-scenario
+        - designate-only-ipv6-pdns4
+        - designate-only-ipv6-bind9
+    experimental:
+      jobs:
+        - designate-pdns4-postgres-core