Initialize config repository
diff --git a/zuul.d/README b/zuul.d/README
new file mode 100644
index 0000000..78444aa
--- /dev/null
+++ b/zuul.d/README
@@ -0,0 +1 @@
+Zuul config repo content
diff --git a/zuul.d/_jobs-base.yaml b/zuul.d/_jobs-base.yaml
new file mode 100644
index 0000000..33cafe4
--- /dev/null
+++ b/zuul.d/_jobs-base.yaml
@@ -0,0 +1,109 @@
+# This file is managed by ansible, do not edit directly
+---
+- job:
+    name: base
+    parent: null
+    description: The base job.
+    pre-run: playbooks/base/pre.yaml
+    post-run:
+      - playbooks/base/post.yaml
+    roles:
+      - zuul: sf-jobs
+      - zuul: zuul/zuul-jobs
+    extra-vars:
+      zuul_use_fetch_output: true
+    timeout: 1800
+    attempts: 3
+    secrets:
+      - site_sflogs
+    nodeset:
+      nodes:
+        - name: container
+          label: runc-centos
+
+- semaphore:
+    name: semaphore-config-update
+    max: 1
+
+- job:
+    name: config-check
+    parent: base
+    final: true
+    allowed-projects:
+      - config
+    description: Validate the config repo.
+    run: playbooks/config/check.yaml
+    post-run: playbooks/config/check-fetch-artifacts.yaml
+    secrets:
+      - service_user
+    vars:
+      zuul_log_url: "https://spfactory.storpool.com/logs"
+      gateway_url: "https://spfactory.storpool.com"
+      tenant_config: False
+    nodeset:
+      nodes: []
+
+- job:
+    name: config-update
+    parent: base
+    final: true
+    allowed-projects:
+      - config
+    description: Deploy config repo update.
+    run: playbooks/config/config-update.yaml
+    secrets:
+      - site_install_server
+    semaphore: semaphore-config-update
+    nodeset:
+      nodes: []
+
+- project:
+    name: config
+    check:
+      jobs:
+        - config-check
+    gate:
+      jobs:
+        - config-check
+    post:
+      jobs:
+        - config-update
+
+
+- project:
+    name: sf-jobs
+    check:
+      jobs:
+        - linters:
+            vars:
+              linters: [flake8, yamllint]
+    gate:
+      jobs:
+        - linters:
+            vars:
+              linters: [flake8, yamllint]
+
+
+- job:
+    name: wait-for-changes-ahead
+    parent: null
+    timeout: 7200
+    nodeset:
+      nodes: []
+    vars:
+      zuul_web_url: "https://spfactory.storpool.com/zuul"
+    description: |
+      This job wait for the queue ahead to be empty.
+
+      Responds to these variables:
+
+      .. zuul:jobvar:: zuul_web_url
+
+         The zuul web api url.
+
+      .. zuul:jobvar:: wait_timeout
+         :default: 120
+
+         Wait timeout in minutes.
+
+    run: playbooks/wait-for-changes-ahead.yaml
diff --git a/zuul.d/_jobs-openshift.yaml b/zuul.d/_jobs-openshift.yaml
new file mode 100644
index 0000000..a381bbb
--- /dev/null
+++ b/zuul.d/_jobs-openshift.yaml
@@ -0,0 +1,48 @@
+# This file is managed by sfconfig, do not edit manually
+# The Openshift driver is a Tech Preview, use at your own risk...
+---
+- job:
+    name: base-openshift-native
+    parent: null
+    description: |
+      A base job that build and deploy a container image using the
+      project future state.
+    pre-run: playbooks/openshift/pre.yaml
+    post-run:
+      - playbooks/base/post.yaml
+    roles:
+      - zuul: sf-jobs
+      - zuul: zuul/zuul-jobs
+    timeout: 1800
+    # Set attempts to 1 until it's working well
+    attempts: 1
+    secrets:
+      - site_sflogs
+    nodeset:
+      nodes:
+        - name: project
+          label: openshift-project
+    vars:
+      base_image: "python:3.6"
+
+- job:
+    name: base-openshift-pod
+    parent: null
+    description: |
+      A base job to spawn a vanilla container and copy the project
+      future state
+    pre-run: playbooks/openshift/unprivileged-machine.yaml
+    post-run:
+      - playbooks/base/post.yaml
+    roles:
+      - zuul: sf-jobs
+      - zuul: zuul/zuul-jobs
+    # Set attempts to 1 until it's working well
+    attempts: 1
+    secrets:
+      - site_sflogs
+    timeout: 1800
+    nodeset:
+      nodes:
+        - name: pod
+          label: openshift-pod-fedora
diff --git a/zuul.d/_jobs-pages.yaml b/zuul.d/_jobs-pages.yaml
new file mode 100644
index 0000000..a705bf6
--- /dev/null
+++ b/zuul.d/_jobs-pages.yaml
@@ -0,0 +1,24 @@
+# This file is managed by ansible, do not edit directly
+---
+- job:
+    name: build-and-publish-pages
+    parent: base
+    description: Base build and publish pages job
+    run: playbooks/pages/build.yaml
+    post-run:
+      - playbooks/pages/publish.yaml
+    secrets:
+      - site_pages
+    protected: true
+    vars:
+      src_dir: /
+      fqdn: spfactory.storpool.com
+
+- job:
+    name: build-pages
+    parent: base
+    description: Pages build
+    run: playbooks/pages/build.yaml
+    vars:
+      src_dir: /
+
diff --git a/zuul.d/_pipelines.yaml b/zuul.d/_pipelines.yaml
new file mode 100644
index 0000000..ec77979
--- /dev/null
+++ b/zuul.d/_pipelines.yaml
@@ -0,0 +1,222 @@
+# This file is managed by ansible, do not edit directly
+---
+- pipeline:
+    name: check
+    description: |
+      Newly uploaded patchsets enter this pipeline to receive an
+      initial +/-1 Verified vote.
+    manager: independent
+    require:
+      gerrit:
+        open: True
+        current-patchset: True
+      opendev.org:
+        open: True
+        current-patchset: True
+    trigger:
+      gerrit:
+        - event: patchset-created
+        - event: change-restored
+        - event: comment-added
+          comment: (?i)^(Patch Set [0-9]+:)?( [\w\\+-]*)*(\n\n)?\s*(recheck|reverify)
+        - event: comment-added
+          require-approval:
+            - Verified: [-1, -2]
+              username: zuul
+          approval:
+            - Workflow: 1
+      opendev.org:
+        - event: patchset-created
+        - event: change-restored
+        - event: comment-added
+          comment: (?i)^(Patch Set [0-9]+:)?( [\w\\+-]*)*(\n\n)?\s*(recheck|reverify)
+        - event: comment-added
+          require-approval:
+            - Verified: [-1, -2]
+              username: zuul
+          approval:
+            - Workflow: 1
+    start:
+      gerrit:
+        Verified: 0
+      opendev.org:
+        Verified: 0
+    success:
+      gerrit:
+        Verified: 1
+      opendev.org:
+        Verified: 1
+    failure:
+      gerrit:
+        Verified: -1
+      opendev.org:
+        Verified: -1
+
+- pipeline:
+    name: gate
+    description: |
+      Changes that have been approved by core developers are enqueued
+      in order in this pipeline, and if they pass tests, will be
+      merged.
+    success-message: Build succeeded (gate pipeline).
+    failure-message: |
+      Build failed (gate pipeline).  For information on how to proceed, see
+      http://docs.openstack.org/infra/manual/developers.html#automated-testing
+    manager: dependent
+    precedence: high
+    post-review: True
+    require:
+      gerrit:
+        open: True
+        current-patchset: True
+        approval:
+          - Verified: [1, 2]
+            username: zuul
+          - Workflow: 1
+      opendev.org:
+        open: True
+        current-patchset: True
+        approval:
+          - Verified: [1, 2]
+            username: zuul
+          - Workflow: 1
+    trigger:
+      gerrit:
+        - event: comment-added
+          approval:
+            - Workflow: 1
+        - event: comment-added
+          approval:
+            - Verified: 1
+          username: zuul
+      opendev.org:
+        - event: comment-added
+          approval:
+            - Workflow: 1
+        - event: comment-added
+          approval:
+            - Verified: 1
+          username: zuul
+    start:
+      gerrit:
+        Verified: 0
+      opendev.org:
+        Verified: 0
+    success:
+      gerrit:
+        Verified: 2
+        submit: true
+      opendev.org:
+        Verified: 2
+        submit: true
+    failure:
+      gerrit:
+        Verified: -2
+      opendev.org:
+        Verified: -2
+    window-floor: 20
+    window-increase-factor: 2
+
+- pipeline:
+    name: post
+    post-review: true
+    description: This pipeline runs jobs that operate after each change is merged.
+    manager: supercedent
+    precedence: low
+    trigger:
+      gerrit:
+        - event: ref-updated
+          ref: ^refs/heads/.*$
+      opendev.org:
+        - event: ref-updated
+          ref: ^refs/heads/.*$
+    failure:
+      smtp:
+        from: "zuul@spfactory.storpool.com"
+        to: "root@localhost"
+        subject: '[Zuul] Job failed in post pipeline: {change.project}'
+
+- pipeline:
+    name: pre-release
+    description: When a commit is tagged with a pre-release tag, this pipeline runs jobs that publish archives and documentation.
+    manager: independent
+    precedence: high
+    post-review: True
+    trigger:
+      gerrit:
+        - event: ref-updated
+          ref: ^refs/tags/([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9alpha|beta|rc.-]+))?(?:\+([0-9a-zA-Z.-]+))?$
+      opendev.org:
+        - event: ref-updated
+          ref: ^refs/tags/([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9alpha|beta|rc.-]+))?(?:\+([0-9a-zA-Z.-]+))?$
+    failure:
+      smtp:
+        from: "zuul@spfactory.storpool.com"
+        to: "root@localhost"
+        subject: '[Zuul] Job failed in pre-release pipeline: {change.project}'
+
+- pipeline:
+    name: release
+    post-review: true
+    description: When a commit is tagged as a release, this pipeline runs jobs that publish archives and documentation.
+    manager: independent
+    precedence: high
+    trigger:
+      gerrit:
+        - event: ref-updated
+          ref: ^refs/tags/([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9a-zA-Z.-]+))?(?:\+([0-9a-zA-Z.-]+))?$
+      opendev.org:
+        - event: ref-updated
+          ref: ^refs/tags/([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9a-zA-Z.-]+))?(?:\+([0-9a-zA-Z.-]+))?$
+    failure:
+      smtp:
+        from: "zuul@spfactory.storpool.com"
+        to: "root@localhost"
+        subject: '[Zuul] Job failed in release pipeline: {change.project}'
+
+- pipeline:
+    name: periodic
+    post-review: true
+    description: Jobs in this queue are triggered daily.
+    manager: independent
+    precedence: low
+    trigger:
+      timer:
+        - time: '0 0 * * *'
+    failure:
+      smtp:
+        from: "zuul@spfactory.storpool.com"
+        to: "root@localhost"
+        subject: '[Zuul] Job failed in periodic pipeline: {change.project}'
+
+- pipeline:
+    name: experimental
+    description: On-demand pipeline for requesting a run against a set of jobs that are not yet gating. Leave review comment of "check experimental" to run jobs in this pipeline.
+    success-message: Build succeeded (experimental pipeline).
+    failure-message: Build failed (experimental pipeline).
+    manager: independent
+    precedence: normal
+    trigger:
+      gerrit:
+        - event: comment-added
+          comment: (?i)^(Patch Set [0-9]+:)?( [\w\\+-]*)*(\n\n)?\s*check experimental\s*$
+      opendev.org:
+        - event: comment-added
+          comment: (?i)^(Patch Set [0-9]+:)?( [\w\\+-]*)*(\n\n)?\s*check experimental\s*$
+    success:
+      gerrit: {}
+      opendev.org: {}
+    failure:
+      gerrit: {}
+      opendev.org: {}
+
+- pipeline:
+    name: merge-check
+    description: >
+      Each time a change merges, this pipeline verifies that all open changes
+      on the same project are still mergeable.
+    failure-message: Build failed (merge-check pipeline).
+    manager: independent
+    ignore-dependencies: true
+    precedence: low
+    trigger: {}
diff --git a/zuul.d/_projects.yaml b/zuul.d/_projects.yaml
new file mode 100644
index 0000000..baad817
--- /dev/null
+++ b/zuul.d/_projects.yaml
@@ -0,0 +1,8 @@
+# This file is managed by ansible, do not edit directly
+---
+- project:
+    name: ^.*$
+    check:
+      jobs: []
+    gate:
+      jobs: []
diff --git a/zuul.d/_secret_install_server.yaml b/zuul.d/_secret_install_server.yaml
new file mode 100644
index 0000000..506ad2f
--- /dev/null
+++ b/zuul.d/_secret_install_server.yaml
@@ -0,0 +1,48 @@
+# This file is managed by ansible, do not edit directly
+- secret:
+    name: site_install_server
+    data:
+      fqdn: spfactory.storpool.com
+      ssh_known_hosts: spfactory.storpool.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDV/cSRvpNT9RTJvRjBevfzXPPehCdotepMj0xgg59fgdbk+wsl9Pl4AezmQGf8B0V+NLkSLhfJku2OAjCWCOikFN3sbc1qq30XH+3749H+VOvwQUSL02bPv+9Yzc19MEU29CNKWbeOAZRZ0omXB/8skSJ6+VwYgm1Na3bVkz4FL4kSjd+GCEVCR/xY5BotdX/ehWiwHoJsYfU0vpm6IbLFAgmzK6fDJFe8mPmwl6NwFA/OIQu777cmvhvWyZXGDzDOiUjNd49bkd4GfUEAmEQXtVZ7Ag3krrI7VZ0FvgKOSl1K8llws6dNp/xnvGY8BlTjXvYi/K26cb9R7DkcBpfF
+      ssh_username: root
+      ssh_private_key: !encrypted/pkcs1-oaep
+        - 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
diff --git a/zuul.d/_secret_service_user.yaml b/zuul.d/_secret_service_user.yaml
new file mode 100644
index 0000000..c23d0a1
--- /dev/null
+++ b/zuul.d/_secret_service_user.yaml
@@ -0,0 +1,15 @@
+# This file is managed by ansible, do not edit directly
+- secret:
+    name: service_user
+    data:
+      password: !encrypted/pkcs1-oaep
+        - TdizvvvNZl073X2FPgYF6vuhugnBEabrD2Ft3TBwdRSS+05LogoFYeEr4P+zpGBsp+KPj
+          wTeP7T8ByTQAsm3rfBYNG7Db+fk1Inf9Y0szyhxJnlflCwIzQ+uGsa6E6U22FJJd22qDQ
+          ZE/PDgfD7nYpfrM8eaJMVh8w+RyDi/mYOD4zMVCkIT2pd53KsdAdxW68e97V4nEQGeOQB
+          oUj/l0lvXVEPHVbJBDVLwRCVhmHzv/kTE4drs1+scfRb9VayOPqz8a2GShiTmKj9DT4KM
+          QvIeEaCs8A/2RYuK3xPte9NuScNMrev20H9f1HUTUhqpxeRGsSnliv6fvAcy01EqN5ZKZ
+          KuNal8Nh2eu6emfT/ncatOuwb0VbFcLSrNtixEVKOYlsaAx5xCT9UsopFgnrYRCe2Zi7t
+          a4PXorilgury+wDtmCBVuSsATeQ9lgAFsKron77M5W7NygUjnoqekIglepPS1xzybGx2P
+          Ut+VHRKuK6rn+ENI/tcSWgdAyxB+1bQJFiUe0HmriZU1D4MjmYS3IxGInE/rWkKG7zYQR
+          8Ih3C5QBMflRbdBIslycdiRqxYhhx8yH5WxT7efphjNV9K5elKvNUq2sEbB89+jMCTGha
+          tCvGy4wdumekC6Ab+2cZYsHDxXq6vYWarGIJixUgJBqp6faDxPWURTMddVbx24=
diff --git a/zuul.d/_secret_sflogs.yaml b/zuul.d/_secret_sflogs.yaml
new file mode 100644
index 0000000..96e91fa
--- /dev/null
+++ b/zuul.d/_secret_sflogs.yaml
@@ -0,0 +1,49 @@
+# This file is managed by ansible, do not edit directly
+- secret:
+    name: site_sflogs
+    data:
+      fqdn: spfactory.storpool.com
+      path: /var/www/logs
+      ssh_known_hosts: spfactory.storpool.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDV/cSRvpNT9RTJvRjBevfzXPPehCdotepMj0xgg59fgdbk+wsl9Pl4AezmQGf8B0V+NLkSLhfJku2OAjCWCOikFN3sbc1qq30XH+3749H+VOvwQUSL02bPv+9Yzc19MEU29CNKWbeOAZRZ0omXB/8skSJ6+VwYgm1Na3bVkz4FL4kSjd+GCEVCR/xY5BotdX/ehWiwHoJsYfU0vpm6IbLFAgmzK6fDJFe8mPmwl6NwFA/OIQu777cmvhvWyZXGDzDOiUjNd49bkd4GfUEAmEQXtVZ7Ag3krrI7VZ0FvgKOSl1K8llws6dNp/xnvGY8BlTjXvYi/K26cb9R7DkcBpfF
+      ssh_username: loguser
+      ssh_private_key: !encrypted/pkcs1-oaep
+        - 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
diff --git a/zuul.d/_secret_sfpages.yaml b/zuul.d/_secret_sfpages.yaml
new file mode 100644
index 0000000..db8e380
--- /dev/null
+++ b/zuul.d/_secret_sfpages.yaml
@@ -0,0 +1,49 @@
+# This file is managed by ansible, do not edit directly
+- secret:
+    name: site_pages
+    data:
+      fqdn: managesf.spfactory.storpool.com
+      ssh_known_hosts: managesf.spfactory.storpool.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDV/cSRvpNT9RTJvRjBevfzXPPehCdotepMj0xgg59fgdbk+wsl9Pl4AezmQGf8B0V+NLkSLhfJku2OAjCWCOikFN3sbc1qq30XH+3749H+VOvwQUSL02bPv+9Yzc19MEU29CNKWbeOAZRZ0omXB/8skSJ6+VwYgm1Na3bVkz4FL4kSjd+GCEVCR/xY5BotdX/ehWiwHoJsYfU0vpm6IbLFAgmzK6fDJFe8mPmwl6NwFA/OIQu777cmvhvWyZXGDzDOiUjNd49bkd4GfUEAmEQXtVZ7Ag3krrI7VZ0FvgKOSl1K8llws6dNp/xnvGY8BlTjXvYi/K26cb9R7DkcBpfF
+      path: /var/www/pages
+      ssh_username: pagesuser
+      ssh_private_key: !encrypted/pkcs1-oaep
+        - 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