[ English | русский | Deutsch | español | Indonesia | English (United Kingdom) ]

Überschreiben der Standardkonfiguration

Variable Priorität

Rollenvorgaben

Jede Rolle hat eine Datei defaults/main.yml, die die üblichen Variablen enthält, die von einem Deployer überschrieben werden können, wie eine reguläre Ansible-Rolle. Diese Standardwerte entsprechen den OpenStack-Standards.

Sie können auf mehreren Ebenen außer Kraft gesetzt werden.

Group-Vars und Host-Vars

OpenStack-Ansible bietet sichere Standards für Deployer im Ordner group_vars. Sie kümmern sich um die Verkabelung zwischen verschiedenen Rollen, wie zum Beispiel das Speichern von Informationen darüber, wie RabbitMQ von der nova-Rolle erreicht werden kann.

Sie können die vorhandenen Gruppenvariablen (und Hostvariablen) überschreiben, indem Sie in /etc/openstack_deploy/group_vars (bzw. /etc/openstack_deploy/host_vars) einen eigenen Ordner erstellen.

Wenn Sie den Speicherort des Override-Ordners ändern möchten, können Sie Ihre openstack-ansible.rc-Datei anpassen oder GROUP_VARS_PATH` und` HOST_VARS_PATH` während Ihrer Shell-Sitzung exportieren.

Role vars

Jede Rolle verwendet zusätzliche Variablen in vars/, die Vorrang vor Gruppenvariablen haben.

Diese Variablen sind in der Regel für die Rolle intern und nicht für das Überschreiben vorgesehen. Implementierer können diese jedoch überschreiben, indem sie extra-vars verwenden, indem sie die Überschreibungen in die Benutzervariablendatei einfügen.

Benutzervariablen

Wenn Sie die Variable global überschreiben möchten, können Sie die Variable, die Sie überschreiben möchten, in einer Datei /etc/openstack_deploy/user_*.yml definieren. Es wird auf alle Hosts angewendet.

user_*.yml-Dateien in weiteren Einzelheiten

Dateien in /etc/openstack_deploy, beginnend mit user_, werden automatisch in jedem openstack-ansible-Befehl gespeichert. Alternativ können die Dateien mit dem Parameter -e des Befehls ansible-playbook bezogen werden.

user_variables.yml und user_secrets.yml werden direkt von OpenStack-Ansible verwendet. Es wird nicht empfohlen, benutzerdefinierte Variablen hinzuzufügen, die von Ihren eigenen Rollen und Playbooks für diese Dateien verwendet werden. Dies erschwert den Upgrade-Pfad, da der Vergleich Ihrer vorhandenen Dateien mit späteren Versionen dieser Dateien schwieriger wird. Stattdessen empfiehlt es sich, Ihre eigenen Variablen in Dateien zu speichern, die nach dem user_*.yml-Muster benannt sind, so dass sie zusammen mit denen verwendet werden, die ausschließlich von OpenStack-Ansible verwendet werden.

user_*. yml` Dateien enthalten YAML-Variablen, die als extra-vars angewendet werden, wenn openstack-ansible zum Ausführen von Playbooks ausgeführt wird. Sie werden in alphanumerischer Reihenfolge von openstack-ansible bezogen. Wenn doppelte Variablen in den Dateien user_*.yml auftreten, hat die Variable in der zuletzt gelesenen Datei Vorrang.

Überschreibungen in Konfigurationsdateien mit config_template setzen

Alle Dienste, die YAML, JSON oder INI für die Konfiguration verwenden, können durch die Verwendung eines Ansible-Action-Plugins mit dem Namen config_template überschrieben werden. Die Konfigurationsvorlagen-Engine ermöglicht einem Bereitsteller, ein einfaches Wörterbuch zu verwenden, um Elemente zur Laufzeit in Konfigurationsdateien zu ändern oder hinzuzufügen, die möglicherweise keine voreingestellte Vorlagenoption haben. Alle OpenStack-Ansible-Rollen ermöglichen diese Funktionalität, wo anwendbar. Dateien, die für das Übernehmen von Überschreibungen verfügbar sind, können in der defaults/main.yml-Datei als leere Standardwörterbücher (Hashes) gesehen werden.

Dieses Modul wurde nicht in Ansible Core übernommen (siehe PR1 und PR2) und wird es niemals sein.

Dokumentation der config_template

Dies sind die verfügbaren Optionen, die Sie im Dokumentationsabschnitt des virtuellen Moduls finden.

module: config_template
version_added: 1.9.2
short_description: >
  Renders template files providing a create/update override interface
description:
  - The module contains the template functionality with the ability to
    override items in config, in transit, through the use of a simple
    dictionary without having to write out various temp files on target
    machines. The module renders all of the potential jinja a user could
    provide in both the template file and in the override dictionary which
    is ideal for deployers who may have lots of different configs using a
    similar code base.
  - The module is an extension of the **copy** module and all of attributes
    that can be set there are available to be set here.
options:
  src:
    description:
      - Path of a Jinja2 formatted template on the local server. This can
        be a relative or absolute path.
    required: true
    default: null
  dest:
    description:
      - Location to render the template to on the remote machine.
    required: true
    default: null
  config_overrides:
    description:
      - A dictionary used to update or override items within a configuration
        template. The dictionary data structure may be nested. If the target
        config file is an ini file the nested keys in the ``config_overrides``
        will be used as section headers.
  config_type:
    description:
      - A string value describing the target config type.
    choices:
      - ini
      - json
      - yaml

Beispielaufgabe, die das Modul config_template verwendet

In dieser Aufgabe ist die Datei test.ini.j2 eine Vorlage, die gerendert und auf der Festplatte unter /tmp/test.ini gespeichert wird. Der Eintrag config_overrides ist ein Wörterbuch (Hash), mit dem ein Implementierer beliebige Daten als Überschreibungen festlegen kann, die zur Laufzeit in die Konfigurationsdatei geschrieben werden. Der Eintrag config_type gibt den Typ der Konfigurationsdatei an, mit der das Modul interagieren soll. Verfügbare Optionen sind yaml, json und ini.

- name: Run config template ini
  config_template:
    src: test.ini.j2
    dest: /tmp/test.ini
    config_overrides: "{{ test_overrides }}"
    config_type: ini

Hier ist ein Beispiel Override Dictionary (Hash)

test_overrides:
  DEFAULT:
    new_item: 12345

Und hier ist die Vorlagendatei:

[DEFAULT]
value1 = abc
value2 = 123

Die gerenderte Datei auf der Festplatte, nämlich /tmp/test.ini sieht wie folgt aus:

[DEFAULT]
value1 = abc
value2 = 123
new_item = 12345

Ermitteln der verfügbaren Überschreibungen

Alle diese Optionen können auf jede für Ihre Bereitstellung geeignete Weise angegeben werden. In Bezug auf Benutzerfreundlichkeit und Flexibilität wird empfohlen, dass Sie Ihre Überschreibungen in einer Benutzervariablen-Datei wie /etc/openstack_deploy/user_variables.yml definieren.

Die Liste der verfügbaren Überschreibungen finden Sie, indem Sie Folgendes ausführen:

ls /etc/ansible/roles/*/defaults/main.yml -1 \
    | xargs -I {} grep '_.*_overrides:' {} \
    | egrep -v "^#|^\s" \
    | sort -u

Bemerkung

Mögliche zusätzliche Überschreibungen finden Sie im Tunable Section der main.yml Datei jeder Rolle, wie zum Beispiel /etc/ansible/roles/role_name/defaults/main.yml.

Überschreiben der OpenStack-Konfigurationsstandards

OpenStack hat viele Konfigurationsoptionen in conf Dateien (in einem Standard INI Dateiformat), Richtliniendateien (im Standard JSON Format) und YAML Dateien, und kann Verwenden Sie daher das oben beschriebene Modul config_template.

Mit OpenStack-Ansible können Sie auf alle Optionen in der OpenStack Configuration Reference verweisen, indem Sie einen einfachen Satz von Konfigurationseinträgen in der Datei /etc/openstack_deploy/user_variables.yml verwenden.

Überschreiben von .conf-Dateien

In den meisten Fällen sind Überschreibungen für die <service>.conf``Dateien implementiert (zum Beispiel ``nova.conf). Diese Dateien verwenden ein Standard-INI-Dateiformat.

Zum Beispiel möchten Sie vielleicht die folgenden Parameter zur nova.conf Datei hinzufügen:

[DEFAULT]
remove_unused_original_minimum_age_seconds = 43200

[libvirt]
cpu_mode = host-model
disk_cachemodes = file=directsync,block=none

[database]
idle_timeout = 300
max_pool_size = 10

Dazu verwenden Sie den folgenden Konfigurationseintrag in der Datei /etc/openstack_deploy/user_variables.yml:

nova_nova_conf_overrides:
  DEFAULT:
    remove_unused_original_minimum_age_seconds: 43200
  libvirt:
    cpu_mode: host-model
    disk_cachemodes: file=directsync,block=none
  database:
    idle_timeout: 300
    max_pool_size: 10

Bemerkung

Das allgemeine Format für die Variablennamen, die für Überschreibungen verwendet werden, ist <service>_<filename>_<file extension>_overrides. Der Variablenname, der in diesen Beispielen zum Hinzufügen von Parametern zur nova.conf-Datei verwendet wird, ist beispielsweise nova_nova_conf_overrides.

The same way you can apply overrides to the uwsgi services. For example:

nova_api_os_compute_uwsgi_ini_overrides:
  uwsgi:
    limit: 1024

Bemerkung

Some roles, like uwsgi, are used for lot of roles, and have „special“ overrides, (like uwsgi_ini_overrides) which can be defined to impact all services which are using uwsgi. These variables are „special“ as they will have precedence over role defined *_uwsgi_ini_overrides.

Sie können auch Überschreibungen pro Host mit der folgenden Konfiguration in der Datei /etc/openstack_deploy/openstack_user_config.yml anwenden:

compute_hosts:
  900089-compute001:
    ip: 192.0.2.10
    host_vars:
      nova_nova_conf_overrides:
        DEFAULT:
          remove_unused_original_minimum_age_seconds: 43200
        libvirt:
          cpu_mode: host-model
          disk_cachemodes: file=directsync,block=none
        database:
          idle_timeout: 300
          max_pool_size: 10

Verwenden Sie diese Methode für alle Dateien mit dem Format INI für OpenStack-Projekte, die in OpenStack-Ansible bereitgestellt werden.

Überschreiben von JSON-Dateien

Um Zugriffskontrollen zu implementieren, die sich von denen in einer Standard-OpenStack-Umgebung unterscheiden, können Sie die Standardrichtlinien anpassen, die von den Services angewendet werden. Richtliniendateien haben das Format JSON.

Beispielsweise möchten Sie möglicherweise die folgende Richtlinie in der Datei policy.json für den Identitätsdienst (Keystone) hinzufügen:

{
    "identity:foo": "rule:admin_required",
    "identity:bar": "rule:admin_required"
}

Dazu verwenden Sie den folgenden Konfigurationseintrag in der Datei /etc/openstack_deploy/user_variables.yml:

keystone_policy_overrides:
  identity:foo: "rule:admin_required"
  identity:bar: "rule:admin_required"

Bemerkung

Das allgemeine Format für die Variablennamen, die für Überschreibungen verwendet werden, ist <service> _policy_overrides. Der Variablenname, der in diesem Beispiel zum Hinzufügen einer Richtlinie zur Datei policy.json des Identitätsdienstes (Keystone) verwendet wird, lautet beispielsweise keystone_policy_overrides.

Verwenden Sie diese Methode für alle Dateien mit dem Format JSON in OpenStack-Projekten, die in OpenStack-Ansible bereitgestellt werden.

Um Ihnen bei der Suche nach dem geeigneten Variablennamen zu helfen, der für Überschreibungen verwendet werden kann, lautet das allgemeine Format für den Variablennamen <service> _policy_overrides.

Überschreiben von .yml-Dateien

Sie können .yml` Dateiwerte überschreiben, indem Sie Ersatz-YAML-Inhalt bereitstellen.

Bemerkung

Der gesamte Inhalt der YAML-Datei wird vollständig durch die Überschreibungen überschrieben. Daher muss die gesamte YAML-Quelle (sowohl der vorhandene Inhalt als auch Ihre Änderungen) bereitgestellt werden.

Beispielsweise möchten Sie möglicherweise einen Zählerausschluss für alle Hardwareelemente im Standardinhalt der pipeline.yml-Datei für den Telemetriedienst (Ceilometer) definieren:

sources:
    - name: meter_source
    interval: 600
    meters:
        - "!hardware.*"
    sinks:
        - meter_sink
    - name: foo_source
    value: foo

Dazu verwenden Sie den folgenden Konfigurationseintrag in der Datei /etc/openstack_deploy/user_variables.yml:

ceilometer_pipeline_yaml_overrides:
  sources:
      - name: meter_source
      interval: 600
      meters:
          - "!hardware.*"
      sinks:
          - meter_sink
      - name: source_foo
      value: foo

Bemerkung

Das allgemeine Format für die Variablennamen, die für Überschreibungen verwendet werden, ist <service>_<filename>_<file extension>_overrides. Der Variablenname, der in diesem Beispiel zum Definieren eines Zählerausschlusses in der pipeline.yml-Datei für den Telemetriedienst (Ceilometer) verwendet wird, lautet beispielsweise ceilometer_pipeline_yaml_overrides.

Overriding OpenStack upper constraints

Each OpenStack release uses an upper-constraints.txt file to define the maximum permitted version of each Python package. In some cases it may be necessary to override this file, for example when your local deployment needs to take advantage of a bug fix. Care should be taken when modifying this file as OpenStack services may not have been tested against more recent package versions.

To override the upper constraints for a deployment, clone the OpenStack requirements git repository, either storing it as a fork at a URL of your choice, or within the local filesystem of the host you are using to deploy OpenStack Ansible from. Once cloned, switch to the branch which matches the name of your deployed OpenStack version, and modify the upper constraints as required.

Next, edit your /etc/openstack_deploy/user_variables.yml file to indicate the path to the requirements git repository, and the git hash of the commit containing your changes using the requirements_git_repo and requirements_git_install_branch variables. When using the local filesystem, the requirements_git_repo should start with file://.

Finally, run the repo-install.yml playbook to upload these modified constraints to your repo host(s).