Introduction

Quantum computing is moving from research labs to enterprise hybrid environments. Organizations need to manage quantum simulators for development, QPU access through cloud providers (IBM Quantum, Amazon Braket, Google Quantum AI), and hybrid classical-quantum workflows. Ansible automates the provisioning, configuration, and orchestration of this entire stack.

Quantum Computing Stack

┌──────────────────────────────────────────────────┐
│         Hybrid Quantum-Classical Platform          │
│                                                    │
│  ┌──────────┐  ┌──────────┐  ┌───────────────┐  │
│  │ Quantum  │  │ Classical│  │ Hybrid        │  │
│  │Simulators│  │ HPC      │  │ Orchestrator  │  │
│  │          │  │ Cluster  │  │               │  │
│  └──────────┘  └──────────┘  └───────────────┘  │
│                                                    │
│  ┌──────────┐  ┌──────────┐  ┌───────────────┐  │
│  │ QPU      │  │ Circuit  │  │ Results       │  │
│  │ Access   │  │ Compiler │  │ Analysis      │  │
│  │ Gateway  │  │          │  │               │  │
│  └──────────┘  └──────────┘  └───────────────┘  │
└──────────────────────────────────────────────────┘

Quantum Development Environment

# quantum-dev.yml
---
- name: Provision quantum development environment
  hosts: quantum_devboxes
  become: true

  vars:
    python_version: "3.12"
    qiskit_version: "1.3"

  tasks:
    - name: Install quantum computing frameworks
      ansible.builtin.pip:
        name:
          - "qiskit=={{ qiskit_version }}"
          - qiskit-aer
          - qiskit-ibm-runtime
          - amazon-braket-sdk
          - cirq
          - pennylane
          - pennylane-qiskit
          - pytket
          - numpy
          - scipy
          - matplotlib
        virtualenv: /opt/quantum/venv
        virtualenv_python: "python{{ python_version }}"

    - name: Deploy Jupyter quantum kernel
      ansible.builtin.pip:
        name:
          - jupyterlab
          - ipykernel
          - qiskit-jupyter-widgets
        virtualenv: /opt/quantum/venv

    - name: Register quantum kernel
      ansible.builtin.command: >
        /opt/quantum/venv/bin/python -m ipykernel install
        --name quantum
        --display-name "Quantum (Qiskit {{ qiskit_version }})"
      args:
        creates: /usr/local/share/jupyter/kernels/quantum

    - name: Configure IBM Quantum access
      ansible.builtin.template:
        src: qiskit-config.json.j2
        dest: "/home/{{ dev_user }}/.qiskit/settings.conf"
        owner: "{{ dev_user }}"
        mode: "0600"
      vars:
        ibm_quantum_token: "{{ vault_ibm_quantum_token }}"
        default_instance: "{{ ibm_quantum_instance }}"
      no_log: true

Quantum Simulator Cluster

# quantum-simulator.yml
---
- name: Deploy high-performance quantum simulator cluster
  hosts: simulator_nodes
  become: true

  vars:
    simulator_type: "statevector"  # statevector, density_matrix, mps
    max_qubits: 34
    gpu_acceleration: true

  tasks:
    - name: Install GPU-accelerated simulator
      ansible.builtin.pip:
        name:
          - qiskit-aer-gpu
          - cuquantum-python
          - custatevec-cu12
        virtualenv: /opt/quantum/venv
      when: gpu_acceleration

    - name: Deploy distributed simulator service
      ansible.builtin.template:
        src: simulator-service.yml.j2
        dest: /opt/quantum/simulator-config.yml
      vars:
        config:
          simulator: "{{ simulator_type }}"
          max_qubits: "{{ max_qubits }}"
          precision: "double"
          threads: "{{ ansible_processor_vcpus }}"
          memory_limit: "{{ (ansible_memtotal_mb * 0.8) | int }}M"
          gpu_enabled: "{{ gpu_acceleration }}"
          noise_model:
            enabled: true
            backend: "ibm_brisbane"
            readout_error: 0.01
            gate_error_1q: 0.001
            gate_error_2q: 0.01

    - name: Deploy simulator API endpoint
      community.docker.docker_container:
        name: quantum-simulator-api
        image: "{{ simulator_api_image }}"
        state: started
        restart_policy: unless-stopped
        ports:
          - "{{ simulator_port | default(8100) }}:8000"
        env:
          SIMULATOR_CONFIG: "/config/simulator-config.yml"
          MAX_CONCURRENT_JOBS: "{{ max_concurrent | default('4') }}"
          RESULT_CACHE_TTL: "3600"
        volumes:
          - /opt/quantum/simulator-config.yml:/config/simulator-config.yml:ro
          - /data/quantum-results:/results
        device_requests: "{{ gpu_acceleration | ternary([{'driver': 'nvidia', 'count': -1, 'capabilities': [['gpu']]}], omit) }}"

QPU Access Gateway

# qpu-gateway.yml
---
- name: Deploy QPU access gateway
  hosts: quantum_gateway
  become: true

  tasks:
    - name: Deploy multi-provider quantum gateway
      ansible.builtin.template:
        src: qpu-gateway.yml.j2
        dest: /opt/quantum/gateway-config.yml
      vars:
        providers:
          ibm_quantum:
            enabled: true
            token: "{{ vault_ibm_quantum_token }}"
            instances:
              - "ibm-q/open/main"
              - "{{ ibm_premium_instance | default(omit) }}"
            preferred_backends:
              - ibm_brisbane    # 127 qubits
              - ibm_osaka       # 127 qubits
            max_circuits_per_job: 300
            max_shots: 100000

          amazon_braket:
            enabled: "{{ braket_enabled | default(false) }}"
            region: "{{ aws_region }}"
            devices:
              - "arn:aws:braket:us-east-1::device/qpu/ionq/Forte"
              - "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy"
            s3_bucket: "{{ braket_results_bucket }}"

          google_quantum:
            enabled: "{{ google_quantum_enabled | default(false) }}"
            project: "{{ gcp_project }}"
            processor: "rainbow"

        routing:
          strategy: "least_queue_time"
          fallback_to_simulator: true
          max_wait_time_minutes: 30
          circuit_optimization: true

    - name: Configure job scheduling
      ansible.builtin.template:
        src: quantum-scheduler.yml.j2
        dest: /opt/quantum/scheduler.yml
      vars:
        scheduler:
          queue_priority:
            research: 10
            production: 20
            urgent: 30
          fair_share:
            enabled: true
            window_hours: 24
          cost_limits:
            daily_max_usd: "{{ quantum_daily_budget | default(100) }}"
            alert_threshold_pct: 80

Hybrid Quantum-Classical Workflow

# hybrid-workflow.yml
---
- name: Deploy hybrid quantum-classical pipeline
  hosts: orchestrator
  become: true

  tasks:
    - name: Deploy workflow orchestrator
      ansible.builtin.template:
        src: hybrid-workflow.yml.j2
        dest: /opt/quantum/workflow.yml
      vars:
        workflow:
          name: "{{ experiment_name }}"
          steps:
            - name: classical_preprocessing
              type: classical
              host_group: hpc_cluster
              script: preprocess.py
              output: /data/prepared_input.json

            - name: quantum_circuit_generation
              type: classical
              script: generate_circuits.py
              input: /data/prepared_input.json
              output: /data/circuits.qpy

            - name: quantum_execution
              type: quantum
              provider: "auto"
              circuits: /data/circuits.qpy
              shots: 10000
              error_mitigation:
                method: "twirled_readout"
                num_randomizations: 32
              output: /data/quantum_results.json

            - name: classical_postprocessing
              type: classical
              host_group: hpc_cluster
              script: analyze_results.py
              input: /data/quantum_results.json
              output: /data/final_results.json

            - name: convergence_check
              type: decision
              condition: "results.convergence_metric < 0.001"
              on_true: complete
              on_false: quantum_circuit_generation

    - name: Configure error mitigation
      ansible.builtin.template:
        src: error-mitigation.yml.j2
        dest: /opt/quantum/error-mitigation.yml
      vars:
        mitigation:
          readout_correction: true
          zero_noise_extrapolation: true
          probabilistic_error_cancellation: false
          dynamical_decoupling:
            enabled: true
            sequence: "XY4"

Monitoring and Cost Control

- name: Deploy quantum resource monitoring
  ansible.builtin.template:
    src: quantum-monitoring.yml.j2
    dest: /opt/monitoring/quantum-dashboard.yml
  vars:
    metrics:
      - qpu_usage_seconds
      - circuit_depth
      - qubit_count
      - shots_executed
      - queue_wait_time
      - cost_per_job_usd
      - simulator_vs_qpu_ratio
      - error_rate_per_backend
    alerts:
      monthly_cost_limit: "{{ quantum_monthly_budget }}"
      queue_time_warning_minutes: 60
      error_rate_threshold: 0.1

Conclusion

Quantum computing infrastructure combines quantum-specific components (simulators, QPU access, error mitigation) with classical infrastructure (HPC clusters, job schedulers, monitoring). Ansible automates provisioning of quantum development environments, deploying GPU-accelerated simulators, configuring multi-provider QPU access gateways, and orchestrating hybrid quantum-classical workflows. As quantum hardware improves and quantum advantage becomes practical for more use cases, having automated, reproducible infrastructure will be essential for organizations investing in quantum capabilities.