Mehrere Vorlagen verwenden

Erstellen Sie als nächstes eine Vorlage, die eine andere Vorlage importiert. In diesem Beispiel dekonstruieren Sie die ursprünglich erstellte Konfiguration (two-vms.yaml) weiter und erstellen eine Vorlage für ein Netzwerk und eine Vorlage für eine Firewallregel, um eingehenden Traffic auf Port 80 zuzulassen.

Dann verschieben Sie die gesamte Bereitstellung in eine einzelne kombinierte Vorlage. Am Ende dieser Seite muss Ihre Konfiguration nur eine einzelne Vorlage aufrufen, um eine Bereitstellung mit allen diesen Ressourcen zu erstellen.

Vorlage für ein Netzwerk erstellen

Erstellen Sie eine neue Vorlagendatei mit dem Namen network-template.[jinja|py] mit den folgenden Netzwerkdefinitionen.

Jinja

{#
Copyright 2016 Google Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
#}

resources:
- name: a-new-network
  type: compute.v1.network
  properties:
    IPv4Range: 10.0.0.1/16

Python

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Creates the network."""

def GenerateConfig(unused_context):
  """Creates the network."""

  resources = [{
      'name': 'a-new-network',
      'type': 'compute.v1.network',
      'properties': {
          'IPv4Range': '10.0.0.1/16'
      }
  }]
  return {'resources': resources}

Vorlage für eine Firewall erstellen

Erstellen Sie eine Vorlage für eine neue Firewallregel, die TCP-Traffic von Port 80 erlaubt. Rufen Sie die Datei firewall-template.[jinja|py] auf:

Jinja

{#
Copyright 2016 Google Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
#}

resources:
- name: a-firewall-rule
  type: compute.v1.firewall
  properties:
    network: $(ref.a-new-network.selfLink)
    sourceRanges: ["0.0.0.0/0"]
    allowed:
    - IPProtocol: TCP
      ports: ["80"]

Python

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Creates the firewall."""

def GenerateConfig(unused_context):
  """Creates the firewall."""

  resources = [{
      'name': 'a-firewall-rule',
      'type': 'compute.v1.firewall',
      'properties': {
          'network': '$(ref.a-new-network.selfLink)',
          'sourceRanges': ['0.0.0.0/0'],
          'allowed': [{
              'IPProtocol': 'TCP',
              'ports': [80]
          }]
      }
  }]
  return {'resources': resources}

Beachten Sie, dass eine Vorlage auch Verweise nutzen kann. Solange die endgültige Konfiguration ein Netzwerk mit dem Namen a-new-network beinhaltet, sind die Verweise gültig.

Vorlage erstellen, die Netzwerk-, Firewall- und VM-Vorlagen verwendet

Erstellen Sie eine Datei mit dem Namen compute-engine-template.[jinja|py]. Fügen Sie der Datei Folgendes hinzu (beachten Sie, dass die Namen der Ressourcen beliebig sind, da Deployment Manager die Ressourcen basierend auf den Namen in der Basisvorlage benennt):

Jinja

{#
Copyright 2016 Google Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
#}

resources:
- name: vm-1
  type: vm-template.jinja
- name: vm-2
  type: vm-template-2.jinja
- name: network-1
  type: network-template.jinja
- name: firewall-1
  type: firewall-template.jinja

Python

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Creates the Compute Engine."""

def GenerateConfig(unused_context):
  """Creates the Compute Engine with network and firewall."""

  resources = [{
      'name': 'vm-1',
      'type': 'vm-template.py'
  }, {
      'name': 'vm-2',
      'type': 'vm-template-2.py'
  }, {
      'name': 'network-1',
      'type': 'network-template.py'
  }, {
      'name': 'firewall-1',
      'type': 'firewall-template.py'
  }]
  return {'resources': resources}

Konfiguration erstellen

Erstellen Sie eine Konfiguration, die die gerade erstellten Vorlagen nutzt. Erstellen Sie eine Datei namens config-with-many-templates.yaml und fügen Sie der Konfiguration die folgenden Inhalte hinzu:

Jinja

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

imports:
- path: vm-template.jinja
- path: vm-template-2.jinja
- path: network-template.jinja
- path: firewall-template.jinja
- path: compute-engine-template.jinja

resources:
- name: compute-engine-setup
  type: compute-engine-template.jinja

Python

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

imports:
- path: vm-template.py
- path: vm-template-2.py
- path: network-template.py
- path: firewall-template.py
- path: compute-engine-template.py

resources:
- name: compute-engine-setup
  type: compute-engine-template.py

Beachten Sie, dass Sie die anderen zusammen mit der compute-engine-template.jinja-Datei importieren müssen, obwohl die Konfiguration sie nicht direkt aufruft. Das liegt daran, dass die compute-engine-template.jinja-Datei von der Gültigkeit der anderen Vorlagen abhängig ist.

Es wird hier zwar nicht verwendet, Sie können aber auch Ihre Importe mit einem optionalen name-Feld benennen, das als Name der Vorlage angewendet und als Ressourcentyp in der restlichen Datei verwendet wird. Das name-Feld ist nützlich, wenn Sie eine Vorlage haben, die in einem anderen Verzeichnis als die aktuelle Datei gespeichert ist, und sie nicht den voll qualifizierten Dateipfad als Vorlagenamen angeben möchten. Zum Beispiel:

imports:
- path: a/path/to/templates/vm-template.jinja
  name: a-vm-template.jinja

Daher können Sie a-vm-template.jinja, und nicht den gesamten Pfad, als Typ verwenden.

resources:
- name: this-is-just-an-example
  type: a-vm-template.jinja

Konfiguration speichern und bereitstellen

gcloud deployment-manager deployments create deployment-with-many-templates \
  --config config-with-many-templates.yaml

Bereitstellung ansehen

gcloud deployment-manager deployments describe deployment-with-many-templates

Sie können auch Ihre Ressourcen mithilfe der Compute Engine-API auflisten, um zu bestätigen, dass sie vorhanden sind:

So erhalten Sie Informationen über die Instanzen:

gcloud compute instances list # List instances
gcloud compute instances describe the-first-vm

So erhalten Sie Informationen über das Netzwerk:

gcloud compute networks list # List networks
gcloud compute networks describe a-new-network

So erhalten Sie Informationen über die Firewallregel:

gcloud compute firewall-rules list # List firewall rules

Ersetzen wir als nächstes einige der unflexiblen Teile der Vorlage durch eine benutzerdefinierte Vorlage und Umgebungsvariablen.

Bereitstellung löschen

Compute Engine-Ressourcen verursachen Kosten, also sollten Sie diese Bereitstellung löschen, da Sie für die weiteren Schritte nicht mehr gebraucht wird. Durch das Löschen dieser Bereitstellung werden alle Ressourcen in dieser Bereitstellung ebenfalls gelöscht. Wenn Sie die Bereitstellung nicht löschen, können Probleme mit späteren Beispielen auftreten.

So löschen Sie diese Bereitstellung:

gcloud deployment-manager deployments delete deployment-with-many-templates

Nächster Schritt: Vorlagen und Umgebungsvariablen verwenden

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Cloud Deployment Manager-Dokumentation