From d2e1f23d91a6a140f245860c27e4aec4d3c00b96 Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Tue, 16 Jul 2019 16:43:33 +0200 Subject: [PATCH] Remove firstapp guides These guides are dead, remove them completely. This will also remove the documents from the developer website, so remove all links. Change-Id: Ifd9a4d8a187962498d6f1133226a77308bc2f5ff --- .gitignore | 2 - README.rst | 23 - doc-tools-check-languages.conf | 7 +- firstapp/README.rst | 47 - firstapp/samples/dotnet/getting_started.cs | 112 - firstapp/samples/fog/block_storage.rb | 56 - firstapp/samples/fog/durability.rb | 108 - firstapp/samples/fog/getting_started.rb | 139 - firstapp/samples/fog/introduction.rb | 146 - firstapp/samples/fog/scaling_out.rb | 163 - firstapp/samples/gophercloud/block_storage.go | 135 - firstapp/samples/gophercloud/durability.go | 158 - .../samples/gophercloud/getting_started.go | 310 -- .../heat/faafo_autoscaling_workers.yaml | 278 - firstapp/samples/heat/hello_faafo.yaml | 90 - firstapp/samples/jclouds/BlockStorage.java | 243 - firstapp/samples/jclouds/Durability.java | 296 -- firstapp/samples/jclouds/GettingStarted.java | 266 - firstapp/samples/jclouds/Introduction.java | 428 -- firstapp/samples/jclouds/ScalingOut.java | 300 -- firstapp/samples/jclouds/pom.xml | 48 - firstapp/samples/libcloud/block_storage.py | 49 - firstapp/samples/libcloud/durability.py | 92 - firstapp/samples/libcloud/getting_started.py | 158 - firstapp/samples/libcloud/introduction.py | 133 - firstapp/samples/libcloud/scaling_out.py | 110 - .../samples/openstacksdk/getting_started.py | 188 - firstapp/samples/openstacksdk/introduction.py | 228 - firstapp/samples/pkgcloud/getting_started.js | 182 - firstapp/samples/shade/block_storage.py | 37 - firstapp/samples/shade/clouds.yml | 8 - firstapp/samples/shade/durability.py | 74 - firstapp/samples/shade/getting_started.py | 94 - firstapp/samples/shade/introduction.py | 116 - firstapp/samples/shade/scaling_out.py | 105 - firstapp/samples/shade/shade.yml | 7 - firstapp/setup.cfg | 22 - firstapp/setup.py | 6 - firstapp/source/advice.rst | 123 - firstapp/source/appendix.rst | 56 - firstapp/source/block_storage.rst | 434 -- firstapp/source/conf.py | 294 -- firstapp/source/craziness.rst | 77 - firstapp/source/durability.rst | 747 --- firstapp/source/getting_started.rst | 1810 ------- firstapp/source/images/architecture.dot | 9 - firstapp/source/images/fractal-example.png | Bin 61597 -> 0 bytes .../jclouds/screenshot_maven_layout.png | Bin 24017 -> 0 bytes firstapp/source/images/network-topology.png | Bin 36223 -> 0 bytes .../source/images/screenshot_webinterface.png | Bin 207211 -> 0 bytes firstapp/source/images/work_queue.dot | 7 - firstapp/source/index.rst | 20 - firstapp/source/introduction.rst | 961 ---- .../source/locale/de/LC_MESSAGES/firstapp.po | 4549 ----------------- .../locale/en_GB/LC_MESSAGES/firstapp.po | 4336 ---------------- .../source/locale/id/LC_MESSAGES/firstapp.po | 4446 ---------------- .../locale/tr_TR/LC_MESSAGES/firstapp.po | 4277 ---------------- firstapp/source/networking.rst | 912 ---- firstapp/source/orchestration.rst | 501 -- firstapp/source/scaling_out.rst | 536 -- tools/build-all-rst.sh | 1 - tools/build-firstapp-rst.sh | 15 - tox.ini | 32 +- www/index.html | 28 - www/templates/sdk_list.tmpl | 10 - 65 files changed, 4 insertions(+), 29141 deletions(-) delete mode 100644 firstapp/README.rst delete mode 100644 firstapp/samples/dotnet/getting_started.cs delete mode 100755 firstapp/samples/fog/block_storage.rb delete mode 100755 firstapp/samples/fog/durability.rb delete mode 100755 firstapp/samples/fog/getting_started.rb delete mode 100644 firstapp/samples/fog/introduction.rb delete mode 100644 firstapp/samples/fog/scaling_out.rb delete mode 100644 firstapp/samples/gophercloud/block_storage.go delete mode 100644 firstapp/samples/gophercloud/durability.go delete mode 100644 firstapp/samples/gophercloud/getting_started.go delete mode 100644 firstapp/samples/heat/faafo_autoscaling_workers.yaml delete mode 100644 firstapp/samples/heat/hello_faafo.yaml delete mode 100644 firstapp/samples/jclouds/BlockStorage.java delete mode 100644 firstapp/samples/jclouds/Durability.java delete mode 100644 firstapp/samples/jclouds/GettingStarted.java delete mode 100644 firstapp/samples/jclouds/Introduction.java delete mode 100644 firstapp/samples/jclouds/ScalingOut.java delete mode 100644 firstapp/samples/jclouds/pom.xml delete mode 100644 firstapp/samples/libcloud/block_storage.py delete mode 100644 firstapp/samples/libcloud/durability.py delete mode 100755 firstapp/samples/libcloud/getting_started.py delete mode 100644 firstapp/samples/libcloud/introduction.py delete mode 100644 firstapp/samples/libcloud/scaling_out.py delete mode 100644 firstapp/samples/openstacksdk/getting_started.py delete mode 100644 firstapp/samples/openstacksdk/introduction.py delete mode 100644 firstapp/samples/pkgcloud/getting_started.js delete mode 100644 firstapp/samples/shade/block_storage.py delete mode 100644 firstapp/samples/shade/clouds.yml delete mode 100644 firstapp/samples/shade/durability.py delete mode 100644 firstapp/samples/shade/getting_started.py delete mode 100644 firstapp/samples/shade/introduction.py delete mode 100644 firstapp/samples/shade/scaling_out.py delete mode 100644 firstapp/samples/shade/shade.yml delete mode 100644 firstapp/setup.cfg delete mode 100755 firstapp/setup.py delete mode 100644 firstapp/source/advice.rst delete mode 100644 firstapp/source/appendix.rst delete mode 100644 firstapp/source/block_storage.rst delete mode 100644 firstapp/source/conf.py delete mode 100644 firstapp/source/craziness.rst delete mode 100644 firstapp/source/durability.rst delete mode 100644 firstapp/source/getting_started.rst delete mode 100644 firstapp/source/images/architecture.dot delete mode 100644 firstapp/source/images/fractal-example.png delete mode 100644 firstapp/source/images/jclouds/screenshot_maven_layout.png delete mode 100644 firstapp/source/images/network-topology.png delete mode 100644 firstapp/source/images/screenshot_webinterface.png delete mode 100644 firstapp/source/images/work_queue.dot delete mode 100644 firstapp/source/index.rst delete mode 100644 firstapp/source/introduction.rst delete mode 100644 firstapp/source/locale/de/LC_MESSAGES/firstapp.po delete mode 100644 firstapp/source/locale/en_GB/LC_MESSAGES/firstapp.po delete mode 100644 firstapp/source/locale/id/LC_MESSAGES/firstapp.po delete mode 100644 firstapp/source/locale/tr_TR/LC_MESSAGES/firstapp.po delete mode 100644 firstapp/source/networking.rst delete mode 100644 firstapp/source/orchestration.rst delete mode 100644 firstapp/source/scaling_out.rst delete mode 100755 tools/build-firstapp-rst.sh diff --git a/.gitignore b/.gitignore index 782bee75c..2f564361a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,8 +7,6 @@ target/ /build-*.log.gz /generated /api-quick-start/build/ -/firstapp/build*/ -swagger/ # Packages *.egg diff --git a/README.rst b/README.rst index cb8607185..074473000 100644 --- a/README.rst +++ b/README.rst @@ -22,7 +22,6 @@ which includes these pages: In addition to these documents, this repository contains: * Landing page for developer.openstack.org: ``www`` - * Writing your first OpenStack application tutorial (in progress): ``firstapp`` To complete code reviews in this repository, use the standard OpenStack Gerrit `workflow `_. @@ -49,28 +48,6 @@ To build an individual document, such as the API Guide:: The locally-built output files are found in a ``publish-docs`` directory. -"Writing your First OpenStack Application" tutorial -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -To build the "Writing your first OpenStack application" tutorial, you must -install `Graphviz `_. - -To install Graphviz for Ubuntu 12.04 or later or Debian 7 ("wheezy") or later:: - - apt-get install graphviz - -On Fedora 22 and later:: - - dnf install graphviz - -On openSUSE:: - - zypper install graphviz - -On Mac OSX with Homebrew installed:: - - brew install graphviz - Build and update API docs ========================= diff --git a/doc-tools-check-languages.conf b/doc-tools-check-languages.conf index 5227d06f3..2d3a72cb8 100644 --- a/doc-tools-check-languages.conf +++ b/doc-tools-check-languages.conf @@ -4,12 +4,12 @@ declare -A DIRECTORIES=( # books to be built declare -A BOOKS=( - ["de"]="api-quick-start firstapp" + ["de"]="api-quick-start" ["eo"]="api-quick-start" - ["id"]="api-quick-start firstapp" + ["id"]="api-quick-start" ["ja"]="api-quick-start" ["ko_KR"]="api-quick-start" - ["tr_TR"]="api-quick-start firstapp" + ["tr_TR"]="api-quick-start" ["zh_CN"]="api-quick-start" ) @@ -22,7 +22,6 @@ DOC_DIR="./" declare -A SPECIAL_BOOKS SPECIAL_BOOKS=( ["api-quick-start"]="RST" - ["firstapp"]="RST" # These are translated in openstack-manuals ["common"]="skip" # Obsolete diff --git a/firstapp/README.rst b/firstapp/README.rst deleted file mode 100644 index 2f5b824bf..000000000 --- a/firstapp/README.rst +++ /dev/null @@ -1,47 +0,0 @@ -======================================== -Writing Your First OpenStack Application -======================================== - -This directory contains the "Writing Your First OpenStack Application" -tutorial. - -The tutorials work with an application that can be found in the -`openstack/faafo `_ -repository. - -Prerequisites -------------- - -To build the documentation, you must install the Graphviz package. - -/source -~~~~~~~ - -The :code:`/source` directory contains the tutorial documentation as -`reStructuredText `_ (RST). - -To build the documentation, you must install `Sphinx `_ and the -`OpenStack docs.openstack.org Sphinx theme (openstackdocstheme) `_. When -you invoke tox, these dependencies are automatically pulled in from the -top-level :code:`test-requirements.txt`. - -You must also install `Graphviz `_ on your build system. - -The RST source includes conditional output logic. The following command -invokes :code:`sphinx-build` with :code:`-t libcloud`:: - - tox -e firstapp-libcloud - -Only the sections marked :code:`.. only:: libcloud` in the RST are built. - -/samples -~~~~~~~~ - -The code samples in this guide are located in this directory. The code samples -for each SDK are located in separate subdirectories. - -/build-libcloud -~~~~~~~~~~~~~~~ - -The HTML documentation is built in this directory. The :code:`.gitignore` file -for the project specifies this directory. diff --git a/firstapp/samples/dotnet/getting_started.cs b/firstapp/samples/dotnet/getting_started.cs deleted file mode 100644 index 40a9a16fb..000000000 --- a/firstapp/samples/dotnet/getting_started.cs +++ /dev/null @@ -1,112 +0,0 @@ -using System; -using System.Collections.Generic; - -using net.openstack.Core.Domain; -using net.openstack.Core.Providers; -using net.openstack.Providers.Rackspace; - -namespace openstack -{ - class MainClass - { - public static void Main (string[] args) - { - // step-1 - var username = "your_auth_username"; - var password = "your_auth_password"; - var project_name = "your_project_name"; - var project_id = "your_project_id"; - var auth_url = "http://controller:5000/v2.0"; - var region = "your_region_name"; - var networkid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; - - var identity = new CloudIdentityWithProject () { - Username = username, - Password = password, - ProjectId = new ProjectId(project_id), - ProjectName = project_name - }; - - var identityProvider = new OpenStackIdentityProvider ( - new Uri (auth_url)); - - var conn = new CloudServersProvider (identity, identityProvider); - - // step-2 - var images = conn.ListImages (region: region); - foreach (var image in images) { - Console.WriteLine (string.Format( - "Image Id: {0} - Image Name: {1}", - image.Id, - image.Name)); - } - - // step-3 - var flavors = conn.ListFlavors (region: region); - foreach (var flavor in flavors) { - Console.WriteLine (string.Format( - "Flavor Id: {0} - Flavor Name: {1}", - flavor.Id, - flavor.Name)); - } - - // step-4 - var image_id = "97f55846-6ea5-4e9d-b437-bda97586bd0c"; - var _image = conn.GetImage(image_id, region:region); - Console.WriteLine (string.Format( - "Image Id: {0} - Image Name: {1}", - _image.Id, - _image.Name)); - - // step-5 - var flavor_id = "2"; - var _flavor = conn.GetFlavor (flavor_id, region: region); - Console.WriteLine (string.Format( - "Flavor Id: {0} - Flavor Name: {1}", - _flavor.Id, - _flavor.Name)); - - // step-6 - var instance_name = "testing"; - var testing_instance = conn.CreateServer (instance_name, - _image.Id, - _flavor.Id, - region: region, - networks: new List () { networkid }); - Console.WriteLine (string.Format( - "Instance Id: {0} at {1}", - testing_instance.Id, - testing_instance.Links - )); - - // step-7 - var instances = conn.ListServers(region:region); - foreach (var instance in instances) { - Console.WriteLine (string.Format( - "Instance Id: {0} at {1}", - testing_instance.Id, - testing_instance.Links)); - } - - // step-8 - conn.DeleteServer(testing_instance.Id, region:region); - - // step-9 - - // step-10 - - // step-11 - - // step-12 - - // step-13 - - // step-14 - - // step-15 - - Console.Read (); - } - } -} - diff --git a/firstapp/samples/fog/block_storage.rb b/firstapp/samples/fog/block_storage.rb deleted file mode 100755 index 612d51bd3..000000000 --- a/firstapp/samples/fog/block_storage.rb +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env ruby -require 'fog/openstack' - -# step-1 -auth_username = "your_auth_username" -auth_password = "your_auth_password" -auth_url = "http://controller:5000" -project_name = "your_project_name_or_id" - -conn = Fog::Compute::OpenStack.new openstack_auth_url: auth_url + "/v3/auth/tokens", - openstack_domain_id: "default", - openstack_username: auth_username, - openstack_api_key: auth_password, - openstack_project_name: project_name - -# step-2 -volume = conn.volumes.create name: "test", - description: "", - size: 1 - -p volume - -# step-3 -p conn.volumes.summary - -# step-4 -db_group = conn.security_groups.create name: "database", - description: "for database service" - -conn.security_group_rules.create parent_group_id: db_group.id, - ip_protocol: "tcp", - from_port: 3306, - to_port: 3306 - -instance = conn.servers.create name: "app-database", - image_ref: image.id, - flavor_ref: flavor.id, - key_name: key_pair.name, - security_groups: db_group - -instance.wait_for { ready? } - -# step-5 -volume = conn.volumes.get "755ab026-b5f2-4f53-b34a-6d082fb36689" -instance.attach_volume volume.id, "/dev/vdb" - -# step-6 -instance.detach_volume volume.id -volume.destroy - -# step-7 -conn.snapshots.create volume_id: volume.id, - name: "test_backup_1", - description: "test" - -# step-8 diff --git a/firstapp/samples/fog/durability.rb b/firstapp/samples/fog/durability.rb deleted file mode 100755 index fba719cf0..000000000 --- a/firstapp/samples/fog/durability.rb +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env ruby -require 'fog/openstack' -require 'digest/md5' -require 'net/http' -require 'json' -require 'openuri' - -# step-1 -auth_username = "your_auth_username" -auth_password = "your_auth_password" -auth_url = "http://controller:5000" -project_name = "your_project_name_or_id" - -swift = Fog::Storage::OpenStack.new openstack_auth_url: auth_url + "/v3/auth/tokens", - openstack_domain_id: "default", - openstack_username: auth_username, - openstack_api_key: auth_password, - openstack_project_name: project_name - -# step-2 -container_name = "fractals" -container = swift.directories.create key: container_name - -p container - -# step-3 -p swift.directories.all - -# step-4 -file_path = "goat.jpg" -object_name = "an amazing goat" -container = swift.directories.get container_name -object = container.files.create body: File.read(File.expand_path(file_path)), - key: object_name - -# step-5 -p container.files.all - -# step-6 -p container.files.get object_name - -# step-7 -puts Digest::MD5.hexdigest(File.read(File.expand_path(file_path))) - -# step-8 -object.destroy - -# step-9 -p container.files.all - -# step-10 -container_name = 'fractals' -container = swift.directories.get container_name - -# step-11 -endpoint = "http://IP_API_1" -uri = URI("#{endpoint}/v1/fractal") -uri.query = URI.encode_www_form results_per_page: -1 -data = JSON.parse(Net::HTTP.get_response(uri).body) - -data["objects"].each do |fractal| - body = open("#{endpoint}/fractal/#{fractal["uuid"]}") {|f| f.read} - object = container.files.create body: body, key: fractal["uuid"] -end - -p container.files.all - -# step-12 -container.files.each do |file| - file.destroy -end -container.destroy - -# step-13 -object_name = "backup_goat.jpg" -file_path = "backup_goat.jpg" -extra = { - description: "a funny goat", - created: "2015-06-02" -} -object = container.files.create body: File.read(File.expand_path(file_path)), - key: object_name, - metadata: extra - -# step-14 -def chunked_file_upload(swift, container_name, object_name, file_path) - chunk_size = 4096 - offset = 0 - hash = Digest::MD5.hexdigest(File.read(File.expand_path(file_path))) - object = swift.put_object(container_name, object_name, nil) do - chunk = File.read(file_path, chunk_size, offset) - offset += chunk_size - chunk ? chunk : '' - end - unless hash == object.data[:headers]["etag"] - swift.delete_object container_name, object_name - raise "Checksums do not match. Please retry." - end - container = swift.directories.get container_name - container.files.get object_name -end - -object_name = "very_large_file" -file_path = "very_large_file" - -object = chunked_file_upload(swift, container_name, object_name, file_path) - -# step-15 diff --git a/firstapp/samples/fog/getting_started.rb b/firstapp/samples/fog/getting_started.rb deleted file mode 100755 index b49f0aa9e..000000000 --- a/firstapp/samples/fog/getting_started.rb +++ /dev/null @@ -1,139 +0,0 @@ -#!/usr/bin/env ruby -require 'fog/openstack' - -# step-1 -auth_username = "your_auth_username" -auth_password = "your_auth_password" -auth_url = "http://controller:5000" -project_name = "your_project_name_or_id" - -conn = Fog::Compute::OpenStack.new openstack_auth_url: auth_url + "/v3/auth/tokens", - openstack_domain_id: "default", - openstack_username: auth_username, - openstack_api_key: auth_password, - openstack_project_name: project_name - -# step-2 -p conn.images.summary - -# step-3 -p conn.flavors.summary - -# step-4 -image = conn.images.get "2cccbea0-cea9-4f86-a3ed-065c652adda5" -p image - -# step-5 -flavor = conn.flavors.get "2" -p flavor - -# step-6 -instance_name = "testing" -testing_instance = conn.servers.create name: instance_name, - image_ref: image.id, - flavor_ref: flavor.id - -testing_instance.wait_for { ready? } - -p testing_instance - -# step-7 -p conn.servers.summary - -# step-8 -testing_instance.destroy - -# step-9 -puts "Checking for existing SSH key pair..." -key_pair_name = "demokey" -pub_key_file_path = "~/.ssh/id_rsa.pub" - -if key_pair = conn.key_pairs.get(key_pair_name) - puts "Keypair #{key_pair_name} already exists. Skipping import." -else - puts "adding keypair..." - key_pair = conn.key_pairs.create name: key_pair_name, - public_key: File.read(File.expand_path(pub_key_file_path)) -end - -p conn.key_pairs.all - -# step-10 -puts "Checking for existing security group..." -security_group_name = "all-in-one" - -all_in_one_security_group = conn.security_groups.find do |security_group| - security_group.name == security_group_name -end - -if all_in_one_security_group - puts "Security Group #{security_group_name} already exists. Skipping creation." -else - all_in_one_security_group = conn.security_groups.create name: security_group_name, - description: "network access for all-in-one application." - - conn.security_group_rules.create parent_group_id: all_in_one_security_group.id, - ip_protocol: "tcp", - from_port: 80, - to_port: 80 - - conn.security_group_rules.create parent_group_id: all_in_one_security_group.id, - ip_protocol: "tcp", - from_port: 22, - to_port: 22 - -end - -p conn.security_groups.all - -# step-11 -user_data = < 90% for period seconds - meter_name: cpu_util - statistic: avg - period: { get_param: period } - evaluation_periods: 1 - threshold: 90 - alarm_actions: - - {get_attr: [scale_up_policy, alarm_url]} - matching_metadata: {'metadata.user_metadata.stack': {get_param: "OS::stack_id"}} - comparison_operator: gt - - cpu_alarm_low: - type: OS::Ceilometer::Alarm - properties: - description: Scale-down if the average CPU < 15% for period seconds - meter_name: cpu_util - statistic: avg - period: { get_param: period } - evaluation_periods: 1 - threshold: 15 - alarm_actions: - - {get_attr: [scale_down_policy, alarm_url]} - matching_metadata: {'metadata.user_metadata.stack': {get_param: "OS::stack_id"}} - comparison_operator: lt - -outputs: - - api_url: - description: The URL for api server - value: - list_join: ['', ['http://', get_attr: [api_instance, first_address]]] - - scale__workers_up_url: - description: > - HTTP POST to this URL webhook to scale up the worker group. - Does not accept request headers or body. Place quotes around the URL. - value: {get_attr: [scale_up_policy, alarm_url]} - - scale_workers_down_url: - description: > - HTTP POST to this URL webhook to scale down the worker group. - Does not accept request headers or body. Place quotes around the URL. - value: {get_attr: [scale_down_policy, alarm_url]} - - ceilometer_statistics_query: - value: - str_replace: - template: > - ceilometer statistics -m cpu_util -q metadata.user_metadata.stack=stackval -p period -a avg - params: - stackval: { get_param: "OS::stack_id" } - period: { get_param: period } - description: > - This query shows the cpu_util sample statistics of the worker group in this stack. - These statistics trigger the alarms. - - ceilometer_sample_query: - value: - str_replace: - template: > - ceilometer sample-list -m cpu_util -q metadata.user_metadata.stack=stackval - params: - stackval: { get_param: "OS::stack_id" } - description: > - This query shows the cpu_util meter samples of the worker group in this stack. - These samples are used to calculate the statistics. \ No newline at end of file diff --git a/firstapp/samples/heat/hello_faafo.yaml b/firstapp/samples/heat/hello_faafo.yaml deleted file mode 100644 index 038585ae9..000000000 --- a/firstapp/samples/heat/hello_faafo.yaml +++ /dev/null @@ -1,90 +0,0 @@ -heat_template_version: 2014-10-16 - - -description: | - A template to bring up the faafo application as an all in one install - - -parameters: - - key_name: - type: string - description: Name of an existing KeyPair to enable SSH access to the instances - default: id_rsa - constraints: - - custom_constraint: nova.keypair - description: Must already exist on your cloud - - flavor: - type: string - description: The flavor the application is to use - constraints: - - custom_constraint: nova.flavor - description: Must be a valid flavor provided by your cloud provider. - - image_id: - type: string - description: ID of the image to use to create the instance - constraints: - - custom_constraint: glance.image - description: Must be a valid image on your cloud - - faafo_source: - type: string - description: The http location of the faafo application install script - default: https://opendev.org/openstack/faafo/raw/contrib/install.sh - -resources: - - security_group: - type: OS::Neutron::SecurityGroup - properties: - description: "SSH and HTTP for the all in one server" - rules: [ - {remote_ip_prefix: 0.0.0.0/0, - protocol: tcp, - port_range_min: 22, - port_range_max: 22}, - {remote_ip_prefix: 0.0.0.0/0, - protocol: tcp, - port_range_min: 80, - port_range_max: 80},] - - server: - type: OS::Nova::Server - properties: - image: { get_param: image_id } - flavor: { get_param: flavor } - key_name: { get_param: key_name } - security_groups: - - {get_resource: security_group} - user_data_format: RAW - user_data: - str_replace: - template: | - #!/usr/bin/env bash - curl -L -s faafo_installer | bash -s -- \ - -i faafo -i messaging -r api -r worker -r demo - wc_notify --data-binary '{"status": "SUCCESS"}' - params: - wc_notify: { get_attr: ['wait_handle', 'curl_cli'] } - faafo_installer: { get_param: faafo_source } - - wait_handle: - type: OS::Heat::WaitConditionHandle - - wait_condition: - type: OS::Heat::WaitCondition - depends_on: server - properties: - handle: { get_resource: wait_handle } - count: 1 - # we'll give it 10 minutes - timeout: 600 - -outputs: - - faafo_ip: - description: The faafo url - value: - list_join: ['', ['Faafo can be found at: http://', get_attr: [server, first_address]]] \ No newline at end of file diff --git a/firstapp/samples/jclouds/BlockStorage.java b/firstapp/samples/jclouds/BlockStorage.java deleted file mode 100644 index 1cc1385bd..000000000 --- a/firstapp/samples/jclouds/BlockStorage.java +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import com.google.common.io.Closeables; -import org.jclouds.ContextBuilder; -import org.jclouds.net.domain.IpProtocol; -import org.jclouds.openstack.cinder.v1.CinderApi; -import org.jclouds.openstack.cinder.v1.domain.Snapshot; -import org.jclouds.openstack.cinder.v1.domain.Volume; -import org.jclouds.openstack.cinder.v1.features.SnapshotApi; -import org.jclouds.openstack.cinder.v1.features.VolumeApi; -import org.jclouds.openstack.cinder.v1.options.CreateSnapshotOptions; -import org.jclouds.openstack.cinder.v1.options.CreateVolumeOptions; -import org.jclouds.openstack.cinder.v1.predicates.SnapshotPredicates; -import org.jclouds.openstack.cinder.v1.predicates.VolumePredicates; -import org.jclouds.openstack.nova.v2_0.NovaApi; -import org.jclouds.openstack.nova.v2_0.domain.Ingress; -import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup; -import org.jclouds.openstack.nova.v2_0.domain.ServerCreated; -import org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupApi; -import org.jclouds.openstack.nova.v2_0.features.ServerApi; -import org.jclouds.openstack.nova.v2_0.options.CreateServerOptions; -import org.jclouds.openstack.nova.v2_0.predicates.ServerPredicates; - -import java.io.Closeable; -import java.io.IOException; -import java.util.Optional; -import java.util.Scanner; -import java.util.concurrent.TimeoutException; - -import static java.lang.System.out; - - -public class BlockStorage implements Closeable { - - // Set the following to match the values for your cloud - private static final String IDENTITY = "your_project_name:your_auth_username"; // note: projectName:userName - private static final String KEY_PAIR_NAME = "your_key_pair_name"; - private static final String AUTH_URL = "http://controller:5000"; - private static final String AVAILABILITY_ZONE = "your_availability_zone"; - private static final String IMAGE_ID = "your_desired_image_id"; - private static final String FLAVOR_ID = "your_desired_flavor_id"; - - private static final String DATABASE_SECURITY_GROUP_NAME = "database"; - - private final CinderApi cinderApi; - private final VolumeApi volumeApi; - private final NovaApi novaApi; - private final ServerApi serverApi; - private final String region; - - // step-1 - public BlockStorage(final String password) { - cinderApi = ContextBuilder.newBuilder("openstack-cinder") - .endpoint(AUTH_URL) - .credentials(IDENTITY, password) - .buildApi(CinderApi.class); - region = cinderApi.getConfiguredRegions().iterator().next(); - out.println("Running in region: " + region); - volumeApi = cinderApi.getVolumeApi(region); - novaApi = ContextBuilder.newBuilder("openstack-nova") - .endpoint(AUTH_URL) - .credentials(IDENTITY, password) - .buildApi(NovaApi.class); - serverApi = novaApi.getServerApi(region); - } - - // step-2 - private Volume createVolume() throws TimeoutException { - String volumeName = "Test"; - CreateVolumeOptions options = CreateVolumeOptions.Builder - .name(volumeName) - .availabilityZone(AVAILABILITY_ZONE); - out.println("Creating 1 Gig volume named '" + volumeName + "'"); - Volume volume = volumeApi.create(1, options); - // Wait for the volume to become available - if (!VolumePredicates.awaitAvailable(volumeApi).apply(volume)) { - throw new TimeoutException("Timeout on volume create"); - } - return volume; - } - - // step-3 - private void listVolumes() { - out.println("Listing volumes"); - cinderApi.getConfiguredRegions().forEach((region) -> { - out.println(" In region: " + region); - cinderApi.getVolumeApi(region).list().forEach((volume) -> { - out.println(" " + volume.getName()); - }); - }); - } - - // step-4 - private boolean isSecurityGroup(String securityGroupName, SecurityGroupApi securityGroupApi) { - for (SecurityGroup securityGroup : securityGroupApi.list()) { - if (securityGroup.getName().equals(securityGroupName)) { - return true; - } - } - return false; - } - - // A utility method to convert a google optional into a Java 8 optional - private Optional optional(com.google.common.base.Optional target) { - return target.isPresent() ? Optional.of(target.get()) : Optional.empty(); - } - - private void createSecurityGroup(String securityGroupName) { - optional(novaApi.getSecurityGroupApi(region)).ifPresent(securityGroupApi -> { - if (isSecurityGroup(securityGroupName, securityGroupApi)) { - out.println("Security group " + securityGroupName + " already exists"); - } else { - out.println("Creating security group " + securityGroupName + "..."); - SecurityGroup securityGroup = - securityGroupApi.createWithDescription(securityGroupName, - "For database service"); - securityGroupApi.createRuleAllowingCidrBlock( - securityGroup.getId(), Ingress - .builder() - .ipProtocol(IpProtocol.TCP) - .fromPort(3306) - .toPort(3306) - .build(), "0.0.0.0/0"); - } - }); - } - - private String createDbInstance() throws TimeoutException { - String instanceName = "app-database"; - out.println("Creating instance " + instanceName); - CreateServerOptions allInOneOptions = CreateServerOptions.Builder - .keyPairName(KEY_PAIR_NAME) - .availabilityZone(AVAILABILITY_ZONE) - .securityGroupNames(DATABASE_SECURITY_GROUP_NAME); - ServerCreated server = serverApi.create(instanceName, IMAGE_ID, FLAVOR_ID, allInOneOptions); - String id = server.getId(); - // Wait for the server to become available - if (!ServerPredicates.awaitActive(serverApi).apply(id)) { - throw new TimeoutException("Timeout on server create"); - } - return id; - } - - // step-5 - private void attachVolume(Volume volume, String instanceId) throws TimeoutException { - out.format("Attaching volume %s to instance %s%n", volume.getId(), instanceId); - optional(novaApi.getVolumeAttachmentApi(region)).ifPresent(volumeAttachmentApi -> { - volumeAttachmentApi.attachVolumeToServerAsDevice(volume.getId(), instanceId, "/dev/vdb"); - } - ); - // Wait for the volume to be attached - if (!VolumePredicates.awaitInUse(volumeApi).apply(volume)) { - throw new TimeoutException("Timeout on volume attach"); - } - } - - // step-6 - private void detachVolume(Volume volume, String instanceId) throws TimeoutException { - out.format("Detach volume %s from instance %s%n", volume.getId(), instanceId); - optional(novaApi.getVolumeAttachmentApi(region)).ifPresent(volumeAttachmentApi -> { - volumeAttachmentApi.detachVolumeFromServer(volume.getId(), instanceId); - }); - // Wait for the volume to be detached - if (!VolumePredicates.awaitAvailable(volumeApi).apply(Volume.forId(volume.getId()))) { - throw new TimeoutException("Timeout on volume detach"); - } - } - - private void destroyVolume(Volume volume) throws TimeoutException { - out.println("Destroy volume " + volume.getName()); - volumeApi.delete(volume.getId()); - // Wait for the volume to be deleted - if (!VolumePredicates.awaitDeleted(volumeApi).apply(volume)) { - throw new TimeoutException("Timeout on volume delete"); - } - } - - // step-7 - private Snapshot createVolumeSnapshot(Volume volume) throws TimeoutException { - out.println("Create snapshot of volume " + volume.getName()); - SnapshotApi snapshotApi = cinderApi.getSnapshotApi(region); - CreateSnapshotOptions options = CreateSnapshotOptions.Builder - .name(volume.getName() + " snapshot") - .description("Snapshot of " + volume.getId()); - Snapshot snapshot = snapshotApi.create(volume.getId(), options); - // Wait for the snapshot to become available - if (!SnapshotPredicates.awaitAvailable(snapshotApi).apply(snapshot)) { - throw new TimeoutException("Timeout on volume snapshot"); - } - return snapshot; - } - - private void deleteVolumeSnapshot(Snapshot snapshot) throws TimeoutException { - out.println("Delete volume snapshot " + snapshot.getName()); - SnapshotApi snapshotApi = cinderApi.getSnapshotApi(region); - snapshotApi.delete(snapshot.getId()); - // Wait for the snapshot to be deleted - if (!SnapshotPredicates.awaitDeleted(snapshotApi).apply(snapshot)) { - throw new TimeoutException("Timeout on snapshot delete"); - } - } - // step-8 - - @Override - public void close() throws IOException { - Closeables.close(novaApi, true); - Closeables.close(cinderApi, true); - } - - public static void main(String... args) throws TimeoutException, IOException { - try (Scanner scanner = new Scanner(System.in, "UTF-8")) { - out.println("Please enter your API password: "); - String password = scanner.next(); - try (BlockStorage storage = new BlockStorage(password)) { - Volume volume = storage.createVolume(); - storage.listVolumes(); - storage.createSecurityGroup(DATABASE_SECURITY_GROUP_NAME); - String dbInstanceId = storage.createDbInstance(); - storage.attachVolume(volume, dbInstanceId); - storage.detachVolume(volume, dbInstanceId); - Snapshot snapshot = storage.createVolumeSnapshot(volume); - // have to delete the snapshot before we can delete the volume... - storage.deleteVolumeSnapshot(snapshot); - storage.destroyVolume(volume); - } - } - } -} diff --git a/firstapp/samples/jclouds/Durability.java b/firstapp/samples/jclouds/Durability.java deleted file mode 100644 index 3347f80d6..000000000 --- a/firstapp/samples/jclouds/Durability.java +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ -import com.google.common.collect.ImmutableMap; -import com.google.common.io.ByteSource; -import com.google.common.io.Closeables; -import com.google.common.io.Files; -import com.google.gson.Gson; -import org.jclouds.ContextBuilder; -import org.jclouds.blobstore.BlobStore; -import org.jclouds.blobstore.domain.Blob; -import org.jclouds.domain.Location; -import org.jclouds.io.Payload; -import org.jclouds.io.Payloads; -import org.jclouds.openstack.swift.v1.SwiftApi; -import org.jclouds.openstack.swift.v1.blobstore.RegionScopedBlobStoreContext; -import org.jclouds.openstack.swift.v1.domain.Container; -import org.jclouds.openstack.swift.v1.domain.SwiftObject; -import org.jclouds.openstack.swift.v1.features.ContainerApi; -import org.jclouds.openstack.swift.v1.features.ObjectApi; -import org.jclouds.openstack.swift.v1.options.CreateContainerOptions; -import org.jclouds.openstack.swift.v1.options.PutOptions; - -import java.io.*; -import java.net.URL; -import java.net.URLConnection; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.List; - -import static com.google.common.collect.Iterables.getOnlyElement; -import static java.lang.System.out; -import static org.jclouds.io.Payloads.newFilePayload; -import static org.jclouds.io.Payloads.newInputStreamPayload; - -public class Durability implements Closeable { - - // step-1 - private final SwiftApi swiftApi; - private final String region; - private static final String PROVIDER = "openstack-swift"; - - private static final String OS_AUTH_URL = "http://controller:5000/v2.0/"; - // format for identity is projectName:userName - private static final String IDENTITY = "your_project_name:your_auth_username"; - private static final String PASSWORD = "your_auth_password"; - - - public Durability() { - swiftApi = ContextBuilder.newBuilder(PROVIDER) - .endpoint(OS_AUTH_URL) - .credentials(IDENTITY, PASSWORD) - .buildApi(SwiftApi.class); - region = swiftApi.getConfiguredRegions().iterator().next(); - out.println("Running in region: " + region); - } - - // step-2 - private void createContainer(String containerName) { - ContainerApi containerApi = swiftApi.getContainerApi(region); - if (containerApi.create(containerName)) { - out.println("Created container: " + containerName); - } else { - out.println("Container all ready exists: " + containerName); - } - } - - // step-3 - private void listContainers() { - out.println("Containers:"); - ContainerApi containerApi = swiftApi.getContainerApi(region); - containerApi.list().forEach(container -> out.println(" " + container)); - } - - // step-4 - private String uploadObject(String containerName, String objectName, String filePath) { - Payload payload = newFilePayload(new File(filePath)); - ObjectApi objectApi = swiftApi.getObjectApi(region, containerName); - String eTag = objectApi.put(objectName, payload); - out.println(String.format("Uploaded %s as \"%s\" eTag = %s", filePath, objectName, eTag)); - return eTag; - } - - // step-5 - private void listObjectsInContainer(String containerName) { - out.println("Objects in " + containerName + ":"); - ObjectApi objectApi = swiftApi.getObjectApi(region, containerName); - objectApi.list().forEach(object -> out.println(" " + object)); - } - - // step-6 - private SwiftObject getObjectFromContainer(String containerName, String objectName) { - ObjectApi objectApi = swiftApi.getObjectApi(region, containerName); - SwiftObject object = objectApi.get(objectName); - out.println("Fetched: " + object.getName()); - return object; - } - - // step-7 - private void calculateMd5ForFile(String filePath) { - try (FileInputStream fis = new FileInputStream(new File(filePath))) { - MessageDigest md5Digest = MessageDigest.getInstance("MD5"); - - byte[] byteArray = new byte[1024]; - int bytesCount; - while ((bytesCount = fis.read(byteArray)) != -1) { - md5Digest.update(byteArray, 0, bytesCount); - } - byte[] digest = md5Digest.digest(); - - // Convert decimal number to hex string - StringBuilder sb = new StringBuilder(); - for (byte aByte : digest) { - sb.append(Integer.toString((aByte & 0xff) + 0x100, 16).substring(1)); - } - - out.println("MD5 for file " + filePath + ": " + sb.toString()); - } catch (IOException | NoSuchAlgorithmException e) { - out.println("Could not calculate md5: " + e.getMessage()); - } - } - - // step-8 - private void deleteObject(String containerName, String objectName) { - ObjectApi objectApi = swiftApi.getObjectApi(region, containerName); - objectApi.delete(objectName); - out.println("Deleted: " + objectName); - } - - // step-10 - private Container getContainer(String containerName) { - ContainerApi containerApi = swiftApi.getContainerApi(region); - // ensure container exists - containerApi.create(containerName); - return containerApi.get(containerName); - } - - // step-11 - static class Fractal { - // only included elements we want to work with - String uuid; - } - - static class Fractals { - // only included elements we want to work with - List objects; - } - - private void backupFractals(String containerName, String fractalsIp) { - // just need to make sure that there is container - getContainer(containerName); - try { - String response = ""; - String endpoint = "http://" + fractalsIp + "/v1/fractal"; - URLConnection connection = new URL(endpoint).openConnection(); - connection.setRequestProperty("'results_per_page", "-1"); - connection.getInputStream(); - try (BufferedReader in = new BufferedReader(new InputStreamReader( - connection.getInputStream()))) { - String inputLine; - while ((inputLine = in.readLine()) != null) { - response = response + inputLine; - } - } - - Gson gson = new Gson(); - Fractals fractals = gson.fromJson(response, Fractals.class); - ObjectApi objectApi = swiftApi.getObjectApi(region, containerName); - fractals.objects.forEach(fractal -> { - try { - String fractalEndpoint = "http://" + fractalsIp + "/fractal/" + fractal.uuid; - URLConnection conn = new URL(fractalEndpoint).openConnection(); - try (InputStream inputStream = conn.getInputStream()) { - Payload payload = newInputStreamPayload(inputStream); - String eTag = objectApi.put(fractal.uuid, payload); - out.println(String.format("Backed up %s eTag = %s", fractal.uuid, eTag)); - } - } catch (IOException e) { - out.println("Could not backup " + fractal.uuid + "! Cause: " + e.getMessage()); - } - }); - out.println("Backed up:"); - objectApi.list().forEach(object -> out.println(" " + object)); - } catch (IOException e) { - out.println("Could not backup fractals! Cause: " + e.getMessage()); - } - } - - // step-12 - private boolean deleteContainer(String containerName) { - ObjectApi objectApi = swiftApi.getObjectApi(region, containerName); - objectApi.list().forEach(object -> objectApi.delete(object.getName())); - ContainerApi containerApi = swiftApi.getContainerApi(region); - return containerApi.deleteIfEmpty(containerName); - } - - // step-13 - private void createWithMetadata(String containerName, String objectName, String filePath) { - - ContainerApi containerApi = swiftApi.getContainerApi(region); - CreateContainerOptions options = CreateContainerOptions.Builder - .metadata(ImmutableMap.of("photos", "of fractals")); - - if (containerApi.create(containerName, options)) { - out.println("Uploading: " + objectName); - - ObjectApi objectApi = swiftApi.getObjectApi(region, containerName); - Payload payload = newFilePayload(new File(filePath)); - PutOptions putOptions = PutOptions.Builder - .metadata(ImmutableMap.of( - "description", "a funny goat", - "created", "2015-06-02")); - String eTag = objectApi.put(objectName, payload, putOptions); - out.println( - String.format("Uploaded %s as \"%s\" eTag = %s", filePath, objectName, eTag)); - } else { - out.println("Could not upload " + objectName); - } - } - - // step-14 - private void uploadLargeFile(String containerName, String pathNameOfLargeFile) { - // Only works with jclouds V2 (in beta at the time of writing). See: - // https://issues.apache.org/jira/browse/JCLOUDS-894 - try { - RegionScopedBlobStoreContext context = ContextBuilder.newBuilder(PROVIDER) - .credentials(IDENTITY, PASSWORD) - .endpoint(OS_AUTH_URL) - .buildView(RegionScopedBlobStoreContext.class); - String region = context.getConfiguredRegions().iterator().next(); - out.println("Running in region: " + region); - BlobStore blobStore = context.getBlobStore(region); - // create the container if it doesn't exist... - Location location = getOnlyElement(blobStore.listAssignableLocations()); - blobStore.createContainerInLocation(location, containerName); - File largeFile = new File(pathNameOfLargeFile); - ByteSource source = Files.asByteSource(largeFile); - Payload payload = Payloads.newByteSourcePayload(source); - payload.getContentMetadata().setContentLength(largeFile.length()); - out.println("Uploading file. This may take some time!"); - Blob blob = blobStore.blobBuilder(largeFile.getName()) - .payload(payload) - .build(); - org.jclouds.blobstore.options.PutOptions putOptions = - new org.jclouds.blobstore.options.PutOptions(); - - String eTag = blobStore.putBlob(containerName, blob, putOptions.multipart()); - out.println(String.format("Uploaded %s eTag=%s", largeFile.getName(), eTag)); - } catch (UnsupportedOperationException e) { - out.println("Sorry: large file uploads only work in jclouds V2..."); - } - } - - // step-15 - @Override - public void close() throws IOException { - Closeables.close(swiftApi, true); - } - - public static void main(String[] args) throws IOException { - try (Durability tester = new Durability()) { - String containerName = "fractals"; - String objectName = "an amazing goat"; - String goatImageFilePath = "goat.jpg"; - String fractalsIp = "IP_API_1"; - String pathNameOfLargeFile = "big.img"; - - tester.createContainer(containerName); - tester.listContainers(); - tester.uploadObject(containerName, objectName, goatImageFilePath); - tester.listObjectsInContainer(containerName); - tester.getObjectFromContainer(containerName, objectName); - tester.calculateMd5ForFile(goatImageFilePath); - tester.deleteObject(containerName, objectName); - tester.getContainer(containerName); - tester.backupFractals(containerName, fractalsIp); - tester.deleteContainer(containerName); - tester.createWithMetadata(containerName, objectName, goatImageFilePath); - tester.listContainers(); - tester.uploadLargeFile("largeObject", pathNameOfLargeFile); - } - } -} diff --git a/firstapp/samples/jclouds/GettingStarted.java b/firstapp/samples/jclouds/GettingStarted.java deleted file mode 100644 index 51912e8a7..000000000 --- a/firstapp/samples/jclouds/GettingStarted.java +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ -import com.google.common.base.Optional; -import org.jclouds.ContextBuilder; -import org.jclouds.net.domain.IpProtocol; -import org.jclouds.openstack.nova.v2_0.NovaApi; -import org.jclouds.openstack.nova.v2_0.domain.*; -import org.jclouds.openstack.nova.v2_0.extensions.FloatingIPApi; -import org.jclouds.openstack.nova.v2_0.extensions.KeyPairApi; -import org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupApi; -import org.jclouds.openstack.nova.v2_0.features.FlavorApi; -import org.jclouds.openstack.nova.v2_0.features.ImageApi; -import org.jclouds.openstack.nova.v2_0.features.ServerApi; -import org.jclouds.openstack.nova.v2_0.options.CreateServerOptions; -import org.jclouds.openstack.nova.v2_0.predicates.ServerPredicates; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.nio.file.attribute.PosixFilePermission; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - -import static java.lang.System.out; - - -class GettingStarted { - - public static void main(String[] args) throws IOException { - out.println("============================="); - -// # step-1 - - String provider = "openstack-nova"; - String identity = "your_project_name_or_id:your_auth_username"; - // NB: Do not check this file into source control with a real password in it! - String credential = "your_auth_password"; - String authUrl = "http://controller:5000/v2.0/"; - - NovaApi conn = ContextBuilder.newBuilder(provider) - .endpoint(authUrl) - .credentials(identity, credential) - .buildApi(NovaApi.class); - String region = conn.getConfiguredRegions().iterator().next(); - out.println("Running in region: " + region); - -// # step-2 - - ImageApi imageApi = conn.getImageApi(region); - out.println("Images in region:"); - imageApi.list().concat().forEach(image -> out.println(" " + image.getName())); - -// # step-3 - - FlavorApi flavorApi = conn.getFlavorApi(region); - out.println("Flavors in region:"); - flavorApi.list().concat().forEach(flavor -> out.println(" " + flavor.getName())); - -// # step-4 - - String imageId = "778e7b2e-4e67-44eb-9565-9c920e236dfd"; - Image retrievedImage = conn.getImageApi(region).get(imageId); - out.println(retrievedImage.toString()); - -// # step-5 - - String flavorId = "639b8b2a-a5a6-4aa2-8592-ca765ee7af63"; - Flavor flavor = conn.getFlavorApi(region).get(flavorId); - out.println(flavor.toString()); - -// # step-6 - - String testingInstance = "testingInstance"; - ServerCreated testInstance = conn.getServerApi(region).create(testingInstance, imageId, flavorId); - out.println("Server created. ID: " + testInstance.getId()); - -// # step-7 - - ServerApi serverApi = conn.getServerApi(region); - out.println("Instances in region:"); - serverApi.list().concat().forEach(instance -> out.println(" " + instance)); - -// # step-8 - - if (serverApi.delete(testInstance.getId())) { - out.println("Server " + testInstance.getId() + " being deleted, please wait."); - ServerPredicates.awaitStatus(serverApi, Server.Status.DELETED, 600, 5).apply(testInstance.getId()); - serverApi.list().concat().forEach(instance -> out.println(" " + instance)); - } else { - out.println("Server not deleted."); - } - -// # step-9 - - String pub_key_file = "id_rsa"; - String privateKeyFile = "~/.ssh/" + pub_key_file; - - Optional keyPairApiExtension = conn.getKeyPairApi(region); - if (keyPairApiExtension.isPresent()) { - out.println("Checking for existing SSH keypair..."); - KeyPairApi keyPairApi = keyPairApiExtension.get(); - boolean keyPairFound = keyPairApi.get(pub_key_file) != null; - if (keyPairFound) { - out.println("Keypair " + pub_key_file + " already exists."); - } else { - out.println("Creating keypair."); - KeyPair keyPair = keyPairApi.create(pub_key_file); - try { - Files.write(Paths.get(privateKeyFile), keyPair.getPrivateKey().getBytes()); - out.println("Wrote " + privateKeyFile + "."); - // set file permissions to 600 - Set permissions = new HashSet<>(); - permissions.add(PosixFilePermission.OWNER_READ); - permissions.add(PosixFilePermission.OWNER_WRITE); - Files.setPosixFilePermissions(Paths.get(privateKeyFile), permissions); - } catch (IOException e) { - e.printStackTrace(); - } - } - out.println("Existing keypairs:"); - keyPairApi.list().forEach(keyPair -> out.println(" " + keyPair)); - } else { - out.println("No keypair extension present; skipping keypair checks."); - } - -// # step-10 - - String securityGroupName = "all-in-one"; - - Optional securityGroupApiExtension = conn.getSecurityGroupApi(region); - if (securityGroupApiExtension.isPresent()) { - out.println("Checking security groups."); - - SecurityGroupApi securityGroupApi = securityGroupApiExtension.get(); - boolean securityGroupFound = false; - for (SecurityGroup securityGroup : securityGroupApi.list()) { - securityGroupFound = securityGroupFound || securityGroup.getName().equals(securityGroupName); - } - if (securityGroupFound) { - out.println("Security group " + securityGroupName + " already exists."); - } else { - out.println("Creating " + securityGroupName + "..."); - - SecurityGroup securityGroup = securityGroupApi.createWithDescription(securityGroupName, - securityGroupName + " network access for all-in-one application."); - - Ingress sshIngress = Ingress.builder().fromPort(22).ipProtocol(IpProtocol.TCP).toPort(22).build(); - Ingress webIngress = Ingress.builder().fromPort(80).ipProtocol(IpProtocol.TCP).toPort(80).build(); - securityGroupApi.createRuleAllowingCidrBlock(securityGroup.getId(), sshIngress, "0.0.0.0/0"); - securityGroupApi.createRuleAllowingCidrBlock(securityGroup.getId(), webIngress, "0.0.0.0/0"); - } - out.println("Existing Security Groups: "); - for (SecurityGroup thisSecurityGroup : securityGroupApi.list()) { - out.println(" " + thisSecurityGroup); - thisSecurityGroup.getRules().forEach(rule -> out.println(" " + rule)); - } - } else { - out.println("No security group extension present; skipping security group checks."); - } - -// # step-11 - - String ex_userdata = "#!/usr/bin/env bash\n" + - " curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \\\n" + - " -i faafo -i messaging -r api -r worker -r demo\n"; - -// # step-12 - - out.println("Checking for existing instance..."); - String instanceName = "all-in-one"; - Server allInOneInstance = null; - - for (Server thisInstance : serverApi.listInDetail().concat()) { - if (thisInstance.getName().equals(instanceName)) { - allInOneInstance = thisInstance; - } - } - - if (allInOneInstance != null) { - out.println("Instance " + instanceName + " already exists. Skipping creation."); - } else { - out.println("Creating instance..."); - CreateServerOptions allInOneOptions = CreateServerOptions.Builder - .keyPairName(pub_key_file) - .securityGroupNames(securityGroupName) - // If not running in a single-tenant network this where you add your network... - // .networks("79e8f822-99e1-436f-a62c-66e8d3706940") - .userData(ex_userdata.getBytes()); - ServerCreated allInOneInstanceCreated = serverApi.create(instanceName, imageId, flavorId, allInOneOptions); - ServerPredicates.awaitActive(serverApi).apply(allInOneInstanceCreated.getId()); - allInOneInstance = serverApi.get(allInOneInstanceCreated.getId()); - out.println("Instance created: " + allInOneInstance.getId()); - } - out.println("Existing instances:"); - serverApi.listInDetail().concat().forEach(instance -> out.println(" " + instance.getName())); - -// # step-13 - - out.println("Checking for unused floating IP's..."); - FloatingIP unusedFloatingIP = null; - if (conn.getFloatingIPApi(region).isPresent()) { - FloatingIPApi floatingIPApi = conn.getFloatingIPApi(region).get(); - - List freeIP = floatingIPApi.list().toList().stream().filter( - floatingIp -> floatingIp.getInstanceId() == null).collect(Collectors.toList()); - - if (freeIP.size() > 0) { - out.println("The following IPs are available:"); - freeIP.forEach(floatingIP -> out.println(" " + floatingIP.getIp())); - unusedFloatingIP = freeIP.get(0); - } else { - out.println("Creating new floating IP.... "); - unusedFloatingIP = floatingIPApi.create(); - } - if (unusedFloatingIP != null) { - out.println("Using: " + unusedFloatingIP.getIp()); - } - } else { - out.println("No floating ip extension present; skipping floating ip creation."); - } - -// # step-14 - - out.println(allInOneInstance.getAddresses()); - if (allInOneInstance.getAccessIPv4() != null) { - out.println("Public IP already assigned. Skipping attachment."); - } else if (unusedFloatingIP != null) { - out.println("Attaching new IP, please wait..."); - // api must be present if we have managed to allocate a floating IP - conn.getFloatingIPApi(region).get().addToServer(unusedFloatingIP.getIp(), allInOneInstance.getId()); - //This operation takes some indeterminate amount of time; don't move on until it's done. - while (allInOneInstance.getAccessIPv4() != null) { - //Objects are not updated "live" so keep checking to make sure it's been added - try { - TimeUnit.SECONDS.sleep(1); - } catch(InterruptedException ex) { - out.println( "Awakened prematurely." ); - } - allInOneInstance = serverApi.get(allInOneInstance.getId()); - } - } - -// # step-15 - - out.print("Be patient: all going well, the Fractals app will soon be available at http://" + allInOneInstance.getAccessIPv4()); - -// # step-16 - } -} \ No newline at end of file diff --git a/firstapp/samples/jclouds/Introduction.java b/firstapp/samples/jclouds/Introduction.java deleted file mode 100644 index e6f6fb13d..000000000 --- a/firstapp/samples/jclouds/Introduction.java +++ /dev/null @@ -1,428 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableSet; -import com.google.common.io.Closeables; -import com.google.inject.Module; -import org.jclouds.ContextBuilder; -import org.jclouds.logging.slf4j.config.SLF4JLoggingModule; -import org.jclouds.net.domain.IpProtocol; -import org.jclouds.openstack.nova.v2_0.NovaApi; -import org.jclouds.openstack.nova.v2_0.domain.*; -import org.jclouds.openstack.nova.v2_0.extensions.FloatingIPApi; -import org.jclouds.openstack.nova.v2_0.extensions.FloatingIPPoolApi; -import org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupApi; -import org.jclouds.openstack.nova.v2_0.extensions.ServerWithSecurityGroupsApi; -import org.jclouds.openstack.nova.v2_0.features.ServerApi; -import org.jclouds.openstack.nova.v2_0.options.CreateServerOptions; -import org.jclouds.openstack.nova.v2_0.predicates.ServerPredicates; - -import java.io.Closeable; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; -import java.util.Set; -import java.util.stream.Collectors; - -import static java.lang.System.out; - -public class Introduction implements Closeable { - - - private static final String PROVIDER = "openstack-nova"; - - private static final String OS_AUTH_URL = "http://controller:5000/v2.0"; - // format for identity is tenantName:userName - private static final String IDENTITY = "your_project_name_or_id:your_auth_username"; - private static final String IMAGE_ID = "2cccbea0-cea9-4f86-a3ed-065c652adda5"; - private static final String FLAVOR_ID = "2"; - - private static final String ALL_IN_ONE_SECURITY_GROUP_NAME = "all-in-one"; - public static final String ALL_IN_ONE_INSTANCE_NAME = "all-in-one"; - - private static final String WORKER_SECURITY_GROUP_NAME = "worker"; - private static final String CONTROLLER_SECURITY_GROUP_NAME = "control"; - - private final NovaApi novaApi; - private final String region; - private final ServerApi serverApi; - private final String ex_keypair = "demokey"; - - public Introduction(final String password) { - Iterable modules = ImmutableSet.of(new SLF4JLoggingModule()); - novaApi = ContextBuilder.newBuilder(PROVIDER) - .endpoint(OS_AUTH_URL) - .credentials(IDENTITY, password) - .modules(modules) - .buildApi(NovaApi.class); - region = novaApi.getConfiguredRegions().iterator().next(); - serverApi = novaApi.getServerApi(region); - out.println("Running in region: " + region); - } - - // step-3 - private Ingress getIngress(int port) { - return Ingress - .builder() - .ipProtocol(IpProtocol.TCP) - .fromPort(port) - .toPort(port) - .build(); - } - - private void createAllInOneSecurityGroup() { - Optional optional = novaApi.getSecurityGroupApi(region); - if (optional.isPresent()) { - SecurityGroupApi securityGroupApi = optional.get(); - if (isSecurityGroup(ALL_IN_ONE_SECURITY_GROUP_NAME, securityGroupApi)) { - out.println("Security Group " + ALL_IN_ONE_SECURITY_GROUP_NAME + " already exists"); - } else { - out.println("Creating Security Group " + ALL_IN_ONE_SECURITY_GROUP_NAME + "..."); - SecurityGroup securityGroup = - securityGroupApi.createWithDescription(ALL_IN_ONE_SECURITY_GROUP_NAME, - "Network access for all-in-one application."); - securityGroupApi.createRuleAllowingCidrBlock( - securityGroup.getId(), getIngress(22), "0.0.0.0/0"); - securityGroupApi.createRuleAllowingCidrBlock( - securityGroup.getId(), getIngress(80), "0.0.0.0/0"); - } - } else { - out.println("No Security Group extension present; skipping security group demo."); - } - } - // step-3-end - - private SecurityGroup getSecurityGroup(String securityGroupName, SecurityGroupApi securityGroupApi) { - for (SecurityGroup securityGroup : securityGroupApi.list()) { - if (securityGroup.getName().equals(securityGroupName)) { - return securityGroup; - } - } - return null; - } - - private boolean isSecurityGroup(String securityGroupName, SecurityGroupApi securityGroupApi) { - return getSecurityGroup(securityGroupName, securityGroupApi) != null; - } - - // step-4 - private void listAllSecurityGroups() { - if (novaApi.getSecurityGroupApi(region).isPresent()) { - SecurityGroupApi securityGroupApi = novaApi.getSecurityGroupApi(region).get(); - out.println("Existing Security Groups:"); - for (SecurityGroup securityGroup : securityGroupApi.list()) { - out.println(" " + securityGroup.getName()); - } - } else { - out.println("No Security Group extension present; skipping listing of security groups."); - } - } - // step-4-end - - // step-5 - private void deleteSecurityGroupRule(SecurityGroupRule rule) { - if (novaApi.getSecurityGroupApi(region).isPresent()) { - SecurityGroupApi securityGroupApi = novaApi.getSecurityGroupApi(region).get(); - out.println("Deleting Security Group Rule " + rule.getIpProtocol()); - securityGroupApi.deleteRule(rule.getId()); - } else { - out.println("No Security Group extension present; can't delete Rule."); - } - } - - private void deleteSecurityGroup(SecurityGroup securityGroup) { - if (novaApi.getSecurityGroupApi(region).isPresent()) { - SecurityGroupApi securityGroupApi = novaApi.getSecurityGroupApi(region).get(); - out.println("Deleting Security Group " + securityGroup.getName()); - securityGroupApi.delete(securityGroup.getId()); - } else { - out.println("No Security Group extension present; can't delete Security Group."); - } - } - // step-5-end - - private void deleteSecurityGroups(String... groups) { - if (novaApi.getSecurityGroupApi(region).isPresent()) { - SecurityGroupApi securityGroupApi = novaApi.getSecurityGroupApi(region).get(); - securityGroupApi.list().forEach(securityGroup -> { - if (Arrays.asList(groups).contains(securityGroup.getName())) { - deleteSecurityGroup(securityGroup); - } - }); - } else { - out.println("No Security Group extension present; can't delete Security Groups."); - } - } - - private void deleteSecurityGroupRules(String securityGroupName) { - if (novaApi.getSecurityGroupApi(region).isPresent()) { - SecurityGroupApi securityGroupApi = novaApi.getSecurityGroupApi(region).get(); - for (SecurityGroup thisSecurityGroup : securityGroupApi.list()) { - if (thisSecurityGroup.getName().equals(securityGroupName)) { - out.println("Deleting Rules for Security Group " + securityGroupName); - Set rules = thisSecurityGroup.getRules(); - if (rules != null) { - rules.forEach(this::deleteSecurityGroupRule); - } - } - } - } else { - out.println("No Security Group extension present; skipping deleting of Rules."); - } - } - - // step-2 - final String ex_userdata = "#!/usr/bin/env bash\n" + - " curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh" + - " | bash -s -- \\\n" + - " -i faafo -i messaging -r api -r worker -r demo\n"; - // step-2-end - - // step-1 - - /** - * A helper function to create an instance - * - * @param name The name of the instance that is to be created - * @param options Keypairs, security groups etc... - * @return the id of the newly created instance. - */ - private String create_node(String name, CreateServerOptions... options) { - out.println("Creating Instance " + name); - ServerCreated serverCreated = serverApi.create(name, IMAGE_ID, FLAVOR_ID, options); - String id = serverCreated.getId(); - ServerPredicates.awaitActive(serverApi).apply(id); - return id; - } - - - private String createAllInOneInstance() { - CreateServerOptions allInOneOptions = CreateServerOptions.Builder - .keyPairName(ex_keyname) - .securityGroupNames(ALL_IN_ONE_SECURITY_GROUP_NAME) - .userData(ex_userdata.getBytes()); - return create_node(ALL_IN_ONE_INSTANCE_NAME, allInOneOptions); - } - // step-1-end - - // step-6 - private void listSecurityGroupsForServer(String serverId) { - if (novaApi.getServerWithSecurityGroupsApi(region).isPresent()) { - out.println("Listing Security Groups for Instance with id " + serverId); - ServerWithSecurityGroupsApi serverWithSecurityGroupsApi = - novaApi.getServerWithSecurityGroupsApi(region).get(); - ServerWithSecurityGroups serverWithSecurityGroups = - serverWithSecurityGroupsApi.get(serverId); - Set securityGroupNames = serverWithSecurityGroups.getSecurityGroupNames(); - securityGroupNames.forEach(name -> out.println(" " + name)); - } else { - out.println("No Server With Security Groups API found; can't list Security Groups for Instance."); - } - } - // step-6-end - - private void deleteInstance(String instanceName) { - serverApi.listInDetail().concat().forEach(instance -> { - if (instance.getName().equals(instanceName)) { - out.println("Deleting Instance: " + instance.getName()); - serverApi.delete(instance.getId()); - ServerPredicates.awaitStatus(serverApi, Server.Status.DELETED, 600, 5).apply(instance.getId()); - - } - }); - } - - // step-7 - private FloatingIP getFreeFloatingIp() { - FloatingIP unusedFloatingIP = null; - if (novaApi.getFloatingIPApi(region).isPresent()) { - out.println("Checking for unused Floating IP's..."); - FloatingIPApi floatingIPApi = novaApi.getFloatingIPApi(region).get(); - List freeIP = floatingIPApi.list().toList().stream().filter( - floatingIp -> floatingIp.getInstanceId() == null).collect(Collectors.toList()); - if (freeIP.size() > 0) { - unusedFloatingIP = freeIP.get(0); - } - } else { - out.println("No Floating IP extension present; could not fetch Floating IP."); - } - return unusedFloatingIP; - } - // step-7-end - - // step-8 - private String getFirstFloatingIpPoolName() { - String floatingIpPoolName = null; - if (novaApi.getFloatingIPPoolApi(region).isPresent()) { - out.println("Getting Floating IP Pool."); - FloatingIPPoolApi poolApi = novaApi.getFloatingIPPoolApi(region).get(); - if (poolApi.list().first().isPresent()) { - FloatingIPPool floatingIPPool = poolApi.list().first().get(); - floatingIpPoolName = floatingIPPool.getName(); - } else { - out.println("There is no Floating IP Pool"); - } - } else { - out.println("No Floating IP Pool API present; could not fetch Pool."); - } - return floatingIpPoolName; - } - // step-8-end - - // step-9 - private FloatingIP allocateFloatingIpFromPool(String poolName) { - FloatingIP unusedFloatingIP = null; - if (novaApi.getFloatingIPApi(region).isPresent()) { - out.println("Allocating IP from Pool " + poolName); - FloatingIPApi floatingIPApi = novaApi.getFloatingIPApi(region).get(); - unusedFloatingIP = floatingIPApi.allocateFromPool(poolName); - } else { - out.println("No Floating IP extension present; could not allocate IP from Pool."); - } - return unusedFloatingIP; - } - // step-9-end - - // step-10 - private void attachFloatingIpToInstance(FloatingIP unusedFloatingIP, String targetInstanceId) { - if (novaApi.getFloatingIPApi(region).isPresent()) { - out.println("Attaching new IP, please wait..."); - FloatingIPApi floatingIPApi = novaApi.getFloatingIPApi(region).get(); - floatingIPApi.addToServer(unusedFloatingIP.getIp(), targetInstanceId); - } else { - out.println("No Floating IP extension present; cannot attach IP to Instance."); - } - } - // step-10-end - - private void attachFloatingIp(String allInOneInstanceId) { - FloatingIP freeFloatingIp = getFreeFloatingIp(); - if (freeFloatingIp == null) { - String poolName = getFirstFloatingIpPoolName(); - if (poolName != null) { - freeFloatingIp = allocateFloatingIpFromPool(poolName); - if (freeFloatingIp != null) { - attachFloatingIpToInstance(freeFloatingIp, allInOneInstanceId); - } - } - } - } - - // step-11 - private void createApiAndWorkerSecurityGroups() { - if (novaApi.getSecurityGroupApi(region).isPresent()) { - SecurityGroupApi securityGroupApi = novaApi.getSecurityGroupApi(region).get(); - SecurityGroup workerGroup = - getSecurityGroup(WORKER_SECURITY_GROUP_NAME, securityGroupApi); - if (workerGroup == null) { - out.println("Creating Security Group " + WORKER_SECURITY_GROUP_NAME + "..."); - workerGroup = securityGroupApi.createWithDescription(WORKER_SECURITY_GROUP_NAME, - "For services that run on a worker node."); - securityGroupApi.createRuleAllowingCidrBlock( - workerGroup.getId(), getIngress(22), "0.0.0.0/0"); - } - SecurityGroup apiGroup = - getSecurityGroup(CONTROLLER_SECURITY_GROUP_NAME, securityGroupApi); - if (apiGroup == null) { - apiGroup = securityGroupApi.createWithDescription(CONTROLLER_SECURITY_GROUP_NAME, - "For services that run on a control node"); - securityGroupApi.createRuleAllowingCidrBlock( - apiGroup.getId(), getIngress(80), "0.0.0.0/0"); - securityGroupApi.createRuleAllowingCidrBlock( - apiGroup.getId(), getIngress(22), "0.0.0.0/0"); - securityGroupApi.createRuleAllowingSecurityGroupId( - apiGroup.getId(), getIngress(5672), workerGroup.getId()); - } - } else { - out.println("No Security Group extension present; skipping Security Group create."); - } - } - - private String createApiInstance() { - String userData = "#!/usr/bin/env bash\n" + - "curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh" + - " | bash -s -- \\\n" + - " -i messaging -i faafo -r api\n"; - String instanceName = "app-controller"; - CreateServerOptions allInOneOptions = CreateServerOptions.Builder - .keyPairName(ex_keyname) - .securityGroupNames(CONTROLLER_SECURITY_GROUP_NAME) - .userData(userData.getBytes()); - return create_node(instanceName, allInOneOptions); - } - // step-11-end - - // step-12 - private String createWorkerInstance(String apiAccessIP) { - String userData = "#!/usr/bin/env bash\n" + - "curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh" + - " | bash -s -- \\\n" + - " -i faafo -r worker -e 'http://%1$s' -m 'amqp://guest:guest@%1$s:5672/'"; - userData = String.format(userData, apiAccessIP); - CreateServerOptions options = CreateServerOptions.Builder - .keyPairName(ex_keyname) - .securityGroupNames(WORKER_SECURITY_GROUP_NAME) - .userData(userData.getBytes()); - return create_node("app-worker-1", options); - } - // step-12-end - - - private void createApiAndWorkerInstances() { - createApiAndWorkerSecurityGroups(); - String apiInstanceId = createApiInstance(); - attachFloatingIp(apiInstanceId); - String apiAccessIP = serverApi.get(apiInstanceId).getAccessIPv4(); - out.println("Controller is deployed to http://" + apiAccessIP); - String workerInstanceId = createWorkerInstance(apiAccessIP); - attachFloatingIp(workerInstanceId); - // step-13 - String workerAccessIP = serverApi.get(workerInstanceId).getAccessIPv4(); - out.println("Worker is deployed to " + workerAccessIP); - // step-13-end - } - - - private void setupIntroduction() { - createAllInOneSecurityGroup(); - String allInOneInstanceId = createAllInOneInstance(); - listAllSecurityGroups(); - listSecurityGroupsForServer(allInOneInstanceId); - attachFloatingIp(allInOneInstanceId); - deleteInstance(ALL_IN_ONE_INSTANCE_NAME); - deleteSecurityGroupRules(ALL_IN_ONE_SECURITY_GROUP_NAME); - deleteSecurityGroups(ALL_IN_ONE_SECURITY_GROUP_NAME); - createApiAndWorkerInstances(); - } - - @Override - public void close() throws IOException { - Closeables.close(novaApi, true); - } - - public static void main(String[] args) throws IOException { - try (Scanner scanner = new Scanner(System.in)) { - System.out.println("Please enter your password: "); - String password = scanner.next(); - try (Introduction gs = new Introduction(password)) { - gs.setupIntroduction(); - } - } - - } -} diff --git a/firstapp/samples/jclouds/ScalingOut.java b/firstapp/samples/jclouds/ScalingOut.java deleted file mode 100644 index b1e928fba..000000000 --- a/firstapp/samples/jclouds/ScalingOut.java +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ -import com.google.common.collect.ImmutableSet; -import com.google.common.io.Closeables; -import com.google.inject.Module; -import org.jclouds.ContextBuilder; -import org.jclouds.logging.slf4j.config.SLF4JLoggingModule; -import org.jclouds.net.domain.IpProtocol; -import org.jclouds.openstack.nova.v2_0.NovaApi; -import org.jclouds.openstack.nova.v2_0.domain.FloatingIP; -import org.jclouds.openstack.nova.v2_0.domain.Ingress; -import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup; -import org.jclouds.openstack.nova.v2_0.domain.ServerCreated; -import org.jclouds.openstack.nova.v2_0.extensions.FloatingIPApi; -import org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupApi; -import org.jclouds.openstack.nova.v2_0.features.ServerApi; -import org.jclouds.openstack.nova.v2_0.options.CreateServerOptions; -import org.jclouds.openstack.nova.v2_0.predicates.ServerPredicates; - -import java.io.Closeable; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.Scanner; -import java.util.stream.Collectors; - -import static java.lang.System.out; - -/** - * A class that shows the jclouds implementation for the scaling out chapter of the - * "Writing your first OpenStack application" book - * (http://developer.openstack.org/firstapp-libcloud/scaling_out.html) - */ -public class ScalingOut implements Closeable { - - - private final NovaApi novaApi; - private final String region; - private final ServerApi serverApi; - - // change the following to fit your OpenStack installation - private static final String KEY_PAIR_NAME = "demokey"; - private static final String PROVIDER = "openstack-nova"; - private static final String OS_AUTH_URL = "http://controller:5000/v2.0"; - // format for identity is tenantName:userName - private static final String IDENTITY = "your_project_name_or_id:your_auth_username"; - private static final String IMAGE_ID = "2cccbea0-cea9-4f86-a3ed-065c652adda5"; - private static final String FLAVOR_ID = "2"; - - public ScalingOut(final String password) { - Iterable modules = ImmutableSet.of(new SLF4JLoggingModule()); - novaApi = ContextBuilder.newBuilder(PROVIDER) - .endpoint(OS_AUTH_URL) - .credentials(IDENTITY, password) - .modules(modules) - .buildApi(NovaApi.class); - region = novaApi.getConfiguredRegions().iterator().next(); - serverApi = novaApi.getServerApi(region); - out.println("Running in region: " + region); - } - -// step-1 - - private void deleteInstances() { - List instances = Arrays.asList( - "all-in-one", "app-worker-1", "app-worker-2", "app-controller"); - serverApi.listInDetail().concat().forEach(instance -> { - if (instances.contains(instance.getName())) { - out.println("Destroying Instance: " + instance.getName()); - serverApi.delete(instance.getId()); - } - }); - } - - private void deleteSecurityGroups() { - List securityGroups = Arrays.asList( - "all-in-one", "control", "worker", "api", "services"); - if (novaApi.getSecurityGroupApi(region).isPresent()) { - SecurityGroupApi securityGroupApi = novaApi.getSecurityGroupApi(region).get(); - securityGroupApi.list().forEach(securityGroup -> { - if (securityGroups.contains(securityGroup.getName())) { - out.println("Deleting Security Group: " + securityGroup.getName()); - securityGroupApi.delete(securityGroup.getId()); - } - }); - } else { - out.println("No security group extension present; skipping security group delete."); - } - } - -// step-2 - - private Ingress getIngress(int port) { - return Ingress - .builder() - .ipProtocol(IpProtocol.TCP) - .fromPort(port) - .toPort(port) - .build(); - } - - private void createSecurityGroups() { - if (novaApi.getSecurityGroupApi(region).isPresent()) { - SecurityGroupApi securityGroupApi = novaApi.getSecurityGroupApi(region).get(); - SecurityGroup apiGroup = securityGroupApi.createWithDescription("api", - "for API services only"); - ImmutableSet.of(22, 80).forEach(port -> - securityGroupApi.createRuleAllowingCidrBlock( - apiGroup.getId(), getIngress(port), "0.0.0.0/0")); - - SecurityGroup workerGroup = securityGroupApi.createWithDescription("worker", - "for services that run on a worker node"); - securityGroupApi.createRuleAllowingCidrBlock( - workerGroup.getId(), getIngress(22), "0.0.0.0/0"); - - SecurityGroup controllerGroup = securityGroupApi.createWithDescription("control", - "for services that run on a control node"); - ImmutableSet.of(22, 80).forEach(port -> - securityGroupApi.createRuleAllowingCidrBlock( - controllerGroup.getId(), getIngress(port), "0.0.0.0/0")); - securityGroupApi.createRuleAllowingSecurityGroupId( - controllerGroup.getId(), getIngress(5672), workerGroup.getId()); - - SecurityGroup servicesGroup = securityGroupApi.createWithDescription("services", - "for DB and AMQP services only"); - securityGroupApi.createRuleAllowingCidrBlock( - servicesGroup.getId(), getIngress(22), "0.0.0.0/0"); - securityGroupApi.createRuleAllowingSecurityGroupId( - servicesGroup.getId(), getIngress(3306), apiGroup.getId()); - securityGroupApi.createRuleAllowingSecurityGroupId( - servicesGroup.getId(), getIngress(5672), workerGroup.getId()); - securityGroupApi.createRuleAllowingSecurityGroupId( - servicesGroup.getId(), getIngress(5672), apiGroup.getId()); - } else { - out.println("No security group extension present; skipping security group create."); - } - } - -// step-3 - - private Optional getOrCreateFloatingIP() { - FloatingIP unusedFloatingIP = null; - if (novaApi.getFloatingIPApi(region).isPresent()) { - FloatingIPApi floatingIPApi = novaApi.getFloatingIPApi(region).get(); - List freeIP = floatingIPApi.list().toList().stream() - .filter(floatingIP1 -> floatingIP1.getInstanceId() == null) - .collect(Collectors.toList()); - unusedFloatingIP = freeIP.size() > 0 ? freeIP.get(0) : floatingIPApi.create(); - } else { - out.println("No floating ip extension present; skipping floating ip creation."); - } - return Optional.ofNullable(unusedFloatingIP); - } - -// step-4 - - /** - * A helper function to create an instance - * - * @param name The name of the instance that is to be created - * @param options Keypairs, security groups etc... - * @return the id of the newly created instance. - */ - private String createInstance(String name, CreateServerOptions... options) { - out.println("Creating server " + name); - ServerCreated serverCreated = serverApi.create(name, IMAGE_ID, FLAVOR_ID, options); - String id = serverCreated.getId(); - ServerPredicates.awaitActive(serverApi).apply(id); - return id; - } - - /** - * @return the id of the newly created instance. - */ - private String createAppServicesInstance() { - String userData = "#!/usr/bin/env bash\n" + - "curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \\\n" + - "-i database -i messaging\n"; - CreateServerOptions options = CreateServerOptions.Builder - .keyPairName(KEY_PAIR_NAME) - .securityGroupNames("services") - .userData(userData.getBytes()); - return createInstance("app-services", options); - } - -// step-5 - - /** - * @return the id of the newly created instance. - */ - private String createApiInstance(String name, String servicesIp) { - String userData = String.format("#!/usr/bin/env bash\n" + - "curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \\\n" + - " -i faafo -r api -m 'amqp://guest:guest@%1$s:5672/' \\\n" + - " -d 'mysql+pymysql://faafo:password@%1$s:3306/faafo'", servicesIp); - CreateServerOptions options = CreateServerOptions.Builder - .keyPairName(KEY_PAIR_NAME) - .securityGroupNames("api") - .userData(userData.getBytes()); - return createInstance(name, options); - } - - /** - * @return the id's of the newly created instances. - */ - private String[] createApiInstances(String servicesIp) { - return new String[]{ - createApiInstance("app-api-1", servicesIp), - createApiInstance("app-api-2", servicesIp) - }; - } - -// step-6 - - /** - * @return the id of the newly created instance. - */ - private String createWorkerInstance(String name, String apiIp, String servicesIp) { - String userData = String.format("#!/usr/bin/env bash\n" + - "curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \\\n" + - " -i faafo -r worker -e 'http://%s' -m 'amqp://guest:guest@%s:5672/'", - apiIp, servicesIp); - CreateServerOptions options = CreateServerOptions.Builder - .keyPairName(KEY_PAIR_NAME) - .securityGroupNames("worker") - .userData(userData.getBytes()); - return createInstance(name, options); - } - - private void createWorkerInstances(String apiIp, String servicesIp) { - createWorkerInstance("app-worker-1", apiIp, servicesIp); - createWorkerInstance("app-worker-2", apiIp, servicesIp); - createWorkerInstance("app-worker-3", apiIp, servicesIp); - } - -// step-7 - - private String getPublicIp(String serverId) { - String publicIP = serverApi.get(serverId).getAccessIPv4(); - if (publicIP == null) { - Optional optionalFloatingIP = getOrCreateFloatingIP(); - if (optionalFloatingIP.isPresent()) { - publicIP = optionalFloatingIP.get().getIp(); - novaApi.getFloatingIPApi(region).get().addToServer(publicIP, serverId); - } - } - return publicIP; - } - - private String getPublicOrPrivateIP(String serverId) { - String result = serverApi.get(serverId).getAccessIPv4(); - if (result == null) { - // then there must be private one... - result = serverApi.get(serverId).getAddresses().values().iterator().next().getAddr(); - } - return result; - } - - private void setupFaafo() { - deleteInstances(); - deleteSecurityGroups(); - createSecurityGroups(); - String serviceId = createAppServicesInstance(); - String servicesIp = getPublicOrPrivateIP(serviceId); - String[] apiIds = createApiInstances(servicesIp); - String apiIp = getPublicIp(apiIds[0]); - createWorkerInstances(apiIp, servicesIp); - out.println("The Fractals app will be deployed to http://" + apiIp); - } - - @Override - public void close() throws IOException { - Closeables.close(novaApi, true); - } - - public static void main(String... args) throws IOException { - try (Scanner scanner = new Scanner(System.in)) { - System.out.println("Please enter your password: "); - String password = scanner.next(); - try (ScalingOut gs = new ScalingOut(password)) { - gs.setupFaafo(); - } - } - } -} diff --git a/firstapp/samples/jclouds/pom.xml b/firstapp/samples/jclouds/pom.xml deleted file mode 100644 index 5b48b1942..000000000 --- a/firstapp/samples/jclouds/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - 4.0.0 - - openstack.demo.app - faafo_infrastructure - 1.0-SNAPSHOT - - - 1.9.2 - - - - - - org.apache.jclouds - jclouds-all - ${jclouds.version} - - - - org.apache.jclouds.driver - jclouds-slf4j - ${jclouds.version} - - - ch.qos.logback - logback-classic - 1.0.13 - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.3 - - 1.8 - 1.8 - - - - - \ No newline at end of file diff --git a/firstapp/samples/libcloud/block_storage.py b/firstapp/samples/libcloud/block_storage.py deleted file mode 100644 index 5efc4ad7e..000000000 --- a/firstapp/samples/libcloud/block_storage.py +++ /dev/null @@ -1,49 +0,0 @@ -# step-1 -from libcloud.compute.types import Provider -from libcloud.compute.providers import get_driver - -auth_username = 'your_auth_username' -auth_password = 'your_auth_password' -auth_url = 'http://controller:5000' -project_name = 'your_project_name_or_id' -region_name = 'your_region_name' - -provider = get_driver(Provider.OPENSTACK) -connection = provider(auth_username, - auth_password, - ex_force_auth_url=auth_url, - ex_force_auth_version='2.0_password', - ex_tenant_name=project_name, - ex_force_service_region=region_name) - -# step-2 -volume = connection.create_volume(1, 'test') -print(volume) - -# step-3 -volumes = connection.list_volumes() -print(volumes) - - -# step-4 -db_group = connection.ex_create_security_group('database', 'for database service') -connection.ex_create_security_group_rule(db_group, 'TCP', 3306, 3306) -instance = connection.create_node(name='app-database', - image=image, - size=flavor, - ex_keyname=keypair_name, - ex_security_groups=[db_group]) - -# step-5 -volume = connection.ex_get_volume('755ab026-b5f2-4f53-b34a-6d082fb36689') -connection.attach_volume(instance, volume, '/dev/vdb') - -# step-6 -connection.detach_volume(volume) -connection.destroy_volume(volume) - -# step-7 -snapshot_name = 'test_backup_1' -connection.create_volume_snapshot('test', name=snapshot_name) - -# step-8 diff --git a/firstapp/samples/libcloud/durability.py b/firstapp/samples/libcloud/durability.py deleted file mode 100644 index 36f7513ac..000000000 --- a/firstapp/samples/libcloud/durability.py +++ /dev/null @@ -1,92 +0,0 @@ -# step-1 -from __future__ import print_function -from libcloud.storage.types import Provider -from libcloud.storage.providers import get_driver - -auth_username = 'your_auth_username' -auth_password = 'your_auth_password' -auth_url = 'http://controller:5000' -project_name = 'your_project_name_or_id' -region_name = 'your_region_name' - -provider = get_driver(Provider.OPENSTACK_SWIFT) -swift = provider(auth_username, - auth_password, - ex_force_auth_url=auth_url, - ex_force_auth_version='2.0_password', - ex_tenant_name=project_name, - ex_force_service_region=region_name) - -# step-2 -container_name = 'fractals' -container = swift.create_container(container_name=container_name) -print(container) - -# step-3 -print(swift.list_containers()) - -# step-4 -file_path = 'goat.jpg' -object_name = 'an amazing goat' -container = swift.get_container(container_name=container_name) -object = container.upload_object(file_path=file_path, object_name=object_name) - -# step-5 -objects = container.list_objects() -print(objects) - -# step-6 -object = swift.get_object(container_name, object_name) -print(object) - -# step-7 -import hashlib -print(hashlib.md5(open('goat.jpg', 'rb').read()).hexdigest()) - -# step-8 -swift.delete_object(object) - -# step-9 -objects = container.list_objects() -print(objects) - -# step-10 -container_name = 'fractals' -container = swift.get_container(container_name) - -# step-11 -import json - -import requests - -endpoint = 'http://IP_API_1' -params = { 'results_per_page': '-1' } -response = requests.get('%s/v1/fractal' % endpoint, params=params) -data = json.loads(response.text) -for fractal in data['objects']: - response = requests.get('%s/fractal/%s' % (endpoint, fractal['uuid']), stream=True) - container.upload_object_via_stream(response.iter_content(), object_name=fractal['uuid']) - -for object in container.list_objects(): - print(object) - -# step-12 -for object in container.list_objects(): - container.delete_object(object) -swift.delete_container(container) - -# step-13 -file_path = 'goat.jpg' -object_name = 'backup_goat.jpg' -extra = {'meta_data': {'description': 'a funny goat', 'created': '2015-06-02'}} -with open('goat.jpg', 'rb') as iterator: - object = swift.upload_object_via_stream(iterator=iterator, - container=container, - object_name=object_name, - extra=extra) - -# step-14 -swift.ex_multipart_upload_object(file_path, container, object_name, - chunk_size=33554432) - -# step-15 diff --git a/firstapp/samples/libcloud/getting_started.py b/firstapp/samples/libcloud/getting_started.py deleted file mode 100755 index cf938e937..000000000 --- a/firstapp/samples/libcloud/getting_started.py +++ /dev/null @@ -1,158 +0,0 @@ -# step-1 -from libcloud.compute.types import Provider -from libcloud.compute.providers import get_driver - -auth_username = 'your_auth_username' -auth_password = 'your_auth_password' -auth_url = 'http://controller:5000' -project_name = 'your_project_name_or_id' -region_name = 'your_region_name' - -provider = get_driver(Provider.OPENSTACK) -conn = provider(auth_username, - auth_password, - ex_force_auth_url=auth_url, - ex_force_auth_version='2.0_password', - ex_tenant_name=project_name, - ex_force_service_region=region_name) - -# step-2 -images = conn.list_images() -for image in images: - print(image) - -# step-3 -flavors = conn.list_sizes() -for flavor in flavors: - print(flavor) - -# step-4 -image_id = '2cccbea0-cea9-4f86-a3ed-065c652adda5' -image = conn.get_image(image_id) -print(image) - -# step-5 -flavor_id = '2' -flavor = conn.ex_get_size(flavor_id) -print(flavor) - -# step-6 -instance_name = 'testing' -testing_instance = conn.create_node(name=instance_name, image=image, size=flavor) -print(testing_instance) - -# step-7 -instances = conn.list_nodes() -for instance in instances: - print(instance) - -# step-8 -conn.destroy_node(testing_instance) - -# step-9 -print('Checking for existing SSH key pair...') -keypair_name = 'demokey' -pub_key_file = '~/.ssh/id_rsa.pub' -keypair_exists = False -for keypair in conn.list_key_pairs(): - if keypair.name == keypair_name: - keypair_exists = True - -if keypair_exists: - print('Keypair ' + keypair_name + ' already exists. Skipping import.') -else: - print('adding keypair...') - conn.import_key_pair_from_file(keypair_name, pub_key_file) - -for keypair in conn.list_key_pairs(): - print(keypair) - -# step-10 -print('Checking for existing security group...') -security_group_name = 'all-in-one' -security_group_exists = False -for security_group in conn.ex_list_security_groups(): - if security_group.name == security_group_name: - all_in_one_security_group = security_group - security_group_exists = True - -if security_group_exists: - print('Security Group ' + all_in_one_security_group.name + ' already exists. Skipping creation.') -else: - all_in_one_security_group = conn.ex_create_security_group(security_group_name, 'network access for all-in-one application.') - conn.ex_create_security_group_rule(all_in_one_security_group, 'TCP', 80, 80) - conn.ex_create_security_group_rule(all_in_one_security_group, 'TCP', 22, 22) - -for security_group in conn.ex_list_security_groups(): - print(security_group) - -# step-11 -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i faafo -i messaging -r api -r worker -r demo -''' - -# step-12 -print('Checking for existing instance...') -instance_name = 'all-in-one' -instance_exists = False -for instance in conn.list_nodes(): - if instance.name == instance_name: - testing_instance = instance - instance_exists = True - -if instance_exists: - print('Instance ' + testing_instance.name + ' already exists. Skipping creation.') -else: - testing_instance = conn.create_node(name=instance_name, - image=image, - size=flavor, - ex_keyname=keypair_name, - ex_userdata=userdata, - ex_security_groups=[all_in_one_security_group]) - conn.wait_until_running([testing_instance]) - -for instance in conn.list_nodes(): - print(instance) - -# step-13 -private_ip = None -if len(testing_instance.private_ips): - private_ip = testing_instance.private_ips[0] - print('Private IP found: {}'.format(private_ip)) - -# step-14 -public_ip = None -if len(testing_instance.public_ips): - public_ip = testing_instance.public_ips[0] - print('Public IP found: {}'.format(public_ip)) - -# step-15 -print('Checking for unused Floating IP...') -unused_floating_ip = None -for floating_ip in conn.ex_list_floating_ips(): - if not floating_ip.node_id: - unused_floating_ip = floating_ip - break - -if not unused_floating_ip and len(conn.ex_list_floating_ip_pools()): - pool = conn.ex_list_floating_ip_pools()[0] - print('Allocating new Floating IP from pool: {}'.format(pool)) - unused_floating_ip = pool.create_floating_ip() - -# step-16 -if public_ip: - print('Instance ' + testing_instance.name + ' already has a public ip. Skipping attachment.') -elif unused_floating_ip: - conn.ex_attach_floating_ip_to_node(testing_instance, unused_floating_ip) - -# step-17 -actual_ip_address = None -if public_ip: - actual_ip_address = public_ip -elif unused_floating_ip: - actual_ip_address = unused_floating_ip.ip_address -elif private_ip: - actual_ip_address = private_ip - -print('The Fractals app will be deployed to http://{}'.format(actual_ip_address)) diff --git a/firstapp/samples/libcloud/introduction.py b/firstapp/samples/libcloud/introduction.py deleted file mode 100644 index 50f85d6ac..000000000 --- a/firstapp/samples/libcloud/introduction.py +++ /dev/null @@ -1,133 +0,0 @@ -# step-1 -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i faafo -i messaging -r api -r worker -r demo -''' - -instance_name = 'all-in-one' -testing_instance = conn.create_node(name=instance_name, - image=image, - size=flavor, - ex_keyname=keypair_name, - ex_userdata=userdata, - ex_security_groups=[all_in_one_security_group]) - -# step-2 -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i messaging -i faafo -r api -r worker -r demo -''' - -# step-3 -all_in_one_security_group = conn.ex_create_security_group('all-in-one', 'network access for all-in-one application.') -conn.ex_create_security_group_rule(all_in_one_security_group, 'TCP', 80, 80) -conn.ex_create_security_group_rule(all_in_one_security_group, 'TCP', 22, 22) - -# step-4 -conn.ex_list_security_groups() - -# step-5 -conn.ex_delete_security_group_rule(rule) -conn.ex_delete_security_group(security_group) - -# step-6 -conn.ex_get_node_security_groups(testing_instance) - -# step-7 -unused_floating_ip = None -for floating_ip in conn.ex_list_floating_ips(): - if not floating_ip.node_id: - unused_floating_ip = floating_ip - print("Found an unused Floating IP: %s" % floating_ip) - break - -# step-8 -pool = conn.ex_list_floating_ip_pools()[0] - -# step-9 -unused_floating_ip = pool.create_floating_ip() - -# step-10 -conn.ex_attach_floating_ip_to_node(instance, unused_floating_ip) - -# step-11 -worker_group = conn.ex_create_security_group('worker', 'for services that run on a worker node') -conn.ex_create_security_group_rule(worker_group, 'TCP', 22, 22) - -controller_group = conn.ex_create_security_group('control', 'for services that run on a control node') -conn.ex_create_security_group_rule(controller_group, 'TCP', 22, 22) -conn.ex_create_security_group_rule(controller_group, 'TCP', 80, 80) -conn.ex_create_security_group_rule(controller_group, 'TCP', 5672, 5672, source_security_group=worker_group) - -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i messaging -i faafo -r api -''' - -instance_controller_1 = conn.create_node(name='app-controller', - image=image, - size=flavor, - ex_keyname='demokey', - ex_userdata=userdata, - ex_security_groups=[controller_group]) - -conn.wait_until_running([instance_controller_1]) -print('Checking for unused Floating IP...') -unused_floating_ip = None -for floating_ip in conn.ex_list_floating_ips(): - if not floating_ip.node_id: - unused_floating_ip = floating_ip - break - - -if not unused_floating_ip: - pool = conn.ex_list_floating_ip_pools()[0] - print('Allocating new Floating IP from pool: {}'.format(pool)) - unused_floating_ip = pool.create_floating_ip() - - -conn.ex_attach_floating_ip_to_node(instance_controller_1, unused_floating_ip) -print('Application will be deployed to http://%s' % unused_floating_ip.ip_address) - -# step-12 -instance_controller_1 = conn.ex_get_node_details(instance_controller_1.id) -if instance_controller_1.public_ips: - ip_controller = instance_controller_1.private_ips[0] -else: - ip_controller = instance_controller_1.public_ips[0] - -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i faafo -r worker -e 'http://%(ip_controller)s' -m 'amqp://guest:guest@%(ip_controller)s:5672/' -''' % {'ip_controller': ip_controller} -instance_worker_1 = conn.create_node(name='app-worker-1', - image=image, - size=flavor, - ex_keyname='demokey', - ex_userdata=userdata, - ex_security_groups=[worker_group]) - -conn.wait_until_running([instance_worker_1]) -print('Checking for unused Floating IP...') -unused_floating_ip = None -for floating_ip in conn.ex_list_floating_ips(): - if not floating_ip.node_id: - unused_floating_ip = floating_ip - break - - -if not unused_floating_ip: - pool = conn.ex_list_floating_ip_pools()[0] - print('Allocating new Floating IP from pool: {}'.format(pool)) - unused_floating_ip = pool.create_floating_ip() - - -conn.ex_attach_floating_ip_to_node(instance_worker_1, unused_floating_ip) -print('The worker will be available for SSH at %s' % unused_floating_ip.ip_address) - - -# step-13 -ip_instance_worker_1 = instance_worker_1.private_ips[0] -print(ip_instance_worker_1) - -# step-14 diff --git a/firstapp/samples/libcloud/scaling_out.py b/firstapp/samples/libcloud/scaling_out.py deleted file mode 100644 index 8d090bb15..000000000 --- a/firstapp/samples/libcloud/scaling_out.py +++ /dev/null @@ -1,110 +0,0 @@ -# step-1 -for instance in conn.list_nodes(): - if instance.name in ['all-in-one','app-worker-1', 'app-worker-2', 'app-controller']: - print('Destroying Instance: %s' % instance.name) - conn.destroy_node(instance) - - -for group in conn.ex_list_security_groups(): - if group.name in ['control', 'worker', 'api', 'services']: - print('Deleting security group: %s' % group.name) - conn.ex_delete_security_group(group) - -# step-2 -api_group = conn.ex_create_security_group('api', 'for API services only') -conn.ex_create_security_group_rule(api_group, 'TCP', 80, 80) -conn.ex_create_security_group_rule(api_group, 'TCP', 22, 22) - -worker_group = conn.ex_create_security_group('worker', 'for services that run on a worker node') -conn.ex_create_security_group_rule(worker_group, 'TCP', 22, 22) - -controller_group = conn.ex_create_security_group('control', 'for services that run on a control node') -conn.ex_create_security_group_rule(controller_group, 'TCP', 22, 22) -conn.ex_create_security_group_rule(controller_group, 'TCP', 80, 80) -conn.ex_create_security_group_rule(controller_group, 'TCP', 5672, 5672, source_security_group=worker_group) - -services_group = conn.ex_create_security_group('services', 'for DB and AMQP services only') -conn.ex_create_security_group_rule(services_group, 'TCP', 22, 22) -conn.ex_create_security_group_rule(services_group, 'TCP', 3306, 3306, source_security_group=api_group) -conn.ex_create_security_group_rule(services_group, 'TCP', 5672, 5672, source_security_group=worker_group) -conn.ex_create_security_group_rule(services_group, 'TCP', 5672, 5672, source_security_group=api_group) - -# step-3 -def get_floating_ip(conn): - '''A helper function to re-use available Floating IPs''' - unused_floating_ip = None - for floating_ip in conn.ex_list_floating_ips(): - if not floating_ip.node_id: - unused_floating_ip = floating_ip - break - if not unused_floating_ip: - pool = conn.ex_list_floating_ip_pools()[0] - unused_floating_ip = pool.create_floating_ip() - return unused_floating_ip - -# step-4 -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i database -i messaging -''' - -instance_services = conn.create_node(name='app-services', - image=image, - size=flavor, - ex_keyname='demokey', - ex_userdata=userdata, - ex_security_groups=[services_group]) -instance_services = conn.wait_until_running([instance_services])[0][0] -services_ip = instance_services.private_ips[0] - - -# step-5 -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i faafo -r api -m 'amqp://guest:guest@%(services_ip)s:5672/' \ - -d 'mysql+pymysql://faafo:password@%(services_ip)s:3306/faafo' -''' % { 'services_ip': services_ip } -instance_api_1 = conn.create_node(name='app-api-1', - image=image, - size=flavor, - ex_keyname='demokey', - ex_userdata=userdata, - ex_security_groups=[api_group]) -instance_api_2 = conn.create_node(name='app-api-2', - image=image, - size=flavor, - ex_keyname='demokey', - ex_userdata=userdata, - ex_security_groups=[api_group]) -instance_api_1 = conn.wait_until_running([instance_api_1])[0][0] -api_1_ip = instance_api_1.private_ips[0] -instance_api_2 = conn.wait_until_running([instance_api_2])[0][0] -api_2_ip = instance_api_2.private_ips[0] - -for instance in [instance_api_1, instance_api_2]: - floating_ip = get_floating_ip(conn) - conn.ex_attach_floating_ip_to_node(instance, floating_ip) - print('allocated %(ip)s to %(host)s' % {'ip': floating_ip.ip_address, 'host': instance.name}) - -# step-6 -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i faafo -r worker -e 'http://%(api_1_ip)s' -m 'amqp://guest:guest@%(services_ip)s:5672/' -''' % {'api_1_ip': api_1_ip, 'services_ip': services_ip} -instance_worker_1 = conn.create_node(name='app-worker-1', - image=image, size=flavor, - ex_keyname='demokey', - ex_userdata=userdata, - ex_security_groups=[worker_group]) -instance_worker_2 = conn.create_node(name='app-worker-2', - image=image, size=flavor, - ex_keyname='demokey', - ex_userdata=userdata, - ex_security_groups=[worker_group]) -instance_worker_3 = conn.create_node(name='app-worker-3', - image=image, size=flavor, - ex_keyname='demokey', - ex_userdata=userdata, - ex_security_groups=[worker_group]) - -# step-7 diff --git a/firstapp/samples/openstacksdk/getting_started.py b/firstapp/samples/openstacksdk/getting_started.py deleted file mode 100644 index 99ef9d1bb..000000000 --- a/firstapp/samples/openstacksdk/getting_started.py +++ /dev/null @@ -1,188 +0,0 @@ -# step-1 -import base64 -from os.path import expanduser - -from openstack import connection -from openstack import exceptions - -auth_username = 'your_auth_username' -auth_password = 'your_auth_password' -auth_url = 'http://controller:5000/v2.0' -project_name = 'your_project_name_or_id' -region_name = 'your_region_name' - -conn = connection.Connection(auth_url=auth_url, - project_name=project_name, - username=auth_username, - password=auth_password, - region=region_name) - -# step-2 -images = conn.image.images() -for image in images: - print(image) - -# step-3 -flavors = conn.compute.flavors() -for flavor in flavors: - print(flavor) - -# step-4 -image_id = 'cb6b7936-d2c5-4901-8678-c88b3a6ed84c' -image = conn.compute.get_image(image_id) -print(image) - -# step-5 -flavor_id = '2' -flavor = conn.compute.get_flavor(flavor_id) -print(flavor) - -# step-6 -instance_name = 'testing' -image_args = { - 'name': instance_name, - 'imageRef': image, - 'flavorRef': flavor -} - -testing_instance = conn.compute.create_server(**image_args) -print(testing_instance) - -# step-7 -instances = conn.compute.servers() -for instance in instances: - print(instance) - -# step-8 -conn.compute.delete_server(testing_instance) - -# step-9 -print('Checking for existing SSH key pair...') -keypair_name = 'demokey' -keypair_exists = False -for keypair in conn.compute.keypairs(): - if keypair.name == keypair_name: - keypair_exists = True - -if keypair_exists: - print('Keypair ' + keypair_name + ' already exists. Skipping import.') -else: - print('adding keypair...') - pub_key_file = open(expanduser('~/.ssh/id_rsa.pub')).read() - keypair_args = { - "name": keypair_name, - "public_key": pub_key_file - } - conn.compute.create_keypair(**keypair_args) - -for keypair in conn.compute.keypairs(): - print(keypair) - -# step-10 -print('Checking for existing security group...') -security_group_name = 'all-in-one' -security_group_exists = False -for security_group in conn.network.security_groups(): - if security_group.name == security_group_name: - all_in_one_security_group = security_group - security_group_exists = True - -if security_group_exists: - print('Security Group ' + all_in_one_security_group.name + ' already exists. Skipping creation.') -else: - security_group_args = { - 'name' : security_group_name, - 'description': 'network access for all-in-one application.' - } - all_in_one_security_group = conn.network.create_security_group(**security_group_args) - - security_rule_args = { - 'security_group_id': all_in_one_security_group, - 'direction': 'ingress', - 'protocol': 'tcp', - 'port_range_min': '80', - 'port_range_max': '80' - } - conn.network.create_security_group_rule(**security_rule_args) - - security_rule_args['port_range_min'] = '22' - security_rule_args['port_range_max'] = '22' - conn.network.create_security_group_rule(**security_rule_args) - -for security_group in conn.network.security_groups(): - print(security_group) - -# step-11 -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i faafo -i messaging -r api -r worker -r demo -''' -userdata_b64str = base64.b64encode(userdata) - -# step-12 -print('Checking for existing instance...') -instance_name = 'all-in-one' -instance_exists = False -for instance in conn.compute.servers(): - if instance.name == instance_name: - testing_instance = instance - instance_exists = True - -if instance_exists: - print('Instance ' + testing_instance.name + ' already exists. Skipping creation.') -else: - - testing_instance_args = { - 'name': instance_name, - 'imageRef': image, - 'flavorRef': flavor, - 'key_name': keypair_name, - 'user_data': userdata_b64str, - 'security_groups': [{'name': all_in_one_security_group.name}] - } - - testing_instance = conn.compute.create_server(**testing_instance_args) - conn.compute.wait_for_server(testing_instance) - -for instance in conn.compute.servers(): - print(instance) - -# step-13 -print('Checking if Floating IP is already assigned to testing_instance...') -testing_instance_floating_ip = None -for values in testing_instance.addresses.values(): - for address in values: - if address['OS-EXT-IPS:type'] == 'floating': - testing_instance_floating_ip = conn.network.find_ip(address['addr']) - -unused_floating_ip = None -if not testing_instance_floating_ip: - print('Checking for unused Floating IP...') - for floating_ip in conn.network.ips(): - if not floating_ip.fixed_ip_address: - unused_floating_ip = floating_ip - break - -if not testing_instance_floating_ip and not unused_floating_ip: - print('No free unused Floating IPs. Allocating new Floating IP...') - public_network_id = conn.network.find_network('public').id - try: - unused_floating_ip = conn.network.create_ip(floating_network_id=public_network_id) - unused_floating_ip = conn.network.get_ip(unused_floating_ip) - print(unused_floating_ip) - except exceptions.HttpException as e: - print(e) - -# step-14 -if testing_instance_floating_ip: - print('Instance ' + testing_instance.name + ' already has a public ip. Skipping attachment.') -else: - for port in conn.network.ports(): - if port.device_id == testing_instance.id: - testing_instance_port = port - - testing_instance_floating_ip = unused_floating_ip - conn.network.add_ip_to_port(testing_instance_port, testing_instance_floating_ip) - -# step-15 -print('The Fractals app will be deployed to http://%s' % testing_instance_floating_ip.floating_ip_address) diff --git a/firstapp/samples/openstacksdk/introduction.py b/firstapp/samples/openstacksdk/introduction.py deleted file mode 100644 index 1a3f3e90e..000000000 --- a/firstapp/samples/openstacksdk/introduction.py +++ /dev/null @@ -1,228 +0,0 @@ -# step-1 -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i faafo -i messaging -r api -r worker -r demo -''' -userdata_b64str = base64.b64encode(userdata) - -instance_name = 'all-in-one' -testing_instance_args = { - 'name': instance_name, - 'imageRef': image, - 'flavorRef': flavor, - 'key_name': keypair_name, - 'user_data': userdata_b64str, - 'security_groups': [{'name': all_in_one_security_group.name}] -} - -testing_instance = conn.compute.create_server(**testing_instance_args) - -# step-2 -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i faafo -i messaging -r api -r worker -r demo -''' -userdata_b64str = base64.b64encode(userdata) - -# step-3 -security_group_args = { - 'name' : 'all-in-one', - 'description': 'network access for all-in-one application.' -} -all_in_one_security_group = conn.network.create_security_group(**security_group_args) - -# HTTP access -security_rule_args = { - 'security_group_id': all_in_one_security_group, - 'direction': 'ingress', - 'protocol': 'tcp', - 'port_range_min': '80', - 'port_range_max': '80' -} -conn.network.create_security_group_rule(**security_rule_args) - -# SSH access -security_rule_args['port_range_min'] = '22' -security_rule_args['port_range_max'] = '22' -conn.network.create_security_group_rule(**security_rule_args) - -# step-4 -for security_group in conn.network.security_groups(): - print(security_group) - -# step-5 -conn.network.delete_security_group_rule(rule) -conn.network.delete_security_group(security_group) - -# step-6 -testing_instance['security_groups'] - -# step-7 -unused_floating_ip = None -for floating_ip in conn.network.ips(): - if not floating_ip.fixed_ip_address: - unused_floating_ip = floating_ip - print("Found an unused Floating IP: %s" % floating_ip) - break - -# step-8 -public_network_id = conn.network.find_network('public').id - -# step-9 -unused_floating_ip = conn.network.create_ip(floating_network_id=public_network_id) -unused_floating_ip = conn.network.get_ip(unused_floating_ip) - -# step-10 -for port in conn.network.ports(): - if port.device_id == testing_instance.id: - testing_instance_port = port - break - -testing_instance_floating_ip = unused_floating_ip -conn.network.add_ip_to_port(testing_instance_port, testing_instance_floating_ip) - -# step-11 -security_group_args = { - 'name' : 'worker', - 'description': 'for services that run on a worker node' -} -worker_group = conn.network.create_security_group(**security_group_args) - -security_rule_args = { - 'security_group_id': worker_group, - 'direction': 'ingress', - 'protocol': 'tcp', - 'port_range_min': '22', - 'port_range_max': '22' -} -conn.network.create_security_group_rule(**security_rule_args) - -security_group_args = { - 'name' : 'control', - 'description': 'for services that run on a control node' -} -controller_group = conn.network.create_security_group(**security_group_args) - -# Switch to controller_group and readd SSH access rule -security_rule_args['security_group_id'] = controller_group -conn.network.create_security_group_rule(**security_rule_args) - -# Add HTTP access rule -security_rule_args['port_range_min'] = '80' -security_rule_args['port_range_max'] = '80' -conn.network.create_security_group_rule(**security_rule_args) - -# Add RabbitMQ access rule for all instances with -# 'worker' security group -security_rule_args['port_range_min'] = '5672' -security_rule_args['port_range_max'] = '5672' -security_rule_args['remote_group_id'] = worker_group -conn.network.create_security_group_rule(**security_rule_args) - -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i messaging -i faafo -r api -''' -userdata_b64str = base64.b64encode(userdata) - -instance_controller_1_args = { - 'name': 'app-controller', - 'imageRef': image, - 'flavorRef': flavor, - 'key_name': 'demokey', - 'user_data': userdata_b64str, - 'security_groups': [{'name': controller_group.name}] -} - -instance_controller_1 = conn.compute.create_server(**instance_controller_1_args) -conn.compute.wait_for_server(instance_controller_1) - -print('Checking for unused Floating IP...') -unused_floating_ip = None -for floating_ip in conn.network.ips(): - if not floating_ip.fixed_ip_address: - unused_floating_ip = floating_ip - print("Found an unused Floating IP: %s" % floating_ip) - break - -if not unused_floating_ip: - print('No free unused Floating IPs. Allocating new Floating IP...') - public_network_id = conn.network.find_network('public').id - unused_floating_ip = conn.network.create_ip(floating_network_id=public_network_id) - unused_floating_ip = conn.network.get_ip(unused_floating_ip) - -for port in conn.network.ports(): - if port.device_id == instance_controller_1.id: - controller_instance_port = port - break - -controller_instance_floating_ip = unused_floating_ip -conn.network.add_ip_to_port(controller_instance_port, controller_instance_floating_ip) - -# Retrieve all information about 'instance_controller_1' -instance_controller_1 = conn.compute.get_server(instance_controller_1) - -print('Application will be deployed to http://%s' % controller_instance_floating_ip.floating_ip_address) - -# step-12 -for values in instance_controller_1.addresses.values(): - for address in values: - if address['OS-EXT-IPS:type'] == 'fixed': - ip_controller = address['addr'] - break - -userdata = '''#!/usr/bin/env bash -curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \ - -i faafo -r worker -e 'http://%(ip_controller)s' -m 'amqp://guest:guest@%(ip_controller)s:5672/' -''' % {'ip_controller': ip_controller} -userdata_b64str = base64.b64encode(userdata) - -instance_worker_1_args = { - 'name': 'app-worker-1', - 'imageRef': image, - 'flavorRef': flavor, - 'key_name': 'demokey', - 'user_data': userdata_b64str, - 'security_groups': [{'name': worker_group.name}] -} - -instance_worker_1 = conn.compute.create_server(**instance_worker_1_args) -conn.compute.wait_for_server(instance_worker_1) - -print('Checking for unused Floating IP...') -unused_floating_ip = None -for floating_ip in conn.network.ips(): - if not floating_ip.fixed_ip_address: - unused_floating_ip = floating_ip - print("Found an unused Floating IP: %s" % floating_ip) - break - -if not unused_floating_ip: - print('No free unused Floating IPs. Allocating new Floating IP...') - public_network_id = conn.network.find_network('public').id - unused_floating_ip = conn.network.create_ip(floating_network_id=public_network_id) - unused_floating_ip = conn.network.get_ip(unused_floating_ip) - -for port in conn.network.ports(): - if port.device_id == instance_worker_1.id: - worker_instance_port = port - break - -worker_instance_floating_ip = unused_floating_ip -conn.network.add_ip_to_port(worker_instance_port, worker_instance_floating_ip) - -# Retrieve all information about 'instance_worker_1' -instance_worker_1 = conn.compute.get_server(instance_worker_1) - -print('The worker will be available for SSH at %s' % worker_instance_floating_ip.floating_ip_address) - -# step-13 -for values in instance_worker_1.addresses.values(): - for address in values: - if address['OS-EXT-IPS:type'] == 'floating': - ip_instance_worker_1 = address['addr'] - break - -print(ip_instance_worker_1) - -# step-14 diff --git a/firstapp/samples/pkgcloud/getting_started.js b/firstapp/samples/pkgcloud/getting_started.js deleted file mode 100644 index 7234a8f49..000000000 --- a/firstapp/samples/pkgcloud/getting_started.js +++ /dev/null @@ -1,182 +0,0 @@ -// step-1 - -auth_username = 'your_auth_username'; -auth_password = 'your_auth_password'; -auth_url = 'http://controller:5000'; -project_name = 'your_project_name_or_id'; -region_name = 'your_region_name'; - - -var conn = require('pkgcloud').compute.createClient({ - provider: 'openstack', - username: auth_username, - password: auth_password, - authUrl:auth_url, - region: region_name -}); - - -// step-2 -conn.getImages(function(err, images) { - for (i =0; i` -to implement functional checks within your application that external -tools can access through exposed endpoints at regular intervals. - -Backups -~~~~~~~ - -Just as you back up information on a non-cloud server, you must back -up non-reproducible information, such as information on a database -server, file server, or in application log files. Just because -something is 'in the cloud' does not mean that the underlying hardware -or systems cannot fail. - -OpenStack provides a couple of tools that make it easy to back up -data. If your provider runs OpenStack Object Storage, you can use its -API calls and CLI tools to work with archive files. - -You can also use the OpenStack API to create snapshots of running -instances and persistent volumes. For more information, see your SDK -documentation. - -.. todo:: Link to appropriate documentation, or better yet, link and - also include the commands here. - -In addition to configuring backups, review your policies about what -you back up and how long to retain each backed up item. - -Phoenix servers -~~~~~~~~~~~~~~~ - -`Phoenix Servers `_, -named for the mythical bird that is consumed by fire and rises from -the ashes to live again, make it easy to start over with new -instances. - -Application developers and operators who use phoenix servers have -access to systems that are built from a known baseline, such as a -specific operating system version, and to tooling that automatically -builds, installs, and configures a system. - -If you deploy your application on a regular basis, you can resolve -outages and make security updates without manual intervention. If an -outage occurs, you can provision more resources in another region. If -you must patch security holes, you can provision additional compute -nodes that are built with the updated software. Then, you can -terminate vulnerable nodes and automatically fail-over traffic to the -new instances. - -Security -~~~~~~~~ - -If one application instance is compromised, all instances with the -same image and configuration will likely suffer the same -vulnerability. The safest path is to use configuration management to -rebuild all instances. - -Configuration management -~~~~~~~~~~~~~~~~~~~~~~~~ - -Configuration management tools, such as Ansible, Chef, and Puppet, -enable you to describe exactly what to install and configure on an -instance. Using these descriptions, these tools implement the changes -that are required to get to the desired state. - -These tools vastly reduce the effort it takes to work with large -numbers of servers, and also improve the ability to recreate, update, -move, and distribute applications. - -Application deployment -~~~~~~~~~~~~~~~~~~~~~~ - -How do you deploy your application? For example, do you pull the -latest code from a source control repository? Do you make packaged -releases that update infrequently? Do you perform haphazard tests in a -development environment and deploy only after major changes? - -One of the latest trends in scalable cloud application deployment is -`continuous integration `_ -and `continuous deployment `_ -(CI/CD). - -CI/CD means that you always test your application and make frequent -deployments to production. - -In this tutorial, we have downloaded the latest version of our -application from source and installed it on a standard image. Our -magic installation script also updates the standard image to have the -latest dependencies that you need to run the application. - -Another approach is to create a 'gold' image, which pre-installs your -application and its dependencies. A 'gold' image enables faster boot -times and more control over what is on the instance. However, if you -use 'gold' images, you must have a process in place to ensure that -these images do not fall behind on security updates. - -Fail fast -~~~~~~~~~ - -.. todo:: Section needs to be written. diff --git a/firstapp/source/appendix.rst b/firstapp/source/appendix.rst deleted file mode 100644 index e7a671578..000000000 --- a/firstapp/source/appendix.rst +++ /dev/null @@ -1,56 +0,0 @@ -======== -Appendix -======== - -Bootstrap your network -~~~~~~~~~~~~~~~~~~~~~~ - -Most cloud providers provision all network objects that are required -to boot an instance. To determine whether these objects were created -for you, access the Network Topology section of the OpenStack -dashboard. - -.. figure:: images/network-topology.png - :width: 920px - :align: center - :height: 622px - :alt: network topology view - :figclass: align-center - -Specify a network during instance build -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. todo:: code for creating a networking using code - -.. only:: shade - - Add the parameter network and send its name or id to attach the instance to: - - .. code-block:: python - - testing_instance = conn.create_server(wait=True, auto_ip=True, - name=instance_name, - image=image_id, - flavor=flavor_id, - network=network_id) - -.. only:: gophercloud - - Add the option Networks and send its id to attach the instance to: - - .. code-block:: go - - opts := servers.CreateOpts { - Name: instanceName, - ImageRef: image.ID, - FlavorRef: flavor.ID, - SecurityGroups: []string{securityGroupName}, - UserData: []byte(userData), - Networks: []servers.Network{servers.Network{UUID: networkID}}, - - } - - testingInstance, _ = servers.Create(client, keypairs.CreateOptsExt { - CreateOptsBuilder: opts, - KeyName: keyPairName, - }).Extract() diff --git a/firstapp/source/block_storage.rst b/firstapp/source/block_storage.rst deleted file mode 100644 index 7909d95b7..000000000 --- a/firstapp/source/block_storage.rst +++ /dev/null @@ -1,434 +0,0 @@ -============= -Block Storage -============= - -.. todo:: (For nick: Restructure the introduction to this chapter to - provide context of what we're actually going to do.) - -By default, data in OpenStack instances is stored on 'ephemeral' -disks. These disks remain with the instance throughout its lifetime. -When you terminate the instance, that storage and all the data stored -on it disappears. Ephemeral storage is allocated to a single instance -and cannot be moved to another instance. - -This section introduces block storage, also known as volume storage, -which provides access to persistent storage devices. You interact with -block storage by attaching volumes to running instances just as you -might attach a USB drive to a physical server. You can detach volumes -from one instance and reattach them to another instance and the data -remains intact. The OpenStack Block Storage (cinder) project -implements block storage. - -Though you might have configured Object Storage to store images, the -Fractal application needs a database to track the location of, and -parameters that were used to create, images in Object Storage. This -database server cannot fail. - -If you are an advanced user, think about how you might remove the -database from the architecture and replace it with Object Storage -metadata, and then contribute these steps to :doc:`craziness`. - -Otherwise, continue reading to learn how to work with, and move the -Fractal application database server to use, block storage. - -Basics -~~~~~~ - -Later on, you will use a Block Storage volume to provide persistent -storage for the database server for the Fractal application. But -first, learn how to create and attach a Block Storage device. - -.. only:: dotnet - - .. warning:: This section has not yet been completed for the .NET SDK. - -.. only:: fog - - .. warning:: This section has not yet been completed for the fog SDK. - -.. only:: pkgcloud - - .. warning:: This section has not yet been completed for the pkgcloud SDK. - -.. only:: openstacksdk - - .. warning:: This section has not yet been completed for the OpenStack SDK. - -.. only:: phpopencloud - - .. warning:: This section has not yet been completed for the - PHP-OpenCloud SDK. - - -Connect to the API endpoint: - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/block_storage.py - :language: python - :start-after: step-1 - :end-before: step-2 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/BlockStorage.java - :language: java - :start-after: step-1 - :end-before: step-2 - -.. only:: shade - - .. literalinclude:: ../samples/shade/block_storage.py - :language: python - :start-after: step-1 - :end-before: step-2 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/block_storage.go - :language: go - :start-after: step-1 - :end-before: step-2 - -To try it out, make a 1GB volume called 'test'. - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/block_storage.py - :language: python - :start-after: step-2 - :end-before: step-3 - - :: - - - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/BlockStorage.java - :language: java - :start-after: step-2 - :end-before: step-3 - -.. only:: shade - - .. literalinclude:: ../samples/shade/block_storage.py - :language: python - :start-after: step-2 - :end-before: step-3 - - .. note:: The parameter :code:`size` is in gigabytes. - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/block_storage.go - :language: go - :start-after: step-2 - :end-before: step-3 - - .. note:: The parameter :code:`Size` is in gigabytes. - -To see if the volume creation was successful, list all volumes: - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/block_storage.py - :language: python - :start-after: step-3 - :end-before: step-4 - - :: - - [] - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/BlockStorage.java - :language: java - :start-after: step-3 - :end-before: step-4 - -.. only:: shade - - .. literalinclude:: ../samples/shade/block_storage.py - :language: python - :start-after: step-3 - :end-before: step-4 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/block_storage.go - :language: go - :start-after: step-3 - :end-before: step-4 - -Use Block Storage for the Fractal database server -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -You need a server for the dedicated database. Use the image, flavor, and -keypair that you used in :doc:`/getting_started` to launch an -:code:`app-database` instance. - -You also need a security group to permit access to the database server (for -MySQL, port 3306) from the network: - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/block_storage.py - :language: python - :start-after: step-4 - :end-before: step-5 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/BlockStorage.java - :language: java - :start-after: step-4 - :end-before: step-5 - -.. only:: shade - - .. literalinclude:: ../samples/shade/block_storage.py - :language: python - :start-after: step-4 - :end-before: step-5 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/block_storage.go - :language: go - :start-after: step-4 - :end-before: step-5 - -Create a volume object by using the unique identifier (UUID) for the -volume. Then, use the server object from the previous code snippet to -attach the volume to it at :code:`/dev/vdb`: - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/block_storage.py - :language: python - :start-after: step-5 - :end-before: step-6 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/BlockStorage.java - :language: java - :start-after: step-5 - :end-before: step-6 - -.. only:: shade - - .. literalinclude:: ../samples/shade/block_storage.py - :language: python - :start-after: step-5 - :end-before: step-6 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/block_storage.go - :language: go - :start-after: step-5 - :end-before: step-6 - -Log in to the server to run the following steps. - -.. note:: Replace :code:`IP_DATABASE` with the IP address of the - database instance and USERNAME to the appropriate user name. - -Now prepare the empty block device. - -.. code-block:: console - - $ ssh -i ~/.ssh/id_rsa USERNAME@IP_DATABASE - # fdisk -l - Disk /dev/vdb: 1073 MB, 1073741824 bytes - 16 heads, 63 sectors/track, 2080 cylinders, total 2097152 sectors - Units = sectors of 1 * 512 = 512 bytes - Sector size (logical/physical): 512 bytes / 512 bytes - I/O size (minimum/optimal): 512 bytes / 512 bytes - Disk identifier: 0x00000000 - - Disk /dev/vdb doesn't contain a valid partition table - - # mke2fs /dev/vdb - mke2fs 1.42.9 (4-Feb-2014) - Filesystem label= - OS type: Linux - Block size=4096 (log=2) - Fragment size=4096 (log=2) - Stride=0 blocks, Stripe width=0 blocks - 65536 inodes, 262144 blocks - 13107 blocks (5.00%) reserved for the super user - First data block=0 - Maximum filesystem blocks=268435456 - 8 block groups - 32768 blocks per group, 32768 fragments per group - 8192 inodes per group - Superblock backups stored on blocks: - 32768, 98304, 163840, 229376 - - Allocating group tables: done - Writing inode tables: done - Writing superblocks and filesystem accounting information: done - - # mkdir /mnt/database - # mount /dev/vdb /mnt/database - - -Stop the running MySQL database service and move the database files from -:file:`/var/lib/mysql` to the new volume, which is temporarily mounted at -:file:`/mnt/database`. - -.. code-block:: console - - # systemctl stop mariadb - # mv /var/lib/mysql/* /mnt/database - -Sync the file systems and mount the block device that contains the database -files to :file:`/var/lib/mysql`. - -.. code-block:: console - - # sync - # umount /mnt/database - # rm -rf /mnt/database - # echo "/dev/vdb /var/lib/mysql ext4 defaults 1 2" >> /etc/fstab - # mount /var/lib/mysql - -Finally, start the stopped MySQL database service and validate that everything -works as expected. - -.. code-block:: console - - # systemctl start mariadb - # mysql -ufaafo -ppassword -h localhost faafo -e 'show tables;' - -Extras -~~~~~~ - -You can detach the volume and reattach it elsewhere, or use the following -steps to delete the volume. - -.. warning:: - The following operations are destructive and result in data loss. - -To detach and delete a volume: - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/block_storage.py - :start-after: step-6 - :end-before: step-7 - - :: - - True - - .. note:: :code:`detach_volume` and :code:`destroy_volume` take a - volume object, not a name. - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/BlockStorage.java - :language: java - :start-after: step-6 - :end-before: step-7 - -.. only:: shade - - .. literalinclude:: ../samples/shade/block_storage.py - :language: python - :start-after: step-6 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/block_storage.go - :language: go - :start-after: step-6 - -.. only:: libcloud - - Other features, such as creating volume snapshots, are useful for backups: - - .. literalinclude:: ../samples/libcloud/block_storage.py - :language: python - :start-after: step-7 - :end-before: step-8 - - .. todo:: Do we need a note here to mention that 'test' is the - volume name and not the volume object? - - For information about these and other calls, see - `libcloud documentation `_. - -.. only:: jclouds - - Other features, such as creating volume snapshots, are useful for backups: - - .. literalinclude:: ../samples/jclouds/BlockStorage.java - :language: java - :start-after: step-7 - :end-before: step-8 - - The following file contains all of the code from this section of the - tutorial. This comprehensive code sample lets you view and run the code - as a single file. - - .. literalinclude:: ../samples/jclouds/BlockStorage.java - :language: java - -Work with the OpenStack Database service -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Previously, you manually created the database, which is useful for a single -database that you rarely update. However, the OpenStack :code:`trove` -component provides Database as a Service (DBaaS). - -.. note:: This OpenStack Database service is not installed in many - clouds right now, but if your cloud supports it, it can - make your life a lot easier when working with databases. - -SDKs do not generally support the service yet, but you can use the -'trove' command-line client to work with it instead. - -To install the 'trove' command-line client, see -`Install the OpenStack command-line clients -`_. - -To set up environment variables for your cloud in an :file:`openrc.sh` -file, see -`Set environment variables using the OpenStack RC file `_. - -Ensure you have an :file:`openrc.sh` file, source it, and validate that -your trove client works: - -.. code-block:: console - - $ cat openrc.sh - export OS_USERNAME=your_auth_username - export OS_PASSWORD=your_auth_password - export OS_TENANT_NAME=your_project_name - export OS_AUTH_URL=http://controller:5000/v2.0 - export OS_REGION_NAME=your_region_name - - $ source openrc.sh - - $ trove --version - 1.0.9 - -For information about supported features and how to work with an -existing database service installation, see -`Database as a Service in OpenStack `_. - -Next steps -~~~~~~~~~~ - -You should now be fairly confident working with Block Storage volumes. -For information about other calls, see the volume documentation for -your SDK. Or, try one of these tutorial steps: - -* :doc:`/orchestration`: Automatically orchestrate your application. -* :doc:`/networking`: Learn about complex networking. -* :doc:`/advice`: Get advice about operations. diff --git a/firstapp/source/conf.py b/firstapp/source/conf.py deleted file mode 100644 index 89a0ca5a6..000000000 --- a/firstapp/source/conf.py +++ /dev/null @@ -1,294 +0,0 @@ -# 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. - -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import os -import subprocess - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.todo', - 'sphinx.ext.ifconfig', - 'sphinxcontrib.nwdiag', - 'sphinx.ext.graphviz', - 'sphinx.ext.todo', - 'openstackdocstheme' -] - -# Add any paths that contain templates here, relative to this directory. -# templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -# source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -repository_name = 'openstack/api-site' -project = u'FirstApp' -bug_project = 'openstack-api-site' -bug_tag = u'firstapp' -copyright = u'2015-2017, OpenStack contributors' - -# The version info for the project you are documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '0.1' -# The full version, including alpha/beta/rc tags. -release = '0.1' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# today = '' -# Else, today_fmt is used as the format for a strftime call. -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -# keep_warnings = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'openstackdocs' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -# html_theme_path = [openstackdocstheme.get_html_theme_path()] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -# html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -# html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -# So that we can enable "log-a-bug" links from each output HTML page, this -# variable must be set to a format that includes year, month, day, hours and -# minutes. -html_last_updated_fmt = '%Y-%m-%d %H:%M' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_domain_indices = True - -# If false, no index is generated. -html_use_index = False - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -html_show_sourcelink = False - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'FirstAppdoc' - -# If true, publish source files -html_copy_source = False - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # 'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ('index', 'FirstApp.tex', u'FirstApp Documentation', - u'OpenStack Doc Team', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'firstapp', u'FirstApp Documentation', - [u'OpenStack Doc Team'], 1) -] - -# If true, show URL addresses after external links. -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'FirstApp', u'FirstApp Documentation', - u'OpenStack Doc Team', 'FirstApp', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -# texinfo_appendices = [] - -# If false, no module index is generated. -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# texinfo_no_detailmenu = False - -# Set to True to enable printing of the TODO sections -todo_include_todos = False - -# -- Options for Internationalization output ------------------------------ -locale_dirs = ['locale/'] - -# -- Options for PDF output -------------------------------------------------- - -pdf_documents = [ - ('index', u'FirstApp', u'FirstApp Documentation', - u'OpenStack contributors') -] diff --git a/firstapp/source/craziness.rst b/firstapp/source/craziness.rst deleted file mode 100644 index 5aad77abd..000000000 --- a/firstapp/source/craziness.rst +++ /dev/null @@ -1,77 +0,0 @@ -=========== -Going crazy -=========== - -This section explores options for expanding the sample application. - -Regions and geographic diversity -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. note:: For more information about multi-site clouds, see the - `Multi-Site chapter `_ - in the Architecture Design Guide. - -OpenStack supports 'regions', which are geographically-separated -installations that are connected to a single service catalog. This -section explains how to expand the Fractal application to use multiple -regions for high availability. - -.. note:: This section is incomplete. Please help us finish it! - -Multiple clouds -~~~~~~~~~~~~~~~ - -.. note:: For more information about hybrid clouds, see the `Hybrid - Cloud chapter - `_ - in the Architecture Design Guide. - -You might want to use multiple clouds, such as a private cloud inside -your organization and a public cloud. This section attempts to do -exactly that. - -.. note:: This section is incomplete. Please help us finish it! - -High availability -~~~~~~~~~~~~~~~~~ - -Using Pacemaker to look at the API. - -.. note:: This section is incomplete. Please help us finish it! - -conf.d, etc.d -~~~~~~~~~~~~~ - -Use conf.d and etc.d. - -In earlier sections, the Fractal application used an installation -script into which the metadata API passed parameters to bootstrap the -cluster. `Etcd `_ is "a distributed, -consistent key-value store for shared configuration and service -discovery" that you can use to store configurations. You can write -updated versions of the Fractal worker component to connect to Etcd or -use `Confd `_ to poll for -changes from Etcd and write changes to a configuration file on the -local file system, which the Fractal worker can use for configuration. - -Use Object Storage instead of a database -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -We have not quite figured out how to stop using a database, but the -general steps are: - -* Change the Fractal upload code to store metadata with the object in - Object Storage. - -* Change the API code, such as "list fractals," to query Object Storage - to get the metadata. - -.. note:: This section is incomplete. Please help us finish it! - -Next steps -~~~~~~~~~~ - -Wow! If you have made it through this section, you know more than the -authors of this guide know about working with OpenStack clouds. - -Perhaps you can `contribute `_? diff --git a/firstapp/source/durability.rst b/firstapp/source/durability.rst deleted file mode 100644 index 957cc06c4..000000000 --- a/firstapp/source/durability.rst +++ /dev/null @@ -1,747 +0,0 @@ -=============== -Make it durable -=============== - -.. todo:: https://github.com/apache/libcloud/pull/492 - -.. todo:: For later versions of the guide: Extend the Fractals app to use Swift directly, and show the actual code from there. - -.. todo:: Explain how to get objects back out again. - -.. todo:: Large object support in Swift - https://docs.openstack.org/swift/latest/overview_large_objects.html - -This section introduces object storage. - -`OpenStack Object Storage `_ -(code-named swift) is open-source software that enables you to create -redundant, scalable data storage by using clusters of standardized servers to -store petabytes of accessible data. It is a long-term storage system for large -amounts of static data that you can retrieve, leverage, and update. Unlike -more traditional storage systems that you access through a file system, you -access Object Storage through an API. - -The Object Storage API is organized around objects and containers. - -Similar to the UNIX programming model, an object, such as a document or an -image, is a "bag of bytes" that contains data. You use containers to group -objects. You can place many objects inside a container, and your account can -have many containers. - -If you think about how you traditionally make what you store durable, you -quickly conclude that keeping multiple copies of your objects on separate -systems is a good way strategy. However, keeping track of those multiple -copies is difficult, and building that into an app requires complicated logic. - -OpenStack Object Storage automatically replicates each object at least twice -before returning 'write success' to your API call. A good strategy is to keep -three copies of objects, by default, at all times, replicating them across the -system in case of hardware failure, maintenance, network outage, or another -kind of breakage. This strategy is very convenient for app creation. You can -just dump objects into object storage and not worry about the additional work -that it takes to keep them safe. - - -Use Object Storage to store fractals ------------------------------------- - -The Fractals app currently uses the local file system on the instance to store -the images that it generates. For a number of reasons, this approach is not -scalable or durable. - -Because the local file system is ephemeral storage, the fractal images are -lost along with the instance when the instance is terminated. Block-based -storage, which the :doc:`/block_storage` section discusses, avoids that -problem, but like local file systems, it requires administration to ensure -that it does not fill up, and immediate attention if disks fail. - -The Object Storage service manages many of the tasks normally managed by the -application owner. The Object Storage service provides a scalable and durable -API that you can use for the fractals app, eliminating the need to be aware of -the low level details of how objects are stored and replicated, and how to -grow the storage pool. Object Storage handles replication for you. It stores -multiple copies of each object. You can use the Object Storage API to return -an object, on demand. - -First, learn how to connect to the Object Storage endpoint: - -.. only:: dotnet - - .. warning:: This section has not yet been completed for the .NET SDK. - -.. only:: fog - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-1 - :end-before: step-2 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-1 - :end-before: step-2 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-1 - :end-before: step-2 - - - .. warning:: - - Libcloud 0.16 and 0.17 are afflicted with a bug that means - authentication to a swift endpoint can fail with `a Python - exception - `_. If - you encounter this, you can upgrade your libcloud version, or - apply a simple `2-line patch - `_. - - .. note:: Libcloud uses a different connector for Object Storage - to all other OpenStack services, so a conn object from - previous sections will not work here and we have to create - a new one named :code:`swift`. - -.. only:: pkgcloud - - .. warning:: This section has not yet been completed for the pkgcloud SDK. - -.. only:: openstacksdk - - .. warning:: This section has not yet been completed for the OpenStack SDK. - -.. only:: phpopencloud - - .. warning:: This section has not yet been completed for the - PHP-OpenCloud SDK. - -.. only:: shade - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-1 - :end-before: step-2 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/durability.go - :language: go - :start-after: step-1 - :end-before: step-2 - -To begin to store objects, we must first make a container. -Call yours :code:`fractals`: - -.. only:: fog - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-2 - :end-before: step-3 - - You should see output such as: - - .. code-block:: ruby - - TBC - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-2 - :end-before: step-3 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-2 - :end-before: step-3 - - You should see output such as: - - .. code-block:: python - - - -.. only:: shade - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-2 - :end-before: step-3 - - You should see output such as: - - .. code-block:: python - - Munch({u'content-length': u'0', u'x-container-object-count': u'0', - u'accept-ranges': u'bytes', u'x-container-bytes-used': u'0', - u'x-timestamp': u'1463950178.11674', u'x-trans-id': - u'txc6262b9c2bc1445b9dfe3-00574277ff', u'date': u'Mon, 23 May 2016 - 03:24:47 GMT', u'content-type': u'text/plain; charset=utf-8'}) - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/durability.go - :language: go - :start-after: step-2 - :end-before: step-3 - -You should now be able to see this container appear in a listing of -all containers in your account: - -.. only:: fog - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-3 - :end-before: step-4 - - You should see output such as: - - .. code-block:: ruby - - TBC - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-3 - :end-before: step-4 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-3 - :end-before: step-4 - - You should see output such as: - - .. code-block:: python - - [] - -.. only:: shade - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-3 - :end-before: step-4 - - .. code-block:: python - - [Munch({u'count': 0, u'bytes': 0, u'name': u'fractals'}), - Munch({u'count': 0, u'bytes': 0, u'name': u'fractals_segments'})] - - .. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/durability.go - :language: go - :start-after: step-3 - :end-before: step-4 - -The next logical step is to upload an object. Find a photo of a goat -online, name it :code:`goat.jpg`, and upload it to your -:code:`fractals` container: - -.. only:: fog - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-4 - :end-before: step-5 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-4 - :end-before: step-5 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-4 - :end-before: step-5 - -.. only:: shade - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-4 - :end-before: step-5 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/durability.go - :language: go - :start-after: step-4 - :end-before: step-5 - -List objects in your :code:`fractals` container to see if the upload -was successful. Then, download the file to verify that the md5sum is -the same: - -.. only:: fog - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-5 - :end-before: step-6 - - :: - - TBC - - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-6 - :end-before: step-7 - - :: - - TBC - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-7 - :end-before: step-8 - - :: - - 7513986d3aeb22659079d1bf3dc2468b - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-5 - :end-before: step-6 - - :: - - Objects in fractals: - SwiftObject{name=an amazing goat, - uri=https://swift.some.org:8888/v1/AUTH_8997868/fractals/an%20amazing%20goat, - etag=439884df9c1c15c59d2cf43008180048, - lastModified=Wed Nov 25 15:09:34 AEDT 2015, metadata={}} - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-6 - :end-before: step-7 - - :: - - Fetched: an amazing goat - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-7 - :end-before: step-8 - - :: - - MD5 for file goat.jpg: 439884df9c1c15c59d2cf43008180048 - - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-5 - :end-before: step-6 - - :: - - [] - - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-6 - :end-before: step-7 - - :: - - - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-7 - :end-before: step-8 - - :: - - 7513986d3aeb22659079d1bf3dc2468b - -.. only:: shade - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-5 - :end-before: step-6 - - :: - - [Munch({u'hash': u'd1408b5bf6510426db6e2bafc2f90854', u'last_modified': - u'2016-05-23T03:34:59.353480', u'bytes': 63654, u'name': u'an amazing - goat', u'content_type': u'application/octet-stream'})] - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-6 - :end-before: step-7 - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-7 - :end-before: step-8 - - :: - - d1408b5bf6510426db6e2bafc2f90854 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/durability.go - :language: go - :start-after: step-5 - :end-before: step-6 - -Finally, clean up by deleting the test object: - -.. only:: fog - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-8 - :end-before: step-9 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-8 - :end-before: step-10 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-8 - :end-before: step-9 - - .. note:: You must pass in objects and not object names to the delete commands. - - Now, no more objects are available in the :code:`fractals` container. - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-9 - :end-before: step-10 - - :: - - [] - -.. only:: shade - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-8 - :end-before: step-9 - - :: - - Munch({u'content-length': u'0', u'x-container-object-count': u'0', - u'accept-ranges': u'bytes', u'x-container-bytes-used': u'0', - u'x-timestamp': u'1463950178.11674', u'x-trans-id': - u'tx46c83fa41030422493110-0057427af3', u'date': u'Mon, 23 May 2016 - 03:37:23 GMT', u'content-type': u'text/plain; charset=utf-8'}) - - Now, no more objects are available in the :code:`fractals` container. - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-9 - :end-before: step-10 - - :: - - [] - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/durability.go - :language: go - :start-after: step-8 - :end-before: step-9 - -Back up the Fractals from the database on the Object Storage -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Back up the Fractals app images, which are currently stored inside the -database, on Object Storage. - -Place the images in the :code:`fractals` container: - -.. only:: fog - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-10 - :end-before: step-11 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-10 - :end-before: step-11 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-10 - :end-before: step-11 - -.. only:: shade - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-10 - :end-before: step-11 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/durability.go - :language: go - :start-after: step-10 - :end-before: step-11 - -Next, back up all existing fractals from the database to the swift container. -A simple loop takes care of that: - -.. note:: Replace :code:`IP_API_1` with the IP address of the API instance. - -.. only:: fog - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-11 - :end-before: step-12 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-11 - :end-before: step-12 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-11 - :end-before: step-12 - - :: - - - - - - - .. note:: The example code uses the awesome - `Requests library `_. - Before you try to run the previous script, make sure that - it is installed on your system. - -.. only:: shade - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-11 - :end-before: step-12 - - .. note:: The example code uses the awesome - `Requests library `_. - Before you try to run the previous script, make sure that - it is installed on your system. - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/durability.go - :language: go - :start-after: step-11 - :end-before: step-12 - -Configure the Fractals app to use Object Storage -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. warning:: Currently, you cannot directly store generated - images in OpenStack Object Storage. Please revisit - this section again in the future. - -Extra features --------------- - -Delete containers -~~~~~~~~~~~~~~~~~ - -To delete a container, you must first remove all objects from the container. -Otherwise, the delete operation fails: - -.. only:: fog - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-12 - :end-before: step-13 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-12 - :end-before: step-13 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-12 - :end-before: step-13 - -.. only:: shade - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-12 - :end-before: step-13 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/durability.go - :language: go - :start-after: step-12 - :end-before: step-13 - -.. warning:: It is not possible to restore deleted objects. Be careful. - -Add metadata to objects -~~~~~~~~~~~~~~~~~~~~~~~ - -You can complete advanced tasks such as uploading an object with metadata, as -shown in following example. For more information, see the documentation for -your SDK. - -.. only:: fog - - This option also uses a bit stream to upload the file, iterating bit - by bit over the file and passing those bits to Object Storage as they come. - Compared to loading the entire file in memory and then sending it, this method - is more efficient, especially for larger files. - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-13 - :end-before: step-14 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-13 - :end-before: step-14 - -.. only:: libcloud - - This option also uses a bit stream to upload the file, iterating bit - by bit over the file and passing those bits to Object Storage as they come. - Compared to loading the entire file in memory and then sending it, this method - is more efficient, especially for larger files. - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-13 - :end-before: step-14 - -.. todo:: It would be nice to have a pointer here to section 9. - -.. only:: shade - - This adds a "foo" key to the metadata that has a value of "bar". - - .. Note:: - - Swift metadata keys are prepended with "x-object-meta-" so when you get - the object with get_object(), in order to get the value of the metadata - your key will be "x-object-meta-foo". - - .. literalinclude:: ../samples/shade/durability.py - :start-after: step-13 - :end-before: step-14 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/durability.go - :language: go - :start-after: step-13 - :end-before: step-14 - -Large objects -~~~~~~~~~~~~~ - -For efficiency, most Object Storage installations treat large objects, -:code:`> 5GB`, differently than smaller objects. - -.. only:: fog - - .. literalinclude:: ../samples/fog/durability.rb - :start-after: step-14 - :end-before: step-15 - -.. only:: jclouds - - If you work with large objects, use the :code:`RegionScopedBlobStoreContext` - class family instead of the ones used so far. - - .. note:: Large file uploads that use the :code:`openstack-swift` provider - are supported in only jclouds V2, currently in beta. Also, the - default chunk size is 64 Mb. Consider changing this as homework. - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - :start-after: step-14 - :end-before: step-15 - -.. only:: libcloud - - If you work with large objects, use the :code:`ex_multipart_upload_object` - call instead of the simpler :code:`upload_object` call. The call splits - the large object into chunks and creates a manifest so that the chunks can - be recombined on download. Change the :code:`chunk_size` parameter, in - bytes, to a value that your cloud can accept. - - .. literalinclude:: ../samples/libcloud/durability.py - :start-after: step-14 - :end-before: step-15 - -.. only:: jclouds - - Complete code sample - ~~~~~~~~~~~~~~~~~~~~ - - This file contains all the code from this tutorial section. This - class lets you view and run the code. - - Before you run this class, confirm that you have configured it for - your cloud and the instance running the Fractals application. - - .. literalinclude:: ../samples/jclouds/Durability.java - :language: java - -.. only:: shade - - Shade's create_object function has a "use_slo" parameter (that defaults to - true) which will break your object into smaller objects for upload and - rejoin them if needed. - -Next steps ----------- - -You should now be fairly confident working with Object Storage. You -can find more information about the Object Storage SDK calls at: - -.. only:: fog - - https://github.com/fog/fog/blob/master/lib/fog/openstack/docs/storage.md - -.. only:: libcloud - - https://libcloud.readthedocs.org/en/latest/storage/api.html - -Or, try one of these tutorial steps: - -* :doc:`/block_storage`: Migrate the database to block storage, or use - the database-as-a-service component. -* :doc:`/orchestration`: Automatically orchestrate your application. -* :doc:`/networking`: Learn about complex networking. -* :doc:`/advice`: Get advice about operations. -* :doc:`/craziness`: Learn some crazy things that you might not think to do ;) diff --git a/firstapp/source/getting_started.rst b/firstapp/source/getting_started.rst deleted file mode 100644 index 4c83adf4f..000000000 --- a/firstapp/source/getting_started.rst +++ /dev/null @@ -1,1810 +0,0 @@ -=============== -Getting started -=============== - -Who should read this guide -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This guide is for experienced software developers who want to deploy -applications to OpenStack clouds. - -If you are familiar with OpenStack but have not created a cloud -application in general or an OpenStack application in particular, this -section teaches you how to program with OpenStack components. - -What you will learn -~~~~~~~~~~~~~~~~~~~ - -Deploying applications in a cloud environment can be very different -from deploying them in a traditional IT environment. This guide -teaches you how to deploy applications on OpenStack and some best -practices for cloud application development. - -A general overview -~~~~~~~~~~~~~~~~~~ - -This tutorial shows two applications. The first application is a simple -fractal generator that uses mathematical equations to generate beautiful -`fractal images `_. We show you this -application in its entirety so that you can compare it to a second, more -robust, application. - -The second application is an OpenStack application that enables you to: - -* Create and delete compute resources. These resources are virtual - machine instances where the Fractals application runs. -* Make cloud-related architecture decisions such as turning - functions into micro-services and modularizing them. -* Scale available resources up and down. -* Use Object and Block storage for file and database persistence. -* Use Orchestration services to automatically adjust to the environment. -* Customize networking for better performance and segregation. -* Explore and apply advanced OpenStack cloud features. - -Choose your OpenStack SDK -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Anyone with a programming background can easily read the code in this guide. -Although this guide focuses on a particular SDK, you can use other languages -and toolkits with the OpenStack cloud: - - -.. list-table:: OpenStack SDKs - :header-rows: 1 - :widths: 10, 10, 40, 40 - - * - Language - - Name - - Description - - URL - * - Python - - OpenStack SDK - - Official Python-based library for OpenStack. - - https://docs.openstack.org/openstacksdk/latest/ - * - Python - - `Libcloud `_ - - A Python-based library that the Apache Foundation manages. - Use it to work with multiple cloud types. - - https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html - * - Python - - Shade - - A Python-based library developed by OpenStack Infra team. - Use it to operate multiple OpenStack clouds. - - https://docs.openstack.org/infra/shade/ - * - Java - - `jClouds `_ - - A Java-based library that the Apache Foundation manages. - Use it to work with multiple cloud types. - - https://jclouds.apache.org/guides/openstack/ - * - Ruby - - `fog `_ - - A Ruby-based SDK. - Use it to work with multiple clouds. - - https://github.com/fog/fog-openstack/blob/master/docs/getting_started.md - * - node.js - - `pkgcloud `_ - - A Node.js-based SDK. - Use it work with multiple clouds. - - https://github.com/pkgcloud/pkgcloud/tree/master/docs/providers/openstack - * - PHP - - `php-opencloud `_ - - A PHP-based library. - Use it to write PHP code that works with OpenStack clouds. - - http://php-opencloud.readthedocs.org/en/latest/getting-started-with-openstack.html - * - .NET Framework - - OpenStack SDK for Microsoft .NET - - A .NET-based library. - Use it to write C++ or C# code for Microsoft applications. - - https://www.nuget.org/packages/openstack.net - * - Go - - `gophercloud `_ - - A go-based SDK. - Use it to write Golang code that works with OpenStack clouds. - - http://gophercloud.io/ - -For a list of available SDKs, see `Software Development Kits `_. - -Other versions of this guide show you how to use the other SDKs and languages -to complete these tasks. If you are a developer for another toolkit that you -would like this guide to include, feel free to submit code snippets. For more -information, contact -`OpenStack Documentation team `_ members. - -What you need -------------- - -We assume that you can already access an OpenStack cloud. You must have a -project, also known as a tenant, with a minimum quota of six instances. -Because the Fractals application runs in Ubuntu, Debian, Fedora-based, and -openSUSE-based distributions, you must create instances that use one of these -operating systems. - -To interact with the cloud, you must also have - -.. only:: dotnet - - `OpenStack Cloud SDK for Microsoft .NET 1.4.0.1 or later installed - `_. - - .. note:: - - To install the OpenStack .NET SDK, use the NeGet Package Manager that - is included with Visual Studio and Xamarin Studio. You simply add a - package named 'openstack.net' and the NeGet Package Manager - automatically installs the necessary dependencies. - - .. warning:: - - This document has not yet been completed for the .NET SDK. - -.. only:: fog - - `fog 1.19 or higher installed - `_ - and working with ruby gems 1.9. - - .. warning:: - - This document has not yet been completed for the fog SDK. - -.. only:: jclouds - - `jClouds 1.8 or higher installed `_. - - Our code samples use - `Java 8 `_. - - We have created a Maven POM file to help you get started. - - If you do not know Maven then the `Maven home site `_ - is a good place to learn more. - - **pom.xml:** - - .. literalinclude:: ../samples/jclouds/pom.xml - :language: xml - - Place the above pom.xml into the root directory of your project. Then create the nested - subdirectory tree :code:`src` -> :code:`main` -> :code:`java`. - Place the Java code samples that you copy from this book into the folder named ":code:`java`". - - So, for example, the file named :code:`GettingStarted.java` from the end of this chapter - would be located as follows: - - .. figure:: images/jclouds/screenshot_maven_layout.png - :width: 328px - :align: center - :height: 179px - :alt: Screenshot of the Maven project directory structure - :figclass: align-center - - To use Maven to compile a downloaded sample, with the command prompt located in the same - directory as the :code:`pom.xml` file, enter: - - .. code-block:: bash - - mvn compile - - Maven will download and install any dependencies required for compilation, then execute - the Java compiler. All files in the :code:`java` subdirectory will be compiled. - - To use Maven to run each downloaded sample, with the command prompt located in the same - directory as the :code:`pom.xml` file, enter: - - .. code-block:: bash - - # In the sample below replace GettingStarted with the name of the class you want to run - mvn exec:java -Dexec.mainClass="GettingStarted" - - Maven will download and install any further dependencies required and then run the chosen - class. - -.. only:: libcloud - - `libcloud 0.15.1 or higher installed - `_. - -.. only:: pkgcloud - - `pkgcloud 1.2 or higher installed - `_. - - .. highlight:: javascript - -.. only:: openstacksdk - - a recent version of `OpenStackSDK `_ - installed. - -.. only:: phpopencloud - - `a recent version of php-opencloud installed `_. - - .. warning:: - - This document has not yet been completed for the php-opencloud SDK. - -.. only:: shade - - `a recent version of shade installed `_. - - .. note:: Before proceeding, install the latest version of shade. - -.. only:: gophercloud - - `a recent version of gophercloud installed `_ - - -Obtain the following information from your cloud provider: - -* auth URL -* user name -* password -* project ID or name (projects are also known as tenants) -* cloud region - -You can also download the OpenStack RC file from the OpenStack Horizon -dashboard. Log in to the dashboard and click :guilabel:`Project->Access & -Security->API Access->Download OpenStack RC file`. If you use this method, be -aware that the "auth URL" does not include the path. For example, if your -:file:`openrc.sh` file shows: - -.. code-block:: bash - - export OS_AUTH_URL=http://controller:5000/v2.0 - -The actual auth URL is: - -.. code-block:: python - - http://controller:5000 - -How you interact with OpenStack -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In this tutorial, you interact with your OpenStack cloud through the SDK that -you chose in "Choose your OpenStack SDK." This guide assumes that you know how -to run code snippets in your language of choice. - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-1 - :end-before: step-2 - -.. only:: libcloud - - To try it, add the following code to a Python script (or use an - interactive Python shell) by calling :code:`python -i`. - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-1 - :end-before: step-2 - -.. only:: jclouds - - First provide the appropriate identity, credentials and authorization URL - for your project. Then get an instance of the Nova API interface. - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-1 - :end-before: step-2 - -.. only:: openstacksdk - - To try it out, add the following code to a Python script (or use an - interactive Python shell) by calling :code:`python -i`. - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-1 - :end-before: step-2 - -.. only:: pkgcloud - - To try it, use an interactive Node.js shell by calling :code:`node` or add - the following code to a script. - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-1 - :end-before: step-2 - -.. only:: dotnet - - To use the OpenStack .NET SDK, add the following code in the required - namespace section. - - .. code-block:: c# - - using net.openstack.Core.Domain; - using net.openstack.Core.Providers; - using net.openstack.Providers.Rackspace; - - Because all service endpoints use the Identity Service for authentication - and authorization, place the following code in the 'void Main()' - entry-point function. - - .. literalinclude:: ../samples/dotnet/getting_started.cs - :language: c# - :dedent: 3 - :start-after: step-1 - :end-before: step-2 - - -.. note:: Because the tutorial reuses the :code:`conn` object, - make sure that you always have one handy. - -.. only:: libcloud - - .. note:: If you receive the - :code:`libcloud.common.types.InvalidCredsError: 'Invalid - credentials with the provider'` exception when you run - one of these API calls, double-check your credentials. - - .. note:: If your provider does not support regions, try a - blank string ('') for the `region_name`. - -.. only:: shade - - Use your credentials above to specify the cloud provider name, - username, password, project_name and region_name in the file - :file:`~/.config/openstack/clouds.yml`. - - .. literalinclude:: ../samples/shade/clouds.yml - :language: yaml - - .. note:: If you do use a public cloud `known by shade - `_, - you can avoid specifying :code:`auth_url:` and instead specify - :code:`profile: $PROVIDER_NAME` in the clouds.yml file. - - To configure shade using a profile, use your credentials above to specify the cloud provider - name, username, password, project name, and region name in the file - :file:`~/.config/openstack/clouds.yml`. - - .. literalinclude:: ../samples/shade/shade.yml - :language: yaml - - See `configure shade `_, - to configure your cloud using a profile. - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-1 - :end-before: step-2 - -.. only:: openstacksdk - - .. note:: If you receive the exception - :code:`openstack.exceptions.HttpException: HttpException: - 401 Client Error: Unauthorized,` while trying to run one - of the following API calls please double-check your - credentials. - -.. only:: gophercloud - - Use environment variables to set your cloud credentials - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-1 - :end-before: step-2 - - .. note:: The client object accesses the Compute v2.0 service and type v2.1, - so that version is in this tutorial. - -Flavors and images -~~~~~~~~~~~~~~~~~~ - -To run your application, you must launch an instance. This instance serves as -a virtual machine. - -To launch an instance, you choose a flavor and an image. The flavor represents -the size of the instance, including the number of CPUs and amount of RAM and -disk space. An image is a prepared OS installation from which you clone your -instance. When you boot instances in a public cloud, larger flavors can be -more expensive than smaller ones in terms of resources and monetary cost. - -To list the images that are available in your cloud, run some API calls: - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-2 - :end-before: step-3 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-2 - :end-before: step-3 - - This code returns output like this: - - .. code-block:: python - - - - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-2 - :end-before: step-3 - - This code returns output like this: - - .. code-block:: none - - id: 6c7f5627-ca40-4781-ac34-4d9af53d4b29 - name: Fedora 22 - Updated - created: 2015-08-17T03:53:17Z - updated: 2015-08-17T04:53:12Z - status: ACTIVE - - ... - id: 2cccbea0-cea9-4f86-a3ed-065c652adda5 - name: Ubuntu 14.04 - created: 2015-08-13T02:25:10Z - updated: 2015-08-13T02:43:38Z - status: ACTIVE - -.. only:: dotnet - - .. literalinclude:: ../samples/dotnet/getting_started.cs - :language: c# - :dedent: 3 - :start-after: step-2 - :end-before: step-3 - - This code returns output like this: - - .. code-block:: none - - Image Id: dce1a289-2ad5-4aaa-a7a6-fe30adc2094e - Image Name: snap1 - Image Id: 97f55846-6ea5-4e9d-b437-bda97586bd0c - Image Name: cirros-0.3.4-x86_64-uec - Image Id: 3e0e8270-0da4-4fec-bfc7-eeb763604cad - Image Name: cirros-0.3.4-x86_64-uec-ramdisk - Image Id: 0b151382-d2f1-44d7-835b-6408bd523917 - Image Name: cirros-0.3.4-x86_64-uec-kernel - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :language: python - :start-after: step-2 - :end-before: step-3 - - This code returns output like this: - - .. code-block:: none - - checksum: 750a56555d4ec7303f5dc33b007ff632 - container_format: bare - created_at: '2014-07-14T19:02:15Z' - direct_url: - rbd://7e14670e-a6f8-445b-b632-4b79bafc4781/masseffect-images/b4efbc2a-6130-4f2e-b436-55a618c4de20/snap - disk_format: raw - file: /v2/images/b4efbc2a-6130-4f2e-b436-55a618c4de20/file - id: b4efbc2a-6130-4f2e-b436-55a618c4de20 - min_disk: 10 - min_ram: 1024 - name: Debian-7.0-Wheezy - owner: 0bacd8121bb548698f340455b38bf561 - protected: false - schema: /v2/schemas/image - size: 5242880000 - status: active - tags: [] - updated_at: '2014-10-15T22:42:52Z' - visibility: public - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-2 - :end-before: step-3 - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-2 - :end-before: step-3 - - You should see output something like this: - - .. code-block:: python - - openstack.image.v1.image.Image(attrs={u'name': u'ubuntu-14.04', u'container_format': u'bare', u'disk_format': u'qcow2', u'checksum': u'6d8f1c8cf05e1fbdc8b543fda1a9fa7f', u'id': u'cb6b7936-d2c5-4901-8678-c88b3a6ed84c', u'size': 258540032}, loaded=True) - ... - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-2 - :end-before: step-3 - - This code returns output like this: - - .. code-block:: none - - [{74e6d1ec-9a08-444c-8518-4f232446386d 2016-02-01T07:20:31Z 0 0 cirros-0.3.4-x86_64-uec 100 ACTIVE 2016-02-01T07:20:32Z} - {f70b7fb0-348a-4519-b358-0f239dc64dc5 2016-02-01T07:20:30Z 0 0 cirros-0.3.4-x86_64-uec-ramdisk 100 ACTIVE 2016-02-01T07:20:31Z} - {e92f5e17-60d2-4cb5-b893-d605b136afab 2016-02-01T07:20:29Z 0 0 cirros-0.3.4-x86_64-uec-kernel 100 ACTIVE 2016-02-01T07:20:30Z}] - -You can also get information about available flavors: - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-3 - :end-before: step-4 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-3 - :end-before: step-4 - - This code returns output like this: - - .. code-block:: python - - - - - - - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-3 - :end-before: step-4 - - This code returns output like this: - - .. code-block:: none - - id: c46104de-d5fd-4567-ab0b-3dcfd117bd99 - name: m2.xlarge - ram: 49152 - disk: 30 - vcpus: 12 - - ... - id: cba9ea52-8e90-468b-b8c2-777a94d81ed3 - name: m1.small - ram: 2048 - disk: 20 - vcpus: 1 - -.. only:: dotnet - - .. literalinclude:: ../samples/dotnet/getting_started.cs - :language: c# - :dedent: 3 - :start-after: step-3 - :end-before: step-4 - - This code returns output like this: - - .. code-block:: none - - Flavor Id: 1 - Flavor Name: m1.tiny - Flavor Id: 2 - Flavor Name: m1.small - Flavor Id: 3 - Flavor Name: m1.medium - Flavor Id: 4 - Flavor Name: m1.large - Flavor Id: 42 - Flavor Name: m1.nano - Flavor Id: 5 - Flavor Name: m1.xlarge - Flavor Id: 84 - Flavor Name: m1.micro - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :language: python - :start-after: step-3 - :end-before: step-4 - - This code returns output like this: - - .. code-block:: none - - HUMAN_ID: true - NAME_ATTR: name - OS-FLV-DISABLED:disabled: false - OS-FLV-EXT-DATA:ephemeral: 0 - disk: 80 - ephemeral: 0 - human_id: supersonic - id: '200' - is_public: true - links: - - href: - https://compute.dream.io:8774/v2/5d013ac5962749a49af7ff18c2fb228c/flavors/200 - rel: self - - href: - https://compute.dream.io:8774/5d013ac5962749a49af7ff18c2fb228c/flavors/200 - rel: bookmark - name: supersonic - os-flavor-access:is_public: true - ram: 2048 - swap: '' - vcpus: 1 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-3 - :end-before: step-4 - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-3 - :end-before: step-4 - - You should see output something like this: - - .. code-block:: python - - openstack.compute.v2.flavor.FlavorDetail(attrs={u'name': u'm1.tiny', u'links': [{u'href': u'http://controller:8774/v2/96ff6aa79e60423d9848b70d5475c415/flavors/1', u'rel': u'self'}, {u'href': u'http://controller:8774/96ff6aa79e60423d9848b70d5475c415/flavors/1', u'rel': u'bookmark'}], u'ram': 512, u'OS-FLV-DISABLED:disabled': False, u'vcpus': 1, u'swap': u'', u'os-flavor-access:is_public': True, u'rxtx_factor': 1.0, u'OS-FLV-EXT-DATA:ephemeral': 0, u'disk': 1, u'id': u'1'}, loaded=True) - - openstack.compute.v2.flavor.FlavorDetail(attrs={u'name': u'm1.small', u'links': [{u'href': u'http://controller:8774/v2/96ff6aa79e60423d9848b70d5475c415/flavors/2', u'rel': u'self'}, {u'href': u'http://controller:8774/96ff6aa79e60423d9848b70d5475c415/flavors/2', u'rel': u'bookmark'}], u'ram': 2048, u'OS-FLV-DISABLED:disabled': False, u'vcpus': 1, u'swap': u'', u'os-flavor-access:is_public': True, u'rxtx_factor': 1.0, u'OS-FLV-EXT-DATA:ephemeral': 0, u'disk': 20, u'id': u'2'}, loaded=True) - - openstack.compute.v2.flavor.FlavorDetail(attrs={u'name': u'm1.medium', u'links': [{u'href': u'http://controller:8774/v2/96ff6aa79e60423d9848b70d5475c415/flavors/3', u'rel': u'self'}, {u'href': u'http://controller:8774/96ff6aa79e60423d9848b70d5475c415/flavors/3', u'rel': u'bookmark'}], u'ram': 4096, u'OS-FLV-DISABLED:disabled': False, u'vcpus': 2, u'swap': u'', u'os-flavor-access:is_public': True, u'rxtx_factor': 1.0, u'OS-FLV-EXT-DATA:ephemeral': 0, u'disk': 40, u'id': u'3'}, loaded=True) - - ... - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-3 - :end-before: step-4 - - This code returns output like this: - - .. code-block:: none - - [{1 1 512 m1.tiny 1 0 1} - {2 20 2048 m1.small 1 0 1} - {3 40 4096 m1.medium 1 0 2} - ... - {84 0 128 m1.micro 1 0 1}] - -Your images and flavors will be different, of course. - -Choose an image and flavor for your instance. You need about 1GB RAM, 1 CPU, -and a 1GB disk. This example uses the Ubuntu image with a small -flavor, which is a safe choice. In subsequent tutorial sections in -this guide, you must change the image and flavor IDs to correspond to -the image and flavor that you choose. - -If the image that you want is not available in your cloud, you can usually -upload one depending on the policy settings of your cloud. For information about -how to upload images, see -`obtaining images `_. - -Set the image and size variables to appropriate values for your cloud. We will -use these variables in later sections. - -First, tell the connection to get a specified image by using the ID of the -image that you picked in the previous section: - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-4 - :end-before: step-5 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-4 - :end-before: step-5 - - This code returns output like this: - - .. code-block:: python - - - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-4 - :end-before: step-5 - - This code returns output like this: - - .. code-block:: none - - id: 2cccbea0-cea9-4f86-a3ed-065c652adda5 - name: Ubuntu 14.04 - created: 2015-08-13T02:25:10Z - updated: 2015-08-13T02:43:38Z - status: ACTIVE - -.. only:: dotnet - - .. literalinclude:: ../samples/dotnet/getting_started.cs - :language: c# - :dedent: 3 - :start-after: step-4 - :end-before: step-5 - - This code returns output like this: - - .. code-block:: none - - Image Id: 97f55846-6ea5-4e9d-b437-bda97586bd0c - Image Name: cirros-0.3.4-x86_64-uec - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-4 - :end-before: step-5 - - This code returns output like this: - - .. code-block:: none - - checksum: da578dd59289a35a0ac7744a0bd85cf5 - container_format: bare - created_at: '2014-10-27T22:05:37Z' - direct_url: - rbd://7e14670e-a6f8-445b-b632-4b79bafc4781/masseffect-images/c55094e9-699c-4da9-95b4-2e2e75f4c66e/snap - disk_format: raw - file: /v2/images/c55094e9-699c-4da9-95b4-2e2e75f4c66e/file - id: c55094e9-699c-4da9-95b4-2e2e75f4c66e - min_disk: 0 - min_ram: 0 - name: Ubuntu-14.04-Trusty - owner: 0bacd8121bb548698f340455b38bf561 - protected: false - schema: /v2/schemas/image - size: 10737418240 - status: active - tags: [] - updated_at: '2014-10-27T22:08:55Z' - visibility: public - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-4 - :end-before: step-5 - - You should see output something like this: - - .. code-block:: python - - openstack.image.v1.image.Image(attrs={u'name': u'ubuntu-14.04', u'container_format': u'bare', u'disk_format': u'qcow2', u'checksum': u'6d8f1c8cf05e1fbdc8b543fda1a9fa7f', u'id': u'cb6b7936-d2c5-4901-8678-c88b3a6ed84c', u'size': 258540032}, loaded=True) - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-4 - :end-before: step-5 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-4 - :end-before: step-5 - - You should see output like this: - - .. code-block:: none - - &{74e6d1ec-9a08-444c-8518-4f232446386d 2016-02-01T07:20:31Z 0 0 cirros-0.3.4-x86_64-uec 100 ACTIVE 2016-02-01T07:20:32Z} - -Next, tell the script which flavor you want to use: - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-5 - :end-before: step-6 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-5 - :end-before: step-6 - - This code returns output like this: - - .. code-block:: python - - - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-5 - :end-before: step-6 - - This code returns output like this: - - .. code-block:: none - - - id: cba9ea52-8e90-468b-b8c2-777a94d81ed3 - name: m1.small - ram: 2048 - disk: 20 - vcpus: 1 - -.. only:: dotnet - - .. literalinclude:: ../samples/dotnet/getting_started.cs - :language: c# - :dedent: 3 - :start-after: step-5 - :end-before: step-6 - - This code returns output like this: - - .. code-block:: none - - Flavor Id: 2 - Flavor Name: m1.small - -.. only:: shade - - Specify the flavor ID that you would like to use. - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-5 - :end-before: step-6 - - This code returns output like this: - - .. code-block:: none - - HUMAN_ID: true - NAME_ATTR: name - OS-FLV-DISABLED:disabled: false - OS-FLV-EXT-DATA:ephemeral: 0 - disk: 80 - ephemeral: 0 - human_id: subsonic - id: '100' - is_public: true - links: - - href: - https://compute.dream.io:8774/v2/5d013ac5962749a49af7ff18c2fb228c/flavors/100 - rel: self - - href: - https://compute.dream.io:8774/5d013ac5962749a49af7ff18c2fb228c/flavors/100 - rel: bookmark - name: subsonic - os-flavor-access:is_public: true - ram: 1024 - swap: '' - vcpus: 1 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-5 - :end-before: step-6 - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-5 - :end-before: step-6 - - You should see output something like this: - - .. code-block:: python - - openstack.compute.v2.flavor.Flavor(attrs={u'name': u'm1.small', u'links': [{u'href': u'http://controller:8774/v2/96ff6aa79e60423d9848b70d5475c415/flavors/2', u'rel': u'self'}, {u'href': u'http://controller:8774/96ff6aa79e60423d9848b70d5475c415/flavors/2', u'rel': u'bookmark'}], u'ram': 2048, u'OS-FLV-DISABLED:disabled': False, u'vcpus': 1, u'swap': u'', u'os-flavor-access:is_public': True, u'rxtx_factor': 1.0, u'OS-FLV-EXT-DATA:ephemeral': 0, u'disk': 20, 'id': u'2'}, loaded=True) - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-5 - :end-before: step-6 - - You should see output like this: - - .. code-block:: none - - &{1 1 512 m1.tiny 1 0 1} - -Now, you can launch the instance. - -Launch an instance -~~~~~~~~~~~~~~~~~~ - -Use your selected image and flavor to create an instance. - -.. note:: The following instance creation example assumes that you have a - single-tenant network. If you receive the 'Exception: 400 Bad - Request Multiple possible networks found, use a Network ID to be - more specific' error, you have multiple-tenant networks. You - must add a `networks` parameter to the call that creates the - server. See :doc:`/appendix` for details. - -Create the instance. - -.. note:: Your SDK might call an instance a 'node' or 'server'. - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-6 - :end-before: step-7 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-6 - :end-before: step-7 - - This code returns output like this: - - .. code-block:: python - - - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-6 - :end-before: step-7 - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-6 - :end-before: step-7 - - You should see output something like: - - .. code-block:: python - - openstack.compute.v2.server.Server(attrs={'flavorRef': openstack.compute.v2.flavor.Flavor(attrs={u'name': u'm1.small', u'links': [{u'href': u'http://controller:8774/v2/96ff6aa79e60423d9848b70d5475c415/flavors/2', u'rel': u'self'}, {u'href': u'http://controller:8774/96ff6aa79e60423d9848b70d5475c415/flavors/2', u'rel': u'bookmark'}], u'ram': 2048, u'OS-FLV-DISABLED:disabled': False, u'vcpus': 1, u'swap': u'', u'os-flavor-access:is_public': True, u'rxtx_factor': 1.0, u'OS-FLV-EXT-DATA:ephemeral': 0, u'disk': 20, 'id': u'2'}, loaded=True), 'name': 'testing', 'imageRef': openstack.image.v1.image.Image(attrs={u'name': u'ubuntu14.04', u'container_format': u'bare', u'disk_format': u'qcow2', u'checksum': u'6d8f1c8cf05e1fbdc8b543fda1a9fa7f', u'id': u'cb6b7936-d2c5-4901-8678-c88b3a6ed84c', u'size': 258540032}, loaded=True), 'id': u'a1700b84-dc9a-434e-8f7a-40852e97781c'}, loaded=False) - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-6 - :end-before: step-7 - - This code returns output like this: - - .. code-block:: none - - 0d7968dc-4bf4-4e01-b822-43c9c1080d77 - -.. only:: dotnet - - .. literalinclude:: ../samples/dotnet/getting_started.cs - :language: c# - :dedent: 3 - :start-after: step-6 - :end-before: step-7 - - This code returns output like this: - - .. code-block:: none - - Instance Id: 4e480ef1-68f0-491f-b237-d9b7f500ef24 at net.openstack.Core.Domain.Link[] - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-6 - :end-before: step-7 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-6 - :end-before: step-7 - - You should see output like this: - - .. code-block:: none - - &{739dd964-ae88-461d-9746-f8f1139d20f6 0 map[] map[] map[] map[] ... RPUkTFM8fynn [map[name:default]]} - -If you list existing instances: - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-7 - :end-before: step-8 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-7 - :end-before: step-8 - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-7 - :end-before: step-8 - -.. only:: dotnet - - .. literalinclude:: ../samples/dotnet/getting_started.cs - :language: c# - :dedent: 3 - :start-after: step-7 - :end-before: step-8 - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-7 - :end-before: step-8 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-7 - :end-before: step-8 - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-7 - :end-before: step-8 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-7 - :end-before: step-8 - -The new instance appears. - -.. only:: libcloud - - .. code-block:: python - - - -.. only:: openstacksdk - - .. code-block:: python - - openstack.compute.v2.server.ServerDetail(attrs={u'OS-EXT-STS:task_state': u'scheduling', u'addresses': {}, u'links': [{u'href': u'http://controller:8774/v2/96ff6aa79e60423d9848b70d5475c415/servers/a1700b84-dc9a-434e-8f7a-40852e97781c', u'rel': u'self'}, {u'href': u'http://controller:8774/96ff6aa79e60423d9848b70d5475c415/servers/a1700b84-dc9a-434e-8f7a-40852e97781c', u'rel': u'bookmark'}], u'image': {u'id': u'cb6b7936-d2c5-4901-8678-c88b3a6ed84c', u'links': [{u'href': u'http://controller:8774/96ff6aa79e60423d9848b70d5475c415/images/cb6b7936-d2c5-4901-8678-c88b3a6ed84c', u'rel': u'bookmark'}]}, u'OS-EXT-STS:vm_state': u'building', u'OS-SRV-USG:launched_at': None, u'flavor': {u'id': u'2', u'links': [{u'href': u'http://controller:8774/96ff6aa79e60423d9848b70d5475c415/flavors/2', u'rel': u'bookmark'}]}, u'id': u'a1700b84-dc9a-434e-8f7a-40852e97781c', u'user_id': u'59f76712914b44819cf311af43946079', 'imageRef': openstack.compute.v2.image.Image(attrs={u'id': u'cb6b7936-d2c5-4901-8678-c88b3a6ed84c', u'links': [{u'href': u'http://controller:8774/96ff6aa79e60423d9848b70d5475c415/images/cb6b7936-d2c5-4901-8678-c88b3a6ed84c', u'rel': u'bookmark'}]}, loaded=False), u'OS-DCF:diskConfig': u'MANUAL', u'accessIPv4': u'', u'accessIPv6': u'', u'progress': 0, u'OS-EXT-STS:power_state': 0, u'OS-EXT-AZ:availability_zone': u'nova', u'config_drive': u'', u'status': u'BUILD', u'updated': u'2015-10-12T13:45:37Z', u'hostId': u'', u'OS-SRV-USG:terminated_at': None, u'key_name': None, 'flavorRef': openstack.compute.v2.flavor.Flavor(attrs={u'id': u'2', u'links': [{u'href': u'http://controller:8774/96ff6aa79e60423d9848b70d5475c415/flavors/2', u'rel': u'bookmark'}]}, loaded=False), u'name': u'testing', u'created': u'2015-10-12T13:45:37Z', u'tenant_id': u'96ff6aa79e60423d9848b70d5475c415', u'os-extended-volumes:volumes_attached': [], u'metadata': {}}, loaded=True) - -.. only:: pkgcloud - - .. code-block:: none - - ... - id: '0d7968dc-4bf4-4e01-b822-43c9c1080d77', - name: 'testing', - status: 'PROVISIONING', - progress: 0, - imageId: '2cccbea0-cea9-4f86-a3ed-065c652adda5', - adminPass: undefined, - addresses: {}, - metadata: {}, - flavorId: '3', - hostId: 'b6ee757ed678e8c6589ae8cce405eeded89ac914daec73e45a5c50b8', - created: '2015-06-30T08:17:39Z', - updated: '2015-06-30T08:17:44Z', - ... - -.. only:: dotnet - - .. code-block:: none - - Instance Id: 4e480ef1-68f0-491f-b237-d9b7f500ef24 at net.openstack.Core.Domain.Link[] - -.. only:: shade - - .. code-block:: none - - HUMAN_ID: true - NAME_ATTR: name - OS-DCF:diskConfig: MANUAL - OS-EXT-AZ:availability_zone: iad-1 - OS-EXT-STS:power_state: 1 - OS-EXT-STS:task_state: null - OS-EXT-STS:vm_state: active - OS-SRV-USG:launched_at: '2015-07-20T20:31:10.000000' - OS-SRV-USG:terminated_at: null - accessIPv4: '' - accessIPv6: '' - addresses: - private-network: - - OS-EXT-IPS-MAC:mac_addr: fa:16:3e:60:f5:cd - OS-EXT-IPS:type: fixed - addr: 2607:f298:6050:4e14:f816:3eff:fe60:f5cd - version: 6 - - OS-EXT-IPS-MAC:mac_addr: fa:16:3e:60:f5:cd - OS-EXT-IPS:type: fixed - addr: 10.10.10.14 - version: 4 - config_drive: '' - created: '2015-07-20T20:30:23Z' - flavor: - id: '100' - links: - - href: - https://compute.dream.io:8774/5d013ac5962749a49af7ff18c2fb228c/flavors/100 - rel: bookmark - hostId: f71865b497e6fa71063e292b11846eb64b5a41cd5c00fbb7465b6a48 - human_id: testing - id: 67ecebdc-daff-4d84-bd04-bc76c67b48ec - image: - id: c55094e9-699c-4da9-95b4-2e2e75f4c66e - links: - - href: - https://compute.dream.io:8774/5d013ac5962749a49af7ff18c2fb228c/images/c55094e9-699c-4da9-95b4-2e2e75f4c66e - rel: bookmark - key_name: null - links: - - href: - https://compute.dream.io:8774/v2/5d013ac5962749a49af7ff18c2fb228c/servers/67ecebdc-daff-4d84-bd04-bc76c67b48ec - rel: self - - href: - https://compute.dream.io:8774/5d013ac5962749a49af7ff18c2fb228c/servers/67ecebdc-daff-4d84-bd04-bc76c67b48ec - rel: bookmark - metadata: {} - name: testing - networks: - private-network: - - 2607:f298:6050:4e14:f816:3eff:fe60:f5cd - - 10.10.10.14 - os-extended-volumes:volumes_attached: [] - progress: 0 - security_groups: - - name: default - status: ACTIVE - tenant_id: 5d013ac5962749a49af7ff18c2fb228c - updated: '2015-07-20T20:31:10Z' - user_id: bfd3dbf1c8a242cd90884408de547bb9 - -.. only:: gophercloud - - .. code-block:: none - - [... - {739dd964-ae88-461d-9746-f8f1139d20f6 061fdb617b6c4bdf8694bf5b0d8eefdd bb210009e42c4b509ba75893a757c8e5 testing 2016-02-16T07:16:52Z 2016-02-16T07:16:52Z 2d2f4bba90498fd46c72e7d019dde9189c36637b73e71e1e652d75db BUILD 0 ... [map[name:default]]} - ...] - -Before you continue, you must do one more thing. - -Destroy an instance -~~~~~~~~~~~~~~~~~~~ - -Cloud resources, such as running instances that you no longer use, can -cost money. To avoid unexpected expenses, destroy cloud resources. - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-8 - :end-before: step-9 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-8 - :end-before: step-9 - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-8 - :end-before: step-9 - -.. only:: dotnet - - .. literalinclude:: ../samples/dotnet/getting_started.cs - :language: c# - :dedent: 3 - :start-after: step-8 - :end-before: step-9 - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-8 - :end-before: step-9 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-8 - :end-before: step-9 - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-8 - :end-before: step-9 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-8 - :end-before: step-9 - -If you list the instances again, the instance disappears. - -Leave your shell open to use it for another instance deployment in this -section. - -Deploy the application to a new instance -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Now that you know how to create and delete instances, you can deploy the -sample application. The instance that you create for the application is -similar to the first instance that you created, but this time, we introduce a -few extra concepts. - -.. note:: Internet connectivity from your cloud instance is required - to download the application. - -When you create an instance for the application, you want to give it a bit -more information than you supplied to the bare instance that you just created -and deleted. We will go into more detail in later sections, but for now, -simply create the following resources so that you can feed them to the -instance: - -* A key pair. To access your instance, you must import an SSH public key into - OpenStack to create a key pair. OpenStack installs this key pair on the new - instance. Typically, your public key is written to :code:`.ssh/id_rsa.pub`. If - you do not have an SSH public key file, follow - `these instructions `_ first. - We will cover these instructions in depth in :doc:`/introduction`. - -In the following example, set :code:`pub_key_file` to the location of -your public SSH key file. - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-9 - :end-before: step-10 - - -.. only:: libcloud - - .. note:: If you see an IOError, you may need to change ``~/.ssh/`` to - ``/home/{USERNAME}/.ssh/``, using an absolute path. - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-9 - :end-before: step-10 - - :: - - - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-9 - :end-before: step-10 - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-9 - :end-before: step-10 - -.. only:: jclouds - - If a key pair of the given name is not found then one is generated. - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-9 - :end-before: step-10 - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-9 - :end-before: step-10 - - .. code-block:: python - - openstack.compute.v2.keypair.Keypair(attrs={u'public_key': u'ssh-rsa ABAAABAQCyyzkyaPf.....', u'name': u'demokey', u'fingerprint': aa:bb:cc:... '}, loaded=True) - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-9 - :end-before: step-10 - -* Network access. By default, OpenStack filters all traffic. You must create - a security group and apply it to your instance. The security group allows HTTP - and SSH access. We will go into more detail in :doc:`/introduction`. - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-10 - :end-before: step-11 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-10 - :end-before: step-11 - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-10 - :end-before: step-11 - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-10 - :end-before: step-11 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-10 - :end-before: step-11 - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-10 - :end-before: step-11 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-10 - :end-before: step-11 - -* Userdata. During instance creation, you can provide userdata to OpenStack to - configure instances after they boot. The cloud-init service applies the - user data to an instance. You must pre-install the cloud-init service on your - chosen image. We will go into more detail in :doc:`/introduction`. - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-11 - :end-before: step-12 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-11 - :end-before: step-12 - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-11 - :end-before: step-12 - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-11 - :end-before: step-12 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-11 - :end-before: step-12 - -.. only:: openstacksdk - - .. note:: User data in openstacksdk must be encoded to Base64 - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-11 - :end-before: step-12 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-11 - :end-before: step-12 - -Now, you can boot and configure the instance. - -Boot and configure an instance ------------------------------- - -Use the image, flavor, key pair, and userdata to create an instance. -After you request the instance, wait for it to build. - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-12 - :end-before: step-13 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-12 - :end-before: step-13 - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-12 - :end-before: step-13 - -.. only:: shade - - The shade framework can select and assign a free floating IP quickly - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-12 - :end-before: step-13 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-12 - :end-before: step-13 - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-12 - :end-before: step-13 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-12 - :end-before: step-13 - -When the instance boots, the `ex_userdata` variable value instructs the -instance to deploy the Fractals application. - -Associate a floating IP for external connectivity -------------------------------------------------- - -We cover networking in detail in :doc:`/networking`. - -To see the application running, you must know where to look for it. By -default, your instance has outbound network access. To make your -instance reachable from the Internet, you need an IP address. By -default in some cases, your instance is provisioned with a publicly -rout-able IP address. In this case, you see an IP address listed -under `public_ips` or `private_ips` when you list the instances. If -not, you must create and attach a floating IP address to your -instance. - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-13 - :end-before: step-14 - - This gets an IP address that you can assign to your instance: - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-14 - :end-before: step-15 - -.. only:: libcloud - - To see whether a private IP address is assigned to your instance: - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-13 - :end-before: step-14 - - If one is assigned, users can use this address to access the instance on - some OpenStack clouds. - - To determine whether a public IP address is assigned to your instance: - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-14 - :end-before: step-15 - - If one is assigned, users can use this address to access the instance. - - To create a floating IP address to use with your instance: - - Use :code:`ex_list_floating_ip_pools()` and select the first floating IP - address pool. Allocate this pool to your project and use it to get a - floating IP address. - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-15 - :end-before: step-16 - - This code returns the floating IP address: - - :: - - , driver=> - - Attach the floating IP address to the instance: - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-16 - :end-before: step-17 - -.. only:: pkgcloud - - Use :code:`getFloatingIps` to check for unused addresses. Select the first - available address. Otherwise, use :code:`allocateNewFloatingIp` to - allocate a floating IP to your project from the default address pool. - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-13 - :end-before: step-14 - - This code returns the floating IP address: - - :: - - 203.0.113.101 - - Attach the floating IP address to the instance: - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-14 - :end-before: step-15 - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-13 - :end-before: step-14 - -.. only:: jclouds - - Allocate the floating IP address: - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-13 - :end-before: step-14 - - Then attach it to the instance: - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-14 - :end-before: step-15 - -.. only:: openstacksdk - - .. note:: For this example, we take a floating IP pool from the 'public' - network, which is your external network. - - List all available floating IPs for this project and select the first free - one. Allocate a new floating IP if none is available. - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-13 - :end-before: step-14 - - This code returns the floating IP address: - - .. code-block:: python - - openstack.network.v2.floating_ip.FloatingIP(attrs={u'router_id': None, u'status': u'DOWN', u'tenant_id': u'96ff6aa79e60423d9848b70d5475c415', u'floating_network_id': u'0e43db46-8fd9-4ef1-8826-4cf9e809aede', u'fixed_ip_address': None, u'floating_ip_address': u'203.0.113.101', u'port_id': None, u'id': u'da890b1e-0afa-4724-9af6-0e5ab9cc33dd'}, loaded=True) - - You can then attach it to the instance: - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-14 - :end-before: step-15 - -.. only:: gophercloud - - To see whether a private IP address is assigned to your instance: - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-13 - :end-before: step-14 - - - - If one is assigned, users can use this address to access the instance on - some OpenStack clouds. - - To determine whether a public IP address is assigned to your instance: - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-14 - :end-before: step-15 - - If one is assigned, users can use this address to access the instance. - - To create a floating IP address to use with your instance: - - Use network service client to select the first floating IP address pool. - Allocate this pool to your project and use it to get a floating IP address. - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-15 - :end-before: step-16 - - Attach the floating IP address to the instance: - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-16 - :end-before: step-17 - -Run the script to start the deployment. - -Access the application ----------------------- - -Deploying application data and configuration to the instance can take some -time. Consider enjoying a cup of coffee while you wait. After the application -deploys, you can use your preferred browser to visit the awesome graphic -interface at the following link. - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - :start-after: step-15 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :start-after: step-17 - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :start-after: step-15 - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :start-after: step-15 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - :start-after: step-15 - :end-before: step-16 - - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :start-after: step-15 - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go - :start-after: step-17 - -.. note:: If you do not use floating IP addresses, substitute another IP - address, as appropriate. - -.. figure:: images/screenshot_webinterface.png - :width: 800px - :align: center - :height: 600px - :alt: screenshot of the webinterface - :figclass: align-center - -Next steps -~~~~~~~~~~ - -Do not worry if these concepts are not yet completely clear. In -:doc:`/introduction`, we explore these concepts in more detail. - -* :doc:`/scaling_out`: Learn how to scale your application. -* :doc:`/durability`: Learn how to use Object Storage to make your application durable. -* :doc:`/block_storage`: Migrate the database to block storage, or use - the database-as-a-service component. -* :doc:`/orchestration`: Automatically orchestrate your application. -* :doc:`/networking`: Learn about complex networking. -* :doc:`/advice`: Get advice about operations. -* :doc:`/craziness`: Learn some crazy things that you might not think to do ;) - -.. todo:: List the next sections here or simply reference introduction. - -Complete code sample -~~~~~~~~~~~~~~~~~~~~ - -The following file contains all of the code from this section of the -tutorial. This comprehensive code sample lets you view and run the code -as a single script. - -Before you run this script, confirm that you have set your authentication -information, the flavor ID, and image ID. - -.. only:: fog - - .. literalinclude:: ../samples/fog/getting_started.rb - :language: ruby - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/getting_started.py - :language: python - -.. only:: pkgcloud - - .. literalinclude:: ../samples/pkgcloud/getting_started.js - :language: javascript - -.. only:: dotnet - - .. literalinclude:: ../samples/dotnet/getting_started.cs - :language: c# - -.. only:: shade - - .. literalinclude:: ../samples/shade/getting_started.py - :language: python - -.. only:: jclouds - - **GettingStarted.java:** - - .. literalinclude:: ../samples/jclouds/GettingStarted.java - :language: java - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/getting_started.py - :language: python - -.. only:: gophercloud - - .. literalinclude:: ../samples/gophercloud/getting_started.go - :language: go diff --git a/firstapp/source/images/architecture.dot b/firstapp/source/images/architecture.dot deleted file mode 100644 index 2e585e790..000000000 --- a/firstapp/source/images/architecture.dot +++ /dev/null @@ -1,9 +0,0 @@ -digraph { - API -> Database [color=green]; - API -> Database [color=orange]; - Database -> API [color=red]; - API -> Webinterface [color=red]; - API -> "Queue Service" [color=orange]; - "Queue Service" -> Worker [color=orange]; - Worker -> API [color=green]; -} diff --git a/firstapp/source/images/fractal-example.png b/firstapp/source/images/fractal-example.png deleted file mode 100644 index dd756f3acaefb2094b248df626f0c3cadc7664a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61597 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 z zQV$}a*YE8a`iA<)Rr>1Jq|gpqioWe15Ixua0kKZaXRA|{AD92rse`Wx1&4@4H+l4e zeSe;?l`r_b`ptSTa~m=8up`@Q{i=)nu1*tywkr(cgIms^P{%>N9tYz;{Dfvy2 zcMs^>0o3#c#)t!D-6xun45KB5CcQUgtlbp1?ds}V#)$@VeKi7W#5J)XE@EfW(`j-UEKHK*w@@;G;L zKj3D!hP!an15 z3|1Fh{=A6h@|Ei3>e}~bEU@5yh8>+p&Syeii!Q;4Iw^;}(((`kFISyi;u)JZ$4}`@ zvB6yfgycMEr3tn#@G1D52pg^Jc3ad1y4u4N5Y$7%wa3suX{r#o z#Cl!aSe0#m9n?a51Oys|SJ<@9rN{(zJOb!!q4!0yr zuskNF9P@j`(Ojx#@&gAwHH+ zA|DNRYdD{ShvFdH3Yny(DL2Owx8Y_(whnbJQoh-vlkAXN^Nrdj`%bovaHlGZM@dhUGVkba*5QA2v6!$J&K%)AlGgc}REE!-9*A&X zM|Nad($9MZW~!%r!D9Znp>wH}yn(#Sgz`TsNteh$?duC5N;>a{JNERV!pA^-#cpB&`qDi48DAU4o(K#7HeN5P zMc}vl3(D4FNZDX3f70eX=ElTgAXe0_Y{`u4-8s!4T-ehs!-`-;l0lRylgFYKH<$MF z-IuR+#i~-$OzD?k>c?OD$9wU~Ea*$71Ub?ACaC)Iy+b-xb>|4xG#*?bVw~f8i}2z( zD%(Jt9-gp0lgX#ibgwvP)0m+Wor5|Jx-3_l)6Eaw$Ht_GYwma`=Mn;R>9#{CxF|9; zrBOBou5&KA5CGmfw=^@rd7h`Jg0E;pj^l^rO*K&@b>p;)Bz6@D>DRPWkDu}V&0{&U zXn-Hh`X*7}b1`lia11UOw^$UrET8Yfg{7d)_A!5SJIO#(z0_f^dCxVz=YphdJ$Z>1YP2rVTXv4&icw2n4hn1wy)v4PuV~Hke9@H^;4DAG|#mhS4&YPE% zrIujG`dG`(4S+g>$R!?o$?u z56Z7~*zVumHbUP$DU8s_{gm&Iqkz;QS6P zqC}@^NE*-=;tyE0{$*BzY~JzLm32RrEGj+Z%0(|E#nw~luAcZgYj+|QhE@05|JvyLkP8)SN|Y1|J<@R#jJV#S_fh|sy1j?8>V}60`)s0L{NTwRe-p1uMeYA zo67!N9D`v=H${&bOP+JgiP;o1_gm2jNePWf%f-H2UE3G&?&`N#3=U9xSBbf4Kk^+`{3b=`0+$iD*0T+scU3LX&9YZ!%xZdCrG2## zeMsYZlo$8K1`pNCP~ko^MGmS@MGY{D<;mR z4f`-WRyS68C?TGzU(z5@ZPaqHlE)~N%}elhPE$_*t@HkP9UD{^i++An>v>W2>eaX+ zc|yT?pl#Ax(;54;#nWherHr271QToQ&|ai@xWepotG7|Har)>C&J86m@5~Gj=Al7z z<=JSpX0FB)5Zu~=9R5T))_mt`1)1BD&6_b56dK*cMRZ8M%OGEQc%H&X*Jb0bg=_9uVvM9#iq;#ZHpC)qC;e20}Qw?@F zG2ud~RPG9o-XtLHPtoc|ymGJqnLhnCN4XR`eq}DM&(r@b16-6_VFv_7e8)kx5rjJs zd|lpHdev1iTi>(3`aGIlBeE))MU^kVcmypyxcptKU;WE{B*~sd@U4@kdBB(L{`{_- zgx2WalH5uXg)q>q;U*>=^^+myQP0Nx=yaR&CJmClq@rhad9L0?vTnX4)885Is>j9Z zZk@{KC*^Q)2722WhkUX!&Cdy}hBX)UejMRcK4|6}MM;qexQ=r!{@LTH9BX zcTr2mbiPFwy(YRP&!zbqjMt4epX%3sTAue@&AlP3|IzRa)E*avK180prBL`=vZSGR z82uRkdCHwmwnzrk>K{3_>5)(@u$REdgtuqm6hjPT_t8&}<8-YwsPkog&uC>0w8r2T zWJ-GaJmFFz)Y1E>fl5l9}|e#vGZI+@1azKF4GqkKGx{Fe#bQB-(=0{?Dg}m4L_V~|80*md7l046T z*XXs}&ABi{y3=l|D~rC|-fg=TD2tVAkzKYo=&aPA^e`ZIw#cJLT_$$S(xCK5Pa@dz z9T6plu~;V)#}nk*+2v-|V7$8Xev2GSZI5~>UZB4Vop_BY62!Nt!%1`Ms8Z*C{I`7l zBM{Mv1TQ1KMwPl9LKF-{`h2mXJ?Yz}pN2SB*w5Jy##>oL7SH#iQ(iHvxfJ9-t}WA=^d*E#37mEMEOLELA8Ke&%W*en{^=%GxDkW2{% zg3nL0$35NL%xdY%G!Q^$g?0X>`b6-oVLt!7c93l9aO!A7vm~7r_l1B?F-7~frf3=Q zcvgrr-Kn;(^8OPFDJAi~PSu|D15|5Ti%#9e5&AY?<>F%C@=)h;2&UV(_FnF+GKye} zc&pyP11?b4@{w1Yzz%ZbG@#sBmr6{F;kFR^87ZYip$=$MmnM{E>=~v(D=M zsEs<|V$2IH1wDq4DKBB|e5*6!sWItdmKg6|q8;KpR`z3${_i70#^s-C&1ETyPPS2j zFK&JEX`NAhN64mK{^{@czB_N2-Ml5nE%Ed+ z$)zb}{iV&ODiY!IS%FK>)spK_Ip$AWckrQ`A3J zJiH+v_`%w9rY0cd{PxQ}S7Hb_tsk~cQY;%BVx?NKcbaTf_*%S5tFhXUZ+`>3@&n7^ zIsD+~cw_;RZ4_!HqSyzRpr6Q?R$I^8kUG6#d@kCYphQKjvyD8~pO=F?m>W>`hO{1U zCKFg$m2QfVa#|nQlJn+0uVT5D>lfwDcs+9>?Fxow6m1`I6bmTVk24 z>XP|l3fmr0ti{{)ow?D3f!9&G<*t)zTt8FZHIr#|!*rwhO1fmIcP*wH-k&eIu7pYL z76}Lm66u4~i#>-s>y8eiDeq+jk{kv-QRP4kn+_u>LW2suVv=0n^1Ew%iSJZvGGs}H zA!X*ZK22@h1L>!rG8AU{h>$Gaq)q(vsTF+q+UD(W{twj}7t<#%wma(d*qx}e9h*bX z!-O1}C#b3oVv`-%nhFUcC!b1DiH^xPN;JfkQlGZ^sgJC{4JdyJ2uFfn&a8BFPR+MG ziM`H~i_}(1pC2-(?f66|aQ)L(uR%dKF3CO>eJ3EBvBG8QM>nQzgUW~dyum2*`2Dri zBTUcjf$+F(Um$5IBwajo-jsUE&GG6nQ{l~8`L>)05q=kBCXQWiIwMLccQrQ=+?uALW ztk9>ETOT6Q-nkrTzxCFP$g-pQrKdhcokUg7t6kzgHITF#ZBLCI+k=WmOI*t6%twt` zMQ*#8`yJXp`PkbRtqWHDZ?KpgoPE5qcc<$&syZ0IW*R2H&5M$^98+;IJ-~>us&L{# zmcM9Ubi;)==Js9036IGun-I-n&(au0d*`Wb2~Il709TJJG{tqXHI|+3-)y5)=XU&c zG|niATTJquB9+np(w}f zZ)=naP6?NEX_knrUj#KvIMf?IH(;~?ffbgi(9#6YgQ(5zkUyu{@FfI~|whj0$ecNYqp?J8kq6|GUPS z`qeSrxOKKkSf$xxAYwZ<}r&2sJ4Jj?^J(r{aQ)O&t9KS)EQ$w05as( zF(a$g9jKN!Z&YpM5QGttB=qzBRkHnyF=lXDBgr7*V?;EjR7(O!HYy)4E%))ZwPGvS zVTFjq-JlRwdLfWjGaXbTP&zknY_j`gIv;}{&0$4IVDmm(U})RoX2-3XwvWvxuuZ(% zFrsp|s0LiBUG@#!UOms~NY0gsoD+B(>UlxG*M&7c{l|${lki5_Vv6m$P$XY7gN}m2 zIe)bnCD%fiGViU5a3x+_5wj=Tm5W}_*rW(Q8>iV#kI~|ujgEx9bEC%V+q`tzoRdt} z_8zKQQp307nx_74W#W`%XFBn^B<&39&9pBsRb=8^ry`g(#{Hb~ z0QyjkP5z{)(CuFRGZamvE_5Gfz;qBiYtsbx?u@(==Ip zWT#pF8uJM2Z$=wuQ7moNdaTA(T^sgT@i%Fw&@U}x5<=&bF3(RklDuW0ToqJ)lQdL= ziJ&ZTief{$rJj&jd%Say#`XJHHgCQN+dK{%;y2|iT2$uk0YR+`IsDbk-lcHm zd2R=Ux*kV&EHjQXk%G6?J{~@*_m8dNTWrs+qf5XtQmS zHk)xCqNZ}tV@-s{SS(kCS}?g&#cJ2TH8|AJhm0x8@wVk&NN0?w6^HZvoYSM5cl$`e!LYK>izxNmt%h8@P>c47X}X+oNU2 zSrsmfYi&07lUr{Mv8+COWU|&AY%aEsmv+Xktwe1ZkOB_q@<~3;a{5DBC^jxc%BKNEM+WFtrkk!oSuD%=~IvdHJmPd=RdJ8Ku5KqMIJKhWT)HEw zJLgh&hJOL1)2Q-sG)d*iwyEZYq)Cft&CDye?bIx12(WF`X_7`{MvU<7Pw>%z3mI6^ zIW;HQ1>5n=U>5o`+R3wzZDp#U27wPG$aDC8ApB~J?L=z&W;@d7J7Td^m83tuH@JKp zhSjLQqZ|tg5uViX6>*}VjHFX15FEt2E1CK%b8>JKuc<52EXyQQjiPt@n_B<4PvAYD zn4ul_LCWW*cf!9nv;3vrq^V1zNjW}I_4ZGIyJrv%X0tnTpXa3RhXE?yoNDD0!vKNk50SaHd!lcm4=o@qI&Sb3S~4xRyrEa_FNwGa`et-S z@$=FetkxD}A>#>=Qr1~N0_aB^_FV2>il#JxO$+_mVcLgJKqCrX;?`3zPAwa~;B~a^#wed{uc)TIlzjI- zxs5sVZQIFhI4CLDb{!%IL?*A<{|u~6RP%jS)wpqDnvP`XzP4OcU(|Y&_Ee=R6%7EB zARZyaAAM;d?$c(5_)08e#PkxC^EsK@4w3R<6jZ;IugtzvdcN`obl4*{rM+eZpL1!* z`d(ZbPM7CI)Z{LtnZ6(G`#tjE9iFdBQ)_6LeM7{XiVkfy3P0A!IJSm)ncBcAs_%@e zroXNFrNp|-zT6Df%#}aF!Ln2)1p>Jw%D@o=+mn>>hK0`E!O_n1aeNv@FNAnW!&%5& zA9l6v`!dLln6}_jPI6X;Q?`--ca66Z7d#F5PCMC2+3QGNs`@c8GYP2gOC+C#`!6@W zD&ZZ`fb`1FVeqH%CTsWYFmAtNVq7&^ek``_o#grWcZ{M<9{QlCOwYjQ{sJFO#L)PN z{E`MqYwCe4SipQPn}sI*qm@hPJBlz{y8RIzOs>eFdbP2kZ9R9k;6 z(@{%2bdcYOyuNeRPMD2%L$B33GN^1_Ty=KxX^(u-BT$E(R*!!qLYopwU1j)C-J>2s z2@AdePqhay+nYv1e|!1PeJpiN#w#(ojn{!Rm?5*46G*m}H5wahvF5e6c`t-lAJhkP<6lEm)*0gJ}5Y4ELkJ>-gc68CBtcc#R1~$#7WFI zdF}VMW8G`l1HjZi7}4HG6bQ56eHwiN|8cFFV61LQZ~1KYZzjwk=M8y*3CgyvqSLK_ z$)iNEAo07(AUBetXd&Jn3$_z)78$L+0q!J=!~j`r!dr!n*-DISYkDMM)EaLTqIZA2 zl{AUO2}$6!R@fIJB3cW!aXzx!v|LrDh-4YgGER>*ZkCKV+K94Kq>Sg$oYruNO4gXwNyJHzEACT{YhWYQ(PP&j+Vmk zV+<|G)xw;1tQN4Htz{Pbq;1VLa@rF8#Gqt4k!@Wmi2mU45eUhgKVSX$*sRga&LN`l zH$E8%bH#-aDz)S^uDt(wipq68$IfT+2|E^pf~!?3xNR{E_1dMbJx;(eH(44uTBX-7 zp9=(y&245u-+HPZk;KoV4)CdGYOnuGP#9jSKDnmf> zSD>^fopOh%gnqSMHXx|EXmqNWwd=aYT=|188bm+a(HJ8f(ce*hIy*lA*=Tzzj_7M=pXa7yaSP*#q-;kJNn_%Z{7ZI>ru4W z4Q1ewoq0Jk0~df0ywt-XmK1K^_sDILjvn8p=(hB*N(#5&u+`(;AiC*CpsC99y=|1o zPRnUxB{#9~nc$P&zb{x{u}Ou8MBdGCc)MZ}QgJC4wgB-g_DW8TIyK84jsSYYQlaw^ zlXv0_5Bzju;VO5u-2(tHs3N8rh&{hCw7kq#(bSNH=H|-cjBk?*6#F;&m&|=3E~$5> zP=Bq>$iX5T9&ekw30H5D`!urhaVO}|b9E^B1&O0yjCk3Z)`KGeK&Wl#D!q6Ww-8+O{P`V`&ll1 z=Xq~ltYrI}P?fEjg`(1?W^d23F9jMC5g-5Ml?5jL!SN+!aT>pYiFcN2dl{zwtLP8k zX^hNL!|e#yvEw$^xA7I{47c`TdFs3K4M(Y{Zy0{QtCK>;nvElDjy2J=`mh$cKMjae zdmV}zj?^za0uif8&n?tR6>s9F7o?(J5tZw_; zxNN32etGbL74+s>ifm%8DueEJ0Sh^3!9M`(K7gu~3-|{b1oXCL9HJrUkT;|}xcFy? zmG8H%H=W|&rfH!*_*^%_C$Ka(dF!54A?W!^;~a61i~Q;Oh`a?tiz@=Db)t%{JUU_5 z;b{~Zof7@^>vabYrUO}7J!fY1k|10k+GJdk4FtR&>#E;de&H#*fX_wk7T?@mrWJPQ zFZpGpxK$E>ns zlv^|ZJJJBttAjSZhHJ}spn+aLCW7N+Ri}F+m@%WbfgS6LIkCVLPQFHof1A0n=Ib9u zJ=aV9%e1W`&3#CUb3ChS=XgV#@749WqzI?{DeNd;7w-e{D5|I^B}W^0CRWn$@mP!E=VC_n2^<_bzI@){jN*rJ+FC>Vh73 zM(|>z-u`MZH@Pl*@a7k9CZh<9j;c2S?YkI4oFA7NkFXwCwVzgNA5#2&KfMTn}>fAKEi!)5bqRw6~ z8?!&*8l%z)aDNW|Qg`P>cOc#hz{gnUI`PObXbc6I;6HM7ZqCmlE@x~Ho{h=h(-1#k zi{FYuel{I^xQm<$-(|p08R;o^R|c0=&l|P)T}M~_$f%gF0Fb)YhuX~<9nek;bYG#7WG>9R#z84<3UU2?D9=2+>CPPM=3|)EGgyc z&T+DxCCElw;CgwC13YVj%-?G}v#!cSt%YWK^}&D=q<`~E5dyMew-kZT`wBA6hL}!| zPpK4l)bd*^zLvPjQY;>oPm(}qHr6h-GXadXa>KnU)PnzS6VI3ZQxW}*S%t2kTDw0@ zC{`h5GqPox^v;`eu%~SwMuEjYpmgM!0j&R47f*9(!qHt=s!_fW4ayzA^P5nFM8SIk zw>tM18PqnaYJTX|)Zw(t;!?jA)I4X2qtQf}GH2a~VqEzR^r{>-^aJ+rUH>-bB?=wo zPSPYD=S^kcEj_FxlT@9$=)*~ zX+1yU&CHbL%W+KgPNC2>EIpwvRd>%5v^9{{L^^8vZ-s<1Rt5BgCFCHR_ z-)_6C$Up!#wf_a?6#@Wwlx1PQXEsDWALAmYs5#x9jy31)vcINeABg|5wO{&Y6EgeoiN?)#RRn*rlef*Uao~B zKk=&N&>RAz#ZWi5_!liN)`x5tkUTlfxX-<)d%%t3^jnXL)dhhIUzB&yja=bY0Tx0h z6mTv2#P&sLUrWrRSMciEzitUi`BYtPL~uu#PuQ38yZD|9T0g}>imfA@+c;ARcr6Z2 z#ALW8-0KDzx`5F|sDgQHJ5l@sNSU%|_HMmAisQlpkB z0=nAmiE%Lf!c>u{#S@%-tg|2mLc)64?^@TlZfWWFg<6g_)5O}_N?Kifzdblef}ZZq zUMi$Ko3De<<#`>s?5QO4nY*{pK7EeCk7y$t?esiE661VTu$&^LGv`ROTG|&poHegr zvL1=^pGbT$z5Qzc8RY{W>pgjS{S!l}FhlS0nvI2y&RC&?9JCftmMv9>r> zlJZujZ~p!x>pi+cJsuEp7+QtkM(GI7{qYa)N`#%%mqN+R0|V zsFTrmyj4!XL`sr=`|`AFcj_#!tPuWprK;xPqw(8p9c$KlXCff)m(<8LVgFQuZpF_o zj<0TPHhIU}gA%8oW*S=MX49~Yd21)K>|X=_ODLy<&|cIiT4e{9f%H6YbxK9}frz_gs4mi~t7i%oQ4SUY`Ps^*y9$USDazE@L)hLh zI%E99dj;3lApEai$sVM=UdD58aR^#!j>TO!DT28t-Z!R?d3wT7&d~B%EiSv0V4v!d zIyOt8^H!qDSr(o>?M|7%+!KCGEG!1D3SF@`F4~_yf(W)v+JI*w+#=+q_q*?ThP}PM zZ?4?QcMe?RN2Br1rv0{HI9|u6z+RSYGU;wL)7@&8niO*%FrI4^o!HOa#^mX&+X*${ zkH-G)FrhwULylz0XSHDmBfoHWc)oTEJ?o5__<3vBbg89vpL+>0v1eXIYLmpfI+%gC z)}OZrUp%{MXTPpz^0xkNgk+w+l3z!4Ga7wXx5_Mdc&C4!5{L%s6nOS@oMPs!2w9&T zBOSMwD<5iqoQS;hGvynXX~lg@u`c_&)l;z)3@#@-Hh1;nqT~7V5AU1VEC$aYtV@sF zK60yAOr}JBW~nXuyioCOA)p!yk|fy|DxojE-Uz&eewyzq=MU4qnW)bgl={v*Q1b3< z2Qh=`KN;LHB|vqWeO+<3x^D<+&>%8LZZ!u%N=C!hsi@A}1QGgxoZ1mz5?= zM#WguwknqZP80SPiGy8yL6r1IuEeU$uz5K9u?2bYrYX50>o||&wTO8d>PuFFEF1?G zJ)(*i9R=Y5zz>jW#6(>h5prCLy%v$CLxCtR*Y^jB0@<{s^$sF6G#YPy0!g=DiB<7d z#5fu=mbM#FdB#n$YPr2czm2=#W6h<-O#NB;_=*+4y8_skepph0A4WCgVkYWl|5N*T z@3Q0KgfH;A>&6(-!4t5LeU&tvbgg&sRb>{NVs`cVF;m7($x;>`lFtN866W2{@LnpL zUo;`E}{pc-QR?nC;-FO|1TW-osV@I+&3bOI>6m)PlZhSm+LzfD=6`qRf!W+DSXoR-!n4@_PykwL^cZ`ZM{gI%JNmkBtcWF%T)ts>9a73 z1X0!n5But$<@iUFD(?cjdw7U&ay%jeOK99F_pyZ|cCUYHY8fhXhg;U~hzBZH$ zt!2)Rl-lX9V?#l^1Fsg~XQvbE?A&)R{mpYGv2kVx{{FfwQgq4KY*j}@fGu-$UAH7_ zFhE?^4pW6UlhWr*uEEfqzN|_gYT}2+XTJC%65TO7e;xTvY84Z?4edT)@y;n{Hj~#;zivb#ne>H(1tx z?&iyuk6H9UWDACZrA^K0hP;{OA|*NHu`=&syi$UG{Lauc($FjMIj9?P)sRZc@05Xg%QW(#un|#m|k`nZ}KVQU{=Bz9>fh+ zuI_W_8A@7;56Fz;D@Ao>$A3UdUU=$_^EMi3U(Ls{@LV(Vi*fB%NK6Zvdqo@!0BB^} zlqc^fi+o6lA1dZQJkGQ^W;v-1)!RCklX@4_U7Tb)UP%1OwR3uOu*Wm$IyM?TF+Guv zb^A4HRx!u*&rrFipCpxhIYW7>x^o|o29H32S|5!4rKJ`7NkaZhs5aiIp5#& z7i_Pyv(LHDeO=f43hJ94Hwc3gmdO+R-jp6halHxhV$3#BL|clBiMuN`#YfhOXd>oW z5BGn+-{M$$9&S~MUz0;Ox9a_`?umDDrwZgR_Nn(%s7Jl-1JTt|)UfuF%{tfR{3kE}1^X!r_D|~p58=~+H%6*+6igqJ4|1*fWc*M?P%$`J zva04EDsEf$QNu0T)LLLKnOu+0uE=>wf;Z7UOHuG5;Irr(UF|uHw~>dvKd7QnkZ(m@ zjTqF?&$OMjxvZOWhx5ljdsFJdZ4=*@ii`9kG8A_RPYY#TjBYP+iBAqiQbcwPCFOZh zZ9aWpoIhU3?iPf^I`LFY2Qy&S*uzvSxI)F>0?!*R|U`97bNjuA5PLs%u&6&rrW z^unGcHj3DWg|wpq|CD<*144xO+dAgXL}ohg9Ffl2X92}H=}llRA#1kR{7y{OMXvLD zU(Ku^XNInG1j7BwD4>cd!wBYr%<#p7o6QkUktPub#S&AwI?Vm#Zdx=f#Wvr6);`Gf zDF4w97onc{oY-ZG$7A?-HSx;;`J^e#YeB1@dx3+$BQf}6gUeiUTDOAr?n8kS~wAI$i_*s+fOv5NL3ph%&Gc%sIJ4L6Vt+OsMQFus{Y+&p?xiP z;h7|mo60db$U^_m+dPkdb;H_Ro{>ImnQT}(RY)Uh<#!Kbc<8`q(f4~e2UA6T_uU&%G>`DkcJJ4X)^4+)Ic|CGv#QkaM|ht! z_(!~B!4bLv@ns!PpxeSf?2+J4id%(2J|q>?m+tpw;OooJHJWezulYSu?Fv2F{n2s+ zn*Z!#HdCUke)(GJAnqcTUA?ppTCB6tL44m*bVMr}rVY3-glnM?p3kXfOM{*IjvLz| z3mmYkghrFLDZ@`-eLN~tY*2xL$a3dGC3736=RV8zA$|gA9(#DmIT)nl>nt?Gmu$Nv#cOd*mcSbs zY82V4@Y~jbs=vs?jpTf}RUcUN!qt8=Nt&HJBYNFIk_$+PM zv3N1U$#@!@97tPJo5j{#a$b9)JAdMHAQ|Mvw$)WGEufxEF9d>DG&z1QkZ&wPG78-y zdFe?Dj5ql@Za=VT%;)+tMjFI4L7?O%dXuLI_4QSR=0E(SS&Z23y_`{!Nkj^&2H6uk*k1ww=4e{mx+=JF!A*)FADJHWn4WR|2glP1}) zI8eJXlg(O%*PI|1fqXNSd{~a~tOeVM*3L^di)QEV&Zk?`4WC6wK_C@p_{lZBxqvLAwnhR^Kw9VRLI}oNc zR>D9CM;QhhrTClD{e-V-0PGccu-~KD=?4LB8MYdtQ~0mzHOgzse?fBh?|latLbIR{ zSf}@j6Hl5ZY4+L?*m=w70*MTFv!+4%Bq?uv+@JrYep4D*R@c)gvhrj5cI+TG4a1zU z*>TwkM*Vwk63So-9W*?gbDvlpPNiebRbeeSg5Ay~gHM^KBWHsf7Yk|$(!wpro6hVT zX7EA9=Jdut`KWvZK^l{%--XByru|B`L96<}#p_;2ZPgqAfKQk!kz9Z?E*A z;LLY`C_I=+`T7t$d6?&G|FgJ3mb6NhoDHwoQR%D@`)W*%&O5xZfp|pjGqJIfT%AIl zRVh=&IdqqiXBXD#vEnyTMZ?-A7$UKdtnB02a=pT|UTt%c61H-0c+8obpTF_5kb!s2 z{~{nq&$kvm$kluNL<&*p+6Q-W@DsLdVZ_ro^!<~ynnG({|8mz|(8RF0M>vu3Q&mk` z7$?(I4@+grxsM4gm}1pJIWew*uab$KYFedkBDFrvLuXXSv%t=gc40dZ;gK7@U_B=S zsoe+%)hvaB(!xcMb46pHMKs9sylgfal)vjvz&e`RAVE${83U?J8TwGTfpR@D-l$=1 zA;i$C9QJNGGu`yq6UnmM@?bte&_OJ6xW9mmqMALX5gg|1L4KC+dg@zzxOrHQA<2hS-H zG}Mm~#U?F2+s%Ho2(`>G1(-zj{`Y0kq_4&)&8Hpmr_EcPYSqs_>h0=n-qu)W-F>`p zybI;_sKoo(OT6Fx)Wqppsy|plJ-w){V_E+EZzm8N)-UZZaeRp2w+3Iksvr*0qb`5|&$ z%ix8P;_iS~q@LBfzWcb=29u59fzF-(RcKaQ6KXUs_52aO^e*kz-<)#$*BK0HFPy|h zIry=710|1lz;~(St!&7wIQuouK1v*KRo`#MU7xukzxVdY??mnKzx{F zI5~q|BE)y2!7-Dpl0Mr8G2s5%*~W`^SMGyGi6NF2-z2y>xr2-cI^?v&U>{ z02UMX*Ng+>2GLQ0*1DhGDgusDLOzbgX4kp~qI9pCv!!YPt{kmrca*}gZdJD<^?Ye@`2*!yDk<%erM#f-xo~i=SeKwzY_Gy7=}A-+v=nv*^PlF5f(Pd87MFQ9CaYhbwHn8T!*xIJkO%LQ3d*Yh)m0!kz4nmGTY1>T}Jh!FaW8K)f zGZukL-1wRgav^q_%Rk(F-Bs4z1 zl*xB#6-u4TFIshoVUz9W_NbT`S8C8@Z;E=2hI+KKX4^YY*Oe0&cRx8f9Bvd`rUkSZ zvL6(CK@+yzwqpeK0j3QN=K}tlJ-_IW(@K(syv+>UvOSyix&dL4?#{@I^2(f(d$n3{AuAjZXHxLo)_~CWZXV%J#h9Ukk*_l7lLUKJ;_VmPLf&%tWr<$lyk@c+B2c1r^O~Z>4|vZ?3;OQv z#Z4k2!&QVJV1;D*sax!1JopnNz1sTSpy)(REdUxFHxy(SEv-n8^GQr$%Fx&`xu63< z+;UvEg)-W93zbb|L_95MpW_#Zlc)QqtELOwU#3n+Q?_l?SZ}WX??14B#FH;35>x@} zaF92mkMt$;UKZAcyvDq;SR$oS`GTS%1z)wol!)=jr`cyHINla*pb9rsvwhhS?vKx2 zhwoKSi2m^(crL6mGQNu553P)pY})H!`cO_)nDTg@=ABI_KHI?UAc)A&PE)I$zj4K{ z(MW3O?fW_N<=JW&Xg2qmcEb0Q0Y6N4AU2D!z}54iTEepJwW(2ax&wYkWo7b40>y@p zTH1}wHayi$Jnp1<`>Q}O>YBxb?PjPg&}0LS{<~{^Fy3t))R-;RgAVWyl5~<*#pcCV z(LwzljTXO5%HH22G4{blD-tb4pxT}1-wOy;#QZ9b%PT2UA`6NmOx2v_8!XibLC!@iXXlLlgi zO#~|oB1HNym4f@`x*E6<#>(sAg~^j0o20txPgvEv82l9HEZD3L7tkZ4{n$MZtd%|8 zj8oCsr#=Bm&jm)2P>F9!-nX=EezawItx$wbM?-8y0#TKcevoL5;QlynKFH_lMdjX` za)rS13O*b*>x=?8m84I@GatdKj7KAYymeh38NE`2iGBj)cwscROwWSZD1ULohxL9X zXvnmUQ4TgJ(*IdvK&IVC)zDY)k5OHb7@NyMXR+R5a0W+~-qJ^fe5XzqU|G42KIbY# zmFkNYio1i_ci(ksURqA^{H3i?@@q>EQuCBl=#vAY!BZTi2Dh$B3UTdx z+;RStwGg5z1B>HUkJ9q$r{xVRnb)a4w7wd!Fs`!dVD~4k@Di1kRxsJ$?x3*0`lC@- zg75BLyR^mboZ9-74f(!C47~BzQ|e{<^g;;!fRJuE+)U1qs9(q#I8tA9P zYs?>ky}g=vT~g}$xgcB%V?lw^uK60ns*;QNi=#Mke9r2A5I=4P_Ctl~RwUmC-duW9 z5sI$)i=<4?5RndBLAwOh^SmhSu1e2LZMinRA1l8C5^@F`Ho?&@(g@mJf(^%hL6xue z{iF{sCc2L4Nd8>jCvxMwTyLMM<|*Rz)>*>7*7)``gQpcdMK%X;&|dl+Mfc{h&^e-& zWp+R#S$p*(tLcd1d93$7&;>#^Mmi^6@Yb0gzguF8qvEpunQ(S8=VJIFNlIU|%E7IJ zf|-L>%~+_=#Nt%fKGffE=||!o+s!;59$@O(Hp_K=b5CW(kuyh3)e~Z-#)IGty!}&n z%GF-~H8HAWQQ7UMouWTgcW~eS-t#?&?xZllT?2TSh{P7Mou1v;9es31w4U8*31@fa zz=G`euHYsh0>Jq~35d_)bKhM#3+kYw$7ie(Fye*^CZt z1K)V@ElK;O)+zmbP_u7wQ-~4ezLyA#vT?2U8rDb}ge1Pt^jJzJ|J#`RrL14ncE5zj zOEym06Wr*dFw~Z6@_YX5zjNq+mRY`j;E@E6CTbtOIawNB`m(7#3ta8?opTflkbL-e ztXL26k=wUT7(b)4@d#(|D=4ePZv|{Dpx>e$(wT3?hiSI>1)f~0J2;iOfAzS_-_?3| zM$z#;gjD^N^xyL6BolYD;e4yms%@gN21WHKzum;o3mle5LLf6d1XdtpDdRWn9$#0j3iw4W_pt=JY*?h19v)YoD+0iY0r=2%_8_tK9u$j7Tv zfc0Kf`6SqhJ#U&+_Y9_T#^4(gou2+ssWW!2((Dx3e7bXZakGi`wA~`2cy&EW)HyTE zslc{>IwZdSM+(uZd%JS~oD5GH4(@+4l=4DS8oFu@SM_wLy*gGc*o&=$!VToNpC? z^c!60j&iY^wn_qf)SMlThq8)T?UQTCP;EV#sN@OmyPGEQ2Fuaj{3TTWH`Q0m$mNlH z(c7?`%p0fdH7EY$rPkntHDD<&C3bHQH}F{`opuQETM(zFRM?7nx6RrAj{~3GKP$3M z^FGK7Z$GeC%eCRob9hT2t$eEbFBz5dr|}wy@7=oPM9yZ2xlB^Ti@9JW4jUHuTaH8> z73HK{nrXzub1Q`iarYN--KmED=*G;0`Afy#Tgc`U@Zvyxy ztc|V+Og)wCR-)xlE(Sh?ADVF^d&4xhCN1Ze;{n3W$OKer3c4!5D1*#$6)a{#Hahb3 zLV9ZD>)__n2=iftQ7vS)0@Cdco)I_VhlXjz{8BtEAVB(a*%gC)Lz= z6~ImY;~)tj%|32`?SSlQlnUAAyq(5W`PAAVL{gb^NS+Wz>tH|p)x`yOMSyK3B0)5r zGfR;rxUc7xYf`EA#OKo5Sa8wDJ0v@(wZ%amx-zW_B0<8v8wXw;WoWbqCsu2 z2xWzCeAFl?BS&L6AP~&Hz-Roaw&(DQlsiW8yU?54%Uyk6A=_8BJ7Amlw4&HJK@s{K*dM^A2b^0U2wl8atq;)z?c;!0vHe#v<$V0>+&0#xcKL;m$db_tQ3#F zsgkyo|LTnH2^3szoqj zbLG)!YmN5f(eNo;iMlczw5!64O_;>7cd@j3IU_bd1;skRI#&ru6F0#Sv;F?5v2))y z*|bW`aKm&Xc|V{F7;CT&{1z9(tSViuaCi&)%LqSwCQ`hA4lp(!n4a)+K8EZqKnGgVbEH|Qw53e|T{LMR(e*=3!Hf(|V@SSO%WoNUqIxb-#qfy?Rh|Eu^-q10P zCd&nz6Inho2cl&Mv|#7To;AEC@%hKhsMc--sFd%fO1Gmy@jxGAfGxLsSK`c zh}6R$kG%kO;DEqh;aVq*P;Pe*2E2L63q}~h(ozqc? z^^>-74`y7Mw^Bet$F4nXsTZP6f+_4Bxyp8~J(15^a`q&wjB9(bZDSx~mX4Y~UgqiK zq$=?jyHb;V$^OCkx7&8VXj2cX&(8txs`&RBPEwKl0|>aeE0AKA@`laclBNy! z#{+Pm_n(?$Y=H4BZ>41ad?9@{1`4r_6i=<^EYjyyi6!}Ga=iR!%!LN4$*VP7J$B=O z?M6#z+#WOLOg&m}|4e)PgwpmvGDq_s_+LR3PzLho3I(cd-GQO3V~O#Ox?CTV!6hc= z;bPky(pRH5t_yc1BF05HyG2MBbfVQ}zGOrcrCK3g#T7_B2FICH_ey--_F$I64&Ppe zP{uMH$Vww${9-9nH)?3j%X)=00+haI)S92S{UdpeJOY8>d(hFDea#Rh`TIQm3K`-H zS-mo%?$4IGkN`FMC!l8YpJTf$vT!UF{;`!mq>Ba~k3-qkcWgxaP~ro>V#)Jz^zlI^ zPPNG*CH=zp1$~EY-~q(lsuR1N#;VuCe-p)xj3on<`$KUCX>FxnTdaTdGD&T{1IvK! z#tU@%X(=H^##hodSZ^6CAh1M>szR7SaU3ZvH>8EWv{D$M%kp({j3mwPloVmagHipe zzSY4k2aXABz!W~6a#}2X=4Jdd^__8ef^|v|u>&212cva-oyikfL;6%uTBO&#E-DtK z;8S^qg8Y%z2g@vIHwBX^1(J}M+PaEhj8)o0H9~CR(VUm)ZYz$M5>ll>r;?wd=Pk-= ztD%^AUt0_ga`!J)qtO$l_Ty2|ZB$ z+$%U*?`^>MvfKCUbfK}u6^u^p(6V*>iuan_JYTS+xk&hwHeKh;(XXgDMOqE}z)Vo! zWWwC?pu)}9v!ZEgpg~h5x{J>U{sc#svW-QRy%WZ5&6B*f+QWV-@4acDax&C}LB4fC zM4|l=uxDIxHFs#qXYbZ+`sZ)?EagBi;_SGP>UDw_H|OfHpZ4ROCoJ9nsH`}tv;W?! z;cFghvAXjR3zlk!hD`np@LyTV?&pn?!k`FUt{$LHTJEm!aRPRH)-0e=7Z6xVD9)+U zKwFB>t&9?pRvuGkje2`9?5=-o96)bJ6xR2?Pe%0|V&h zTML!k4HWi@(`5UtS=^ZI?FD*yBHjDsv{#}>Mevm79(wx9j+~5xR^LLZ(pOw<3Kd`n zDI77dR5v11=+woi#~aVeFLINr+V!&*gOi{>6#v)AH?@PVA%Mnc$XBdyMZ*i~5X1qi zi&pl%70EE3sliq*lXSBAf zqCsL*mU+sNh9?9FrGgkB+Zdf=KWb2*b8p_aR5r!+Ym1v1+pDGQiL~}ISs?S|Jz9rfiz36>nXg@kd!fvM?0&Wb z`H-Z72|3jFMHIKa_hnz{x4&&9gj6qP1r#g7UyL7jV(juwlB5A)SSPHm_e`^I6o6~T z?I83u3-zY1yCwEYz^kWwwGx$rm<0w9i?$j>$Tnyz%C|Ik3x~=7@@$oQ>Ys2@%>;~a z@ps%zAYGamb@#c$h|`+f-!`=g$(D4P-33Z3n0};Xe^R9j2b8&r8PMa9i|DIZI8orY zRl>P04v@OPUIz)m7iJS3@Dqq_IyAYIahDvxw#FT_1qbCyq&(!g21<#3ba zNZtym%#wjROi(eNk2{tsMuvUVSwiGRJs^_{iko^5RX3o{+zH}j?*iqh+-H-)7n+uM znf=RzY!M39&?JA6lN!jBli`I%X6O|KU$OLJi_}X$7KgvdI89HX`Q6kD3dadfrp?UL z-X9Rm6)k2&lmbso&3~b?^=|88{>)ra2Pz{)ekpQIqZF8*9cuOGv3EnoJbXI!nvXTF za=hNxcJ5Wkw5S+Mk51oHhh2*nuGP)lx&q|z`;jf9bqjt1k9J8R-5lWO`h_ER!+Ds!QveB{LSS zykqOo+`;~HK+o?J-p{ZuZ_*;YKy4tuoNq-z=#h)CkCcD8{N4Fy9=-+FQQ7# z;#KavxnSuoGHsq7|Mn)C%7gZ5spt698hi4cVcUOtisD+loLH!i=!~~J0l&L|>mn+* z_4oP$qpll@Q{|PZA;l@Dj_AVkCD)=em&|Vw+%5OwJkPN}AblBQ((}V{IFJzS-&z`4 zjh;ufC@KrVbabczeaq)l3#vD2p7G|CLjLZS8X#Am&@4v%?t#s^D!kiymy?Qnr2jqi zlsL`HRyIAz5o1jwHhaz+Km>($3E)&+tzIr8u01#Q+Z;)b2%P&ZwnrOm|3Y!J2Bnr= zHVfwsSIWlOkVLo!-zzE2rcv+BN^x5rsC15-p4b$v&L-o3uVfE8Ba>sainglm!V;~8 z^7KX2V%gmGT&7qtwifP4de6#^-ahfIG`@FoMa4hwJ-I~w_x?8yQP=0zfrPPqux9bf zs>`Dw2JJorOS12Lx2*rZ(dt7?KxNwG zJY2_0x%9hTFmm{A<(b+5)4zYHD+BNv|CJAm?F`PZS;>Z(hIdPPfHf8P`DE#G1%M)| zVL@X>JTKRn{7$~?F+O`r$IVBE$6iV>(^+dKWYFJG5!D6`XsiS?&4mkYQ;t>6<~yf( zk?|CysY-4Vm_@SQOc<17PPqt9Tj0CME!SX@S)2t@@$CZzqch5@CaoEPejhNziAkKOLKm*y*QXdC5M^(A)i_;pg z1p<35J9iwydmlLhQ#(N8G`ioA^Bv?0jnkHHFw;6Lm@oaLYU5rgTGnBgdyfB(+X4TJ zeO#d`iKM+PRo8k&(aqq@sx0Z56i>rQX9IV$U9~5S(S4I&8!s@DdC^A4L{NqCV!?t6 zYx)bpWs88;sG7_4b=yShOu3i*SYuUP@fqIknQQNehXX#p?MARHKWbUg!YMrnTWq{s zl)|G)ldZuobb3^DEcw23p!cO;hQD&cm#bz|psXP*prGWyDC5yS60qA|$Zsq^)ho-a z3cb6OpIq)J&rfH23bFHWT~9<-?w6=d!A{uxs*m&|n%WBWh&q^zYSoiG*mBTInsJD! z_zqI$+%yKk`vIAvRk6c~k4>&i>@T@KI%q_Psr*#G&v;a{p#eJwTX7nDOXc6OHAP}h z$+VXMc-0YnBp&6V=Iv|>hqSS@g%~TAIV~@Nk?qvn^wRfihIKI41M`0?;^K(ruHLtK zmVasVUXK%pZZ1uF_|D)EbS-n5c18Gx`~6x}U*COK2dP=ULKIR*cc-TPW~DpTHQFmr zFyLD#y`?h)9HAA0!AP5>66$RA*#6DL`A6$&j}Yt0r`7>&L1BMPP<>7JQo2;XllqE# zcF=CmXKkiSRie~u^x1qpX66(gzK!i}J5*4T>NdB_X66qzG)wT%)i^m!{h-Tz`Du;1 zI%`Ao-fgTO9W5u4VOmXWQg56>yOiKAiLo?<3@y;ooe0!HGN&tEHC4-Es-+zSZd#W@ z{OS$m4A2HIQ@1f?_}+cD8WG6BEcGN--=F&oU||VlA*XAvFPWgUIIKlK$8OtIdq5}cKTL(FdnG?kaV8}AtN)`8AiFB= zb@KI@Drq!!2=*RV#9X#)1NB3(MhrLddY?T{rt87+oNw`L2#$9Y9@pK4Q-W3bZEEdU zsdB$)h%1`3RZ1FW-}$#a6xVrotp=8`mCzO1%K0`$qrTT4PT)vtS%_fxaZWs8;>G?GhW!mV(qnstivEaM&MB=K7NwfLjHj`7Z=*gG=F`rJDCy_4s&KC z$w*K9j<>l%qX7_p{NC!ppn2|_*))Uy6Ex;Z&SZ7gV)(<0{iY%}jf)MN7e!?Q5Ix+a6eon`Yn)=>v$5G=Q|Qd|i#pDtRgJX5^Qz8GuyoMHvNm&? zvXQ|8#pZ`*_G9mZql1!`n0p4_5_E(7>t}Q-Ju9jQr_)y|%ie)7OvN`yBA=Cdv{?#x z#*OO`l7#{nv!IS)T56b}k)C>Ps@pl3S=$e$1~0=GU4~`i^+l$dyVq&VC5&o%FmLm( zc1Y&@jA#J1aT|)E zl9!{oy{#=Gn{$+)34ZI(z*pksRi|m}&B7&aAG6u#ZEc96NAr(nF%~o!*=$s?Uwq{& z{sDk9&Ah%S*CQ7DKFRMXjm7V&Ul_pEBy*}}1^Aw5m3h^j6;x4<;c!kITPENwl`bBR z*_sYCEFp$m(~Gd4d)0c+E7eDCmMewe{ylRm*O5V7Fv7mv3-=x~tjA2#yP-0#$>n@6 z?>Ytd4x-bvmK)kG_2#U;mYy6ii6;F+q(+jL#tEfN9k?dl8cRFLJ-t>>h68|Kh{?z& zJWbUZndY}vTLh$i;mkH2uYjrus}p;I{QRomTWygD8+X2?;o`0Kv{Wl}(0(33M)jhv zXsJZP!;3^Ngt0vuc&;3IIq0!TF1Dh8(Cq50vc7GEr2m16e_{MaHzTmyE+my}I3|j= z)75;d`3GM24yE`p61aCn7BzqTZ~l~jsI?PyeB%5?;BleoM^y6 zF`d4;gnEl7P7N9Ol}&R6%V#LOY2WqjBKgj!_NVML1UvXsX*2V?m3`>*i(P;eew01^ zrf9q}9g^GhmnK)io{=v|#cOS4KZL9L#&tR*;9zUX@n17HvL&u$vye}Lynep zdSw;8oiii|vd8C+B~A~Vy=Z~nA4$AKUkpS^VK(q!G#xv{X4={n*DS1}55z3k zKBz3NVNW#RNnbSg(Cj|I;jB?f( zaifFDna0(eUby^$ehQK-oS(CL!Moaf(f3U?ply?y{Y3kV68}5OmEdaoZ9yBk%S}5LVUS;L??_@$tpB}Y z5-Tr&^l$n1Jy@wyYO#=dB?nqZr9dU|61@TWstSgmP*y9_9*-WP#cwUjI|3nlM0VujoVDVnp zU*I%wfCl|&BP6Il*Dqf#nI63)ucKJ*1&sl zhS1-=dMAQm*MH5&;q|>!6hJnlS#yYjS|%U$7WVWV$gdfmLV08?e9CcDw2`g#lp8hg zVSi*id^N=L5}0+%Ttpqs*Ay?DS=Q?sCyP1BP{;D~eB-ay566)MR-EQ}qNbIWPWbzt z)m8i{FP>>*7K58MjRJ=bK3Ka`Qv2S-THk)-?o&)%U*o+6J7*>z)3r$q{`4|J5G*~U^v2@!N(T`OfrCzG~Zy|&u8i*Z3Sg>+RQOaV^Yk{l3n(N zZ}U_hm}U6suNgXdg{!4Z>K_e%h+(Zu^1|1Te>;zL?9U7otvPz=DCn z@kd+r0N@*E$*PaE=1d9U%gAE&p~CrQwY=c)o&zPr-@CJfHz zvL)PlrFkW%W~mbwMX!&}o_$sHJ8JA%VX+wSM1fYMdj42GlXa?eM|I=E@W}uaZsfN6 zn2`B+5b)B?N47L^TO}*M@6O}gp@HVTnvNPT5|7}ZyY?(hlw8Q`Oy02M;{P`R9D9OB zwJnk>ua7BCnHF#9eQh%(9RRLK9jbxvaP15f5u~=43#$6LnE{DUghMl-S%cbg`w#9T#8}EFoNWG~LTveX6QYSf zZFNs}FZ&MKT)eo&Gs4<+AlH<@(KOWiN0m9dliO|vqnzrH|3R;AT00x#JKrM*#X8tj zl^Ij9QWlo4L7?Yuz7$j5>B)~-sPGGDZR*CqAx#g55M2MPR0+R!ME7nO^vb4ona-kp zNhZ0A*1Q$PoRca9Fm;6c$LJD$(KxRaY4j_8IrN>bPF(3wTgeZB;AS+kpU#u zOHe2KsU7a~SmaHeRhm-_Lfq4K$mkMoT<;q)Po;c!kdps3_XS+a#JI*&xxtRACzrhTYl{XM0g*1= zZZyBu`dA`=_L$iv7&Mv;Cj6Rx6U7FN9DTDwhyJpr`3iU``tm#VJ>c)W^bw|P?-u>0+hu!BVgSCE ztNRUc9u4Rv;9RrHgwqAYcH(Pf08#*0~`48{(2JG>!vT1 z5_9B0k(y*=cG-y}aMVfS2b@Nj8n2-uGe-kHj{NFPIP4OsR`LB}o~&qR#0!?eka4+i zdYk{@P@0cygfPmA6FGWY%55ENEF;jUM)06zRJ<|k+@CZy3%om*#;-=Q5|f6W*RZRK z82P%%A!*jNUgzqNWwMt9y|S6OqrTk~tq=K={TOuq5R{B~pMPzvyGeepBrD-I4rJXQ zhC6=@G&MKw45u<;D(<5w!d*2S#3a-h2|)llWg&~}sp~p_?r#R9dRgWSflu$0!0@gl zF@69xBm4APg+A1I z)*43z{R4)pj~U2NKTe+h=i53CD&m8yy?3_&fe$eO|IkMdZdg<>nTW+{W~u`|JUXZG zasUc54VsutoSvfy<}jB>ds17FbkjNXuH&LC0XxSL^*FP}3b3l-P$E zQGiglGXG&+kaV3g^KRT?d^$Q` z)69q7Yx42wX8`1?5#q5z2jS%_Jf?^Xh*16K!Vuct=6OYp^Yi#M3T1FA(8uVG?W!Vw zF#Lq@o24UB+TS2Q{2hVt-92a}C&Aipq|YCq{J+A_KrWS^67+!^E0cNbghi=TC)p4nUX@tQUpzM^Cu@v`D(Dfv;00a1G!us1xl zd%&nOMP=W(f}oLtG@E>X{(Fc~QQL{0rS4i#osvpKt4^eJrT5~Zgc|%H|2(p;xkdqi zM4CF%<^l`54BOf0bF+QMwO+tuq;rWZp@q*Hky2MsAbKVdyt}37p>){~1ddgt52H3-09cm^Qa2dbh`b0Rr zB@#c@K&q~P3?y?KN7wz?-oMONLhAbsxev3hkzSaLCXr{d(LQOli&?7(Y->jNdR`Z6sd zzXy%O^-c$T(@{rO;bsaO-*+E6AH!S<<*Nfe>ZT2%0eS^cKGD-f?YFK) zEqO?3A;Xq^BfvzqH9{ROWJ2U!XJ||Sanp!XM3Qo5tYGiyiA6*PBx~OPmLmuVj|^z- zdRf`AG;}HpZI7E7^;h3}^^uJ^16OTF{ZbK?@j9ICEvfpvR_V6LtM|!QPKN{bujoI1Sw{9xf{DMjYYWfkTb9GP zX}+Fv=E8u|p8hYzu#6whz@DjpU5xUdP_^GP;K+7*wT_eJibIn9V9TLFO4XG%ro<1} z)FKHzVG|xM)!2b4mm|qwHCGp7T7*_KHMNK3V79P}YEKI0x^pl`BFlRe@Ne5M@a$iG z4tQa6%RQ~{%*CFNQV|kh+PPneQV%AJ7?=ZRNX^JMZaG@z;eR9y{yOv@JaYf6ayz49 zW-fs_bWNo10$p;bcOw9)?8NEjZ1cdvcCFP6%mDzHQ|R}%s? zGR^;}N8~b>X>O=F*Yzu$OsCLf6(vSKGp}K;icpIIoAx}|PIf%-KYMy|&~)8je(NE3 zPac1?5Pp4|&B{+8L4Y~Zne1hBb>!sOG_B~OLN-CS%V3QjXzAgl-QID>73~+{$VWy9 zf3fw-80+E?e>zgVsCv8XUMwRrAWrih9QJ(F6%|vraQG#(Ok$Dd&Np9zRW0M;l+@TH z*YbG7^YkPJ=(^1YW`RCO+L?k%vSt&uVJ)ogPtvQ z`zLdmv>O<{K7R%FLgJlb_E}1xWcz98P`+2iEdGZXV7ha}J;nDs&I?r(`{BBzECBhy z&whA>Hr@LT^%>Y-883c0Y3Ucc#A~Ylr6NwuxplCUCC;K1#rSKDiK>pZq6QAQf00Q^ zs&9~s!rz=vK@4akJtXtnCj@lR_9iUWA8@O&*o^N%HH8I~%K zxbBUGoDEYusVH`~uN3XSx%{yi9*L{KMaRm)f=OR5XF5;E=j78D4m=C#1#8#*WV@ni zugRbG?F{?sp|!ivy=}FJItb~5egVC7xc2|m=`GL=HY{S5WzSkDZ%v~NWx{)@B>_IY|sP7EQO>gLXsHoz&<8<8{Fu=<~Bt3y0W;FFBLG#9OBmjjJ;*6?p7@pAf`zV zpQspRsgK;UeEG%UZ@njAR}Qx>heWd0_0UXMgK?;`5z8vz2yk&*@(_Bmp*MWCy5o?o z=SLRTf5cn?mHzJ|o$2+VnEP$~Qa_0YPi)J)U5k89_m{#McEh-v=mA+sF)7uFDQ`kKL?NxUoQlpTgQ$Ph7IVZ4+ zE3w<+rvi~Q=$cteJ-F0t-S7R-<;|K^p!}5H;x7jEW!+w)RpFGcjGcec&ay;{FMmU1 zDfj;`>a@s!H^sN&pjF&C3er%tVV_N zoLkVa?VW=!y5e2~XhxaI&x39S3!awFq0r7kEnE4k>v@a(Ql-fxz(y^C)h#T8$6gu3 zcs!6@zaC&`a6H5+xId5#{mWls@T`$3qaaO|^xX07U6cBlUh}T)+&wo5j~LKBl^iD2 zmCOq#yh(y=be1yPA7D+G$U;~vdnR#Q4-4_W_zKTaz)SH6DYREaOu0DdGAvI4z_=1% z*$_ndeZ;m9hQbF#VbMC$vvyUlK(7db6}kq;r;@QpFi!x>On#cP0#t*ohx8Up5UiSM z;034tP0RUS?E+YG0L*n(kfO8PA%407-aHB5c@l7-UZb7H*Hc9!Kw$5XS5U%JT!k%3 zP)VQJ&9PQ#Dmg%D^}!i3w~eD9NSAa-H%z29N@6AY$-;XLa4UxLt+63{XP0*lh~EF_v8wm!~PE;T0y%6w{O;BH1o{ zy^m=>Oo^gWvssHT(_7}Bp(I`Xu)v!74HsRM5~5Fj;sWSM2cHfkiDA7g+|aV60KkT< zdJiEngs17*a34L=U7F_f=@wX_v=>LJ<&4hx2IikY={Q-|SYJhL2}k_{WMQ}N9Ph6w z>q7FdzsmpV+y)W-!OPQiJqN9>*ciZ216OlM1buV5aD5)wa@WI&?ln#+ORQ~-o z2ITtMymymQWR3dE0}sIH`T2XgP6-NnU3XT_ZgV367@ce?3H?A)3wI!>UO(A{}`ENpSnIB!~UYyCx*W z27x^5+>Za07R(yMN6%YisQaOQyF0kfKk1=lELH$Y7!rNlW*Rb=@vRysL&^aI84Dbq zP_Jl)SYvJ$$EoOyA)147GC@gZs(;?9j^)3VOkemez%*pZQt-#MFUrKyW|KxhT}G}l ze->Cs(xDxZ0Ay7m2`Bm8+jk3_?#ISMTtncV`^B=Um%E`rTZA=;-pLvjOPAsdBEhH?s-z1dENVpAa)z#Ti22jqGJ;+2?PgydG{abNsr^HMVA8=lCMRK><))zbC76xs07cIW~5l-|u8zQWy)I?E3J zm&pq1K_=L7n&)Aa#eSLtre0~mPNo)m*rw?5A~j=u45Q+J7^itJS!+?AT`htdD-Q8V zi*VkRW0IVvsTg~TL2f>+oNY50A4P~NxOD@42v$9XbEbDs}?>XGl;wq#ysE#6qd zwCbaOO8eNCY`z=dLW?gzgCS9*vg+-}>ZKv=cgY~R1d*&$CK(}4{> z9y@FLMk=Lvj<~Hp);g}pb8HWAn;9krKaI@rYj) zKx}}_iYB#ac%qaj@jYx>CDZ>AMv)yw;va(eDp1-g?WE$daalc4AE>F?p z!|Rz$LFy~Uvi#~oR&<3$5i0*~balt-DV$@NP~iya4E7t;kN>p3OBkqT3<6UhOZ_fKQcSZbxh?0q`C5`u!mf7zk(hp~))ez;|m?=ct=QeHw zTGEc_86uy{ib`Ra?RMkI#!M8UBJF+YeZIy#0I|#2HL#hqnIu#5N8LEimxrZip#jSIVyzV~ubNN)__V0l<7500ECpMmDK4@DYdvJHUIOUgPR=4k?xQSg1 zfssGd83ke0_kaEpPZ;^P^raxDxA!;|rz3LW04G!Kc;EJ^gOq+xT(ZzD`DFq+1~sQA=WDAL3|bcq>l*kk zpn~gafSDC4R?Q07TzwJ3k#28F!@Ssn|JCt}WBjC`t{X0Ji!9U#H#pkYs7puyHC&dd zfn4tI|25ksdY)HQo-;lL?mM%ISi589&!vARc#mbX!Z6$C#e*PGoAK zLvtSk?qvF%BNy1553|aC*4+~R<3CHD|3gse(B*#OKKht! zH&mJO{#M35@2z^bYW=aaV(|px0(!Kr|2Tg9RAR4ln64Kuo#(GL@<~==0J+<`y+}xs zwLe6zdXi8&6J{`^AY0eNfHz0~G`9K)ZI6z>Z6h1Vh9jBCW)iTIf!YL{33vXnc_VLN z#1DrBF@Fww{Q2(_H12LxTb!++X?fVLAH+;>3j#j#_!&-b0wBxXsJyBwh0Di8GXifs zLqsZB;g2zZ?$u=9VjIhb?Q>AYDo`QXb=G9P>nnzL@X*EN)^vrrug^`&D$aBXYZM(G z(I@j7y4!*0f_Rp@=KzdPA|7rm_7NbG+!@{d+$SokzRHX*d8=pH!X#-E6Sqszw1R|70lH|{1RhK`1%;g{aV&`+qq;V0WxwP(Pxczu@IUM{&$TV`q$uOI!$R@vfFZj z>52cY{Bc~IUSo67pZzvTsr$nPox)zs<=&KZ;~7+^bo1EJoYVcjQa*m!O-9%QhBNKg zw;kd=rV`P5_pftL_7lZTEpu8pClH3W=VceIAzD=WAA+QT?1QU|Hz;621lA#LaKS6# zY-@eHO{NCymccklKW`d{{qnnb;s3~?rEUZ8DJ>jXL01O&g>f$Op!s~SZ4wgL>hZpi z3}R*00*QCANkIGw1CDLHsQ$0i)l=fjX5p5cIzIP)}b=RNrUH_ODf{;Mnb3odQ{w?)?LP5 zzm!RBKcS#~0o_aBC6p0*gp4cY_e7>w0cpZ-%%R}Fi_O$h2c={uT)S6$aDtEg37nPa7m4=HV0F%93MxSkYcH-~yW z0r!0oLHuJ-AC&{2Ww2XZxx9)3b%~J+a=6o&VitL7G8lma`GNB$UhVNDzUlr4A&(v3 z3C2W)q9K6bp^KbpfVK2(F8;zlRdCWpYVo6x?$z#oP1ylgS)s~xc6bE` zPd?Hl^T)Imx4)jo!ci=1c&swCvI~1|EJb2ZPVfH)*aM0CbpBR+?_r60f@~-|M4MWd zig(3Ku8H2SEL?Hj*T9ZiA^)IFjdJCTJxoJMr%5fRHgDi7u+FJ9MGr{N9kZ?tU9?5; zwz=BL+l0ug)2n!aPLpdESiHtvU&*}KtCpAL@osiYs7(Ff6OR@pA;6|}?C;=~V29uy z`2KPPXycWn4`L@RaARlXF}@fxUA#P)Y|07bJ{6bszSZfBE+#~vhJAA_HGtCE5%z6& zAiyaF)yY;9if)qmgQn7g=JOB;I{op;0S8d)Dr&Qyc`J zCp>1S0tz>cBeq;8Jpx*kRN1x-?-v1Ow@mz9Nko=J>i%pOzDFq;F!@75NG2QC zc_Ux-DW$=dj!iY%K?)96b+cW7eIySRzP zDZdg8mRnoaESYK@7w4l~R9GapH6uoQ(_Mv4!a6lLakkISdy~8_keluR}a%XX!4$1=`YJiN}_Nh-RoK>YgBsuek=wRUQ|WkPN5Z9APcZX(l!8hw$5WPSFTV>Ra6mAyPC zr)M^j>aEzsA&Zbvs#?Q9Ve)bjr+B8e{%5MtXnxZJ`1eOWttQ1V>&RP50$WMeIr_{t zfmIYMvyT?qFZOGvIl|sb@O)#il6~&Rm1BcoHl?@08$GbEs2Ffr5qQnLvhKgjmjEg< zZNVaZYc%vIm3`VG$V!%M9CM+O<{2H*5FclWCFC1xh{fy{r?8%bZ${nJW-zO#iV4>1 zkDM!56+1geCO82iFVi}_ZZu#;8h3DcIHS7pV^#c7%?tiHS%rxWK zI`HnhV1XBJo+rz{n%m6u+tB!QW{0qHBIu+Q%4$Yq^#9|;b4itUEl_9Dl1a{$U|dLhUKc5Eu9;z74>BNDrnztq7JP10fU9@O_B6VJe=}c>OGqxHmve)u1knj4AXOzqRHW2=F0nLwJg}QXK0uBSb zoGXn_(vvLG_8vj3bKa#A_G+KMI+F>9)P^J}3R-!%vef+Nf(6O=a*nuf`n3?bb}Yuq zoUa~-U^8e4vYQ$R6bkDNGvMoD+w-EDExr){j5nq~S}@82&pO5bnS z!_U;)fi3vz7Z^X2LUf8DD~l&O#X+laVO|AKfj!flFd?fsu2xH_KWt2zEf{+aV|p<4 zC#d!*4bPFvWDIv|>i1bB;>dBII4{##s~KprJ(0hiJWd5Lgc*7N3h}18$~;dQ-&o~- zQ6y*tyhLVbsM5y2zLUQtkr29xvkJ_!8Pz(8`HnQ?VUzjMiV6JrJ3ZpPiNQ{PYFr46HYd8%1JNY}ulQ(Y&Yg`0QY3?_h*tTw`Zv%Nu!gk=@{MxgMc-P~r zG?}Ds)13(sVj#t*``g}QwK(~&E|A<`Q2!UA!sNi~5}PVPCyd(hFaVOF^~=)B8}gr# zjrZA&ZtMq@)*C?q4$icX1keXP3?fYFfo3}cWjEgE;)4cCq1Dw_a}$gs4BbfcqH!NJ zQ{k2bP~Fc^(a8onGhp;3xx=Z^FlHgq6E8g<&tp6vE(I9Ik$JcCjM_SJf=38~{a5XP zp#t_*)3&fjQoVSrcux(G32)S}}s;)LnblMOt*@mT$F_~Z7sdh}U9bU{8$KfD1E znA=l`-ksjTrtzfU3cMJFC0rn8WtylL?UknEDN#~0k9%`y+ZS>ubT9yautBCTO>lL) z1cRC$&mqmXb!6Qjg>;k(5c_j@WP8i)c9qQ9lfPr;t2-7U%aVKRh_P=&L#eLlxs8e;=Mu0Ni3m#Oml4N&wgWiLNf zRt}MwJEhUm2U{wcoazxbJ{bzh8+${vN_c*&Dlqz~=3bxY1pkP?Ugzt@S0`rNg&)7X zljnQRA$|%;+%-SgD4G;iy-&)Bu{L9~c6u#iY0KqW-C-eFT99>bLWkWgj&040QQS;C(V5auy8q8M|wV&%c_*R5RcJ04AF$aPVjuq_b zAVU16;C))8llr={xklcqCV4<7*Mqf7%hInYfdDZ6lF23mOe%E`pSIAG4?v%J{HW@B zHz<&oTkU(ad%oW z154@71VvJ z!)lf5x#3;J|1#o(+Z@gtR^jQ4B(;Beb1_WPrSwn?vu3JhE!`;Y&{;|??z%>@H<4^# zC*@`94oMp)x`Hju4O;D0mjdj^?9E&1%r}CV_dYx`Q~|b%ns6`xP!!XUrm6u31~}_) zmFu+cq4y|7u?d&?#sG~t%iJ3grD{*U^>_>=Qyn{2a#|uz=RI71a8?mU;ar)Uhx0w- zU9~*m!a)O#yxWx{#Nw{OD}g87sjt-k$xh+NwBYhhLGgVhkQcsV3O7I-&r^cA6elA= zV>NLkb2-&dI4lqrTtv-{LkNs7%_IhwM49nQw?_v|ixn0vlqA(3jf;z^)@P=IF1JO>UXk z;KIz&yw<;2%tOx?XR&wFpJHH4`k89e)^gHxV9Za}@xBvY>dm#`Xs2wp^ph8=y!bcQ zWOB5gR3LGA342TvNgo*_kC0c?L6pXn8vXxc79|$eMApQ_UUm4#CbrkydHl@_r}JAa z{Dgf691saV&xdhDe+Ra4d90pd<&h(AIYpXR)Sc=Bnd#lT$HrogOB7ySba?^c5ZE>R zIpfiauG-OeQ09g$L=5$`wl`wlTRVX8;Px?-^Xq|Fa{FDX5APHoyDH+Mv}*I#h&*o{ zM8of(H_tZ3Ph^9yu?gAsMmu8#jj6eq%9acN zoudZgS}CUbNfBO7iR7|mH^&R(h@Lm*PkG!(Xx^vxY-+g#y$Jc%h!y^fzD)3;>+9*z zqF5Oy-$6oJM0N9&J20unLk(8xfns8*^m%&uy>r=o6Vofn9fBaakTi2q$&8RkDNc8Ua1f|G9 zQ2PtBj|3^?5@-tbjkGunmZcJd7}4NdU!4`gzCrX4M1q*|_N$ z*5cR)^{!d}3=f!^NSx{B!-A(JOT9BAn#00gx3!}1YF@_)l^S6#&KRpk>qxv#z+B9q z=KOioOrH+@J1dYoGa=y^xyYmeA2Ngz!#xJv5XgKUl|RmqEt`|yQ-s!ft>Ljv(*`lz z1bDc*Wk{!fH^US}z>4&V_fZn>@yc3mqAsrDn6QZh^dlEesPe4^^t4;Jypty16V2h$ z<`l&t^jGUCjj7)FIoH;E1p$?sV9Ld#f)KwIvD2CbvuqRaaD!HCt-`^s_u~8);#d$y zt#i! z2vYA$jTMqahhCnMBJo*0phgqu_5%AY6hREu%6}IC1rPGki3*qiWZ@m=2y=a&K^*@{z$^$qNh8M^A)nSz{b12h82eAMgBuN3Hkf)hFk23 zg8wZlOQg`54))R@kg0Ho7W{aDe7QS1*Y^qJ1mDZNQZq8U=P$%o36|wS`cnM}3=~+3gK+$L96z82IhzDu{Jm z4TjK#;?tl>0w{~ajii%=7Hv!Rna?;mKCRKEslpzL&)bwvN}Npc9Mg~4`Wy3pNvptd zQ3mftM_oVli*n)4I@I@rNvsStKHHmgr-2`Niy% z(RwgW)ffF1wNC4?E zsj^ejW-ipKGb8+SumKq#xBK(Ae(BRL6?kB-9!Vm5gXl`yweS91L@6?%%82qeB})s&GyL>ZMbLK6xdG zjHle@aWW)EzrwU=TaSkre{}_Bb#6+VR+e?q@?VDWRtk0e=qp&qFE4|jxfz`u(N`7b z42F=kPL}AL4jl?zzF*aSeWg!mq4il+iGdw7kJEFaJvYm^bmzPadZ~o8&`EFRzTQR< z+g-r4NyOuM=yT=@Nl%d?TpuZ`$n2jjr&ly+zYNcO?6Sf zW?7=ucn2rkI{bdW;=3K8trS42^eq_#JAnV_3Bt4{FE1M^SdXC)5%sdl@m(FWX5s`>oYO1B7Db%)z%;WY4ANkF{6BTxvZmVvmslrxS}}c|&6PXovgNIRPX~ zKC)g(Mu5rHfQN3<715j+xV|r65?W^Zov1K>zU)sm`&Ij=GNHkVcBE5&-%<6Sv2z-~ zTB)Zyk1U+Z)PHnOwAVW2d;Qvdtj%(1y|XYb-lUGl_fCySw=>o6ij`n+<*N6%Q&Kd+ zvM6`B;ZE_OE0g~FwDqvY}zE^gbKsz-I&#u#JFCCLFVry!zpB1I32nrd|nAqJa zI)Y|3LGP|kZA;ZfRcbcucE7(J_a?YK%D=VPELKQqUJ{!{z)tP%#~GTMj86Id6C?g{ z#DA`wx?Eo+?mNB-c0%FB#z-KLliq9im4jVrTm8D_*?B85@KMh`eOxtyLu%Ah)Wy&u zmAyJvIH!0=d$77V#n|Q%rI~&Y{Z{8oYk8uZ{J(2Pgw|@MPRP639ce)Z35_A;P$5vz zdss)dTIn?0Xn(G*t+v}e#!OaA_-E^uZA?7yqp!tra*G-pw!gKyqs6obyNyjZPPn3x z`N{RO#S+d!%+|SjZnZ8OMgzJ-OA-09>jVP#cD8vDo69i? z&$-1r((!hQ*XWS7qI7hsB~&j^16+s_%EH~iPM{4cVE(my~Bg6WfH+iBB=(4S~ z{|<(@S3L77H_@^h$%HCs2^yXxcEl|dR1GDOTC{CiW& zS`>lyEveoJs2=zcd%>u?g}pA=Vlo}zd_XD;|S7J6}1QhohykCv{wo62EQGz|{|oe)!sE^Lv zEaRHYuIO`=A<|>$+;!69`o4(xcAy;Cyb7K)ECQ9$HOO;j*6Flvr zJq^5&E|8ClfFB3fUSNp3Dz!LMlj6dkS4G-Hjw?K6dHT336^2vbt1dFLg)wFlN>$q5 zz{0tr-fKkO#RT3v%qf2I*e#MiG58=bgxcoowD`yCzw?1|C2)dH_qz#sh&wiMSRj=p zw(D%=er@*>g>`Kv zYqk=(G;{N|ju?2a_4g<@IWLC}fih~cB!|`Lg^eU9hf`Wpa3$K?kat2rnxL}bCx7i_ zGUgIQ;}AchSTv)1V172`F|(|T+7TlIMmbK0fPTR)wKwcq1O<97y4)_<;kST4ll+wMwOJfv1}Et; z=ISfASN~Ss*hF4Lsbvr&nM#f?Y$#C8J}!)iR-+0A>RjwG9Cd2(uP zSH+r|bE3eH3s-aWuQFq-4mJF~v_z`(tjLD(V&y_AjdAza;z9&0AMh7z%^OJKBzv@i zYl$w^{)AW{6>Pz`3aslb-XcHSC_8>NBO+ z-pRt=>Ta2WwO%w(2EM9dX{61%)+)gG;~!@b6!znal_T^{yH-0F@U{4B=H>M};oI`* zl`~`Rq3zQ(ek?sR-87=8EYzx;w{xshjlW!yx2r6gqy?g}1a=LoConDT+LTxN(_wZH zD43VdacZ~QeidY+e%wDBDYREohLnI3hfUS-8(400&*uc{$4vy)ot>jOUT zF#6ev6gE z)%{uJKbG)ougfbar#S&{WPZ9)MmXF_cUCQ3?OE3;rgL0EWG|YAB2<2r=}FF4Uc*-BN>S8u)bysi z)mz3r$4!-nRfo{Wlsv`zZ4(mK28M^dn?_J>!}b#qI1N;azkc<7E=_kFXSTFr+^P0+ z3X51#75t^aLP6B8IQxGwZ%L%9fAN~`>GO&CrKu-A3h$*cow3`1e;JUj8AZrf5S}m8 zW#w4P$qSI9YvAM%xy~Hdvv~;(?`Jrxu{VlJeqLM?=BGs^ri-y7R)++)R+x=mVdh6+ z>pzf-MZ*!BG5!S?uhDO&J4#KBAU!V&O~t^jVcFMTn_x!`R20xQ3Cyt&=$o1O-9ZK0 zlOD^ig7NFX#ZUo>K^*bGIC*)|jCw?B@7G>Zebd2^-bUP+`98IQhRP)5;iqgh#%P?^+E~4 zfzNOxtk;9NIHx~tmeE&@R3s*^1tcnOuM15#Bu{KXTiiV3?!k7rN~n&cC>aWg=$u4* zJK59lgO7sCyz*yCoGNbF5)%k}?A6hqVg~I-Gm_=YWe7>2{(_y}d1U5$u-ZBKbQoita_8&kU27w5>BcGkJElA&Y}E*+w#IXvXGe~YNWyR# zYj|gA5uKCywy^3R9<`bYSAk}BmW_7<4ZK@ycD0|b=Kd<4-Pf$$`t?xVV!Pe$>i)C; z@W622l4b(S(;IA2O0iK^gLApMc$B+9I7@jGqovkwT!XNlwryav%ieticn1h%uXMmk z!}DpSgbL6ln!bttiv*L_`>nzwyhp;witaJHt2TMaSP;a=oDCGSf3DR1RWOV}JpZq; ze7AL+ho*w&rgU1*=rTBX-f65vrJgj5ca3g`KG3w@G;SFqO`Vzk(skr(uXz)0O&o(7 zlsJo?)I-3X5gun_22tB1v3ieAwy@_HGjI%Y>TdXiiSuv+}c^L82Rzg;lB+K2g?H=s;G5opetBc{4QGT`K_!x*4CrZv8ymR zGs}p3^Mz6zuW6|{6Ytr4p)d8h31Zfdd)p;0wT%vJ@<2Q|?J|J#dFKtyaTCx9WB$u> zYr4i1U>rHS8q?L>FCfC_+e@2D*r&?BsSkd(0OB)x&)u&evf@Hbw5`R!uw=i~`9u|* z7LiOXOc+PP`LDJC>10z(ue-9F4Il7nUJ&23_znuhH-K%r899JEzQ=cZgfz6mE#rx3 zq?x69+p2$VfbWMUVQ&RD1+cCUS_)vd&K1W5jmRGkXC`+eyuVeja*7!mu zaY#Z5+1;TEnW8AUMQhXnXU!AJ?d4a^YSSxOT9O_zWzodcH5c>*NObLfuAFtDP`*_* zd$Wz@CLt%ib5Ea+v6H}G9~yUb!86oi zxCWmyluP$rZ@{A${HWGr8)wnK?4g63ywPQ$0ox>l*!*u;!lS%H6bwK5%7uCFmzWq+ zXB>HqR?TgbhYkqI?m4swp}q`vo7Hrb8xu;IGF3^UaYZ;*@h^9OHu(@DAa7Y#)mIE9 zZt*=`>gW;3d3G~c=<>*n&N=>~-FME2R>oE*E`IvEj71vej5zyUBFYN)U(Pt2iyOl| z-F&Xh*)wCI-Bt3xm{W#dNUxmpbiR!tgdXfZCnu$^h~QI+Gms|+=wMHXS#2+I~WSXyoWO7k6!EEn3Ug~S6>Yq zZD+KRJ0C;(ssFsI6BiIW>Iq2>H$r4;I18RP**z0{7JoJg233R^i6RyGGZvKtYt$RP z(VABYAJuuNE$yey&ezRHvZCb0)IZ=~aT5#ps&zL=R%9sfafE~-ZTe=u!jHRX1I?*a z9Efnmm*Z_tmpxSlQ?w1I+i9W3Kq>y@-J#Dl6?WLZlpIk%i(N%D>Z`PMNdJ4Fa+##A zjpjf=o(Qia^au6lAPdC3fI{zQEPlE{N3fhP_l_8UdoLV5HA=u%feMQ_y!r~*OqX`q zhJy|d_J*%Dun=cm25Dl5O^0dWCv`ZcgPmd)_J)JGcI;$6mM0$mw&n+3jX|v+BEEZs zb)o4a>H}m{ij(Oy{Ctwcf2XF$g4B}zV?Go5cN$Dg@>XgAgO1LA9)#aN{~ABCmF(;? zkd**0ybm&WW5Iv@J%R)jcK(iftL-hU`f{f8lg{3+-bhr_P1q^U^RGwcHUnKT5%osd zHX{<>$XseEj%=kTF3vuFvHhJwR|RQg%8~RO2Q?%lys2UDZ%FT>>A~e<-s#-XTIr_* zp;9Y{@&XdG&tu6*t#Qg`B5z=Jr`!$x^m}qt`V_~>nD{p`dRHb?s`4fdrq-V{NeM)#g5m_h(wN%qq`lmw~7pQz|1xR4> zofGY22kAkCLWvh1!g1>v%FGJ#T(ezaONAt3H0ROrECRqBoj6i#eZ`3wM)Z zc1?ftE>{EU6D7JWPb|-(dH`p#!qWck8<@vndcQtw+IeLj6;8`bkft6h)D3c|_DYO5 zo~KSzuhmno4)>-7{cD=jMXMsux&~`-I+EmPoa<*bMOb(2nB9=_NhEvpzXRKVJ~e*? z77KE?=g{XZMd`PdhZ#z2N3RUd%u)db<-12Z?F)|Qel*y|=tz(C8KA-tXg@uGSg0GO zIkZ2eNzr-r(selY`jYh6TK$A~@89@U<*x_03H@g>UgC%YrB!PBKXfAeHX1iUL*TDV zf4J9|U07JGm(OklXk9r(!|h33jeptC{l?l{)Gsbj3zo+_V!i01u5<3S5@X4r(&!#)elrIJwVesf5Ngq{WO~L<8;1kT~^!-mUjJe+0X6 zh!R`pto^MJ^7h-p`~GXUX^%;Ps$FpxvUW+!A`RI$cAK_#nWOnCe$0LMQT-oX#IL%QY9o~%KbKiXV0^h7GUR^s zZ%y@ptml~!g7VE*20k4{(=8={YBzyJuWqW0Ag{FmP09ZIMPUOG{i)ITM1Kha*tT*#gzNH5(!}jF%cb zC_T$1r+F(Vv02?R0r{a<7xYV5oDUV6I8{XAbJM7&h5U9>vYX+dY*3bSYK-VEIL$rm z)!kTCp3O|k)GpB%b(g`eV42&5i1Mv@5Nbv2vlLBNMmw?BX+cA39L)$5ZmCc=)pUy3 z)5#M;JawinVx&waF*W+AY>_|9O}slT%u70ds`6gBAV0+UV~S(_X?-yc#9H+kobn%m zYH&3!?6$*D3MCu^23v(TY2yp0=oUwC+HM^L+h7xQ_{Ip5^_vcqbOSGQYjD5hyDBepKY2P8m# zJT-Iu?rzenbxo2uF5_^s+(odVR;YA?exj?^UrritjSj29we|}UMw9j&=IRr9 z!%n0oi0L;f$8zj>9p~MISou-mA8A33n9{4E=ihGoGMI~*hUvp~o7^mY0Xfm4}65O1~`RP#tM`vt8NPwA3 z2HR2_=OgpP5ZttgifmdEUNf-VIChK$mLO|3E!r+Pi_z#{J+@vm2z+_%^rI#+;#H{W z-_1+cm5umZ_}DO542W31HHdB~jc%xa1XW~1hhdSlrhR?X%G*4m2% z;Ng)GPf35T$3RXgMw9y+ge25IR^_ee8Xl?~&X9F%YS~_dTqg;+`u!oS2Pl(SzJDr9 zs)h={9+#*n~|;@9oAPfN1aqcX-*FJLF_5W+iw?#*5TV7ucW?{{*1WN zy6Tc%>=DQ}{1kQM<`97A${95a>z_d4cbvwOcOmc}#s#fv*{#h=SkzOUE{>7Y;ksJ^ znCaDd7aM^%p1wx>gv=kWWNHW$=$+e-Fvp}xAZg_U))8%VHS&$6>u=00S2jdV>@zwF z3O!-7-!@JDNrEFzdfnX++A?5D{)X9h-9sbHpkDi3hFrs?=Agu^QLnCbXq=_luelp` zNzBxv7p&N-wj&~=I^vx0Jf=7SGDU17*!7Z|rMJ(~p~6VKVyD+D;9uY+arN1~-=LXQ z+RwFl&Irn$_C_?z>hN}*;(jN<4t6lK=)8ISlR~J3{}Xu{e}jR&>Bk4Sxp&pubPGQR z)mw|98BGW|RD*N;Dl9U_>E=Rsoo-K9R+O+|EV5UuT$B@m)N~Y<=;dmBB+IV>^oV|w z%Ul769hKS9#3R2yj9X@`%2>9WCiPCnf~=BD$#;e712dMnU)PAh^))`vvoZ9Qt9?ix ztqM|c0#{#02|0nkUBs4jZ)zFtg_ytut6K(sf^p9co7@!jrB{huMJunzXgEGF+AKX2 zQDULz?@~)Td+6u$reX=;s=i4>UwpYbCwh?mg~a~?iCLhK32=l;aB@D|?Bke4xzuiJ zno|gYIlRhsY6)-8e>d1NF?#*+<4x0ePmfGXNTT1QW}rJ+C`Z3egsDID(RlE5s!0$} zn)5xkCU^EPw?#3gpW6LH4)CV6d8o$?{x*9CH6N9m+kZC%fN!MA!Hb)`2w)guSikxu zq83C%m=TWlRp^&8v~LKkh+g)X*9i%EZOTZET>B-9Nor`>N+g1f(-Yrg_hNIc?b@7; z<$*#{7U$pXxc%oxDSwyS!;cYECmwCVL5*im0rTq|=2x01q+X510vYs4#eeYMkIba(Z5@9DQZ>_DP_^T;1jO*E6~JR0v9!U*{vA z{uGe2xMsn&8qQC`>-h#kv?XJ&F4w(+u^!2AJPTl;4_2{?_;lGtK*N!K{IrCwZa;#i zQ83=CUTA)S=a#Hjjg-5#SrslkPJM^W-RjNx_`^zlEoYN+Rj_WrLlW!fP01y% z_VD)Lvjfiht94U#SHTEe6T-lOig5A|YxQPACd}ZwaLF@YqY4`ErO+G7WCnp_g#Hu= z86b1d_`Z0BfX3F`KlrCa{H9%?yh4~z_=$hwtJ3LNs$In6h#{Ocvl}znHGKN8zgs{5 zuG2an!M=18iV?H0L>ZHIQ?2%HU}lAFP2Rez%xCjI+tQO}Jc~e|uJv)G!-Xo4BxxNK z<-BIppU&xFV($H!skVZ0`D=(=+uGkg>mPm&eR~ztvU4-F{z z2qO$y!Oluxc{y=mHW$phHH(U59N$b98m4Jb%{ZUFwQHMbe{O9dQFKqZDDd|Jw@gN1 ziP6HXUtuq~nz9_hS#{mN*{~9Ga*)K)8TOH!`$O-wmHK|$q{N!ZQuHwET<~WNol236 zY_>IgT_Av|K(TWY-V#eS<#Jn2Kb+%(rdmkWeGXcSu0=Y@AFMAo$NwVtkQG6y??Y~% z#V35jv{rHCY&`d8&i?j{K7dgj!Wnt>@j0QjfFbR#TMN+47|e#D#rJcBhK}N=ni@Z)Z;B$4(n-a z<=({UZC#f5mn0L9@qNyU6@rxlJCy<*Z!)`tL;W@SyM|3 zWRN8`%*r+fVq4fJT7jxI9V~X!^Qg*@ZKsztgxfL4T8M&de(NXJeh1Y$zhH5yDd5zu zjUyt04`2Z)k2V!XFY6bMmK#%%v-3Iff4w_LFeKlgE4JH(rvt#=9Y%-EB--|A!=cqO zGOcc9jrff4i04sd2hmEqv!6M|JRLj2t*O6(6mA@-K=$=H4G(!iqj+Lfjzha_sjn*8 zJscHiNQl01kv@V1=Gaebt~ms~AU{ynW4R4nQK^wv$+V# za@mhLDtB))a}qTT6kBQ8B8az#8u_rkFN*?14mf{soj%Fu<^Jxh3Gwa2_{W)#1cYTPw@=_quFG9cR*@nM^}i zH^9Af&S9T)bUhpO!sTh||EAD+rWwN{uIi4y7~gK_5&stRTVky7chih?f=R78gf`mE zGSj5c;%>#R`gfnVT`~7y=lNRgW!LN{2min-#lWOgp{WgA z%MPG2XO}%WybYU0+)up{pT|MJMTQ*g4SvWWRCJ%8lsG3xdrnS<>3^s%$B8;6xT+Ky z8-VDd>%uGSXoLZkv-BDJ(%uSKWk&v_X!sJf_~df`YS41$RTGL^?7MnP@+_*s!PeU@ z6}r&R6-vUOPKJJAPbbM*yZ^vbDKNj6Bs7{_>z-|4;NkSqjXyS}s7&2m^q{Lix^=TW zqaE|*0PC7y_-=Z1Pj=gaplI~bs>cuae#jo_=;S6*B(KKl=$D1!C#0m1(W2uY(*|)u zmFb3yp4W>fNw&00%h~13Nk5S|#D~kSYW@-FK<5shPqgeSFhEO*SQu{6ITHU=WlNiG zByD20<|}iMPJ;C#+$w}nNvP$BGOx)lgWF{$`NaU=Q5j33-ij?RJUO}AS8pl=Z?1jb2?KPHT@rAU0E`u_i`TBE2f zVy_xiRMlS9#ww+yt-V`OGqw^`%`|4IQ9$jOD4l=2stdr0l+b23fZ5%@)xR#(^C?E8_ zw{cVHniCgW9VKP@F%d~tLEL<`c1@`UVcR9Ov7Svc6+6~%IO@g67h&=vKE-{uAwQyU zNeNX-l8gH9m^76hNh#V|B|W=0@kYTB?;&1UA2(7P{ncd+WH5L>G7kT^p_TnhZYC>Q zN)Zh(twF6ORYGlFyyE3xxE{kSo&7ek`nJHcEp#yXa^ntd@!|+ z;3%8$N!6N^MZKum&SDPTnBol9dCDf$TX-LX271vkUlc+Z12derYW&f%0SnxL4tH+m z9~C&L${H%YZ=rS;iM6D zC-t)RCH>L|$0sDFMU=T-nc%WT(x+xc4@SK}x+*hwhNKdE212hx3*Y1EviBmkWQ|MU zt5hzC72>;wCJwg~`YUbauxG%C*iz19nG5$&pATAbxEdPXrN3Ur#Pqbgb|$*}6H)${ zY(+e$!cx;}D6MAU+IsgSRR6GnBOTq+_S6C+X+pkka0}Ju3$$nO-3+R;D3E&0>w$+@ zr9opR67$;(5h9SOL*=xh3H=5t>>G=t1z0$zGCw3S}e zVh}HhH(~yO(D-PMEw%P&X&0oA5NeV&WS;=Ne@nbWKWp00bWp5XDWdyieOr*mvZsEG z=h3uMz1MzG$A*mMLIe&)!rcshQ`h3VA&WY6oc7M^OF=X_bsb%1SC5yud&r($4!g%L zJ7jZO_@s#PR&7iFhKfn~#TWHJ0KnKEzket}^>{PUblO)z5DJ3|x zo1HX>xNK2lr@D?2jit)?ABd9RtTQwVa0 z6PK)0FR6uZbfmuFj(HIxAU02Lk{Kw?xCEWd$cD-UkKGi)N%yx1D z6V&={hp(#ztvyD-Fz-BIB3r?HZazL;3i|RJTX+#jOel;;%^+zL*q(Nu-puxN-r*Nl z-JGifJmQLf!Dm+P+QtU!4h3v_4r_D;Q)cB*%H$6vaI}nben-^`okFB7f@hySN1W|K z9E%>>6Hf7(PE_G<#KRrs0SnO04J2;%x*}vgQBo3XgU$_XWfZ+)7ZcQKb9lslaGXaP zjVxL<8tIHPzAA~fx--UO)D7ZNBbzF*bBK4IvBn?Vlx+JOGvFTl!;XuYBoDfR%(o{8 zw%ehsZ>|z+%*3a8%U`rMEiIP1X*5#&i$c~t7Z(uTeQbt`xBkfhIOBqf!cl<}&o^aU zdRfJNoJ;$7x9b`b43>%U(D08Q@$pj2UsCS0``I)W6BQYuBsy*c~@+ zGHD8#S}zvBuZKQjwos7+UrN9Io!O(t{j-BBqu|4h_Y(7=cL$$ln?e7GUAsu+E?siZ zEV=krJt2-fB@iD`JiIq~;ju?oRz%aTa=ziw{rRcbht%>ChO7MO-6UhoIcKithnN7_ z)4CV%O){g$y!{8k-|xL_9Tou+W^%JAK?f4Y%01?(#8^#Z)nuQMr}D8T=EKR^mv`Jj zS7#fNpVnJma=S{UR7T?&?GKhq3uymqi!v9AHM}ibk9sT;(Zl#hpM|!BT17fl<;*R4 zS{1*FObL6~RoO=6YkL%=ppxEN{t|5T{s%E&M(q|sgkOMvjLg7xmzwWRk9O`(bF3 z8}XruxMNxJFFCkl-J2@!R?*eRajuiv_;=Yj38C(A4jNu|IlWUz(=+GR+1Dz$Z$V~|Iwc?Kb~GvVpM2H;83 z@4(orW~A%3laZ_jMoQls-8B~6i%Wg@Wv4<*GMS;M`eu2f$MBDbT2?!Kwnz)?^Q{JG zRxP!Xp7)mPBC@`eyV&xLc+e}i^j~64@@F^GL9I$_#|p!5OD?XEP~y<7%Go8OXnuh^ z$Gvqv($?Nv2nU3_EZt1V(ze8xvjI5z6{$@w*}L^sRG#WPJGR}TzQSjm2K)@giAuuI z>hYnZ#zW(78O@|6-lEt}T?%XaZL&I;2M>NgE>cf+*ew3hAc-wpaN$?`HWezH>ciJ6 z3(&+j>Q~_gk$YE+pA~@cjWIW`umRnEOB9b!6#F%wG^B*{)5k~2EHnvQKbyf8PH~3&{~}=NZR{wx523w zr|03m`wrM|Eifx?Tmt5*jqZ^rBT(L>3gKc6ZvM-!1;zcvI6mF=SN38 zj|O5Z0wtW2uO4?wDlPKf`P!%UZJ|cJf)yHIi6(1sT`U)Ra?@YT@!(5u+{4(ew{o98 zlcIal(dJe(%$7%vpPik)c1)g32bw?bx57}sud8Afh{k7dikuf-ZqUX*+)_&-n>*UX z_BZ>teh_j9y{WP$oOn(=6Le{FF%|-kyyAUzi3>Jv-qGEhb-+L+rTEOvb17Y&d+TdW zX<%^EUp7#39QnRlh_2CcdvkeF$7uM${jB5GMfyN(Baow;5a?KezkJvHn8iQqK?**5*{Y7J;G@1**@*A6%U7aXna?kb zp3|R2*usTD;Utk!_yLtpq6Mv^^p)J7wmk7kmkI?682ypOQ1ds-PYO=UQqLbjipB7g zjI`n!XRSI@u};r-B^om$pCG%a)Zfa@^odc+p$0ynd~0Aaq&ykt%t@nw?f2m2)`!-+ z@3c&TRnfbC%EV)3=V|4)fzjwIX)9HG26}OZ&^je%65}j>x!q|bBGJ2#oaoWP_@K0< zKSpkSul=I7y*cc5iX2){EN2vEN5RN(O?L&1tv()Kyo`CeRA1UduBd1VZxL9)ZD7WO zV`ndadh!OE=DVRhY6(;h~}Jc*UJl z=@CY})oe%lX;1kq{zFChN046xa%-?nCU?HOJn3-r$iJYLy3u`bltJZ?f2Ucnm)@xF zmn12h^uX@pPsnw8)Xn)E@H!oZm}WdP=buH%%=tFa7b{2I{zZZtm|UX9HnKEu_Q7h2 zj-UzYwWZI?=7xj^P>7Y(60o}Elrt))C7#8Yed$X{4_SYu7jfjsYh5U7Ev{hz>C6oN zuCQ;j-T$!nfKV%O;y}6+#wM0Ox6VnDfWchkXEwxpXfb^Z)Kfc_;1>xM$Z*BG3UucyJMl&V2D_+Wep&WQi z_@MO{(hvK5L8pg7$Qo6|>gK*UpYt7`v>rHCjWR{=^l1!#yUY2bZ~V_jtmsKlP=X8w zyd(!z+rQABHV<+4L}op#a{YvI8h!r(#CA~85> z8Bm}{Z3waUaN1DyOGViq&<3b0YgtpF{Xgq4Grr)gG)gI|UFIs#y#2SOf8tzQ=3n5}oE&q=RP-eulII3*`y2$rKQ}%Z&Z61U z9;n>UyTVE3e4z8rx8mLp?$mOlH$9R3Mr)ijC#vk#&Pr{ys!BbIA<4yKD)XQiKLPA< z?CbfpT3|%7@Idv2xfL-x`9f;2C5E*8*oE?SRSG;2MF!@KzZ>-7z)HgacV%|k%;`U>mp;Z)R*Y@=OqwB?=zUIec=6GU*`OaxLmko49!e%X%1@PPzGAovtghH6 z6N@(u-~48@3aU@SzbRb&Ug&vp8UEpswFL9Yg)*-$vYz@r-xHx!<9gI&<0Ctln$JF- ztI>lU+m>-0{yT1Vu^xuOfu6k1vBJ6XHMzn>Na965U-vkuB*B)d2)znVNiGkb*Ed974I z3=4y>Y23Q;GhDfr4Ze%7n!VeyYQ1Vbf8OpZfTJLPx#G3olKLr$ik(B8hHVxZ`5Qv+ zznt1o4^XwkjVfUWF7aaZbbWOU02PEWRXn>DrYCdeVAN!YCBN%VfNgTiSa|dy3$yku z{>&sHl9IO1T2=3vfTbYAe^krH6hm;g5K~6QC5b1Cy;|ah&c^M%6TII+k17>6B9g;R zZg4a~F2zLGZ_rPkFkKV#L5~MseTK?c)2+Du=nf6Kk~fr7VH^Wn$X0)Tw`RAm#ElVl zP2)vpQiED^*P}Pnk04gR5v5RT+(=`PtrhS$b1*(*MrXFwaj<+}R?+-Rq}J69uq2BO z?!ChovBUFQQF-7Wu+SAqyotLF#egfF)=-=e+N5cvmDSxNoAw!nSa&UlN6tD#tIxJ? ziZ4V5`_XT~eo*#h`*GBTPn>0ey&?N@-GvIVX_X8|N_Kz!k-Fbx7S%`gFC41kR9M26 z8EwI3FnTC!+q*td1-ln3$A|F{195+|py?xm)%klp&PqFU-nXmURC3oA|g zXoy>;AltC&3%uTVM##QF;W{#F-gImK)R~w+=__2jha<n*uMoznIYJv3zI( znM_0`{5b6XBMS4(m`|;;56*KZyo=<~5&lAqSfYF%wQ{LaFh&lTYcUY(9>0~g$MewD zFJCd+3uRtO7l)h6mX7QkF_b0xBnpLf9*6|b_O>ziRme4Rm?icRHr*HAA6cZyrS4#(PeCY28f7T>d>tA4rt6YnVPb?@Ubc2)B z?>u(Y&M_6bdpR}rIwmw@EYcyrb9RGAirzOPeWdt^_9Yf&HdIL?DPgj1Wf5| z6|MDGVp+7L$&$zSoxa=>ZM8K{yAR^}V{JUo$n=9uW>#aP;$NOQ_SXqmO!1$sDXQBHEUi*%|Cig;r zZQOh~t>FA?$Vd7qLtvS|4G86DS=FaqSUWRbbWt(d0)t>Vbia!Wk}Br8|3qK(j6&^2 zl~>!70NLr0+vw48^xzI@-)Pp<+`&P9n)W-I=E+V+;g#NtSMKQKR|KHH1N%fOF>#!{ zR^3vpEO>6lib0HVRr-=y<8^VO;+K8juU%qaQme{-c->(Zr9-K7qn(5SjtSQ>wm&gAZ65j zG4kB#3Jpn&U`M2THW?8#h-e)tfL@^kz3`dC961841Bs!a086*sQllY%i$CmIT&JV& zV{h%`+sctq?8EOGWPrs-ZvxEdR**2p4uz99Dy7S#Avg5%5Vz^sErYpWoBv})_FGgHg&(GY*f9G4>L`;edut+xYwx_10UgftL^Zri_Lr8*Q-2NsQ^ zw3=#N(HUyC%@c60*2#*vbPZfWoPEOF(wN++VhB_%5bfe0m#8krK^fUEQ_b{DYo6XL zF5;?PMwtMqq%^Q7jY}x$QF&6y<@cd4Lr>XJx1HL8CW1jMo@4OO3&4atw2>4oN1p+$ z$Rz|8uHX4cc+55}0TYi=uX7^$i0flV?j9FN#Z?D%vEeW$QA;#E+IG2Z0%& z)Vq{z(CN1xulaJ?cV8ywdydnUW_pUB5tX8$pD3*_KIEwqmiRWe#;eBR@~myy2Uq*D<-O5jRui9CVq%J5_!uuH{#mjRP8ikJr6g$}h z)ixGV<4;+|mk~ChAFh01y`|5hT*hJTQ4<>3AbsOuQ0_Q9+FubqQBj|ys2o<|8P-Zw z%1{y}@{xw;5`Pk|upo9t?uQMy&zoR8iq8nrtITb-{=C35m{1znX(dw|<6?jl&=2>j zM1#w!)&J6Nq{m2#aY)=yvYP8;q6K#{0|(Yf(x=Hd|0K<5ibc(j#W=-q$FdLfY& zN0xp9pDzLx<}^6xcu%_EnT;VH#>2y2?SS|wH$71XCYv^w%*%`nl~SCKLb)7Mv1sY} znQ45Sa6J|cwYM#|--*3XVhE*uOS5zCQ=2xEeerOH%GwYTTGwr%KaYIybK9)$L$e=4 zibPz`s|o4TFD_edm4Eg(T*7<7kZxvR7VOtSE;y(V7I&?<79~|FubTt4Y8hwIOqJW- zZ3Ew#8c37beja)fg zQL^=Fy}v3#bd8{_R)3`>z1LeKiQgH4t=?j`fpVJ$Ta*yQhWP>%3Dtkr*l8&Xd<|Gt5;47lADP0{JDZO z%+h(+q3BG(I~P=yArM@gm((p2ADtVuo+D70X>`C#T@Ijq^@J}Yz4p=OhpvJ@Nw=#G zAM3W*FBy?b<3=XQth~Hn&ZpHQ`%i`s7o#5WuRf1&GCF{)Sa??KYEQdwfYWL@RUxXr}3W2>9~# zAzsp}2Pz2YizP;)PD3Vo9B5n*Wf}*!IJ`9&YPc)pW53-A!V72wL{F^R*oDU4z46D! zocw-2>39dZKYE#d;-yx19U+R+TVlN~rpU$JEZ|9T1^+T#ks+=^jxSXbJ`L%q2w%qB z&A0#>svK+mMdy?!yBezd_kIJp!K=H9X{xGvcgb57G?Y3-I*w^bhm@6!{Hc$o74no= z=7hkkciSzi>BB5Z%1wKM4bI|xs}fBqepr<0mO7YkyWv4V!$53%{eP(&PbQg>No3xM$W_)@Wvd zOfm3iQDF#5Y;8{pzKcy;$Cr$0fc^K4t>CYS^sf@Pff*kvl}C19?8(4pDge* zyoX`IH1e5_V`X1SU#^FAlD8e-IVtFb<4gtp3^a6*-4WQ>U09ph5gX0plyNY?YBbla zO3welycz9+$T6JPzM}hH`d+F4%cmc%lJ1*?{T5*>cLq(c9xLwVEd~N|c#U!3`)grk z$aOJSctj%yKdxIp2QaU35#8PX*VGT5L6`H92pq=#9=f);w1w^1t&%#?=vsd7%PExC7m{H;gmWJ#7# z5uq@^JPn`aN6uO4Gj=~$?71W=ASe6eo%{_pXso`81&4 z;o!Ta{&A5mgB5?n{_uOLx|z*wdySFWboX1yh@7IDnm$omD^EsP5}WlVcIwqpUw;sJz(XT$7#XF%pXRtc!*>We zn<}2(PwoK8bqHByd73e{*rBDwgFW!ckM;VOnhhYRZHuW?EdyvyDRzzrWa-w##c{BX5e~rsqsIUN9Ov5rTM`%5 zXO-ovb?A={Pew+Bcg++wXlypkWN_yBf1Z5^E=L7=`xT(19%agZu?K$+Zwt)linWx2 zT&>xH_3qt(Z)R=@e9;wc(Dj`3C7f9sCjG4qw=>ubS+ooPz;9vAHRNsoiIR07(<2POe$D@tFka%6U{z&3d>{^wdyArVF z&Kz&t_qA2~!;8$`50fbaV`WUzdJ1;ql$z)Q6Z}sIEp{z!JJW3n>n}+*)`pDw;f!OS zu-GJEuQfllt4DY8S;gMi)JPk1n@xf0+FE2o|3(+j#Cz2x)g3ps#H;Wh6V9Ml~GMDY!D$dokdoQF4CqvFp>+(ljxEVJ#tg`ixa|@upW6RGO2=cv)KUJCWB=>_>01CeCV4}U5 zb=n}|t^a9&RW2=F*3oR|!~P5LZ9D$^2aDOiylk}%fUfQm&5wI&u`QcEYXGTA7~GTB&Wl~WZ#nN;vOtwJ0_vTeGRqKb5p&<} zcJMbN>+xAtBRNL0fVzF^8BN%*^jU_d@2&K5j7^LSJSO5^bS-sd{g}0TX{g85N_kWw z?RSKnf}L_@2WZrKt~-4yh8pfZ*mlxDUI`BD7v~9&Bh#K81P6lPHuur%77j=At+@v{ zP(_M|#0t>@ttL;D}hAma(yr~YaJ3;&Rdq7^qcFP?E3 zpVpk&MoxCjKbug1j)B%R0*DVLDZkg*NROd<2|!5VF@Qw<)FJq&iWlez={ViNCcje7 zhSe}hlB4 zr#AAjQ?pNHSsty=WC3gI-P6kBiSqs`Fbmus<=>|it5@Z#dP4h`#@Y}OX(X7?M7dM*{u}gJWFNfC4YSJK6$K)+7t`TE`1BBS zV_$n(9Pv0shb)pCH<4RZObgmx1{}B%#t{y$&O?somekN@kSdUbSX)iylIRDy)6e|GIeq&4nx zB}6f%m@5%flk3Qr1~UOi#gzzFDRtxPJG=T*Ow3-M^`=}7ZFuxXn z+D>b3u3wO0wCN3SrwNH^R}@N^Y>EI90MK?jZLVf01jwd)Z*J~bfPqL9CV90A3wx7J zQ)2$+Cj-?;Z1Z2+BrAN1IF%APdk~~@5_^8_5BcdQ!YReSwCf2d>^__%r$>bA0%XyBBkajz@v`lW=-tzigHzQ4#BA3+XR~!TqcqU=*1?xFS0a>5B zcki|a5{W7UU4#01dU|9}cyD{!vXY>nAR*hE9b{TSi~_DLObrmCKqr8O1(gK$qW+TA+&aLGC zvlFKZ`xkxxD&^X2`!73PU8JqrowrHhB9zMi@Qc`2oiY9AffJ^?<-nC~sq8&~ZyPK70h3pSq!nsPfF?r zmrouvC<%Z&0W9YtWnzG8^FOm*vsI#t_x`^jY8d4^_4NM?K{0()3r_#J7o-A@uHzd9 zUK=XliL?@lYm3B>zOu=jfFlH1?{e*vNLMyWkuD)1N#U*Q8hrJ?I+I>CaK{;UwBK?3 z2M^z>C^eLK?<1#xJ_i7(>GhUyUSairfaJ)YtlRbVoO<#9ybdL2MU$JF|5vhsh-Ld7 z9*dOt?F|4p-EKQJIcEb=B2s_{fqrdAx=N=0ub{@NV9zP1sh?5_Rm{|CSr BoKOG& diff --git a/firstapp/source/images/jclouds/screenshot_maven_layout.png b/firstapp/source/images/jclouds/screenshot_maven_layout.png deleted file mode 100644 index b1e691b3b6621aba56016151a5ef2cb0ce1fe423..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24017 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ℜ|H#Dd6Wo91pZY7E(<|2 z0Wvw(qM++M{#d_$eKG4?-SJ0$VkR0UJ*FV0E9N^F=g|bWAWKdc6vg@ICf^stNJqZM zALcL$AX&u;Bd&?IHj;*Sc+(<0K~dklV_IOu-H#x)P7r+lzrC}Ksj`g2_{DkQ@Dgz3 zsK`qkh4nJ5&`nrPJ_xfZ%jVXSXl>b612=8jaH~ER-F z&4gldimUSU>bON`vSGKB=JYg#t`8u@dy~>)w8<1VGsXzv8ns8{rLyhjSnsagist%d z7^f$yQ!XmmKDM8oAEYpJQ}~n_u<4%j;#k13z#Lm(Mt~F;1wn~1iiH#$lM41s;AqCo zdJXhQIlapX6dMfq#3MVecX^Xyk2$OY`fOikrs(`&&Z+RfNPNIPLvncUl64FX^<23P(?Thh+~Ipd?Rg(yf%jznC`EN~A=Lr)nQ| z-W&@!7MKGIOdF8$7^PkZgF#eORAA8}Yjg1#gV7#jDj^}b83qY@y#1zRASuU<8Eacm z`iHzfr$YvYHbrB+UP`!x9V?vCCZ|EHYWiEUp{n4bGaa2cR#t-Q%5v^jmjzFJ6z%)> zqhNe3!oPfvclW)+&71`AzXDP%DCwT(M2a8vkF7^XS2K3M@C*iiYQP8}zWo2b%IxS$%X416Nh%c-(ZgXf7 zM}i}dD-1~Tivgp`@t2nwsOot?Cd)F!2oKuiWbT$p(`Da$)KpjE40p5JvZ)8Vs7P;I zwGPkLeS;5=evHP>Hl%Tb`BgO!A=+__9vrV>r^HDk>ae4B^N3B1qqwRLyIMxD`|ZQ{ z=#3Tz4EgZD+BLX+emBlueHvz4TRkB7rJa{dNJ(sGRlXeh)6gcB>chdDMW4^D!J&L~+9U2>V9$Ynv&HT*j^ z6sKch&TaI#rtYgW)N^!?n2(O4=9i-X9`PDf&56#W-3Av7L^HzNm2mK5Sz-+4r` za*-GCGd7XeT)c{$Kpq0~GN>{W+FmyKviU4a5AwL)ap%@eI5FVD z!6WTh>W_h1IUnT~W*z;wF+4_B*n@=yi;*A5M0CPh?x4(Ho=%2g6fS%BIq6b72Vgy3;@Icfzcq6L{MIByEuK; zj|qCQ3K>69{-VH<^chRDy;xqHXYQ5$Q=bJ%7nL3Pf^m9h0;>AtV$7m?po(MsQqTtV zDfA$fSMNL&RFYeSs+h;;LvQo3vP{uRnMY)0#AO~_14 z82?sucdJg*2%BNOR^6)2O6r^2R?cG-gfvDcITmm%Fn1Q1HX!G&OIFPhPEn)dVFSX+ zwrmJaer86HNJ8c2<2UC$scG;MSOVRDmk3Q)1fRCPj+Q-#Fs!xSo;byw1Xe!MfLC97 p4naQdGAh10$+3WAf&Zli{siZDj-i(GrrH1i002ovPDHLkV1nq`@>l=> diff --git a/firstapp/source/images/network-topology.png b/firstapp/source/images/network-topology.png deleted file mode 100644 index e427671752a078bff586b9dad4780916c3f20a9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36223 zcmb5V1yEaG_$^9HDW$Zu6pBk5pg0sLZa+$JD^74rC>q?QPVnLm#T}Xe!J#cqaEIW* zwYbAQ{oi>r_syGmGxw0g$=N5_^6kC9y}q?}Lf)w>Jbp;?5DyRUv63QK3l9%J2@mhC z(}TM}iXnxVA#k~8BcmpRhlh+JzOo^49JbrIjvq(0(fxWQbhrbcl+<}M^iy8kU|8Pmv{U31UTQ} zp}QUg|4VdMgaC=e&;FfvhGzq>{v~=k%h=%I5$FLm#KX(<>!b$?!czjv=y*?W&-xk1 zL2smQP9M2_p{62nedeNbPf76++Z_`ZHAOPv-wwYGky<73Xsy%OBkY%p&}!ur!we2S z{Yf2XVMToVcAdfJF?aQ4Mo6P$A3f^*MfY)@5uZsxPG|Ys#33@uv39`C;UvC`9@BDl7n)DOb|6HH_-(J@&GJgQs;iCG~BEF^A+1UvI9YNsXg%iFAo zh{sW#vfQUdZ46z#re)mRWxfF=rW4sCXqrddV%*i}O()|C-S{m|jG(@XAq}lyp1zTh zp#c{~So@|o7HLq5{#=Eo(MKZkY@KW~)`ib=)aZC96=><&&Jl4Yy+-g zD#NLpkpQVHs`$~{sEhcR`W+)gm*u#_kibCpe|UK24+=|5$sgQ%7Gho4Ec5kk*3f%8 zdV0+XuVcLChKjD6#UQg?r&oF^_Vz0F#9?DSmdNm?yWyH+N4F+VNw(g&>&``i3GH0{8Dfa&vm-9rN&RU6E*n(_k1CIjzgL05U~~c`Q5YNKl(7I$a4WQO z3g#dn6xL^%nv4YAdTy23wN98hQ}9BG?iF$aMtkq*NN*|mu>Q4x0Ig*}5Mu`6{!hv< z9bZ`%B*I%yLTDnq9hT}c31sXbgbnY5xlI~dk|wqaSf#r3iWu`mwOhJ~7~AFP+1aYp zmX$dw)qG9>I$&JSQx}Rkwudof$kx)lA&}lGH%1%(y}PRj6zQF$LpdUKEwOWy$011y z5s_fH>e&>Ai5w{3o*&p3n2G)rR2zD;PEZp%st_+go6Zgq9j@dJvmu>@@hxU9_*X^3UK<=^Sr zlof(L-njB@cvLd@@%ZC=j2UFGTeTHgL5uu#t3Tak^4fgqoaU*kV|`gl9W zuldrv#4c-!dkiyf&7RF|jea-u^Szvi|G0OJEBkT6MA%e6Cx5(@nhE<7bga-Bwnb5% zb%wvEwnVzY7c^tdNu^{>(M96#QtBRS^RBd0e*9v&V~JS!VA>gDpbJH_oZ*)N-OvQT$hlmYus zZ@{yA32~Kx!ftuthxm}CXhX^}4{Wy-; z4wHQHz5Vb?WyasW-0Vu)^GKk57=PVxunzEaO{f1QUQI){CnHsWxmS{$EK^|b=;-L= z2(2{mCn*>scfOqADA6ks5D*}K_%K{rId6Dy@Et2F>&X3yauaNW7cVKdX`?~bJ8Kxs z?oA3q%^SzewM6MI`W=nHn4Wul7>ohM1ozy?2vKCYm6`>` za&Inb_FYu8=s+3x1a}R;^dn8KO``~Ot6jgIBp!mTD>*#7BD&j=*VkJWgoei`^uZ_zAID95n-`zbEp;=2CcaCb z2SrcZwDU~}NOVOb6yMmzDe8_DC2QnqZOGwD8!}XvIkFqY##;TvPid{EV6cQ7V}fTP z@>%Q6XzntUfiED>W_Y2+gzlsLgfZYmX1uE&vjS`M*A7py}72KbBr0V z!q_ghhf%hiuck)&QRi&B4M^Ht4gLQ8`)q0c_QtF8kb^uF-h2)_KUm4Po^js(bdBmBWc9Nh*Iz7eleED%Rdb~~Uu9^Y2>HA4DF1X<3E)<=( z`0m(Vkb9bRrNiEC+69)gHs_CNx@~vfw+4pnjTwcKk!zfEl5Mb=7apGKm`)n{I*hR* zCcX^U_TNaRR{*sCW;U33*%x%Ec}KINc>yY?wkBnqzRMtlE?(G-P_B0TwRG-TM=dJM zv0~S0Gv|MptZ8glzi&0XyQe~P1UANo945*Wip{xERwpDRWQQdd!@K>A?QN`fB!}F7 zeY0E;y$EhuVN?g#_k?wxI!>Ogip@!nN7);d*pIr%?KoCRgt>s6jCvM_c0_6F1%HHs zg^YD|)5{Mz(u;NE#>YX~9l=MY48K}U^~$w6yPGE}Z%16RimKyxmQ{z5)=s}E9x7S( zq0leg+!8*MVP|HlkPsCN@9kNAQGKWZ7j4#HUw@=ruD#Q^kZ@(M$T&$P$Uarv>@&OC z#o3u^%A1Xg;h@{gd3e*YUSb3=m+syD9mlSH=6@4H#`=aPLO!RvxA)Cgood7D zy`bAv1n`*g<}V?rr?*#!jhujhAoi6S|0^q*OK0;Ai{t{0OrEC?)YC+=-mxLpx2G!e zbEpfLUx2#p;RiDvv>co?QS>Wyb!5@k9c5shCXR22T3m-w%MGk^i~PPS6KMZxZ3=|U zLS;K$CXCC+-_&4=_oCeWxwglr1v|*?R~OhaTE4FdnWp;<*TN?>qLm>ndz?6X>=;t^ z$cwU5$a&G9UzoA_OsypnQ@6T$V0mRnh(|?or2iyn-)cl42rDrXZ4_Gx-O;!R0q3^( zzHqr6`w&mGXw{b*dV1T!jio1>OYdKCeXL8Fl5n##`@X(j`UF=-NYT-9DXdVRLZ0ef z>%E%FAWY(*WbeHSr-g~R9_x=tsm{bm3B9~BWvsNRoHETI3oQ)h6937rr|-M#K34c5 z2#3>^P#74TFzXg;ep#VB!C>t}AUQ1qB7GpwFK^eF7Y-RSwXXHWAnNOuZKgv>gPU zJWsZ#cGVj5`6f%MEN4HPn*3w8y0Bg)&^@VzT@iWJQ-$9VhP)WTbTCVjQ!k4u&0~2|ASdm+ znakg>UKdGU;Zh@)+y=?9N9P|u-7k+XYnX4#KWSHMw>8_o-moJho$y?mSzq7Csl6z< zw5pjHc=Usqvd5{bJK(0|V?6bIqK;mVC>dp$@g{t1gYn8(<PxAo1IIzir-Epa7_o%t+zafp9@qkXux8OXc8uEJC@mS!zO&BtZ11+Mt=K znjg2t7;JV^y6>+8WA%dg&=vQ~NU$}Z@@P^(PQoiut)04XGn(%CTG}YptU5D>|H8O} zJB3f~npYaoe9kf~(%EqDq5Dcg~yj%b<8*5|{ z;~~o1-xc0)b)aH2q>(8#Tje~QtJHCW-`?JC@~IRI;ybpW7l4K9aKv|8gPCKy!!Z%! z%FNHSVgFLWAWb&%4sLN*clYhu^8y#*EC7!TjX zAS>XA6MlI8Mc?h^daf$CRAONT^r-%?Ofw%8HZPs=KE#ovi1cN!!L!$gk8S= zA?XBpL>Ov}9-m$ytvYwb>|_$T#245T5a64Vnzle>z%#~XhlqY+&4k_=ZDCuiunn(~(w z!PY?+t6|ha<0Mf74_rkGMo9OKZSILNsC!#jc>dAfzqx*>{KS%O>Lj?S76!|E*k0Dr zvAVjNFb+fndaNp((!|70nc5DV(Mg!|Yc|$9o#A6bFYi_xLR{*+>eaPtw?#OS?8cr^ z8743rA%dymVh#qDkUe!s#754qPUnp3eieACu)CE9Y+KA zN)eKJ*nxUFTit4Z-CPkaesc13^4)J_`dP1gd0m;+N zFW)|K1MxG8A9|78cE8NdkI5`gA#B{TQUDt_{CXGF>gNVuS8xdt$+^pFNE%(2lk?q* z!F*<5D7vJ=VOU#D=HrZKJ(4tGi|VzT&h$sO_zPrCJJBCHJ z{u3S^gBZ_5f{OkY_U6HQDox4}9f-e%f322x?&omH$b_|;7d8IKOpkF;PL^bykl>r> zLG{VoaU$&mM_VWAzvL=lu*3v4yfkxPzGkI7=xVczF$6$f8)I$w6*P&a=Mur*AW#OD z_EyAF>0MS@@7T5P|^u5baEcWbiYhn4Scmh$Y(dF(6uAkleaT?kUb7kqW$cdc%w{nrhL z%=y+6x*LVCeHiE@jX4u%Yhich}u-VH%qSE@7vhDz@lpqdU z6t`&F&ej*Et|i%NiLXuQ2oe?)d_zrhb2zkVjCg!y6SElOES8NGHOX{AHZ}x83)xxA(TX3Je~p?R zvtVGAO^k;Qwzkx{WIM&`6+ZjgL!0z_1XG29-Cac<*EqHz^G0=$?@t-MiJ2u3>VZ4W zko9{f$4s|`k?EP~ncn)&V!OQY=7Dd6E`uK;RR^q!#x^6Fo*nIr@F$o0**i%a0O(|_ zCuv+>*G(6?Vy{wqbL7g{G6mOUhnJa*B)%lsrLm4+PhbE)36_bnqW$SDHPK_Yy|s5$ zZguNk9gI6Fo5U8pC zW383%76{9S0kz-7lXyLYJT$wWJ>ea1j(4&Z>{;`=N$7Yrh9uVKQJqe&6*JNBMICv+ z66*~u+$irfJX-yeo7*wC&AR$OhJu|Qav0; zWUH#sg^%y^MUBi1U;M}~+>x4+iBjdRm6wu|0s@>T%Xhto~@f;jOPN zejYDLBd%|S`u0$p9gC)(C}Lw84-3pm&24XWl}F~eIHh{z+<(@TXPaB`X3P}rn-8S;uu4=kj!<%Z)J!8MjQnTBzsRs(}k=)>13ID(S zGJ5HLsDKLLJ>TU>9MzHHQ7_&8)z=Qz)^F}PrCFPQZ!fnN#b@mUC3#lG)PtB7Pg>B} z0_Vzuhi1u7=X^#qd6^xY=ItGhzF{j8o#qBlhWn*2OoFal?*L$(YGPWfZ3g}wikx!X z`FT3zJ3TyOe2IMyvWseU#Hb0(%q17GRO74+?5d}!tQ)+ZtjGA46c>l{p7{rM?l3A6 zPVsP2Hkv;|adWJs*Sv`!!MHTera2Urt{-(^bAAG0IPicT#g2X3=HiZekUo;+W4$ia zlXBVE;KnL70+^`v{-x9@z~1G2wu$r+tLlVU8|?{Imqt@(2JM_Z0b9>Zhqo{NoHP~+ zgTp$YmA!^WMvwcvCTHJl|L3y5lbou`SB0S>7~RR@8CfRi;4UjGi-4d}C{%g*?#IO1 zWZ8ixE;XipPwTXn9|8E#PR58@+%&_XRzT2lc>&sY1Bwd+0Fjs4Fi@4xWMS=gPEHJe z;6Ll?&Sj3v=?->fSsq7Qc}V*RnXTrVKcAUV-*>(|`yAq1cXv_#`lt>ToS z(hORR84Uk1LfWfKj`R4fzC%gFS}iL9CbbP#8Paao)jv#eqsqSr$F`X=rp9zWT8bNc@8O%hWhhx9(=BY3Ou9cg>U)@yRUd;BLDdldM58nK zp*_h0Hg9P90Lmi3-(Qu4R4aE3R1Z<07Y9{d2e(F@O=8S9Vr zJf~A&4TDt54M^BCyeR{sSFpSN4h;tJmHu=Gm?M=Doso9H!aQAAZ2G*FUN{4{Ze3XV zGfA)kcZ7bmbUyIpa|Q}Ppm9@^lRA2OLPA1fA|lQrX<0|(kM7Ir>c$(Ed3t!r$(_mt z6}MDZkD0$-_wbcfajR4>7`HR9PRmZv@x31N)s6lA18zGcRFmX3nLSO$B~%jMZYNk3 zF=89uNPpRaf>{5CMxd8tQM#Cw^Ewry@&spZ2>}Wuq%BroXuh~!_B%`V#z+Ci8r9R& z6In?mA|`gT_#|k(8M(jsT0814=wN@JPt8yT{5I?FS4z{f)l_)6womdO9@1`Wl;1RX95^{k_^dkqdQ0fIn;o%sZ65p98PAPQ7LIHPszuZk!;wYRUk!|f8j6*)3&vaw zz+f0SZG3ef*Xcq-Ygk32J%F#>IYnVbn3zC;eJ3E*i)6RD=mp3}*> z7dPS~knp~GN5AV0C}>GqYO1Q~cneO06U6v;X+#2!L^k#voBuYl^Bu{r;Znx;^h$qh04S*hv1s((|uKBY~Dnw_J~|ulL(Sio8#GW2jb5GfKdS#H%{QMT+eyVq9y z{}8eSgoM(CcP#%&VGEiY8ev?ieF=)ph7o!>MNW>6f;i`Jd{{LaePF=FS)OcL_(@NX zSdiVvR0>d}j7p%kqq(*YW3+%8Rhaj6%wWKdMGFaW5JCc~6sC0QKS0A0qYvxb#Z4Lk z`QyEoIIawPlZdINwI~o?AB%{vP76ywgpW|a<0QpU$r|;ExR-?H6$<9)**WGV0RJqi z(J9qcKLPP+OPpaugoR2ItMfn+`7bYL!t0=MjTcWvL`A6$4LP{W-i-Fx=S5m|pbT~( z=)B}A$ww#S(-s#zxP<&SswVkw-#gkm+Ctx2{1Zlh{i>^Qu_n0tG4^xogBI2?4b`C< zPss#!%*iTA>_-oWNT?BFDnYN1<6lYZ>wyYpWFcU{2^Z^sz0Dp84Lna)8+AcX&(#wq z(HN^K)d1W$<`0^Zj$}ai1E+_q?muh(r*KVO{iDIqXD1|WM4D0Jb@fq@2IN51#7taX zYctKhfy+W%q;hAwjx3<7H(a=TzIQ5~WYUNCR`vo`(^V7{ zMj7XOzK|?}lIr+rhDkd|M<{l3e}>U2jH|CBT$pyF2aUEOy2m9Tu(S{HmqJc*@gyP; z25qod7h#Ewf5I=G*O9rQbwrh6S+P=|CdZj!b#mU9_O(iGFc-<`N%vEY|0(m1&vzM$ zf1fu0^;7eIYo*`^fCmK3ruct*O)Jr_$R_{y-48Az>gwuj1XNdVXw*6x0ih<0A1ID$ zb+G#1V>~LN|6S<+T*U@C?Cq-909D!i9w0xx)`E53yCmrIhUu2OQZ?B-`gm@Rw|)7d zLwz8QhlhL7_2*}v?s#0{=}XkHOJ&x(7p`M}8y+uD8BOe|DPg*zaZGpceu>bL-+3fE zz0^h!rp1Bix=xqv)*PNgb81AUoGKATUrz7Ewr;<3YU0$0NUFK<%@p!5bYYV;3B#dp-u37KRh+0GQ>jN({u4De01mV^Z;aL_UN1t5AVr+Lu-p# z&U0oVc4v*MxZCfMyegp(RL$ErUK;r|!kL;ZZoCek^~=dH9yOF~hh70Onlj7}4Uqh8 zCnv5Mm3vQlfObXxUg*|IplrIyO8p#cdAjiPHMh7#3&37+crdFmJo_Rr+6S_RW5=N&Vx}I|~ ziNohi)i)Yqv?>q7ICOT7$)1unas6r7)7Y`axM_LqsP%C-@(7#GzK75M?1D!Bp4}sJ zR14fJ&wVtqGx(Lu8}bwG1JiTTM21t=f?iFQ2WNNn_wdBUhkdrn4ro7fxQlm0@QLdY zT*4OoC*{azE3D8O+Y`62EF}+ts=qx-wN1|$*4K?oQw))gj&E@ZGX86VdN$xyE}rS# z7)l1IbInfSf*2&OoyE6r*h1vM&93yC1uDherngFlMA0Kl@jL8#oGPZzua%rS6U@>Z znT2t&GvRS{TPJN_Q+R?4Fatf@Su>81-y_;qQtZQ|q;-Dc$5;6nZTW1Ye zE}w#uhK$T=ZfQ;y^S=HF`hkL84dZ5syxcXM$a()`BBH}*WZjj|YSITuR~i)VDR^-A zrIb$UZmA&BC=}Y3+=%c774S!@f85OMMgfuEWt8syIFUzU{iHZ^{lf9`k^{)4z?9lMjIaMCv z9mh3CVp?Ml19zwNIM!*>WlxSwy~P&Zwpm3oRN zdmDm=fN9N_Z;)|0<0Z5^1uw-p^D>ZjyG?XDGz1i|xs6w-vcCjH?=5i$N3N{^NBWKD zK+03x`Xe#y_w@&6;vghk=VxJAGp1q8-pM!7mjLfWLj#~tZ(d~#po+zLkUtssgx&hd z^?ysIecju}t&NzA&Sf(`{`GCR%8~ux$3((~QC9uJqO%h`zNwkpQ~y8LUX!;*KI7%a z^rR7{(N*oEpE%=v{lYk4jfon?XHhO8W|!=BC$e}8}KxTR7E z5;UQpXWFS%F4)?i5oFa;K_F&w-cAeYud+hBLJ%|aO4GJ9&-6DJ=@+qFb_*w?h3+(=cUmXmaCpM#g*c&TWGpMJj0zntU2j=N9oF(>gDaUB0W zj_1jw%+%0{OEDuGAO8XfKU-fy5#D#UPT-F4@pxrPfBZboR=xCh8?L7rY)>L;wec&_ zBBCo|q|w^T8Iqjv%t7qLgs9zb^p;L^bIp6XPrUQq^<2+Mr@p~wpN-7Pe%{-rkNz3k zvsT6%W8;W1B&AwZZ96rjvrLVDRj@@pwW66mZEf$W9fm;2D|}Jh|9B5?y;2I@l`<7h zBWO2TsCkkAix^AP$jwbFX-TYnAb&CND1Bp(qyCimjZQjmdvEmLpR-Q!v$PFcJb>2> zy?O`&6)cpSu$)UUkVdN)Z5{d)DEN|+>RRVv#CY@*tf_-|5gd90W zNJ)LTcb|Pco6~elM<6&tt?BQpFU&UC>Sk01p0mn{frgGe#Bp~Sm4o^S-KYA0N8jnN z=ZUG&P1SQMWi=GM?|lN>)3*%RIitx)BO(#oX(#8ybwj&gFbBk_?>(n0 z6bwecB;CC#uclp82kXS>TKcp4N1;#kVxqA{YG}#MdIbV;GCaH^$b5=opRo;(u}Fd} zIG1DQbSnB_^HbRI4Q>E_yX5fsdT(u#l8&8U;&^k|+^ASAGuh+9(#J}GbUyGZF8QUl zu^jk#&2#Teqb$$tXgHaKj=zgoAS$iicUL`1#T2{y>tAen%gIxxtBu7O8rgS)HJ%6vR4RA|)EGfeJ9Zz| zX_u6$mjE7+9V#l?F5zWkB+h3B(N4=ma`WgbfSDiD&93b&?tIF@AFt>c`_~7Ss*b3h zt2lovs&d7F1i93UfrK?0w^F$E2lnjhc34K4NzE_YEhiNnncSwDAYzKLpn*xTS`hoo zBa4+{LXRm4BUU4j=!O%#RG^tc9P2ro1m~<~(ejw7t-%OTv=~h9Y__4*B{+s=o5i4) zt$~(-r-#&D`W)3@OAyEwyu99&Xp7W1j z9Yv14Vg0f>qvHyCe${z%(K;ZR$ zeuU?&vCG$Gw@f);I{qwqDhjpqozLrUL1UHmA|tGxczI1@_Wi5oi9_Pd#~J)?i+>8Z zLhOhS#8@F?)gy^jZH&@x7uFgB>{&8GqyFdHg7H~bsxtV|eS599PwD7rZmzU(owYHI zLp`(DWDPKd)hi88ucwdVwHVP}Mj8;$@3{t``U$qJW=mX3ohiNHH8=+!G(oRy>H`B9#4p3Nb&)yIX!#3*reU7-`No9 z2R7D%na*wC=7WN+yiH93OdX$fDkV)dFUjAVfLM0?S5JA>Cy2j!Sf%keE2buf6Sf@7 z`K0QXAdnWc9nKAAJ#HW$M?EDa?bf!On@KS-1{QKhH5X5<-UAJw(U`Ylo>V`HjV00* zYGO#*zG;J5jvo20!1X)4`oa6I@Qk|(# zgS8VnT63Gus0Tl0X10m|cdu#Pi$uSS-n|kx>HGYW#Glp4_oSFi%*SvWjgaM(WaznS zda{J_sP_~7vis5)Iq9YL)_XD4_IdGDQwhb+PUEnx)1T=mp?>H+vB1 ztm9(!T;81G9^MDP@fr$*y75o*- z8ND&d^ucPyK@Myf@oQ=fIHp1$S-)CvP6M?vJ8{@0A|fNFDaQyRAAqQWb7Q)92b(z`hq$wX&O=6H zQm#ggP5iu+kZ>>_smVYWH{3qTBL(XL*3Xy}(fQQah$UL?P}mEZ&m^~_Y=lMdMj<$~ z7&@++t{WWkinsh*#Ohp@%1KQ0eL6@<;#Ou?Cx?3?WFOB2EZ?_!9;-FJbN^irr@Kjo zIvthY`rtI$#R@xBuVL1>JD9})>s;{TCPA_QGkk^yYT?@)iJ*KMLPw0}yvMNcKN#54nbO2a8b9fr=$>txnEMdNWWAVirh)&-{Rug4wVM5HXzi zB~9?+z;yhWkFlSl%kaT^(wF7518m&@Aa?qxPsivlKLg~muXrR_Nm$cWswk`ZICX>_8fn|20M)Hge+kzQi z$))so*o-t$%O8axv;?#FOCwzZkR{!djC z&FZ*Q06yQ>#E^}+J%sW@TmoTQ4x`zQ=W=znew7?f@R>RM1OVbQR0;~PO0x=x@`#DJ zLp=-rgHh7a|6(fcn)GOpOj!4fnMK!p5mW!{oH{8yE#hO)%{nwhR3!Sf-BF*csnN0H zW7h-Q+c1lE0L8~R{wwV;48u5?V|Lx>pex^da8l+rOqP=)&DYWMy}c&5p_=%Or{UO2 zCvWJ~w4Su+hLIITlh<1XaN~z|dilC%w834&D|>3)?B%v9W&Tlxia2sBc1&U$iwz|O z#=8CMRJV&t!nUA#+*4$&_LC>joAO7Zq_!bvmdLYm$Aw`;*AQ5z$^%P8AI&E6XUpPv z76`_N4TRxy{%1Bt(v^OlL?a?7yi@g@jkCcQ5%l6Gfsy&#;lw5}S)hlLuDyrkI@ zg1&PXAP~sa>@vXBpc9V3jOg=(NDs-j;4k@b&(&2Q>KOF=DI0P;FZevP=bt+5;>rr` z?->-t=W4m0ooj}E}$m3F*MLdi_ry$4Op6R3?T0{SxH}MkDB$~@Kq!r?g`z^ zHK1Y+2Z#bM8og0b(C$y>7+NCn>~2K_2*&4Ymz4oUgrWbfsS`SGg&?x_M^V~!z0o$ zxsJU&^aB`6;U_I}XlaiPiMb7R+7JKGCP3by*a@T?b)G|cYc%>;*r*Pg{~ zfmv5qg2D3N?$xWLw@IXH=_SS2+r!Hv5#ZkzyFEuM#99gpykUPm#=B8oW%GJ(!Py&} zf6_F8JtEh^FMzd!F?YylqC24_Q8SCPdzvs?qZ#LBrtDrfBTHa=~-1Jpp?bB9Y zwGmj-0L$_v-)mgg-I)pt0lPa#itHF(&1o^Ey#CK`&d12}3v#WOS1A*_BJgns4hnvk z09uM9IetnOt(TCF;$#hqVgvaiQnVF0afk5kn%)!BduaSotuIu9RGRN7%ylcgk{2wRn z{)LFt+`F!|WfQph02x&H9}f2aMT`EQCH$Xs>HlxKfZy+*ITKsqYH!b}Z1n=5 z=Rf{uZe!EA;;Kp0s|C>Ki5Me8!*}FQXjA*p)z!dOL^%S!daZX%_<9EqP=DD3g@sd- zlOHcrANvMCAdr9nK#R0>a)K$#h>D6n{zX??OvLQ7`uqYkIu~5Wa|((R$*$~A_l@#?$lpgT6PCwq_3vSQ4PY;p z5ZlJgbh=O|WC$sV3Qe@6h@_PIG^}YVY9?zPj9re7nP9&!f&uK7uHL!m3}_mueGI+8 z_Ax+O2F&%%l=4A@{O8n689=r9%j)yOMI_DdLYe0In@J7=LH_S7((ee$nv*hk1fF(6 zPlj3Us2hWZC!RCR1pd_;+RujIuFI4Hn1m&-tu^yP5lpVhudO_jZrNT&-yG;O?#2=| zW@Pq>`c(bUVscJC@Xu}8e6Q@Q86oo`{X)ySi!JNmYK@jeKh*!v-8ZaJW?EDtF+`Q1 z%qPxEF)k6mY&JIkY8nrlshGB`#r$S*JudxI<`?<~>~1>{yw?COhpcuNHF$Gf8+j%w6*rvj=9V`i>kYR7JTanJMi=DdLUjkre#>dVWi zyI&NQig*LH(em8G^ghGsQVjMa4a0Tt0d|s$CS<&bi*aw8n5lAHLd;x|5p-}kgJ?pn=80=(X}q^ zcLZjIrh-D42$-l|_@kf_O}0m1W@`8ZQkp}bYxNoF24_@eDRYdf$w9$)Qn0qfV_Hwj zxO53Gj5OG?@xR|+&JWi_Y~|w}MGRoCRgrbuDV7@{c86XX`nt_Q$@ex z)ojn3^$As3vxkX>_|`G(v+=^a7w-~u_G94(ROL6Wz8^nzK~J{X$-v7Ub^aSaxM~Xf zgHi-{zu)2izJux@$1FOBuhH~IpgQ)n2LplX4(8n1ZMAs))FY@$Sy!*<<&sEbA`o0n zI5pBgk7Ms4_vPn#+3ih~hya5~qGkB=Tb}@1Nq5-pDo~P=lIrs-gMB#UB0?2MYcN`4 zqg05(?S=d&Y8Y~1a$i)3n>l`GxK#)2Nt^z?jyWU@hVNc~Y0>ycX72W1-)d6-c)|I7 zlBiHi+f6O&lsx56)9 z(Uydf*AI+%2Z-=vC%+Q|nSJ|q$1ZxQ{;Yurq2sgRvty!v?6LM_Pi3kmV5>&>9#7<5 zkn9TdtBcx-90BPRHLdBTsx~Aa1WXQN?WfUQns3`koe_#T@2C-q6}5UJg55MZWnDv& zvetv&XOjR?IUI?jdPMgTPlJwx+$xlQ;Y70y@_|qll9ut5>^Th`4aM`=@1}*|kVk*S zdQ5k1sw8NizhR3jkf*k177;QFTUrnP7)mn3SGlI~^n2F!`pI$7Jj#AzEz@Dr{Ve7i z*wjKmo`~K?)s0yzZ936^dAS>Ynn!MnzzMb5v^AyYtS&b%GqFbH(s2zxRcdTxF@83! z!~$kkk@j9*j{eL}K;Ln-_&@}Fe`-I6m6)>&ni7R5Ts2Uh?w%=Ko^3eYQR&uQ*rj?J z#oT`P7k)nX3{4Z86n71{JVrlmIlrAZM7e8Elp~&1;hwyWR2x+uxB4UE2+q+H-y)YR zFN4{1)N9EG|0G=-pOf(;D(0>xGEK;0;LMeZhSzZ$K>)s-kYzNPfjwEoUOa9h$+vr7F`9SF?GtVm& zeCKh0^*<3+z8cBH*_0QGc$!-9_Bk&-8$#F)XvBvqdaU$z^ACleOMyUE6ZqwrDt4Z` z{BbMk5*35a3Vo&*jhSIT@)stDwDlkH1P<_~OFon&W{{H4H845e$n}8B@fy}TFaG%& zmQX(T*F?$cHY#7_dM>-Bx#X3}?|M0vSnK*=x4yCYrfO%4qt#DX%HoEfFE0iz;ZnV> zzJ+@a?$;fJANy5!nd(HN{bdZ^zX!V;+wtYl-d3?FHE2Owi;$(S#D(m1(T+#sdm3x$ zH-Q5WPqU9TONK9#Q|%5;cYBK0wfFbEm##F>E2k??)K2l)-0FtS{`Oz@QkHQAhmk?4 zB8gga#xVwyEq4cdV!ZO=jy7bwX|MZhd>kX;5$|?FAwj%DLH`xo{?{T!8TIf%km!#! zk3YcgT;T3zo%CeKH-t@BKVP4G{t85nPJXNqF*Uqs39G-8=KQM%#T%M46eXwHJFO0oy*{P~yu8mbM@%%ZW`^?)#@6ZguXv zmAS;Jw-PSj&Db6h7(&pc!R-eRMWZFGu45j~Wu;s6dr7=?adp@(_ZQvh67^o``10B& zhDDBxH~d;?C{bglf{e}6H2cuf3!)cN`j&@8X|iruU)2!e>%Wb5NRDv`(05Qp#5^Nq zKO{@+ggw_=2XNSSIPtFS39aKz&#r=i$%E)gaj};#bFIgE$N+AIfR9hS=9`X#$@4_R zQf7KHF|WRkNpo>Wm!(g-JzeHLdVxN2q6DQ=)RcA#I^dv{+9fRVS%%ocSqf zZKvZl-R_3Z2zXSCX?1#qD4&7f+S>&c zro^dyX6EOto!)=NXX%Re_ZtpY47mrG9Qx|xKh}>5N5mgo&=rK;5{t)?!xUDENDrUo ziAS+s98|Xx5nHw!X(wv_Gf|o=sJY9_)2(KQ!;TJs@)AoVA-DZXGgO+?0+F07o4qPqY)(|kW zDu|NVMpOtN;NU@?s~iocMr&Ah<>~o9GSct7gUDJD=$di87^0|{IZeAyeup%-nQp9tE~vaQ z1hKWvcs)-0o5`m(J(%0k=i;KxSlg(P4G=V+S2>~|w?wZ{?_)VY zF#kW@!{YWkE4g_$5L0CUza037_gJ-E+^chQ#NGRgLQs!?EC&zK5TeCjPv1Ka`JLk zuW8*2A-=!Z=Yo6fFi{q|X==9e?r_LY*F?Boxci4qh2$pxj^e9wl|%i$zxF{p4f|*P z=GtFM*n8u}`yTHa7bkEJGejdIH7uHB_R*Sl|5ktW|m9pui&0T zb08(e&an^JpF2f_LiSQKsD@10cOgSzD3vM;&-xe#*P61fXxjkE<#V~^rVgcqXYmFM z(Q(u)D~Sa>QHIqRVM+O3Rv(LKxU1(Ufp}Ij(v7&USWEO!s3d-pC1Cm0GTsf;yZCAe zwvubv|Jh|QLB3jz+J2S+f7?mCtRl;l3pNxrGm6QX^-UuHFCbY@k^@Kqh~XH2P~((-#GB8%w~s=yheugyRj@Zue#oEA!AH zl2#~)V$1Dt;pTQjkyZR`V=ndg*2(sKOVG$++_lf}*N@lJCeNfb(nhDoBgkd9huNFkeVJy?W=;0DH`kd>7G^*FPU|{;Yni?NYlpJL2~0OUN8BA} zb`1af7crSs_3B3}9ztw3eJ^kgA=!BfRyqe;?wPZid~H01Go{~^ojC_vb9yYXuW%H1 z55y?7eohbR5_M3y$bxEtK+$j=gaB#CY?Grde;&F*0XH=j!^O$eP%CdwNtarS()Rpo z;KSyol0;8BQ!9v}R zj{aZmy=7QjO|<1QIL+2@sqHLU4i;ERZHR1Pj3>Bv^3w5S-u|+}+*XJ-E9z?k-cE z@0^))&$;u=%sunWpF8^pP4}+7ckNZH)>^gXt=@<2P+dGC7~SB&%er_IMGFSsct=!g z-gBRKJP^>4;A*B{C%D*$>Et1D$_~k)ZOuGEq$;p}>Sc*X_3akXIjspj4LA>F-r7q2 zwouaX78#-~DT#Q{yDokSb=voNI&*UpIx}XlK};XI)>8)5oEiaU3t0GvmaKZH5kMj~ z^b|!YTGN~$7SE8QdP;xw_=@&gCh*MRj9aZKn-^cY5n}J%cs8eIgd1HB)T6&P+$LV9 z+RIPcyXf93#^M=Lzt`1p#GBI7DM>f7DL7dSD|wyTMgwVym4VtkkZqX0*{MAt-OR_D zG0nVwL#d+cIp52FKvLsMwK!B_ca%SPr+L;G7=JghzACeQ`YH8MqB_oLTo4~7rmaU~ zW4K61NFdYWOaJeVQk^(bZDAiwr$@R<7coQXgYJFmGfmmichW6)-_P6aO==48VAbt$ zkEDhLM9Fkf3QCZMJ;xNg*^r#AU-FRL_#z0Ua8LYh`gtuzCXRpprw=8Ch*|#5qk#Qk z`^Pjm0Z@wfF$Az5pk7(l+3Mhxy z)AAM~G*T!@vT0ZAx}@8OD}@#v=~ZF1TDRjZeA>q8G)g(rc_`@X<%!+3A4F1TIBkzk z$EYH^=ya);7r!=pW{Xj=5ARqQ_|$%mDqNkaPcy(cxe2(uBMjt7wQMPX=Km2z-=88^Ac;knchg^$k+{|BNd z5jD#dqmfKGTUKgrSS@Ph2{cV9e4A8wn2>v8(6VG<#)+O;db%P_b|`BjklD0R92L1z zY&?q^b=kb1YCVIv8aLy-dCh$09=EKqbnB_Gd#v3m4848JEXqL^mc;}+&-lh&{Kl3=3x^Oefe zcyT3bbtP4P65L9=61#>&*D=%;sSoo_w`w zv&7v#ig>#ckenN`-R4#&-Pq;hvvD_&zXr7#0J-H$q9YVNk{5Pt+GqIo!u~A3LhO{D5_h&kRciO%$wXnZU*z-b z%yZ(gDMF3}4o#eYu9{#V2&mQljqND1-`CeY@4(ZJg&C1XubJ>!moPH8jD5X8lVodE zyu{iT3!4U2eni|#C4J!cM><^#$Z$`I1+9b8QStFJ^U!qN?lR~atXTF2UVZS_&-bc=OY6^xu6%~nnt71Z+brGFGt2*YmF zy)3{=xK;}~8XXm4z%=-pZC>nt<>qM6*7JO9eyuqBa!m!2PS0w7nL{6upC#W>avV>` zAkFfuH=SP6FQAv6TCT?$Vw+72JhUMSX~Q(-Dv)I$I*3E6_C2-mD!#oGV1FYb4PC`~ z{+dyoXp4yIAZTwL#1`yjBxX zayn&jgE}elj?UqN`I|&mXFDAd`z=o(D^}_LJ3k{ zNj9u_f37)IDY|eW>XorvEpYF3-@kfG)v;sz#yqkNc4B*PLk!VKB(Sh4S>b98k2pmZ{iHnJI>jND#9 z{)W8g^!R5hL`TjzD*q(HwS+hMBM}j{U~Qy_uyA8EMxY*uvtMlspV&8=B`JHqlyYP#+Q-$eat{Yy;W8Xx_IP{rhAZOr|(s{*wh z4Xj2dBi{z^)JadOyu*IY7h4;gOd9;0+UZOSj8^JGTC(5u&CJX;kE}FAo5)DYeuxtN zF49|3Q$Oml7j$u9O|k8Mh;^2?`}V-yvaN%C*nce<)OcwZS4)$-4NyMw_g&mqc}_%7 z?1U%W$QnO9@87?U_+)y$;Uz&leQlIb@Q1wUUL{x=wC((JvH45aiO@xGAo{Lpkk9L| zD2fXuj}JJ$Elg|SZi<)D-QF#rlXG}1acRuyb%^plD(!8dq<{FC9E=3cB(+G^;cF79 zHhY>h43hpan5%efOdJw*-vC%vp$xM zol~)Pl@e4{ybaYVT6!)nyJkj}iZ>mxgXe)7>k*9>f>4E%E09sF$}j6}NE>qY(HG;X zMDFf}04hAF;Ogp>{PYo&aetIge`m7zmS>g<}T z17ukx;0#%#%qk?vgW&#pzGSsYDmJm4S}x9IfABu0!Qj0QUkJqLG%<+pddjP*BTokV z43{lN;)AFjgF}J2YfEG7&6kB^fvPL5#f<*ao(YD_@2fR~Df>7O;0CvT8{e!|R8&>@ zrYxt?ak~(4sCNF?fXD7j^SS`_>gOBn5xrj@uxL<1Irax4*|E&2uoInE0ybtDtV+@< z7iz1m1|9i%A#k-A@m!F1u{`~`L&kLMm`i4N@lRx;vsD8G!xpWa z%AO)DlD{W~;~ybtQU1k2`fs0U*IN{hd$Zi(WN2u-gz!9h^;xCh_AEqZtr~wg>>9$4 z0+4iXMh(!Rw3w5Kko=pqv`Y7v3R!9Oixg1|b;%@11aZCaaDTC1cn1+bEB_&+^;}hT zX2Ine-SzhquV$@_-O7dU#>TROefc<}UGE}!J3>5{gvp-kmruiiq{ctBWs7`9ef=28 z+}avs%`wo^gOXc81K#i8iQx3u*ozl!v*LmQXu91LT`dPXdU}~d`X>&2e#^2TPr}B= z=Jk_r;L`d`eZ(xX(Wi#GT1iF^(3n8gaC^Hj2zG#o&t2}<;?GX}u3ddHy?;TTS<|ihyvA0TRe}%&OG@zE3!SG(#9k7XF_LSsB#`nFF%75ODoHb zz(vA-?-(5x0S%=o?CdjN2CjN0*W0BAx)hqi#<_~5&RdkmX|q2EH!)x5g%tiiY?k8> zLx~?N4AI(oK~3GJ0qrl|8NwX;j>pr7$RhGKJCp2%o?mL%ing{HNhAb5k>w8Ib757| z9B+90V=53$mEHRL`Sd(1aJ~2T<*>#xR9`RD;84zM45`qzb@ST!)_D8v2m4&lmF_l8 z#EeAlJzIjjlHJZhF>iFsJIW%<7LnRfP4$gvDmw7m=IQWS53z~4)3WL1Luz(((5Ei#eY1{q0yH!& ztGz^*U%i-kLCiG#ymR-G3iW+Pzj762Ux=up)sbJ#EiX}Fl*au?i+z|#S>^i)^|y8V zlIS7?6}t2IC(Xpa2@5jmf8oGGueVJvH;=icP>*|Nl&nrJ(6jZfg%qU%+`v$pT>U9a zUiK1_NqOdIL0rGPDc-+EkiODR5PBh%koTIFHjG9gjs+cgmY2$*y_^6N>Tk>TP0lU# zmk+HXJEsCAd&11nNb!jLSN6=n@#i6_m4pOeo&>+?#g$bheFUoIK}8Vhz>h>(E|+n% z&XiPp5!ATH@dE?q(Zt-n#m<-_tCL?}KPvte>p@G$)WaBQ@R%_nFc5`@w&ryhG7gk+ z-bO8_ZpQJ2m2>4oyzC^&Pxd>T!iBG8*t(w)0aybLHVP1sM|gM7>u0W;f7@~cRj|3y z4QQ@o*B*B+ryvy(j~INJ`8X8Ut#}(ooy|`AQ}#CBe~o9~B$k+to`#!-Duq ziV&d;G9DQb@(}12gn2aFKy-B-WWN{{Dr-DsQRA*-V%XLlcXI|48>{iaB+l!q$cXV1W5HQh3)80`rvi-Q$v(MVm|Bk#pUyx z;i=Rrs2b0`feGkSO4tT1JEhf01qB34EFA)2K~jYT{>mhd@)6~7x!WGR7DJ3c%nXdD zm79|KeKkDHBUzzEc@oFh8*xegb`Z(T2B1Q!D(hUCnzCUdKK|@FP9{$*OB4FtNKm0vFYQ%r$v(5fT=P=9)gw>JUAGD)j z#JwYX_sKROZBGK?1g(d_$W`>fjW4-P3T}p`a(%>^v7sD4sexYzm z{_x&vF6*LgnAdhNUb=nk_X6H8l8PrIklgG1i!)4Pk)+QLt}+Gl7ZR1s>!2DIx!qN5 z&K{R&wll&m(vd=pJ(<`6KV4lg&MPIQ`-N8?y2od_sAbt4VPT1W1n{G+4>7 zSxGtTZ3OI*+fm#jg_7~hCe8{qb2;wJ6w{4h4dQKI3LPAFEQ5HGkOHdko;{UuY8t1h zEi_#69UEDgkWurIdx(Hf03hW|bGcfx@DY%TU2j!h*shA38Y$M`uBhlLLzXqTw9LO- zn;K2MO>ZwA3xIZk^0)US9U+KzCj_Hc0Rn3E+usOXtEQ92G0t0tUwcsVS8ac4!6ps< z;HHX-pr!vl7__`IFR1GzK~&GOVz}p0;_vJAyFXUqJA1wPGhhD5^$w*H7oq8o7a8io z=2y)E=S9_LinF=O7)}yE7ruV1{6l1r?L+gUS&J-|0NDeCN?>4k2?fLHjPT)q^ht0K zU4IhQXlJXMEcJOuGtovr_N_)jJ>$|w5ypc3Y~6-B0b@dg&iyKO#W~MNokoR#i?_p} zcVXcElBl9Uo`h)OUX8-V>I^Ak==_Fnu8Yt8b)hzC!?6eV9w&JIk0GgSrW)AyvWD$ODSMw^pu{$Zp!d%#|i$;MLv{#n`jHaCf zmWy&@7>CHP<#u>Ss9;Rgx5kAB<>lIOBi)X!RVi%G&A-3u)2Mshwtpy4g{XYz zRCDHAsU)ENRwj(zcm#wE3hRj(>m6CM8@6`b>S3PcNRYtEU6`oE=)MhAx3k+>|_QKe&;WkIg5sJ;OAcXPW;uT_$Xt=^Kx3zl0y6@7z!?m4MQ z7XzD}mfqNkc{I)I0qjU9RI1VBcILtL?{X$l%zXH(OOi;DDhIOB_tbLSHVvZ3<8FU7 zP{o*yJJ`A=bv_xomOb-yY~-3_c3Glx(+Ql(HM*}c8^&=wO{X)27zW>pQy3e%He^!| zE4|R5uB6^EC7BPIe~xp!Bm%Bp$~Bq5*x^#ipnewhC5ur(;C7h=?NhB;AHc_v+ z{)aVJ;A%59XkK&kW7U1{eUB+=_C~p)NF%S>F7fe@$UT!yNEvhHbQAefR}wXY={GzA ziA-1zEH+Z+aR3x9&Ozy{EZ@#oZkIbq<@S?jH`C-jTe$FtH z8#z`DVzu%-zu4~Jb>$sdT%*p=N~CkmuvbfqN-S(7eI43nZO3AlcC|dH=m3EP®v zKp->7GLu<_YT09&0?wYZ2^=;*nQdeD81mja&aq+04;m5bMj0BvdLmX0Rr97!j3xtx zX*G`#r)GI?OXGZE3gQ|V1yD4mW&LJw<9BK>qm9`jW zzCI@o>{GADh;52b^2HVk8_dHH%>F7_k5ka}BGuF0~iuNn;t(yRD(kr_PG z3KX|}eJF5HrO5vzHH61W>SF6t?5up<8na+WmWs9X6bekyT@DI=!rX}iza>UJdGaZ-!GzU0`H_hteD)4- z1s%*r%FxHTI<($d4K7w73Ka*hR2;PamTtw{>@{huu%8V$yLS+?liwu%X7GhoF5U&^ zSJbnfJrtRSi+ai#;Q(R845|4fB}7PGc|AkS?Ru)S=hnE-xA>Cq){fKx*UYm*s75aL z6$`bYMCvmk2vx{*c*!Zc1C|PkC$U_?n}?Pjku5VKTLuhD{Z#I=e;SHD&7BR8U&BHS zL34>dJJW8xj7`MQn;`JMrczP{>Tp@O;8c9S zfdp9&6`V_Y1z8Ss(kZ)gvPsr1i={H(O)Sdpxf6Wl)Y2abzYN9n?qC7n>aurB#}$;j z_LO>GP?x=gEj~ZlN(qSyJ-2}+&!9?}nqE(1Q|mfFhNISQ%;a}&J3Ova2LEpekT;R|j+8IHH84^Mu1#CCv2e;ikcW3o(CzLjh4oiE>IWE_mwn5ylKR;B ze#~iqCy0JYe?;tVtRp{PbJ6ZiSNnYA-)eF7;xd)pTT)?;WAhQC^ROr{!D<+jiK}g6 z|BR8QT@r>itao^sbME`TT5{nPhqnA_%em%hnlW)Ze7 zm8(PlNlo#A9u6J68SnSFCl)wMtC@KkD)Ux%jdh5whF0e$^h_e%E$`QMcKn4vBm8wP zjIDR$L#`D*D$}E*y3F_=^WYaB6q%DO7TfWX00{Bume!A-K6$~L{|IEh`THu&|I6s+ z{~iq;SiK19SqeFEad7~Fq+x$~a}ysQ|23BHM+aaAYXQqQDXg!rZ&2XAuDJM6!?vub z$ZjQoQ|SGBSufCl8D8gaLihUhWRdoJ0Xce1b`B1c$)cs62)frFzV5D73`ynM>MFkG&UCp1J?^=4XI56$ zOV)2zykIDsT7gA{z{i|ESyjcQsku;8RK!R~Nll%rKnrnL_NBhLx!I#R1r2$hg97_M zxm8tF{_q10vK9I@LVRs+uGUu{Hk|I_;_@1d3cejY)7N2bd)vqfla#d4Xrf?sRd*!_ z27`6L*P#bb$-5rDD{N_L881*ba;i6)U`&@2gM!nChld@W5>br8nc!h|3h=kzqok+L ztE;Q~a&6?|(s0-g5L0T;;{m_nGlRaMmEP*Y5E5nSahcR>!lxYx+S=P+YMw{xTvo?^ z1PJ}i2!O=+-!@=`82gJhd<_16ep@ANzrQ+C@YcQ@12gZD7Q%JcmaBwHsl(~Qy?j0= zLk{2NIlJnw(fYk%Gn&ezPxlDY&bP4`cabNt2?$A=!y_Z9DJlNWy2nRHHoMbfhf{Do z7ZDvTRb6f(!MWmFJ*WAEZzECtgasr#p*+2Von8n@b0zPhyloH4NF6@wJJc8fu;A|Q z?#s)|47W-LUZ1P(M&3F)oV#=RS>O`VVrx=IZF5;#VRWh$u+@=#7iE=G$ba5{m)c(L z07))gs1tTQs5jnfpda2XLq})mN#pH``)!NT zMBh@}<+uC8g>V3-7SNd|%=CEDl5oIS#novC=a5Nn>s7v8Z>JT>>8Y#fZOY`z*l&T) z_mMT6`AI4=Pym>9(2l7QSw;He!TiPCCj2D^1PJu_Cd-YY4m-QLx&n>B@^*J;XSO~w zkK-WT+tw2d3xXEQpH@?IkwKT{+&xhh!S|W%SKAAFqIBnKh&y+4LX!w{{T39IpN(5=HqFFJiEFmyNZJ07wv6zJ>(I z8Na?=cW+F$@bN)ILRY3^2Zqz(!SlqMbQK2rtctV4gVzEHwu)0^j5*~PW-oG%M~RB7 zZUdgS3k{FvoI=|${X8?wawc#{x!&pWwSUl8)4IQ&&{!kkbJ^)lbsQW2lG*2|9T

KixgDRPUMJbQLM_TZ^&D8 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 R_(37~F~glYdH;k<{69+VV!QwV diff --git a/firstapp/source/images/work_queue.dot b/firstapp/source/images/work_queue.dot deleted file mode 100644 index 8a63a79d7..000000000 --- a/firstapp/source/images/work_queue.dot +++ /dev/null @@ -1,7 +0,0 @@ -digraph { - rankdir=LR; - Queue [shape="doublecircle"]; - API -> Queue; - Queue -> "Worker 1"; - Queue -> "Worker 2"; -} diff --git a/firstapp/source/index.rst b/firstapp/source/index.rst deleted file mode 100644 index e306c9ee1..000000000 --- a/firstapp/source/index.rst +++ /dev/null @@ -1,20 +0,0 @@ -======================================== -Writing your first OpenStack application -======================================== - -Contents -~~~~~~~~ - -.. toctree:: - :maxdepth: 2 - - getting_started - introduction - scaling_out - durability - block_storage - orchestration - networking - advice - craziness - appendix diff --git a/firstapp/source/introduction.rst b/firstapp/source/introduction.rst deleted file mode 100644 index 973730bb4..000000000 --- a/firstapp/source/introduction.rst +++ /dev/null @@ -1,961 +0,0 @@ -===================================================== -Introduction to the fractals application architecture -===================================================== - -This section introduces the application architecture and explains how -it was designed to take advantage of cloud features in general and -OpenStack in particular. It also describes some commands in the -previous section. - -.. todo:: (for Nick) Improve the architecture discussion. - -.. only:: dotnet - - .. warning:: This section has not yet been completed for the .NET SDK. - -.. only:: fog - - .. highlight:: ruby - -.. only:: pkgcloud - - .. warning:: This section has not yet been completed for the pkgcloud SDK. - -.. only:: phpopencloud - - .. warning:: This section has not yet been completed for the - PHP-OpenCloud SDK. - - -Cloud application architecture principles -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Cloud applications typically share several design principles. -These principles influenced the design of the Fractals application. - -.. todo:: Do you want to state the core design principles or assume - the reader can follow below. - - -Modularity and micro-services ------------------------------ - -`Micro-services `_ are an -important design pattern that helps achieve application modularity. Separating -logical application functions into independent services simplifies maintenance -and re-use. Decoupling components also makes it easier to selectively scale -individual components, as required. Further, application modularity is a -required feature of applications that scale out well and are fault tolerant. - -Scalability ------------ - -Cloud applications often use many small instances rather than a few large -instances. Provided that an application is sufficiently modular, you can -easily distribute micro-services across as many instances as required. This -architecture enables an application to grow past the limit imposed by the -maximum size of an instance. It is like trying to move a large number of people -from one place to another; there is only so many people you can put on the -largest bus, but you can use an unlimited number of buses or small cars, which -provide just the capacity you need - and no more. - -Fault tolerance ---------------- - -In cloud programming, there is a well-known analogy known as "cattle vs -pets". If you have not heard it before, it goes like this: - -When you deal with pets, you name and care for them. If they get sick, -you nurse them back to health, which can be difficult and very time -consuming. When you deal with cattle, you attach a numbered tag to -their ear. If they get sick, you put them down and move on. - -That, as it happens, is the new reality of programming. Applications -and systems used to be created on large, expensive servers, cared for -by operations staff dedicated to keeping them healthy. If something -went wrong with one of those servers, the staff's job was to do -whatever it took to make it right again and save the server and the -application. - -In cloud programming, it is very different. Rather than large, -expensive servers, you have virtual machines that are disposable; if -something goes wrong, you shut the server down and spin up a new one. -There is still operations staff, but rather than nursing individual -servers back to health, their job is to monitor the health of the -overall system. - -There are definite advantages to this architecture. It is easy to get a -"new" server, without any of the issues that inevitably arise when a -server has been up and running for months, or even years. - -As with classical infrastructure, failures of the underpinning cloud -infrastructure (hardware, networks, and software) are unavoidable. -When you design for the cloud, it is crucial that your application is -designed for an environment where failures can happen at any moment. -This may sound like a liability, but it is not; by designing your -application with a high degree of fault tolerance, you also make it -resilient, and more adaptable, in the face of change. - -Fault tolerance is essential to the cloud-based application. - -Automation ----------- - -If an application is meant to automatically scale up and down to meet -demand, it is not feasible have any manual steps in the process of -deploying any component of the application. Automation also decreases -the time to recovery for your application in the event of component -failures, increasing fault tolerance and resilience. - -Programmatic interfaces (APIs) ------------------------------- - -Like many cloud applications, the Fractals application has a -`RESTful API `_. -You can connect to it directly and generate fractals, or you can integrate it -as a component of a larger application. Any time a standard interface such as -an API is available, automated testing becomes much more feasible, increasing -software quality. - -Fractals application architecture -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Fractals application was designed with the principles of the previous -subsection in mind. You will note that in :doc:`getting_started`, we deployed the -application in an all-in-one style, on a single virtual machine. This is not -a good practice, but because the application uses micro-services to decouple -logical application functions, we can change this easily. - -.. graphviz:: images/architecture.dot - -Message queues are used to facilitate communication between the -Fractal application services. The Fractal application uses a `work queue -`_ (or -task queue) to distribute tasks to the worker services. - -Message queues work in a way similar to a queue (or a line, for those -of us on the other side of the ocean) in a bank being served by -multiple clerks. The message queue in our application provides a feed -of work requests that can be taken one-at-a-time by worker services, -whether there is a single worker service or hundreds of them. - -This is a `useful pattern `_ -for many cloud applications that have long lists of requests coming in and a -pool of resources from which to service them. This also means that a -worker may crash and the tasks will be processed by other workers. - -.. note:: The `RabbitMQ getting started tutorial - `_ provides a - great introduction to message queues. - -.. graphviz:: images/work_queue.dot - -The worker service consumes messages from the work queue and then processes -them to create the corresponding fractal image file. - -Of course there is also a web interface which offers a more human -friendly way of accessing the API to view the created fractal images, -and a simple command line interface. - -.. figure:: images/screenshot_webinterface.png - :width: 800px - :align: center - :height: 600px - :alt: screenshot of the webinterface - :figclass: align-center - - -There are also multiple storage back ends (to store the generated -fractal images) and a database component (to store the state of -tasks), but we will talk about those in :doc:`/durability` and -:doc:`/block_storage` respectively. - -How the Fractals application interacts with OpenStack ------------------------------------------------------ - -.. todo:: Description of the components of OpenStack and how they - relate to the Fractals application and how it runs on the cloud. - TF notes this is already covered in the guide, just split - across each section. Adding it here forces the - introduction of block storage, object storage, orchestration - and neutron networking too early, which could seriously - confuse users who do not have these services in their - cloud. Therefore, this should not be done here. - - -The magic revisited -~~~~~~~~~~~~~~~~~~~ - -So what exactly was that request doing at the end of the previous section? -Let us look at it again. In this subsection, we are just explaining what you -have already done in the previous section; you do not need to run these -commands again. - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - :start-after: step-1 - :end-before: step-2 - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-1 - :end-before: step-2 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-1 - :end-before: step-2 - -.. only:: jclouds - - Note that we will be showing the commands in a more idiomatic Java way: - as methods on a class. - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-1 - :end-before: step-1-end - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-1 - :end-before: step-2 - -We explained image and flavor in :doc:`getting_started`, so in the following -sections, we will explain the other parameters in detail, including -:code:`ex_userdata` (cloud-init) and :code:`ex_keyname` (key pairs). - -.. only:: openstacksdk - - .. note:: In openstacksdk parameter :code:`ex_userdata` is called :code:`user_data` - and parameter :code:`ex_keyname` is called :code:`key_name`. - - -Introduction to cloud-init --------------------------- - -`cloud-init `_ is a tool -that performs instance configuration tasks during the boot of a cloud -instance, and comes installed on most cloud -images. :code:`ex_userdata`, which was passed to :code:`create_node`, -is the configuration data passed to cloud-init. - -In this case, we are presenting a shell script as the `userdata -`_. -When :code:`create_node` creates the instance, :code:`cloud-init` -executes the shell script in the :code:`userdata` variable. - -When an SSH public key is provided during instance creation, -cloud-init installs this key on a user account. (The user name -varies between cloud images.) See the `Obtaining Images `_ -section of the image guide for guidance about which user name you -should use when SSHing. If you still have problems logging in, ask -your cloud provider to confirm the user name. - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - :start-after: step-2 - :end-before: step-3 - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-2 - :end-before: step-3 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-2 - :end-before: step-3 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-2 - :end-before: step-2-end - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-2 - :end-before: step-3 - - .. note:: User data in openstacksdk must be encoded to Base64. - -After the instance is created, cloud-init downloads and runs a script called -:code:`install.sh`. This script installs the Fractals application. Cloud-init -can consume bash scripts and a number of different types of data. You -can even provide multiple types of data. You can find more information -about cloud-init in the `official documentation `_. - -Introduction to key pairs -------------------------- - -Security is important when it comes to your instances; you can not have just -anyone accessing them. To enable logging into an instance, you must provide -the public key of an SSH key pair during instance creation. In section one, -you created and uploaded a key pair to OpenStack, and cloud-init installed it -for the user account. - -Even with a key in place, however, you must have the appropriate -security group rules in place to access your instance. - -Introduction to security groups -------------------------------- - -Security groups are sets of network access rules that are applied to -an instance's networking. By default, only egress (outbound) traffic -is allowed. You must explicitly enable ingress (inbound) network -access by creating a security group rule. - -.. warning:: Removing the egress rule created by OpenStack will cause - your instance networking to break. - -Start by creating a security group for the all-in-one instance and -adding the appropriate rules, such as HTTP (TCP port 80) and SSH (TCP -port 22): - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - :start-after: step-3 - :end-before: step-4 - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-3 - :end-before: step-4 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-3 - :end-before: step-4 - - .. note:: :code:`ex_create_security_group_rule()` takes ranges of - ports as input. This is why ports 80 and 22 are passed - twice. - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-3 - :end-before: step-3-end - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-3 - :end-before: step-4 - -You can list available security groups with: - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - :start-after: step-4 - :end-before: step-5 - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-4 - :end-before: step-5 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-4 - :end-before: step-5 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-4 - :end-before: step-4-end - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-4 - :end-before: step-5 - -Once you have created a rule or group, you can also delete it: - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - :start-after: step-5 - :end-before: step-6 - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-5 - :end-before: step-6 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-5 - :end-before: step-6 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-5 - :end-before: step-5-end - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-5 - :end-before: step-6 - -To see which security groups apply to an instance, you can: - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - :start-after: step-6 - :end-before: step-7 - - .. code-block:: none - - name: 'all-in-one', - description: 'network access for all-in-one application.', - security_group_rules: - - direction: 'ingress', - protocol': 'tcp', - remote_ip_prefix: '0.0.0.0/0', - port_range_max: 22, - security_group_id: '83aa1bf9-564a-47da-bb46-60cd1c63cc84', - port_range_min: 22, - ethertype: 'IPv4', - id: '5ff0008f-a02d-4b40-9719-f52c77dfdab0', - - direction: 'ingress', - protocol: 'tcp', - remote_ip_prefix: '0.0.0.0/0', - port_range_max: 80, - security_group_id: '83aa1bf9-564a-47da-bb46-60cd1c63cc84', - port_range_min: 80, - ethertype: 'IPv4', - id: 'c2539e49-b110-4657-bf0a-7a221f5e9e6f', - id: '83aa1bf9-564a-47da-bb46-60cd1c63cc84' - - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-6 - :end-before: step-7 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-6 - :end-before: step-7 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-6 - :end-before: step-6-end - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-6 - :end-before: step-7 - -.. todo:: print() ? - -Once you have configured permissions, you must know where to -access the application. - -Introduction to Floating IPs ----------------------------- - -As in traditional IT, cloud instances are accessed through IP addresses that -OpenStack assigns. How this is actually done depends on the networking setup -for your cloud. In some cases, you will simply get an Internet rout-able IP -address assigned directly to your instance. - -The most common way for OpenStack clouds to allocate Internet rout-able -IP addresses to instances, however, is through the use of floating -IPs. A floating IP is an address that exists as an entity unto -itself, and can be associated to a specific instance network -interface. When a floating IP address is associated to an instance -network interface, OpenStack re-directs traffic bound for that address -to the address of the instance's internal network interface -address. Your cloud provider will generally offer pools of floating -IPs for your use. - -To use a floating IP, you must first allocate an IP to your project, -then associate it to your instance's network interface. - -.. note:: - - Allocating a floating IP address to an instance does not change - the IP address of the instance, it causes OpenStack to establish - the network translation rules to allow an *additional* IP address. - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-7 - :end-before: step-8 - - If you have no free floating IPs that have been previously allocated - for your project, first select a floating IP pool offered by your - provider. In this example, we have selected the first one and assume - that it has available IP addresses. - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-8 - :end-before: step-9 - - Now request that an address from this pool be allocated to your project. - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-9 - :end-before: step-10 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-7 - :end-before: step-8 - - - If you have no free floating IPs that have been previously allocated - for your project, first select a floating IP pool offered by your - provider. In this example, we have selected the first one and assume - that it has available IP addresses. - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-8 - :end-before: step-9 - - Now request that an address from this pool be allocated to your project. - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-9 - :end-before: step-10 - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - :start-after: step-7 - :end-before: step-8 - -.. only:: jclouds - - First check for an unused floating IP. - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-7 - :end-before: step-7-end - - If you have no free floating IPs that have been previously allocated - for your project, then select a floating IP pool offered by your - provider. In this example, we have selected the first one and assume - that it has available IP addresses. - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-8 - :end-before: step-8-end - - Then request an IP number be allocated from the pool. - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-9 - :end-before: step-9-end - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-7 - :end-before: step-8 - - If you have no free floating IPs that have been allocated for - your project, first select a network which offer allocation - of floating IPs. In this example we use network which is - called :code:`public`. - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-8 - :end-before: step-9 - - Now request an address from this network to be allocated to your project. - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-9 - :end-before: step-10 - -Now that you have an unused floating IP address allocated to your -project, attach it to an instance. - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - :start-after: step-10 - :end-before: step-11 - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-10 - :end-before: step-11 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-10 - :end-before: step-11 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-10 - :end-before: step-10-end - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-10 - :end-before: step-11 - -That brings us to where we ended up at the end of -:doc:`/getting_started`. But where do we go from here? - -Splitting services across multiple instances -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -We have talked about separating functions into different micro-services, -and how that enables us to make use of the cloud architecture. Now -let us see that in action. - -The rest of this tutorial will not reference the all-in-one instance you -created in section one. Take a moment to delete this instance. - -It is easy to split out services into multiple instances. We will -create a controller instance called :code:`app-controller`, which -hosts the API, database, and messaging services. We will also create a -worker instance called :code:`app-worker-1`, which just generates -fractals. - -The first step is to start the controller instance. The instance has -the API service, the database, and the messaging service, as you can -see from the parameters passed to the installation script. - -========== ====================== ============================= -Parameter Description Values -========== ====================== ============================= -:code:`-i` Install a service :code:`messaging` (install RabbitMQ) and :code:`faafo` (install the Faafo app). -:code:`-r` Enable/start something :code:`api` (enable and start the API service), :code:`worker` (enable and start the worker service), and :code:`demo` (run the demo mode to request random fractals). -========== ====================== ============================= - -.. todo:: https://bugs.launchpad.net/openstack-manuals/+bug/1439918 - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - :start-after: step-11 - :end-before: step-12 - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-11 - :end-before: step-12 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-11 - :end-before: step-12 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-11 - :end-before: step-11-end - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-11 - :end-before: step-12 - -Note that this time, when you create a security group, you include a -rule that applies to only instances that are part of the worker group. - -Next, start a second instance, which will be the worker instance: - -.. todo :: more text necessary here... - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - :start-after: step-12 - :end-before: step-13 - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-12 - :end-before: step-13 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-12 - :end-before: step-13 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-12 - :end-before: step-12-end - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-12 - :end-before: step-13 - -Notice that you have added this instance to the worker_group, so it can -access the controller. - -As you can see from the parameters passed to the installation script, -you define this instance as the worker instance. But, you also pass -the address of the API instance and the message queue so the worker -can pick up requests. The Fractals application installation script -accepts several parameters. - -========== ==================================================== ==================================== -Parameter Description Example -========== ==================================================== ==================================== -:code:`-e` The endpoint URL of the API service. http://localhost/ -:code:`-m` The transport URL of the messaging service. amqp://guest:guest@localhost:5672/ -:code:`-d` The connection URL for the database (not used here). sqlite:////tmp/sqlite.db -========== ==================================================== ==================================== - -Now if you make a request for a new fractal, you connect to the -controller instance, :code:`app-controller`, but the work will -actually be performed by a separate worker instance - -:code:`app-worker-1`. - -Login with SSH and use the Fractal app -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Login to the worker instance, :code:`app-worker-1`, with SSH, using -the previous added SSH key pair "demokey". Start by getting the IP -address of the worker: - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - :start-after: step-13 - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :start-after: step-13 - :end-before: step-14 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :start-after: step-13 - :end-before: step-14 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - :start-after: step-13 - :end-before: step-13-end - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :start-after: step-13 - :end-before: step-14 - -Now you can SSH into the instance: - -.. code-block:: console - - $ ssh -i ~/.ssh/id_rsa USERNAME@IP_WORKER_1 - -.. note:: Replace :code:`IP_WORKER_1` with the IP address of the - worker instance and USERNAME to the appropriate user name. - -Once you have logged in, check to see whether the worker service process -is running as expected. You can find the logs of the worker service -in the directory :code:`/var/log/supervisor/`. - -.. code-block:: console - - worker # ps ax | grep faafo-worker - 17210 ? R 7:09 /usr/bin/python /usr/local/bin/faafo-worker - -Open :code:`top` to monitor the CPU usage of the :code:`faafo-worker` process. - -Now log into the controller instance, :code:`app-controller`, also -with SSH, using the previously added SSH key pair "demokey". - -.. code-block:: console - - $ ssh -i ~/.ssh/id_rsa USERNAME@IP_CONTROLLER - -.. note:: Replace :code:`IP_CONTROLLER` with the IP address of the - controller instance and USERNAME to the appropriate user name. - -Check to see whether the API service process is running like -expected. You can find the logs for the API service in the directory -:file:`/var/log/supervisor/`. - -.. code-block:: console - - controller # ps ax | grep faafo-api - 17209 ? Sl 0:19 /usr/bin/python /usr/local/bin/faafo-api - -Now call the Fractal application's command line interface (:code:`faafo`) to -request a few new fractals. The following command requests a few -fractals with random parameters: - -.. code-block:: console - - controller # faafo --endpoint-url http://localhost --verbose create - 2015-04-02 03:55:02.708 19029 INFO faafo.client [-] generating 6 task(s) - -Watch :code:`top` on the worker instance. Right after calling -:code:`faafo` the :code:`faafo-worker` process should start consuming -a lot of CPU cycles. - -.. code-block:: console - - PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND - 17210 root 20 0 157216 39312 5716 R 98.8 3.9 12:02.15 faafo-worker - -To show the details of a specific fractal use the subcommand -:code:`show` of the Faafo CLI. - -.. code-block:: console - - controller # faafo show 154c7b41-108e-4696-a059-1bde9bf03d0a - +------------+------------------------------------------------------------------+ - | Parameter | Value | - +------------+------------------------------------------------------------------+ - | uuid | 154c7b41-108e-4696-a059-1bde9bf03d0a | - | duration | 4.163147 seconds | - | dimensions | 649 x 869 pixels | - | iterations | 362 | - | xa | -1.77488588389 | - | xb | 3.08249829401 | - | ya | -1.31213919301 | - | yb | 1.95281690897 | - | size | 71585 bytes | - | checksum | 103c056f709b86f5487a24dd977d3ab88fe093791f4f6b6d1c8924d122031902 | - +------------+------------------------------------------------------------------+ - -There are more commands available; find out more details about them -with :code:`faafo get --help`, :code:`faafo list --help`, and -:code:`faafo delete --help`. - -.. note:: The application stores the generated fractal images directly - in the database used by the API service instance. Storing - image files in a database is not good practice. We are doing it - here as an example only as an easy way to enable multiple - instances to have access to the data. For best practice, we - recommend storing objects in Object Storage, which is - covered in :doc:`durability`. - -Next steps -~~~~~~~~~~ - -You should now have a basic understanding of the architecture of -cloud-based applications. In addition, you have had practice -starting new instances, automatically configuring them at boot, and -even modularizing an application so that you may use multiple -instances to run it. These are the basic steps for requesting and -using compute resources in order to run your application on an -OpenStack cloud. - -From here, go to :doc:`/scaling_out` to learn how to further scale -your application. Or, try one of these steps in the tutorial: - -* :doc:`/durability`: Learn how to use Object Storage to make your application more durable. -* :doc:`/block_storage`: Migrate the database to block storage, or use - the database-as-a-service component. -* :doc:`/orchestration`: Automatically orchestrate your application. -* :doc:`/networking`: Learn about complex networking. -* :doc:`/advice`: Get advice about operations. -* :doc:`/craziness`: Learn some crazy things that you might not think to do ;) - -Complete code sample -~~~~~~~~~~~~~~~~~~~~ - -The following file contains all of the code from this section of the -tutorial. This comprehensive code sample lets you view and run the -code as a single script. - -Before you run this script, confirm that you have set your -authentication information, the flavor ID, and image ID. - -.. only:: shade - - .. literalinclude:: ../samples/shade/introduction.py - :language: python - -.. only:: fog - - .. literalinclude:: ../samples/fog/introduction.rb - :language: ruby - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/introduction.py - :language: python - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/Introduction.java - :language: java - -.. only:: openstacksdk - - .. literalinclude:: ../samples/openstacksdk/introduction.py - :language: python diff --git a/firstapp/source/locale/de/LC_MESSAGES/firstapp.po b/firstapp/source/locale/de/LC_MESSAGES/firstapp.po deleted file mode 100644 index 3b770a57b..000000000 --- a/firstapp/source/locale/de/LC_MESSAGES/firstapp.po +++ /dev/null @@ -1,4549 +0,0 @@ -# Carsten Duch , 2015. #zanata -# OpenStack Infra , 2015. #zanata -# Frank Kloeker , 2017. #zanata -# Robert Simai , 2017. #zanata -# Andreas Jaeger , 2018. #zanata -# Frank Kloeker , 2018. #zanata -# Robert Simai , 2018. #zanata -# Robert Simai , 2019. #zanata -msgid "" -msgstr "" -"Project-Id-Version: OpenStack First Application 2013.2.1.dev4245\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-23 14:55+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-01-11 03:01+0000\n" -"Last-Translator: Robert Simai \n" -"Language: de\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"X-Generator: Zanata 4.3.3\n" -"Language-Team: German\n" - -msgid "**GettingStarted.java:**" -msgstr "** GettingStarted.java: **" - -msgid "**Remove the stack**" -msgstr "**Stapel entfernen**" - -msgid "**Show information about the stack**" -msgstr "**Informationen zum Stapel anzeigen**" - -msgid "**Stack create**" -msgstr "**Stapel erstellen**" - -msgid "**pom.xml:**" -msgstr "**pom.xml:**" - -msgid ".NET Framework" -msgstr ".NET Framework" - -msgid ":code:`-d`" -msgstr ":code:`-d`" - -msgid ":code:`-e`" -msgstr ":code: `-e`" - -msgid ":code:`-i`" -msgstr ":code: `-i`" - -msgid ":code:`-m`" -msgstr ":code:`-m`" - -msgid ":code:`-r`" -msgstr ":code: `-r`" - -msgid "" -":code:`api` (enable and start the API service), :code:`worker` (enable and " -"start the worker service), and :code:`demo` (run the demo mode to request " -"random fractals)." -msgstr "" -":code:`api` (Aktivieren und Starten des API-Dienstes) :code:`worker` " -"(Aktivieren und Starten des Worker Service) und :code:`demo` (den Demo-Modus " -"ausführen, um zufällige Fraktale anzufordern)." - -msgid "" -":code:`ceilometer_sample_query`: shows the samples used to build the " -"statistics." -msgstr "" -":code:`ceilometer_sample_query`: zeigt die zum Erstellen der Statistik " -"verwendeten Samples an." - -msgid "" -":code:`ceilometer_statistics_query`: shows the statistics used to trigger " -"the alarms." -msgstr "" -":code:`ceilometer_statistics_query`: Zeigt die Statistik an, die verwendet " -"wird, um die Alarme auszulösen." - -msgid "" -":code:`detach_volume` and :code:`destroy_volume` take a volume object, not a " -"name." -msgstr "" -":code: `detach_volume` und :code:` destroy_volume` nimm ein Volume-Objekt, " -"kein Name." - -msgid "" -":code:`ex_create_security_group_rule()` takes ranges of ports as input. This " -"is why ports 80 and 22 are passed twice." -msgstr "" -":code:`ex_create_security_group_rule ()` nimmt Bereiche von Ports als " -"Eingabe. Aus diesem Grund sind die Anschlüsse 80 und 22 zweimal angegeben." - -msgid "" -":code:`messaging` (install RabbitMQ) and :code:`faafo` (install the Faafo " -"app)." -msgstr "" -":code:`messaging` (installiere RabbitMQ) und :code:`faafo` (installiere die " -"Faafo app)." - -msgid "" -":code:`scale__workers_up_url`: A post to this url will add worker instances." -msgstr "" -":code:`scale__workers_up_url`: Ein Post zu dieser URL wird Worker-Instanzen " -"hinzufügen." - -msgid "" -":code:`scale_workers_down_url`: A post to this url will remove worker " -"instances." -msgstr "" -":code:`scale_workers_down_url`: Ein Post zu dieser URL entfernt Worker-" -"Instanzen." - -msgid ":doc:`/advice`: Get advice about operations." -msgstr ":doc: `/advice`: Ratschläge über den Betrieb erhalten." - -msgid "" -":doc:`/block_storage`: Migrate the database to block storage, or use the " -"database-as-a-service component." -msgstr "" -":doc: `/block_storage`: Migration der Datenbank, um den Speicher zu " -"blockieren oder die Datenbank-as-a-Service-Komponente zu verwenden." - -msgid "" -":doc:`/craziness`: Learn some crazy things that you might not think to do ;)" -msgstr "" -":doc: `/craziness`: Lernen Sie einige verrückte Dinge, die Sie nicht zu " -"träumen wagen ;)" - -msgid "" -":doc:`/durability`: Learn how to use Object Storage to make your application " -"durable." -msgstr "" -":doc:`/ durability`: Erfahren Sie, wie Sie Object Storage verwenden, um Ihre " -"Anwendung langlebig zu machen." - -msgid "" -":doc:`/durability`: Learn how to use Object Storage to make your application " -"more durable." -msgstr "" -":doc:`/durability`: Erfahren Sie, wie Sie Object Storage verwenden, um Ihre " -"Anwendung langlebiger zu machen." - -msgid ":doc:`/networking`: Learn about complex networking." -msgstr ":doc: `/networking`: Erfahren Sie mehr über komplexe Netzwerke." - -msgid ":doc:`/orchestration`: Automatically orchestrate your application." -msgstr "" -": doc: `/ orchestration`: Automatisches Orchestrieren Ihrer Applikation." - -msgid ":doc:`/scaling_out`: Learn how to scale your application." -msgstr "" -":doc:`/ scaling_out`: Erfahren Sie, wie Sie Ihre Anwendung skalieren können." - -msgid "" -"A .NET-based library. Use it to write C++ or C# code for Microsoft " -"applications." -msgstr "" -"Eine .NET-basierte Bibliothek. Verwenden Sie es, um C ++ oder C # -Code für " -"Microsoft-Anwendungen zu schreiben." - -msgid "" -"A Java-based library that the Apache Foundation manages. Use it to work with " -"multiple cloud types." -msgstr "" -"Eine Java-basierte Bibliothek, die die Apache Foundation verwaltet. " -"Verwenden Sie es, um mit mehreren Cloud-Typen zu arbeiten." - -msgid "A Node.js-based SDK. Use it work with multiple clouds." -msgstr "" -"Ein Node.js-basiertes SDK. Verwenden Sie es,um mit mehreren Clouds zu " -"arbeiten." - -msgid "" -"A PHP-based library. Use it to write PHP code that works with OpenStack " -"clouds." -msgstr "" -"Eine PHP-basierte Bibliothek. Verwenden Sie es, um PHP-Code zu schreiben, " -"der mit OpenStack-Clouds arbeitet." - -msgid "" -"A Python-based library developed by OpenStack Infra team. Use it to operate " -"multiple OpenStack clouds." -msgstr "" -"Eine Python-basierte Bibliothek, die von OpenStack Infra entwickelt wurde. " -"Verwenden Sie es, um mehrere OpenStack-Clouds zu betreiben." - -msgid "" -"A Python-based library that the Apache Foundation manages. Use it to work " -"with multiple cloud types." -msgstr "" -"Eine Python-basierte Bibliothek, die die Apache-Stiftung verwaltet. " -"Verwenden Sie es, um mit mehreren Cloud-Typen zu arbeiten." - -msgid "A Ruby-based SDK. Use it to work with multiple clouds." -msgstr "" -"Ein Ruby-basiertes SDK. Verwenden Sie es, um mit mehreren Clouds zu arbeiten." - -msgid "A floating IP helper function" -msgstr "Eine Floating-IP-Helferfunktion" - -msgid "A general overview" -msgstr "Ein allgemeiner Überblick" - -msgid "" -"A go-based SDK. Use it to write Golang code that works with OpenStack clouds." -msgstr "" -"Ein Go-basiertes SDK. Verwenden Sie es, um Golang-Code zu schreiben, der mit " -"OpenStack-Clouds arbeitet." - -msgid "" -"A key pair. To access your instance, you must import an SSH public key into " -"OpenStack to create a key pair. OpenStack installs this key pair on the new " -"instance. Typically, your public key is written to :code:`.ssh/id_rsa.pub`. " -"If you do not have an SSH public key file, follow `these instructions " -"`_ first. We will " -"cover these instructions in depth in :doc:`/introduction`." -msgstr "" -"Ein Schlüsselpaar. Um auf Ihre Instanz zuzugreifen, müssen Sie einen SSH " -"Public Key in OpenStack importieren, um ein Schlüsselpaar zu erstellen. " -"OpenStack installiert dieses Schlüsselpaar auf der neuen Instanz. " -"Normalerweise wird Ihr öffentlicher Schlüssel geschrieben an :code: `.ssh/" -"id_rsa.pub`. Wenn Sie keine SSH-Public-Key-Datei haben, folgen Sie diesen " -"Anweisungen `_ " -"zuerst Wir werden diese Anleitung ausführlich behandeln in :doc:`/" -"introduction`." - -msgid "" -"A simple solution is to give half of your friends one address and half the " -"other, but that solution is not sustainable. Instead, you can use a `DNS " -"round robin `_ to do that " -"automatically. However, OpenStack networking can provide Load Balancing as a " -"Service, which :doc:`/networking` explains." -msgstr "" -"Eine einfache Lösung ist, die Hälfte Ihrer Freunde eine Adresse und die " -"Hälfte der anderen zu geben, aber diese Lösung ist nicht nachhaltig. " -"Stattdessen können Sie ein 'DNS Round Robin' benutzen `_, um das automatisch zu tun. Allerdings kann " -"OpenStack Networking Load Balancing als Service bieten, was :doc:`/" -"networking` erklärt." - -msgid "" -"API load is a slightly different problem than the previous one regarding " -"capacity to work. We can simulate many requests to the API, as follows:" -msgstr "" -"API Last ist ein etwas anderes Problem als die vorherige in Bezug auf die " -"Fähigkeit zu arbeiten. Wir können viele Anfragen an die API simulieren, wie " -"folgt:" - -msgid "API traffic" -msgstr "API-Verkehr" - -msgid "Access the application" -msgstr "Zugriff auf die Anwendung" - -msgid "Add metadata to objects" -msgstr "Metadaten zu Objekten hinzufügen" - -msgid "Add the option Networks and send its id to attach the instance to:" -msgstr "" -"Fügen Sie die Option Netzwerke hinzu und geben Sie ihre ID an, um die " -"Instanz auf folgende Adresse zu setzen:" - -msgid "" -"Add the parameter network and send its name or id to attach the instance to:" -msgstr "" -"Fügen Sie das Parameter-Netzwerk hinzu und geben Sie den Namen oder die ID " -"an, um die Instanz an folgende Adresse anzuhängen:" - -msgid "" -"Adding this capacity enables you to deal with a higher number of requests " -"for fractals. As soon as these worker instances start, they begin checking " -"the message queue for requests, reducing the overall backlog like a new " -"register opening in the supermarket." -msgstr "" -"Wenn Sie diese Kapazität hinzufügen, können Sie mit einer höheren Anzahl von " -"Anträgen auf Fraktale umgehen. Sobald diese Worker-Instanzen beginnen, " -"beginnen sie mit der Überprüfung der Message-Queue für Anfragen, wodurch der " -"Gesamt-Backlog wie eine neue Kasseneröffnung im Supermarkt reduziert wird." - -msgid "Advice for developers new to operations" -msgstr "Beratung für Entwickler, die neu in Betrieb sind" - -msgid "" -"After separating the Fractal worker nodes into their own networks, the next " -"logical step is to move the Fractal API service to a load balancer, so that " -"multiple API workers can handle requests. By using a load balancer, the API " -"service can be scaled out in a similar fashion to the worker nodes." -msgstr "" -"Nach dem Trennen der Fractal-Worker-Knoten in ihre eigenen Netzwerke ist der " -"nächste logische Schritt, den Fractal-API-Dienst zu einem Load-Balancer zu " -"verschieben, so dass mehrere API-Worker Anfragen verarbeiten können. Durch " -"die Verwendung eines Load-Balancers kann der API-Service in ähnlicher Weise " -"wie die Worker-Knoten skaliert werden." - -msgid "" -"After the instance is created, cloud-init downloads and runs a script " -"called :code:`install.sh`. This script installs the Fractals application. " -"Cloud-init can consume bash scripts and a number of different types of data. " -"You can even provide multiple types of data. You can find more information " -"about cloud-init in the `official documentation `_." -msgstr "" -"Nachdem die Instanz erstellt wurde, lädt Cloud-init ein Skript namens :code:" -"`install.sh` herunter und führt es aus. Dieses Skript installiert die " -"Fractals-Anwendung. Cloud-init kann Bash-Scripts und eine Reihe von " -"verschiedenen Arten von Daten verarbeiten. Sie können sogar mehrere Arten " -"von Daten bereitstellen. Weitere Informationen über cloud-init finden Sie in " -"der offiziellen Dokumentation " -"`_." - -msgid "Allocate floating ips and assign them to the web server nodes." -msgstr "Weisen Sie Floating-IPs zu und weisen Sie sie den Webserverknoten zu." - -msgid "Allocate the floating IP address:" -msgstr "Weisen Sie die Floating-IP-Adresse zu:" - -msgid "" -"Allocating a floating IP address to an instance does not change the IP " -"address of the instance, it causes OpenStack to establish the network " -"translation rules to allow an *additional* IP address." -msgstr "" -"Das Zuweisen einer Floating-IP-Adresse zu einer Instanz ändert nicht die IP-" -"Adresse der Instanz, es bewirkt, dass OpenStack die " -"Netzwerkübersetzungsregeln festlegt, um eine *zusätzliche IP-Adresse " -"zuzulassen." - -msgid "" -"An often-cited reason for designing applications by using cloud patterns is " -"the ability to **scale out**. That is: to add additional resources, as " -"required. Contrast this strategy to the previous one of increasing capacity " -"by scaling up the size of existing resources. To scale out, you must:" -msgstr "" -"Ein oft zitierter Grund für die Gestaltung von Anwendungen mit Hilfe von " -"Cloud-Mustern ist die Fähigkeit, **auszugleichen**. Das ist: um zusätzliche " -"Ressourcen hinzuzufügen, wie erforderlich. Kontrastieren Sie diese Strategie " -"auf die vorherige der zunehmenden Kapazität durch die Skalierung der Größe " -"der vorhandenen Ressourcen. Um zu skalieren, müssen Sie:" - -msgid "And as before, the stack takes a few minutes to build!" -msgstr "Und wie schon zuvor, der Stapel dauert ein paar Minuten zu bauen!" - -msgid "And confirm it is in place:" -msgstr "Und bestätigen das es vorhanden ist:" - -msgid "" -"Another approach is to create a 'gold' image, which pre-installs your " -"application and its dependencies. A 'gold' image enables faster boot times " -"and more control over what is on the instance. However, if you use 'gold' " -"images, you must have a process in place to ensure that these images do not " -"fall behind on security updates." -msgstr "" -"Ein weiterer Ansatz ist es, ein 'goldenses' AbBild zu erstellen, das Ihre " -"Anwendung und ihre Abhängigkeiten vorinstalliert. Ein 'goldenes' Abbild " -"ermöglicht schnellere Boot-Zeiten und mehr Kontrolle über das, was auf der " -"Instanz ist. Allerdings, wenn Sie 'goldene' Abbiler verwenden, müssen Sie " -"einen Prozess haben, um sicherzustellen, dass diese Abbilder nicht bei " -"Sicherheits-Updates herunterfallen." - -msgid "" -"Anyone with a programming background can easily read the code in this guide. " -"Although this guide focuses on a particular SDK, you can use other languages " -"and toolkits with the OpenStack cloud:" -msgstr "" -"Jeder mit einem Programmierhintergrund kann den Code in diesem Handbuch " -"leicht lesen. Obwohl diese Anleitung auf ein bestimmtes SDK fokussiert ist, " -"können Sie mit der OpenStack Cloud andere Sprachen und Toolkits verwenden:" - -msgid "Appendix" -msgstr "Anhang" - -msgid "Application deployment" -msgstr "Anwendungsbereitstellung" - -msgid "" -"Application developers and operators who use phoenix servers have access to " -"systems that are built from a known baseline, such as a specific operating " -"system version, and to tooling that automatically builds, installs, and " -"configures a system." -msgstr "" -"Anwendungsentwickler und Betreiber, die Phoenix-Server verwenden, haben " -"Zugriff auf Systeme, die aus einer bekannten Baseline aufgebaut werden, wie " -"z. B. einer bestimmten Betriebssystemversion und einem Tool, das ein System " -"automatisch aufbaut, installiert und konfiguriert." - -msgid "Architect your application to make use of additional resources." -msgstr "Re-Architekt Ihrer Applikation, um zusätzliche Ressourcen zu nutzen." - -msgid "" -"Armed with a security group, image, and flavor size, you can add multiple " -"API services:" -msgstr "" -"Bewaffnet mit einer Sicherheitsgruppe, Abbild und Varianten-Größe, können " -"Sie mehrere API-Dienste hinzufügen:" - -msgid "As before, pass in configuration settings as parameters." -msgstr "" -"Wie vorher, passieren Sie die Konfigurationseinstellungen als Parameter." - -msgid "" -"As in traditional IT, cloud instances are accessed through IP addresses that " -"OpenStack assigns. How this is actually done depends on the networking setup " -"for your cloud. In some cases, you will simply get an Internet rout-able IP " -"address assigned directly to your instance." -msgstr "" -"Wie in der traditionellen IT werden Cloud-Instanzen über IP-Adressen " -"angesprochen, die OpenStack zuweist. Wie dies tatsächlich geschieht, hängt " -"vom Netzwerk-Setup für Ihre Cloud ab. In einigen Fällen erhalten Sie einfach " -"eine Internet-Router-fähige IP-Adresse, die direkt Ihrer Instanz zugewiesen " -"wurde." - -msgid "" -"As mentioned in :doc:`/introduction`, the generated fractal images are saved " -"on the local file system of the API service instances. Because you have " -"multiple API instances up and running, the fractal images are spread across " -"multiple API services, which causes a number of :code:`IOError: [Errno 2] No " -"such file or directory` exceptions when trying to download a fractal image " -"from an API service instance that does not have the fractal image on its " -"local file system." -msgstr "" -"Wie bereits erwähnt in :doc:`/introduction`, werden die generierten " -"Fraktalbilder auf dem lokalen Dateisystem der API Service Instanzen " -"gespeichert. Da Sie mehrere API-Instanzen auf- und ablaufen lassen, werden " -"die Fraktalbilder über mehrere API-Dienste verteilt, was eine Reihe von :" -"codet: `IOError: [Errno 2] No such file or directory` Fehler beim Versuch, " -"ein Fraktalbild herunterzuladen eine API-Service-Instanz, die nicht das " -"Fraktalbild auf seinem lokalen Dateisystem hat, verursacht." - -msgid "" -"As with classical infrastructure, failures of the underpinning cloud " -"infrastructure (hardware, networks, and software) are unavoidable. When you " -"design for the cloud, it is crucial that your application is designed for an " -"environment where failures can happen at any moment. This may sound like a " -"liability, but it is not; by designing your application with a high degree " -"of fault tolerance, you also make it resilient, and more adaptable, in the " -"face of change." -msgstr "" -"Wie bei der klassischen Infrastruktur sind Ausfälle der zugrunde liegenden " -"Cloud-Infrastruktur (Hardware, Netzwerke und Software) unvermeidbar. Wenn " -"Sie Ihre Cloud entwerfen, ist es entscheidend, dass Ihre Anwendung für eine " -"Umgebung entworfen ist, in der Ausfälle jederzeit passieren können. Das " -"klingt wie eine Drohung, aber es ist nicht; Durch die Gestaltung Ihrer " -"Anwendung mit einem hohen Maß an Fehlertoleranz, machen Sie es auch " -"belastbar und anpassungsfähiger, angesichts der Veränderung." - -msgid "" -"As you can see from the parameters passed to the installation script, you " -"define this instance as the worker instance. But, you also pass the address " -"of the API instance and the message queue so the worker can pick up " -"requests. The Fractals application installation script accepts several " -"parameters." -msgstr "" -"Wie Sie aus den an das Installationsskript übergebenen Parametern sehen " -"können, definieren Sie diese Instanz als Worker-Instanz. Aber Sie übergeben " -"auch die Adresse der API-Instanz und die Nachrichtenwarteschlange, damit der " -"Worker Anfragen abholen kann. Das Installationsskript der Fractals-Anwendung " -"akzeptiert mehrere Parameter." - -msgid "" -"As you change the topology of your applications, you must update or create " -"security groups. Here, you re-create the required security groups." -msgstr "" -"Wenn Sie die Topologie Ihrer Anwendungen ändern, müssen Sie " -"Sicherheitsgruppen aktualisieren oder erstellen. Hier erstellen Sie die " -"erforderlichen Sicherheitsgruppen neu." - -msgid "Associate a floating IP for external connectivity" -msgstr "Verknüpfen Sie eine Floating-IP für externe Konnektivität" - -msgid "" -"At the end of this section, you make some slight changes to the networking " -"topology by using the OpenStack Networking API to create the 10.0.1.0/24 " -"network to which the worker nodes attach. You use the 10.0.3.0/24 API " -"network to attach the Fractal API servers. Web server instances have their " -"own 10.0.2.0/24 network, which is accessible by fractal aficionados " -"worldwide, by allocating floating IPs from the public network." -msgstr "" -"Am Ende dieses Abschnitts machen Sie einige Änderungen an der Netzwerk-" -"Topologie, indem Sie die OpenStack Networking API verwenden, um das " -"10.0.1.0/24 Netzwerk zu erstellen, an das die Worker-Knoten angeschlossen " -"sind. Sie verwenden das 10.0.3.0/24 API-Netzwerk, um die Fractal-API-Server " -"anzubringen. Web-Server-Instanzen haben ihr eigenes 10.0.2.0/24 Netzwerk, " -"das von Fraktal-Aficionados weltweit zugänglich ist, indem es Floating-IPs " -"aus dem öffentlichen Netzwerk zuteilt." - -msgid "Attach the floating IP address to the instance:" -msgstr "Bringen Sie die Floating-IP-Adresse an die Instanz an:" - -msgid "Automation" -msgstr "Automatisierung" - -msgid "" -"Back up the Fractals app images, which are currently stored inside the " -"database, on Object Storage." -msgstr "" -"Sichern Sie die Fractals App-Bilder, die derzeit in der Datenbank " -"gespeichert sind, auf Object Storage." - -msgid "Back up the Fractals from the database on the Object Storage" -msgstr "Sichern Sie die Fractals aus der Datenbank auf dem Objektspeicher" - -msgid "Backups" -msgstr "Sicherungen" - -msgid "Basics" -msgstr "Grundlagen" - -msgid "" -"Because all service endpoints use the Identity Service for authentication " -"and authorization, place the following code in the 'void Main()' entry-point " -"function." -msgstr "" -"Da alle Service-Endpunkte den Identity Service zur Authentifizierung und " -"Autorisierung verwenden, platzieren Sie den folgenden Code in die 'void Main " -"()' Einstiegspunktfunktion." - -msgid "" -"Because the SDKs do not fully support the OpenStack Networking API, this " -"section uses the command-line clients." -msgstr "" -"Da die SDKs die OpenStack Networking API nicht vollständig unterstützen, " -"verwendet dieser Abschnitt die Befehlszeilenclients." - -msgid "" -"Because the local file system is ephemeral storage, the fractal images are " -"lost along with the instance when the instance is terminated. Block-based " -"storage, which the :doc:`/block_storage` section discusses, avoids that " -"problem, but like local file systems, it requires administration to ensure " -"that it does not fill up, and immediate attention if disks fail." -msgstr "" -"Da das lokale Dateisystem eine kurzlebige Speicherung ist, gehen die " -"Fraktalbilder zusammen mit der Instanz verloren, wenn die Instanz beendet " -"ist. Block-basierte Speicherung, die der :doc: `/block_storage` Abschnitt " -"diskutiert, vermeidet dieses Problem, aber wie lokale Dateisysteme, " -"erfordert es die Verwaltung, um sicherzustellen, dass es nicht überläuft, " -"und sofortige Aufmerksamkeit, wenn Festplatten kaputtgehen" - -msgid "" -"Because the tutorial reuses the :code:`conn` object, make sure that you " -"always have one handy." -msgstr "" -"Weil das Tutorial das :code: `conn` Objekt wiederverwendet, stellen Sie " -"sicher, dass Sie immer eins zur Hand haben." - -msgid "Before proceeding, install the latest version of shade." -msgstr "Bevor Sie fortfahren, installieren Sie die neueste Version von shade." - -msgid "Before you continue, you must do one more thing." -msgstr "Bevor Sie fortfahren, müssen Sie noch etwas machen." - -msgid "" -"Before you run this class, confirm that you have configured it for your " -"cloud and the instance running the Fractals application." -msgstr "" -"Bevor Sie diese Klasse ausführen, bestätigen Sie, dass Sie es für Ihre Cloud " -"konfiguriert haben und die Instanz läuft, die die Fractals-Anwendung " -"ausführt." - -msgid "" -"Before you run this script, confirm that you have set your authentication " -"information, the flavor ID, and image ID." -msgstr "" -"Bevor Sie dieses Skript ausführen, bestätigen Sie, dass Sie Ihre " -"Authentifizierungsinformationen, die Varianten-ID und die Image-ID " -"festgelegt haben." - -msgid "" -"Before you scale out your application services, like the API service or the " -"workers, you must add a central database and an :code:`app-services` " -"messaging instance. The database and messaging queue will be used to track " -"the state of fractals and to coordinate the communication between the " -"services." -msgstr "" -"Bevor Sie Ihre Anwendungsdienste ausschalten, wie der API-Dienst oder die " -"Mitarbeiter, müssen Sie eine zentrale Datenbank und einen Code hinzufügen: " -"`app-services` Messaging-Instanz. Die Datenbank- und Messaging-Warteschlange " -"wird verwendet, um den Zustand der Fraktale zu verfolgen und die " -"Kommunikation zwischen den Diensten zu koordinieren." - -msgid "Block Storage" -msgstr "Blockieren Sie Speicherplatz" - -msgid "Boot and configure an instance" -msgstr "Starten und konfigurieren Sie eine Instanz" - -msgid "Booting a worker" -msgstr "Booten eines Workers" - -msgid "Bootstrap your network" -msgstr "Ihr Netzwerk bootstrappen" - -msgid "" -"By default, data in OpenStack instances is stored on 'ephemeral' disks. " -"These disks remain with the instance throughout its lifetime. When you " -"terminate the instance, that storage and all the data stored on it " -"disappears. Ephemeral storage is allocated to a single instance and cannot " -"be moved to another instance." -msgstr "" -"Standardmäßig werden Daten in OpenStack-Instanzen auf 'ephemeral' " -"Festplatten gespeichert. Diese Festplatten bleiben während des ganzen Lebens " -"mit der Instanz. Wenn Sie die Instanz beenden, verschwindet diese Festplatte " -"und alle darin gespeicherten Daten. Der kurzlebige Speicher wird einer " -"einzigen Instanz zugeordnet und kann nicht in eine andere Instanz verschoben " -"werden." - -msgid "" -"CI/CD means that you always test your application and make frequent " -"deployments to production." -msgstr "" -"CI/CD bedeutet, dass Sie immer Ihre Anwendung testen und häufige " -"Bereitstellungen zur Produktion machen." - -msgid "" -"Call the :code:`faafo` command-line interface to request the generation of " -"five large fractals." -msgstr "" -"Rufen Sie den :code:`faafo` Befehlszeilenschnittstelle an, um die Erzeugung " -"von fünf großen Fraktalen anzufordern." - -msgid "" -"Change the API code, such as \"list fractals,\" to query Object Storage to " -"get the metadata." -msgstr "" -"Ändern Sie den API-Code wie 'list fractals', um Object Storage abzufragen, " -"um die Metadaten zu erhalten." - -msgid "" -"Change the Fractal upload code to store metadata with the object in Object " -"Storage." -msgstr "" -"Ändern Sie den Fractal-Upload-Code, um Metadaten mit dem Objekt in Object " -"Storage zu speichern." - -msgid "" -"Check to see whether the API service process is running like expected. You " -"can find the logs for the API service in the directory :file:`/var/log/" -"supervisor/`." -msgstr "" -"Überprüfen Sie, ob der API-Serviceprozess wie erwartet ausgeführt wird. Sie " -"finden die Protokolle für den API-Dienst im Verzeichnis :file:`/var/log/" -"supervisor/`." - -msgid "" -"Choose an image and flavor for your instance. You need about 1GB RAM, 1 CPU, " -"and a 1GB disk. This example uses the Ubuntu image with a small flavor, " -"which is a safe choice. In subsequent tutorial sections in this guide, you " -"must change the image and flavor IDs to correspond to the image and flavor " -"that you choose." -msgstr "" -"Wählen Sie ein Abbild und eine Variante für Ihre Instanz. Sie benötigen ca. " -"1GB RAM, 1 CPU und eine 1GB Festplatte. Dieses Beispiel nutzt das Ubuntu-" -"Abbild mit einer kleinen Variante, was eine sichere Wahl ist. In " -"nachfolgenden Tutorialabschnitten in diesem Handbuch müssen Sie die Abbild- " -"und Varianten-IDs entsprechend dem Abbild und der Variante ändern, die Sie " -"gewählt haben." - -msgid "Choose your OpenStack SDK" -msgstr "Wählen Sie Ihr OpenStack SDK" - -msgid "Cloud application architecture principles" -msgstr "Cloud-Anwendung Architektur Prinzipien" - -msgid "" -"Cloud applications often use many small instances rather than a few large " -"instances. Provided that an application is sufficiently modular, you can " -"easily distribute micro-services across as many instances as required. This " -"architecture enables an application to grow past the limit imposed by the " -"maximum size of an instance. It is like trying to move a large number of " -"people from one place to another; there is only so many people you can put " -"on the largest bus, but you can use an unlimited number of buses or small " -"cars, which provide just the capacity you need - and no more." -msgstr "" -"Cloud-Anwendungen verwenden oft viele kleine Instanzen eher als ein paar " -"große Instanzen. Vorausgesetzt, dass eine Anwendung ausreichend modular ist, " -"können Sie problemlos Mikrodienste über möglichst viele Fälle verteilen. " -"Diese Architektur ermöglicht es einer Anwendung, an der Grenze vorbei zu " -"gehen, die durch die maximale Größe einer Instanz auferlegt wird. Es ist wie " -"das Versuchen, eine große Anzahl von Menschen von einem Ort zum anderen zu " -"bewegen; Es gibt nur so viele Leute, die man in den größten Bus setzen kann, " -"aber man kann eine unbegrenzte Anzahl von Bussen oder Kleinwagen benutzen, " -"die nur die Kapazität bieten, die man braucht - und nicht mehr." - -msgid "" -"Cloud applications typically share several design principles. These " -"principles influenced the design of the Fractals application." -msgstr "" -"Cloud-Anwendungen teilen sich typischerweise mehrere Designprinzipien. Diese " -"Grundsätze beeinflussten die Gestaltung der Fractals-Anwendung." - -msgid "" -"Cloud resources, such as running instances that you no longer use, can cost " -"money. To avoid unexpected expenses, destroy cloud resources." -msgstr "" -"Cloud-Ressourcen, wie z.B. Instanzen, die Sie nicht mehr verwenden, können " -"Geld kosten. Um unerwartete Ausgaben zu vermeiden, zerstören Sie die Cloud-" -"Ressourcen." - -msgid "Complete code sample" -msgstr "Komplettes Codebeispiel" - -msgid "Configuration management" -msgstr "Konfigurationsmanagement" - -msgid "" -"Configuration management tools, such as Ansible, Chef, and Puppet, enable " -"you to describe exactly what to install and configure on an instance. Using " -"these descriptions, these tools implement the changes that are required to " -"get to the desired state." -msgstr "" -"Konfigurationsmanagement-Tools wie Ansible, Chef und Puppet ermöglichen es " -"Ihnen, genau zu beschreiben, was zu installieren und zu konfigurieren auf " -"einer Instanz. Mit diesen Beschreibungen implementieren diese Werkzeuge die " -"Änderungen, die erforderlich sind, um in den gewünschten Zustand zu gelangen." - -msgid "Configure the Fractals app to use Object Storage" -msgstr "Konfigurieren Sie die Fractals App, um Object Storage zu verwenden" - -msgid "Confirm that the stack created two alarms:" -msgstr "Vergewissern Sie sich, dass der Stapel zwei Alarme erstellt hat:" - -msgid "Confirm that they were added:" -msgstr "Bestätigen Sie, dass sie hinzugefügt wurden:" - -msgid "" -"Confirm that we have a public network by listing the networks our tenant has " -"access to. The public network does not have to be named public - it could be " -"'external', 'net04_ext' or something else - the important thing is it exists " -"and can be used to reach the Internet." -msgstr "" -"Bestätigen Sie, dass wir ein öffentliches Netz haben, indem wir die " -"Netzwerke aufrufen, auf die unser Tenant zugreifen kann. Das öffentliche " -"Netz muss nicht öffentlich benannt werden - es könnte 'extern', 'net04_ext' " -"oder etwas anderes sein - das Wichtigste ist, dass es existiert und " -"verwendet werden kann, um das Internet zu erreichen." - -msgid "Connect to the API endpoint:" -msgstr "Verbinden mit dem API-Endpunkt:" - -msgid "Connecting to the Internet" -msgstr "Verbindung zum Internet herstellen" - -msgid "Contents" -msgstr "Inhalt" - -msgid "Create a network and subnet for the web server nodes." -msgstr "Erstellen Sie ein Netzwerk und ein Subnetz für die Webserverknoten." - -msgid "" -"Create a network and subnet for the worker nodes. This is the private data " -"network." -msgstr "" -"Erstellen Sie ein Netzwerk und ein Subnetz für die Worker-Knoten. Dies ist " -"das private Datennetzwerk." - -msgid "Create a router for the private data network." -msgstr "Erstellen Sie einen Router für das private Datennetzwerk." - -msgid "" -"Create a volume object by using the unique identifier (UUID) for the volume. " -"Then, use the server object from the previous code snippet to attach the " -"volume to it at :code:`/dev/vdb`:" -msgstr "" -"Erstellen Sie ein Volume-Objekt, indem Sie die eindeutige Kennung (UUID) für " -"das Volume verwenden. Verwenden Sie dann das Serverobjekt aus dem vorherigen " -"Code-Snippet, um das Volume an folgende Adresse anzuhängen: code: `/ dev / " -"vdb`:" - -msgid "" -"Create and delete compute resources. These resources are virtual machine " -"instances where the Fractals application runs." -msgstr "" -"Erstellen und Löschen von Berechnungsressourcen. Diese Ressourcen sind " -"virtuelle Maschineninstanzen, in denen die Fractals-Anwendung läuft." - -msgid "Create more API service requests" -msgstr "Erstellen Sie weitere API-Dienstanforderungen" - -msgid "Create more tasks" -msgstr "Erstellen Sie mehr Aufgaben" - -msgid "Create networks" -msgstr "Netzwerke erstellen" - -msgid "Create the instance." -msgstr "Erstellen Sie die Instanz." - -msgid "" -"Currently, you cannot directly store generated images in OpenStack Object " -"Storage. Please revisit this section again in the future." -msgstr "" -"Derzeit können Sie nicht direkt gespeicherte Bilder in OpenStack Object " -"Storage speichern. Bitte wiederholen Sie diesen Abschnitt nochmals in " -"Zukunft." - -msgid "Customize networking for better performance and segregation." -msgstr "Anpassung der Vernetzung für bessere Leistung und Segregation." - -msgid "" -"Define a short function to locate unused or allocate floating IPs. This " -"saves a few lines of code and prevents you from reaching your floating IP " -"quota too quickly." -msgstr "" -"Definieren Sie eine kurze Funktion, um unbenutzte oder zugängliche Floating-" -"IPs zu lokalisieren. Das spart ein paar Zeilen Code und verhindert, dass Sie " -"Ihr Floating-IP-Quota zu schnell erreichen." - -msgid "Delete containers" -msgstr "Container löschen" - -msgid "Deploy the application to a new instance" -msgstr "Bereitstellen der Anwendung auf eine neue Instanz" - -msgid "" -"Deploying application data and configuration to the instance can take some " -"time. Consider enjoying a cup of coffee while you wait. After the " -"application deploys, you can use your preferred browser to visit the awesome " -"graphic interface at the following link." -msgstr "" -"Das Anlegen von Anwendungsdaten und die Konfiguration an die Instanz kann " -"einige Zeit in Anspruch nehmen. Denken Sie daran, eine Tasse Kaffee zu " -"genießen, während Sie warten. Nachdem die Anwendung installiert ist, können " -"Sie Ihren bevorzugten Browser verwenden, um die fantastische grafische " -"Oberfläche unter folgendem Link zu besuchen." - -msgid "" -"Deploying applications in a cloud environment can be very different from " -"deploying them in a traditional IT environment. This guide teaches you how " -"to deploy applications on OpenStack and some best practices for cloud " -"application development." -msgstr "" -"Die Bereitstellung von Anwendungen in einer Cloud-Umgebung kann sich sehr " -"von der Bereitstellung in einer herkömmlichen IT-Umgebung unterscheiden. " -"Dieser Leitfaden lehrt Sie, wie Sie Anwendungen auf OpenStack bereitstellen " -"und einige bewährte Methoden für die Entwicklung von Cloud-Anwendungen." - -msgid "Description" -msgstr "Beschreibung" - -msgid "Destroy an instance" -msgstr "Zerstören einer Instanz" - -msgid "" -"Do not worry if these concepts are not yet completely clear. In :doc:`/" -"introduction`, we explore these concepts in more detail." -msgstr "" -"Machen Sie sich keine Sorgen, wenn Ihnen diese Konzepte noch nicht ganz klar " -"sind. In :doc:`/introduction`, erforschen wir diese Konzepte genauer." - -msgid "Enable/start something" -msgstr "Aktivieren/Starten von etwas" - -msgid "" -"Ensure you have an :file:`openrc.sh` file, source it, and validate that your " -"trove client works:" -msgstr "" -"Stellen Sie sicher, dass Sie eine Datei haben: `openrc.sh` Datei, Quelle, " -"und bestätigen Sie, dass Ihr Trove Client funktioniert:" - -msgid "" -"Ensure you have an openrc.sh file, source it, and then check that your " -"openstack client works: ::" -msgstr "" -"Stellen Sie sicher, dass Sie eine openrc.sh-Datei haben, sie sourcen, und " -"überprüfen Sie dann, ob Ihr Openstack-Client funktioniert: ::" - -msgid "" -"Even with a key in place, however, you must have the appropriate security " -"group rules in place to access your instance." -msgstr "" -"Sogar mit einem installierten Schlüssel, müssen Sie jedoch die " -"entsprechenden Sicherheitsgruppenregeln aktiviert haben, um auf Ihre Instanz " -"zuzugreifen." - -msgid "Example" -msgstr "Beispiel" - -msgid "Explore and apply advanced OpenStack cloud features." -msgstr "Entdecken und bewerben Sie erweiterte OpenStack Cloud-Funktionen." - -msgid "Extra features" -msgstr "Zusatzfunktionen" - -msgid "Extra security groups" -msgstr "Zusätzliche Sicherheitsgruppen" - -msgid "Extras" -msgstr "Extras" - -msgid "Fail fast" -msgstr "Schnell fehlschlagen" - -msgid "Fault tolerance" -msgstr "Fehlertoleranz" - -msgid "Fault tolerance is essential to the cloud-based application." -msgstr "Fehlertoleranz ist für die Cloud-basierte Anwendung unerlässlich." - -msgid "Final result" -msgstr "Endergebnis" - -msgid "Finally, clean up by deleting the test object:" -msgstr "Schließlich bereinigen Sie, indem Sie das Testobjekt löschen:" - -msgid "" -"Finally, start the stopped MySQL database service and validate that " -"everything works as expected." -msgstr "" -"Schließlich starten Sie den gestoppten MySQL-Datenbankdienst und bestätigen, " -"dass alles wie erwartet funktioniert." - -msgid "First check for an unused floating IP." -msgstr "Zuerst auf eine unbenutzte Floating-IP prüfen" - -msgid "" -"First provide the appropriate identity, credentials and authorization URL " -"for your project. Then get an instance of the Nova API interface." -msgstr "" -"Zuerst die entsprechende Identität, Anmeldeinformationen und Berechtigungs-" -"URL für Ihr Projekt zur Verfügung stellen. Dann bekommen Sie eine Instanz " -"der Nova API-Schnittstelle." - -msgid "First, learn how to connect to the Object Storage endpoint:" -msgstr "" -"Erstens erfahren Sie, wie Sie eine Verbindung zum Objektspeicher-Endpunkt " -"herstellen können:" - -msgid "" -"First, tell the connection to get a specified image by using the ID of the " -"image that you picked in the previous section:" -msgstr "" -"Zuerst fragen Sie die Verbindung nach einem bestimmten Abbild, indem Sie die " -"ID des Abbildes verwenden, das Sie im vorherigen Abschnitt ausgewählt haben:" - -msgid "Flavors and images" -msgstr "Variante und Abbilder" - -msgid "" -"For a list of available SDKs, see `Software Development Kits `_." -msgstr "" -"Eine Liste der verfügbaren SDKs finden Sie unter 'Software Development Kits' " -" `_." - -msgid "" -"For efficiency, most Object Storage installations treat large objects, :code:" -"`> 5GB`, differently than smaller objects." -msgstr "" -"Für die Effizienz, die meisten Object Storage-Installationen behandeln große " -"Objekte, :code:`> 5GB`, anders als kleinere Objekte." - -msgid "" -"For example, you might use the Orchestration API to create two compute " -"instances by creating a stack and by passing a template to the Orchestration " -"API. That template contains two resources with the :code:`type` attribute " -"set to :code:`OS::Nova::Server`." -msgstr "" -"Beispielsweise können Sie die Orchestrierungs-API verwenden, um zwei Compute-" -"Instanzen zu erstellen, indem Sie einen Stapel erstellen und eine Vorlage an " -"die Orchestrierungs-API übergeben. Diese Vorlage enthält zwei Ressourcen mit " -"dem :code:`type` Attribut gesetzt auf :code:`OS::Nova::Server`." - -msgid "For example:" -msgstr "Beispielsweise:" - -msgid "" -"For information about supported features and how to work with an existing " -"database service installation, see `Database as a Service in OpenStack " -"`_." -msgstr "" -"Informationen über unterstützte Funktionen und die Arbeit mit einer " -"vorhandenen Datenbankdienstinstallation finden Sie unter `Datenbank als " -"Dienst in OpenStack `_." - -msgid "" -"For information about these and other calls, see `libcloud documentation " -"`_." -msgstr "" -"Informationen zu diesen und anderen Anrufen finden Sie unter `libcloud " -"Dokumentation `_." - -msgid "" -"For more information about hybrid clouds, see the `Hybrid Cloud chapter " -"`_ in the Architecture " -"Design Guide." -msgstr "" -"Weitere Informationen über Hybrid Clouds finden Sie im Kapitel 'Hybrid " -"Cloud' `_ im " -"Architektur Design Guide." - -msgid "" -"For more information about multi-site clouds, see the `Multi-Site chapter " -"`_ in the " -"Architecture Design Guide." -msgstr "" -"Weitere Informationen zu Multi-Site-Clouds finden Sie im Kapitel 'Multi-" -"Site' `_ im " -"Architektur Design Guide." - -msgid "" -"For performance reasons, it makes sense to have a network for each tier, so " -"that traffic from one tier does not \"crowd out\" other types of traffic and " -"cause the application to fail. In addition, having separate networks makes " -"controlling access to parts of the application easier to manage, improving " -"the overall security of the application." -msgstr "" -"Aus Performance-Gründen ist es sinnvoll, ein Netzwerk für jede Stufe zu " -"haben, so dass der Verkehr von einer Stufe nicht 'andere Arten von Verkehr' " -"ausläuft und die Anwendung fehlschlägt. Darüber hinaus, mit separaten " -"Netzwerken ermöglicht die Kontrolle Zugriff auf Teile der Anwendung " -"einfacher zu verwalten, die Verbesserung der Gesamtsicherheit der Anwendung." - -msgid "" -"For this example, we take a floating IP pool from the 'public' network, " -"which is your external network." -msgstr "" -"Für dieses Beispiel nehmen wir einen Floating-IP-Pool aus dem 'öffentlichen' " -"Netzwerk, das ist Ihr externes Netzwerk." - -msgid "Fractals application architecture" -msgstr "Fraktale Anwendungsarchitektur" - -msgid "" -"From here, go to :doc:`/scaling_out` to learn how to further scale your " -"application. Or, try one of these steps in the tutorial:" -msgstr "" -"Von hier aus gehen Sie zu :doc:`/scaling_out`, um zu erfahren, wie Sie Ihre " -"Anwendung weiter skalieren können. Oder versuchen Sie einen dieser Schritte " -"im Tutorial:" - -msgid "Generate load" -msgstr "Last erzeugen" - -msgid "Get more information about the stack:" -msgstr "Erfahren Sie mehr über den Stack:" - -msgid "Getting started" -msgstr "Anfangen" - -msgid "Go" -msgstr "Go" - -msgid "Go ahead and create two instances." -msgstr "Machen Sie weiter und erstellen Sie zwei Instanzen." - -msgid "" -"Go ahead and delete the existing instances and security groups that you " -"created in previous sections. Remember, when instances in the cloud are no " -"longer working, remove them and re-create something new." -msgstr "" -"Gehen Sie vor und löschen Sie die vorhandenen Instanzen und " -"Sicherheitsgruppen, die Sie in früheren Abschnitten erstellt haben. Denken " -"Sie daran, wenn Instanzen in der Cloud nicht mehr arbeiten, entfernen Sie " -"sie und erstellen Sie etwas neu." - -msgid "" -"Go ahead and test the fault tolerance. Start deleting workers and API " -"instances. As long as you have one of each, your application is fine. " -"However, be aware of one weak point. The database contains the fractals and " -"fractal metadata. If you lose that instance, the application stops. Future " -"sections will explain how to address this weak point." -msgstr "" -"Machen Sie weiter und testen Sie die Fehlertoleranz. Starten Sie das Löschen " -"von Workern und API-Instanzen. Solange Sie eines von beiden haben, ist Ihre " -"Anwendung in Ordnung. Achten Sie jedoch auf einen Schwachpunkt. Die " -"Datenbank enthält die Fraktale und Fraktal-Metadaten. Wenn Sie diese Instanz " -"verlieren, ist die Anwendung beendet. Zukünftige Abschnitte werden erklären, " -"wie man diesen Schwachpunkt ansprechen kann." - -msgid "" -"Go to :doc:`/durability` to learn how to use Object Storage to solve this " -"problem in an elegant way. Or, you can proceed to one of these sections:" -msgstr "" -"Gehen Sie zu :doc:`/durability` um zu lernen, wie man Object Storage " -"verwendet, um dieses Problem auf eine elegante Weise zu lösen. Oder Sie " -"können zu einem dieser Abschnitte gehen:" - -msgid "Going crazy" -msgstr "Werde verrückt" - -msgid "HOT templating language" -msgstr "HOT Templating Sprache" - -msgid "High availability" -msgstr "Hohe Verfügbarkeit" - -msgid "" -"How do you deploy your application? For example, do you pull the latest code " -"from a source control repository? Do you make packaged releases that update " -"infrequently? Do you perform haphazard tests in a development environment " -"and deploy only after major changes?" -msgstr "" -"Wie stellen Sie Ihre Anwendung bereit? Zum Beispiel, ziehen Sie den neuesten " -"Code aus einem Quellcode-Repository? Machen Sie gepackte Releases, die sich " -"selten aktualisieren? Führen Sie zufällige Tests in einer " -"Entwicklungsumgebung durch und ersetzen Sie sie nur nach größeren Änderungen " -"ein?" - -msgid "How the Fractals application interacts with OpenStack" -msgstr "Wie die Fractals-Anwendung mit OpenStack interagiert" - -msgid "How you interact with OpenStack" -msgstr "Wie Sie mit OpenStack interagieren" - -msgid "If a key pair of the given name is not found then one is generated." -msgstr "" -"Wenn ein Schlüsselpaar des gegebenen Namens nicht gefunden wird, wird ein " -"solches erzeugt." - -msgid "" -"If an application is meant to automatically scale up and down to meet " -"demand, it is not feasible have any manual steps in the process of deploying " -"any component of the application. Automation also decreases the time to " -"recovery for your application in the event of component failures, increasing " -"fault tolerance and resilience." -msgstr "" -"Wenn eine Anwendung dazu gedacht ist, automatisch zu skalieren, um die " -"Nachfrage zu erfüllen, ist es nicht möglich, manuelle Schritte in den " -"Prozess der Bereitstellung einer Komponente anzuwenden. Automatisierung " -"verringert auch die Zeit für die Wiederherstellung für Ihre Anwendung bei " -"Komponentenausfällen, erhöht die Fehlertoleranz und die Widerstandsfähigkeit." - -msgid "" -"If either alarm reports the :code:`insufficient data` state, the default " -"sampling period of the stack is probably too low for your cloud; ask your " -"support team for assistance. You can set the period through the :code:" -"`period` parameter of the stack to match your clouds requirements." -msgstr "" -"Wenn entweder Alarm :code:'unzureichender Daten'-Zustand ist, ist die " -"Standard-Sampling-Periode des Stapels wahrscheinlich zu niedrig für Ihre " -"Cloud; fragen Sie Ihr Support-Team um Hilfe. Sie können die Periode durch " -"den :code:`period`-Parameter des Stacks einstellen, um Ihren Cloud-" -"Anforderungen gerecht zu werden." - -msgid "" -"If one application instance is compromised, all instances with the same " -"image and configuration will likely suffer the same vulnerability. The " -"safest path is to use configuration management to rebuild all instances." -msgstr "" -"Wenn eine Anwendungsinstanz kompromittiert wird, werden alle Instanzen mit " -"demselben Abbild und der Konfiguration wahrscheinlich dieselbe " -"Sicherheitsanfälligkeit erleiden. Der sicherste Weg ist, das " -"Konfigurationsmanagement zu verwenden, um alle Instanzen neu zu erstellen." - -msgid "" -"If one is assigned, users can use this address to access the instance on " -"some OpenStack clouds." -msgstr "" -"Wenn einer zugeordnet ist, können Benutzer diese Adresse verwenden, um auf " -"die Instanz bei einigen OpenStack-Clouds zuzugreifen." - -msgid "If one is assigned, users can use this address to access the instance." -msgstr "" -"Wenn einer zugeordnet ist, können Benutzer diese Adresse verwenden, um auf " -"die Instanz zuzugreifen." - -msgid "" -"If the image that you want is not available in your cloud, you can usually " -"upload one depending on the policy settings of your cloud. For information " -"about how to upload images, see `obtaining images `_." -msgstr "" -"Wenn das Abbild, das Sie wünschen, in Ihrer Cloud nicht verfügbar ist, " -"können Sie in der Regel einen von den Richtlinieneinstellungen Ihrer Cloud " -"hochladen. Informationen zum Hochladen von Abbildern finden Sie unter " -"'Abbilder abrufen' `_." - -msgid "" -"If you are an advanced user, think about how you might remove the database " -"from the architecture and replace it with Object Storage metadata, and then " -"contribute these steps to :doc:`craziness`." -msgstr "" -"Wenn Sie ein fortgeschrittener Benutzer sind, denken Sie darüber nach, wie " -"Sie die Datenbank aus der Architektur entfernen und sie mit Object Storage " -"Metadaten ersetzen können, und tragen Sie diese Schritte dann zu: doc: " -"`craziness`." - -msgid "" -"If you are familiar with OpenStack but have not created a cloud application " -"in general or an OpenStack application in particular, this section teaches " -"you how to program with OpenStack components." -msgstr "" -"Wenn Sie mit OpenStack vertraut sind, aber keine Cloud-Anwendung im " -"Allgemeinen oder eine OpenStack-Anwendung erstellt haben, informiert Sie " -"dieser Abschnitt darüber, wie Sie mit OpenStack-Komponenten programmieren " -"können." - -msgid "" -"If you check the load on the :code:`app-controller` API service instance, " -"you see that the instance is not doing well. On your single CPU flavor " -"instance, a load average greater than 1 means that the server is at capacity." -msgstr "" -"Wenn Sie die Belastung auf dem :code:`app-controller` API Service Instanz " -"überprüfen, sehen Sie, dass die Instanz nicht gut läuft. Bei Ihrer einzelnen " -"CPU-Varianten-Instanz bedeutet ein Last-Durchschnitt größer als 1, dass der " -"Server an Kapazität ist." - -msgid "" -"If you check the load on the worker, you can see that the instance is not " -"doing well. On the single CPU flavor instance, a load average greater than 1 " -"means that the server is at capacity." -msgstr "" -"Wenn Sie die Belastung des Workers überprüfen, können Sie sehen, dass die " -"Instanz nicht gut läuft. Bei der einzelnen CPU-Varianten-Instanz bedeutet " -"ein Last-Durchschnitt größer als 1, dass der Server an der Kapazitätsgrenze " -"ist." - -msgid "" -"If you deploy your application on a regular basis, you can resolve outages " -"and make security updates without manual intervention. If an outage occurs, " -"you can provision more resources in another region. If you must patch " -"security holes, you can provision additional compute nodes that are built " -"with the updated software. Then, you can terminate vulnerable nodes and " -"automatically fail-over traffic to the new instances." -msgstr "" -"Wenn Sie Ihre Anwendung regelmäßig bereitstellen, können Sie Ausfälle lösen " -"und Sicherheitsupdates ohne manuelle Eingriffe erstellen. Wenn ein Ausfall " -"auftritt, können Sie mehr Ressourcen in einer anderen Region bereitstellen. " -"Wenn Sie Sicherheitslücken beheben müssen, können Sie zusätzliche Compute-" -"Knoten bereitstellen, die mit der aktualisierten Software erstellt wurden. " -"Anschließend können Sie anfällige Knoten beenden und den neuen Instanzen " -"automatisch versagen." - -msgid "" -"If you do not have a working application, follow the steps in :doc:" -"`introduction` to create one." -msgstr "" -"Wenn Sie keine Arbeitsanwendung haben, folgen Sie den Schritten in :doc:" -"`introduction', um eine zu erstellen." - -msgid "" -"If you do not know Maven then the `Maven home site `_ is a good place to learn more." -msgstr "" -"Wenn Sie nicht wissen was Maven ist, dann ist die `Maven home site `_ ein guter Ort, um mehr zu lernen." - -msgid "" -"If you do not use floating IP addresses, substitute another IP address, as " -"appropriate." -msgstr "" -"Wenn Sie keine Floating-IP-Adressen verwenden, ersetzen Sie gegebenenfalls " -"eine andere IP-Adresse." - -msgid "" -"If you had a load balancer, you could distribute this load between the two " -"different API services. You have several options. The :doc:`networking` " -"section shows you one option." -msgstr "" -"Wenn Sie einen Load Balancer hätten, können Sie diese Last zwischen den " -"beiden verschiedenen API-Diensten verteilen. Sie haben mehrere " -"Möglichkeiten. Der :doc:`networking`-Bereich zeigt Ihnen eine Option." - -msgid "" -"If you have no free floating IPs that have been allocated for your project, " -"first select a network which offer allocation of floating IPs. In this " -"example we use network which is called :code:`public`." -msgstr "" -"Wenn Sie keine frei Floating-IPs haben, die für Ihr Projekt vergeben wurden, " -"wählen Sie zunächst ein Netzwerk aus, das die Zuweisung von Floating-IPs " -"anbietet. In diesem Beispiel verwenden wir das Netzwerk, das heißt :code:" -"`public`." - -msgid "" -"If you have no free floating IPs that have been previously allocated for " -"your project, first select a floating IP pool offered by your provider. In " -"this example, we have selected the first one and assume that it has " -"available IP addresses." -msgstr "" -"Wenn Sie keine frei Floating-IPs haben, die zuvor für Ihr Projekt reserviert " -"wurden, wählen Sie zunächst einen Floating IP Pool, der von Ihrem Provider " -"angeboten wird. In diesem Beispiel haben wir das erste ausgewählt und sind " -"davon ausgegangen, dass es über IP-Adressen verfügt." - -msgid "" -"If you have no free floating IPs that have been previously allocated for " -"your project, then select a floating IP pool offered by your provider. In " -"this example, we have selected the first one and assume that it has " -"available IP addresses." -msgstr "" -"Wenn Sie keine frei Floating-IPs haben, die zuvor für Ihr Projekt reserviert " -"wurden, wählen Sie einen Floating IP Pool, der von Ihrem Provider angeboten " -"wird. In diesem Beispiel haben wir das erste ausgewählt und davon " -"ausgegangen, dass es über IP-Adressen verfügt." - -msgid "If you list existing instances:" -msgstr "Wenn Sie vorhandene Instanzen auflisten:" - -msgid "If you list the instances again, the instance disappears." -msgstr "Wenn Sie die Instanzen erneut auflisten, verschwindet die Instanz." - -msgid "" -"If you receive the :code:`libcloud.common.types.InvalidCredsError: 'Invalid " -"credentials with the provider'` exception when you run one of these API " -"calls, double-check your credentials." -msgstr "" -"Wenn Sie den :code: `libcloud.common.types.InvalidCredsError: 'Ungültige " -"Anmeldeinformationen mit der Provider-Ausnahme erhalten, wenn Sie eines " -"dieser API-Aufrufe ausführen, überprüfen Sie Ihre Anmeldeinformationen." - -msgid "" -"If you receive the exception :code:`openstack.exceptions.HttpException: " -"HttpException: 401 Client Error: Unauthorized,` while trying to run one of " -"the following API calls please double-check your credentials." -msgstr "" -"Wenn Sie die Ausnahme erhalten :code: `openstack.exceptions.HttpException: " -"HttpException: 401 Client-Fehler: Unbefugte` beim Versuch, einen der " -"folgenden API-Aufrufe auszuführen, bitte überprüfen Sie Ihre " -"Anmeldeinformationen." - -msgid "" -"If you see an IOError, you may need to change ``~/.ssh/`` to ``/home/" -"{USERNAME}/.ssh/``, using an absolute path." -msgstr "" -"Wenn Sie einen IOError sehen, müssen Sie ``~/.ssh/`` zu ``/home/{USERNAME}/." -"ssh/`` ändern, indem Sie einen absoluten Pfad verwenden." - -msgid "" -"If you think about how you traditionally make what you store durable, you " -"quickly conclude that keeping multiple copies of your objects on separate " -"systems is a good way strategy. However, keeping track of those multiple " -"copies is difficult, and building that into an app requires complicated " -"logic." -msgstr "" -"Wenn Sie darüber nachdenken, was Sie traditionell machen, um sie haltbar zu " -"speichern, merken Sie schnell, dass das Halten mehrerer Kopien Ihrer Objekte " -"auf getrennten Systemen eine gute Wegstrategie ist. Allerdings ist die " -"Verfolgung dieser Mehrfachkopien schwierig, und das Erstellen einer in eine " -"App erfordert komplizierte Logik." - -msgid "" -"If you work with large objects, use the :code:`RegionScopedBlobStoreContext` " -"class family instead of the ones used so far." -msgstr "" -"Wenn Sie mit großen Objekten arbeiten, verwenden Sie die :code: " -"`RegionScopedBlobStoreContext` Klassefamilie anstelle der bisher verwendeten." - -msgid "" -"If you work with large objects, use the :code:`ex_multipart_upload_object` " -"call instead of the simpler :code:`upload_object` call. The call splits the " -"large object into chunks and creates a manifest so that the chunks can be " -"recombined on download. Change the :code:`chunk_size` parameter, in bytes, " -"to a value that your cloud can accept." -msgstr "" -"Wenn Sie mit großen Objekten arbeiten, verwenden Sie den :code: " -"`ex_multipart_upload_object` anstelle des einfacheren :code:` upload_object` " -"call. Der Aufruf spaltet das große Objekt in Chunks und schafft ein " -"Manifest, so dass die Chunks beim Download rekombiniert werden können. " -"Ändern Sie den :code: `chunk_size` Parameter, in Bytes, auf einen Wert, den " -"Ihre Cloud akzeptieren kann." - -msgid "" -"If your provider does not support regions, try a blank string ('') for the " -"`region_name`." -msgstr "" -"Wenn Ihr Provider keine Regionen unterstützt, versuchen Sie einen leeren " -"String ('') für den 'region_name`." - -msgid "" -"In a new Terminal window, SSH into the 'api' API instance. Use the key pair " -"name that you passed in as a parameter." -msgstr "" -"In einem neuen Terminal-Fenster, SSH in die 'API-API-Instanz'. Verwenden Sie " -"den Schlüsselpaarnamen, den Sie als Parameter übergeben haben." - -msgid "" -"In addition to configuring backups, review your policies about what you back " -"up and how long to retain each backed up item." -msgstr "" -"Zusätzlich zur Konfiguration von Backups, überprüfen Sie Ihre Richtlinien " -"über das, was Sie sichern und wie lange, um jedes gesicherte Element zu " -"behalten." - -msgid "" -"In addition to this kind of monitoring, you should consider availability " -"monitoring. Although your application might not care about a failed worker, " -"it should care about a failed database server." -msgstr "" -"Zusätzlich zu dieser Art der Überwachung sollten Sie die " -"Verfügbarkeitsüberwachung berücksichtigen. Obwohl Ihre Anwendung sich nicht " -"um einen gescheiterten Worker kümmern sollte, sollte sie es bei einen " -"fehlgeschlagenen Datenbankserver tun." - -msgid "" -"In cloud programming, it is very different. Rather than large, expensive " -"servers, you have virtual machines that are disposable; if something goes " -"wrong, you shut the server down and spin up a new one. There is still " -"operations staff, but rather than nursing individual servers back to health, " -"their job is to monitor the health of the overall system." -msgstr "" -"Bei der Cloud-Programmierung ist es ganz anders. Anstatt große, teure " -"Server, haben Sie virtuelle Maschinen, die Einweg sind; Wenn etwas schief " -"geht, fahren Sie den Server herunter und erzeugen einen neuen. Es gibt immer " -"noch Betriebs-Mitarbeiter, aber anstatt einzelne Server zu pflegen und zu " -"betreuen, ist es ihre Aufgabe, die Gesundheit des Gesamtsystems zu " -"überwachen." - -msgid "" -"In cloud programming, there is a well-known analogy known as \"cattle vs pets" -"\". If you have not heard it before, it goes like this:" -msgstr "" -"In der Cloud-Programmierung gibt es eine bekannte Analogie, die als 'Vieh vs " -"Haustiere' bekannt ist. Wenn Sie es noch nicht gehört haben, geht es so:" - -msgid "" -"In earlier sections, the Fractal application used an installation script " -"into which the metadata API passed parameters to bootstrap the cluster. " -"`Etcd `_ is \"a distributed, consistent key-" -"value store for shared configuration and service discovery\" that you can " -"use to store configurations. You can write updated versions of the Fractal " -"worker component to connect to Etcd or use `Confd `_ to poll for changes from Etcd and write changes to " -"a configuration file on the local file system, which the Fractal worker can " -"use for configuration." -msgstr "" -"In früheren Abschnitten verwendete die Fractal-Anwendung ein " -"Installationsskript, in das die Metadaten-API übergeben wurde, um den " -"Cluster zu booten. `etcd `_ ist' ein " -"verteilter, konsistenter Key-Value-Store für gemeinsame Konfiguration und " -"Service Discovery ', den Sie verwenden können, um Konfigurationen zu " -"speichern. Sie können aktualisierte Versionen der Fractal Worker-Komponente " -"schreiben, um eine Verbindung zu etcd herzustellen oder `confd `_, um für Änderungen von etcd abzufragen " -"und Änderungen an einer Konfigurationsdatei auf dem lokalen Dateisystem zu " -"schreiben, die der Fractal-Arbeiter zur Konfiguration verwenden kann." - -msgid "" -"In openstacksdk parameter :code:`ex_userdata` is called :code:`user_data` " -"and parameter :code:`ex_keyname` is called :code:`key_name`." -msgstr "" -"Im openstacksdk-Parameter :code:`ex_userdata` heißt :code:`user_data` und " -"Parameter :code:`ex_keyname` heißt :code:`key_name`." - -msgid "" -"In previous chapters, all nodes that comprise the fractal application were " -"attached to the same network." -msgstr "" -"In früheren Kapiteln wurden alle Knoten, die die Fraktalanwendung enthalten, " -"an das gleiche Netzwerk angeschlossen." - -msgid "" -"In previous sections, you used your SDK to programmatically interact with " -"OpenStack. In this section, you use the 'heat' command-line client to access " -"the Orchestration API directly through template files." -msgstr "" -"In früheren Abschnitten haben Sie mit Ihrem SDK programmgesteuert mit " -"OpenStack interagiert. In diesem Abschnitt verwenden Sie den 'heat' " -"Befehlszeilenclient, um über die Vorlagendateien direkt auf die " -"Orchestrierungs-API zuzugreifen." - -msgid "" -"In the Terminal window where you run ceilometer, run :code:" -"`ceilometer_sample_query` to see the samples." -msgstr "" -"Im Terminalfenster, wo Sie den Ceilometer laufen haben, führen Sie :code: " -"`ceilometer_sample_query` aus, um die Samples zu sehen." - -msgid "" -"In the following example, set :code:`pub_key_file` to the location of your " -"public SSH key file." -msgstr "" -"Im folgenden Beispiel setzen Sie :code:`pub_key_file` an den Speicherort " -"Ihrer öffentlichen SSH-Schlüsseldatei." - -msgid "In the outputs section of the stack, you can run these web API calls:" -msgstr "" -"Im Ausgabebereich des Stacks können Sie diese Web-API-Aufrufe ausführen:" - -msgid "" -"In the previous steps, you split out several services and expanded capacity. " -"To see the new features of the Fractals application, SSH to one of the app " -"instances and create a few fractals." -msgstr "" -"In den vorherigen Schritten haben Sie mehrere Dienste aufgeteilt und " -"Kapazitäten erweitert. Um die neuen Features der Fractals-Anwendung zu " -"sehen, verbinden Sie sich mit SSH zu einer der App-Instanzen und erstellen " -"Sie ein paar Fraktale." - -msgid "" -"In theory, you could use a simple script to monitor the load on your workers " -"and API services and trigger the creation of instances, which you already " -"know how to do. Congratulations! You are ready to create scalable cloud " -"applications." -msgstr "" -"In der Theorie können Sie ein einfaches Skript verwenden, um die Belastung " -"Ihrer Worker und API-Dienste zu überwachen und die Erstellung von Instanzen " -"auszulösen, die Sie bereits kennen. Glückwunsch! Sie sind bereit, " -"skalierbare Cloud-Anwendungen zu erstellen." - -msgid "" -"In this case, we are presenting a shell script as the `userdata `_. " -"When :code:`create_node` creates the instance, :code:`cloud-init` executes " -"the shell script in the :code:`userdata` variable." -msgstr "" -"In diesem Fall präsentieren wir ein Shell-Skript als `userdata `_. " -"Wenn :code:`create_node` die Instanz erstellt, wird :code:`cloud-init` als " -"Shell-Skript in der Variable :code:`userdata` ausgeführt." - -msgid "" -"In this network layout, we assume that the OpenStack cloud in which you have " -"been building your application has a public network and tenant router that " -"was previously created by your cloud provider or by yourself, following the " -"instructions in the appendix." -msgstr "" -"In diesem Netzwerklayout gehen wir davon aus, dass die OpenStack-Cloud, in " -"der Sie Ihre Applikation aufgebaut haben, einen öffentlichen Netzwerk- und " -"Tenant-Router hat, der zuvor von Ihrem Cloud-Provider oder von Ihnen selbst " -"erstellt wurde, und zwar nach den Anweisungen im Anhang." - -msgid "" -"In this template, the alarms use metadata that is attached to each worker " -"instance. The metadata is in the :code:`metering.stack=stack_id` format." -msgstr "" -"In dieser Vorlage verwenden die Alarme Metadaten, die an jede Worker-Instanz " -"angehängt sind. Die Metadaten befinden sich im :code:`metering.stack = " -"stack_id` Format." - -msgid "" -"In this tutorial, we have downloaded the latest version of our application " -"from source and installed it on a standard image. Our magic installation " -"script also updates the standard image to have the latest dependencies that " -"you need to run the application." -msgstr "" -"In diesem Tutorial haben wir die neueste Version unserer Applikation aus der " -"Quelle heruntergeladen und auf einem Standardabbild installiert. Unser " -"magisches Installationsskript aktualisiert auch das Standardabbild, um die " -"neuesten Abhängigkeiten zu haben, die Sie benötigen, um die Anwendung " -"auszuführen." - -msgid "" -"In this tutorial, you interact with your OpenStack cloud through the SDK " -"that you chose in \"Choose your OpenStack SDK.\" This guide assumes that you " -"know how to run code snippets in your language of choice." -msgstr "" -"In diesem Tutorial interagieren Sie mit Ihrer OpenStack Cloud durch das SDK, " -"das Sie in 'Wählen Sie Ihr OpenStack SDK' gewählt haben. Diese Anleitung " -"setzt voraus, dass Sie wissen, wie Sie Code-Snippets in Ihrer Sprache der " -"Wahl ausführen können." - -msgid "" -"In traditional data centers, network segments are dedicated to specific " -"types of network traffic." -msgstr "" -"In den traditionellen Rechenzentren sind Netzwerksegmente bestimmten Arten " -"von Netzwerkverkehr gewidmet." - -msgid "In your SSH session, confirm that no fractals were generated:" -msgstr "" -"In Ihrer SSH-Sitzung bestätigen Sie, dass keine Fraktale erzeugt wurden:" - -msgid "" -"Initially, the focus is on scaling the workers because they consume the most " -"resources." -msgstr "" -"Zunächst liegt der Schwerpunkt auf der Skalierung der Worker, weil sie die " -"meisten Ressourcen verbrauchen." - -msgid "Install a service" -msgstr "Installiere eines Dienstes" - -msgid "" -"Install the 'heat' command-line client by following this guide: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"Installieren Sie den 'heat' Befehlszeilenclient, indem Sie diesem Handbuch " -"folgen: https://docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"Internet connectivity from your cloud instance is required to download the " -"application." -msgstr "" -"Internet-Konnektivität von Ihrer Cloud-Instanz ist erforderlich, um die " -"Anwendung herunterzuladen." - -msgid "Introduction to Floating IPs" -msgstr "Einführung in Floating-IPs" - -msgid "Introduction to cloud-init" -msgstr "Einführung in cloud-init" - -msgid "Introduction to key pairs" -msgstr "Einführung in Schlüsselpaare" - -msgid "Introduction to security groups" -msgstr "Einführung in Sicherheitsgruppen" - -msgid "Introduction to tenant networking" -msgstr "Einführung in die Tenant-Vernetzung" - -msgid "Introduction to the fractals application architecture" -msgstr "Einführung in die Architektur der Fraktale" - -msgid "" -"It is easy to split out services into multiple instances. We will create a " -"controller instance called :code:`app-controller`, which hosts the API, " -"database, and messaging services. We will also create a worker instance " -"called :code:`app-worker-1`, which just generates fractals." -msgstr "" -"Es ist einfach, Dienste in mehrere Instanzen aufzuteilen. Wir erstellen eine " -"Controller-Instanz namens :code:`app-controller`, die die API-, Datenbank- " -"und Messaging-Dienste hostet. Wir werden auch eine Worker-Instanz namens :" -"code:`app-worker-1` erstellen, die nur Fraktale erzeugt." - -msgid "It is not possible to restore deleted objects. Be careful." -msgstr "Es ist nicht möglich, gelöschte Objekte wiederherzustellen. Achtung." - -msgid "Java" -msgstr "Java" - -msgid "" -"Jclouds does not currently support OpenStack Orchestration. See this `bug " -"report `_." -msgstr "" -"Jclouds unterstützt derzeit keine OpenStack Orchestration. Siehe diesen " -"Fehlerbericht `_." - -msgid "" -"Just as you back up information on a non-cloud server, you must back up non-" -"reproducible information, such as information on a database server, file " -"server, or in application log files. Just because something is 'in the " -"cloud' does not mean that the underlying hardware or systems cannot fail." -msgstr "" -"So wie Sie Informationen über einen Nicht-Cloud-Server sichern, müssen Sie " -"nicht reproduzierbare Informationen wie Informationen über einen " -"Datenbankserver, einen Dateiserver oder in Anwendungsprotokolldateien " -"sichern. Nur weil etwas in der Cloud ist, bedeutet das nicht, dass die " -"zugrunde liegenden Hardware oder Systeme nicht ausfallen können." - -msgid "Language" -msgstr "Sprache" - -msgid "" -"Large file uploads that use the :code:`openstack-swift` provider are " -"supported in only jclouds V2, currently in beta. Also, the default chunk " -"size is 64 Mb. Consider changing this as homework." -msgstr "" -"Große Datei-Uploads, die den :code: `openstack-swift` Anbieter verwenden, " -"werden nur in jclouds V2 unterstützt, derzeit in beta. Auch die Standard-" -"Chunk-Größe beträgt 64 Mb. Betrachten Sie das Ändern als Hausaufgaben." - -msgid "Large objects" -msgstr "Große Objekte" - -msgid "" -"Later on, you will use a Block Storage volume to provide persistent storage " -"for the database server for the Fractal application. But first, learn how to " -"create and attach a Block Storage device." -msgstr "" -"Später verwenden Sie ein Blockspeicher-Volume, um einen permanenten Speicher " -"für den Datenbankserver für die Fractal-Anwendung bereitzustellen. Aber " -"zuerst lernen Sie, wie man ein Blockspeichergerät erstellt und anhängt." - -msgid "Launch an instance" -msgstr "Starten Sie eine Instanz" - -msgid "Launch the stack with auto-scaling workers:" -msgstr "Starten Sie den Stack mit Auto-Skalierung Worker:" - -msgid "" -"Leave your shell open to use it for another instance deployment in this " -"section." -msgstr "" -"Lassen Sie Ihre Shell offen, um sie für eine weitere Instanz-Installation in " -"diesem Abschnitt zu verwenden." - -msgid "" -"Libcloud 0.16 and 0.17 are afflicted with a bug that means authentication to " -"a swift endpoint can fail with `a Python exception `_. If you encounter this, you can upgrade your " -"libcloud version, or apply a simple `2-line patch `_." -msgstr "" -"Libcloud 0,16 und 0,17 sind mit einem Fehler behaftet, der bedeutet, dass " -"die Authentifizierung für einen swift Endpunkt mit einer Python-Ausnahme " -"fehlschlägt `_. Wenn " -"Sie dies begegnen, können Sie Ihre libcloud-Version aktualisieren oder einen " -"einfachen '2-zeiligen Patch anwenden `_." - -msgid "Libcloud does not support the OpenStack Networking API." -msgstr "Libcloud unterstützt die OpenStack Networking API nicht." - -msgid "" -"Libcloud uses a different connector for Object Storage to all other " -"OpenStack services, so a conn object from previous sections will not work " -"here and we have to create a new one named :code:`swift`." -msgstr "" -"Libcloud verwendet einen unterschiedlichen Anschluss für Object Storage für " -"alle anderen OpenStack-Dienste, so dass ein Conn-Objekt aus früheren " -"Abschnitten hier nicht funktioniert und wir müssen einen neuen namens :code: " -"`swift` erstellen." - -msgid "" -"Like many cloud applications, the Fractals application has a `RESTful API " -"`_. You can " -"connect to it directly and generate fractals, or you can integrate it as a " -"component of a larger application. Any time a standard interface such as an " -"API is available, automated testing becomes much more feasible, increasing " -"software quality." -msgstr "" -"Wie viele Cloud-Anwendungen hat die Fractals-Anwendung eine 'RESTful API' " -" `_. Sie " -"können sich direkt mit ihr verbinden und Fraktale erzeugen, oder Sie können " -"sie als Bestandteil einer größeren Anwendung integrieren. Jedes Mal, wenn " -"eine Standardschnittstelle wie eine API verfügbar ist, wird automatisiertes " -"Testen viel mehr machbar, wodurch die Softwarequalität erhöht wird." - -msgid "" -"List all available floating IPs for this project and select the first free " -"one. Allocate a new floating IP if none is available." -msgstr "" -"Auflisten aller verfügbaren Floating-IPs für dieses Projekt und wählen Sie " -"die erste freie. Weisen Sie eine neue Floating-IP zu, wenn keine verfügbar " -"ist." - -msgid "" -"List objects in your :code:`fractals` container to see if the upload was " -"successful. Then, download the file to verify that the md5sum is the same:" -msgstr "" -"Auflisten von Objekten in Ihrem :code: `Fraktale` Container, um zu sehen, ob " -"der Upload erfolgreich war. Dann laden Sie die Datei herunter, um zu " -"überprüfen, ob das md5sum gleich ist:" - -msgid "Load balancing" -msgstr "Lastverteilung" - -msgid "Load the API: Create a lot of API service requests" -msgstr "Laden Sie die API: Erstellen Sie viele API-Dienstanforderungen" - -msgid "" -"Load the worker: Create a lot of tasks to max out the CPU of existing worker " -"instances" -msgstr "" -"Laden Sie den Worker: Erstellen Sie eine Menge von Aufgaben, um die CPU der " -"vorhandenen Worker-Instanzen zu maximieren" - -msgid "Log in to the server to run the following steps." -msgstr "Melden Sie sich beim Server an, um die folgenden Schritte auszuführen." - -msgid "" -"Login to the worker instance, :code:`app-worker-1`, with SSH, using the " -"previous added SSH key pair \"demokey\". Start by getting the IP address of " -"the worker:" -msgstr "" -"Melden Sie sich mit SSH bei der Worker-Instanz an :code:`app-worker-1`, " -"unter Verwendung des vorherigen SSH-Schlüsselpaars 'demokey'. Beginnen Sie " -"mit der IP-Adresse des Workers:" - -msgid "Login with SSH and use the Fractal app" -msgstr "Melden Sie sich mit SSH an und nutzen Sie die Fractal App" - -msgid "Look at which ports are available:" -msgstr "Schauen Sie, welche Ports verfügbar sind:" - -msgid "" -"Make cloud-related architecture decisions such as turning functions into " -"micro-services and modularizing them." -msgstr "" -"Machen Sie Cloud-bezogene Architekturentscheidungen wie das Drehen von " -"Funktionen in Mikro-Services und modularisieren sie." - -msgid "Make it durable" -msgstr "Mach es haltbar" - -msgid "Make it possible to add new resources to your application." -msgstr "" -"Machen Sie es möglich, neue Ressourcen zu Ihrer Anwendung hinzuzufügen." - -msgid "" -"Many of the network concepts that are discussed in this section are already " -"present in the diagram above. A tenant router provides routing and external " -"access for the worker nodes, and floating IP addresses are associated with " -"each node in the Fractal application cluster to facilitate external access." -msgstr "" -"Viele der Netzwerkkonzepte, die in diesem Abschnitt besprochen werden, sind " -"bereits im obigen Diagramm vorhanden. Ein Tenant Router bietet Routing und " -"externen Zugriff für die Worker-Knoten, und Floating-IP-Adressen sind mit " -"jedem Knoten im Fractal Application Cluster zugeordnet, um den externen " -"Zugriff zu erleichtern." - -msgid "" -"Maven will download and install any dependencies required for compilation, " -"then execute the Java compiler. All files in the :code:`java` subdirectory " -"will be compiled." -msgstr "" -"Maven wird alle für die Kompilierung benötigten Abhängigkeiten herunterladen " -"und installieren und dann den Java-Compiler ausführen. Alle Dateien im :" -"code: `java` subdirectory werden kompiliert." - -msgid "" -"Maven will download and install any further dependencies required and then " -"run the chosen class." -msgstr "" -"Maven wird heruntergeladen und installiert weitere erforderliche " -"Abhängigkeiten und startet dann die gewählte Klasse." - -msgid "" -"Message queues are used to facilitate communication between the Fractal " -"application services. The Fractal application uses a `work queue `_ (or task queue) to " -"distribute tasks to the worker services." -msgstr "" -"Message-Warteschlangen werden verwendet, um die Kommunikation zwischen den " -"Fractal-Anwendungsdiensten zu erleichtern. Die Fractal-Anwendung verwendet " -"eine 'Warteschlange' `_ (oder Task-Warteschlange), um Aufgaben an die Worker-Services zu " -"verteilen." - -msgid "" -"Message queues work in a way similar to a queue (or a line, for those of us " -"on the other side of the ocean) in a bank being served by multiple clerks. " -"The message queue in our application provides a feed of work requests that " -"can be taken one-at-a-time by worker services, whether there is a single " -"worker service or hundreds of them." -msgstr "" -"Message-Warteschlangen arbeiten ähnlich wie eine Warteschlange (oder eine " -"Reihe, für diejenigen von uns auf der anderen Seite des Ozeans) in einer " -"Bank, die von mehreren Angestellten bedient wird. Die Meldungswarteschlange " -"in unserer Anwendung bietet einen Feed von Arbeitsanfragen, die von den " -"Arbeitnehmerdiensten ein-zu-Zeit genommen werden können, ob es einen " -"einzelnen Workerservice oder Hunderte von ihnen gibt." - -msgid "Modularity and micro-services" -msgstr "Modularität und Mikro-Dienste" - -msgid "Monitoring" -msgstr "Überwachung" - -msgid "" -"Monitoring is essential for 'scalable' cloud applications. You must know how " -"many requests are coming in and the impact that these requests have on " -"various services. You must have enough information to determine whether to " -"start another worker or API service as you did in :doc:`/scaling_out`." -msgstr "" -"Die Überwachung ist für 'skalierbare' Cloud-Anwendungen unerlässlich. Sie " -"müssen wissen, wie viele Anfragen kommen und die Auswirkungen, die diese " -"Anfragen auf verschiedene Dienste haben. Sie müssen genügend Informationen " -"haben, um festzustellen, ob ein anderer Worker oder ein API-Dienst wie folgt " -"ausgegeben werden soll: doc: `/scaling_out`." - -msgid "" -"Most cloud providers make a public network accessible to you. We will attach " -"a router to this public network to grant Internet access to our instances. " -"After also attaching this router to our internal networks, we will allocate " -"floating IPs from the public network for instances which need to be accessed " -"from the Internet." -msgstr "" -"Die meisten Cloud-Provider machen ein öffentliches Netzwerk für Sie " -"zugänglich. Wir werden einen Router an dieses öffentliche Netz anschließen, " -"um den Internet-Zugang zu unseren Instanzen zu gewähren. Nachdem wir diesen " -"Router auch an unsere internen Netzwerke angehängt haben, werden wir aus dem " -"öffentlichen Netz Floating-IPs aus dem öffentlichen Netz zuordnen, für die " -"aus dem Internet zugegriffen werden muss." - -msgid "" -"Most cloud providers provision all network objects that are required to boot " -"an instance. To determine whether these objects were created for you, access " -"the Network Topology section of the OpenStack dashboard." -msgstr "" -"Die meisten Cloud-Provider stellen alle Netzwerkobjekte bereit, die zum " -"Booten einer Instanz erforderlich sind. Um festzustellen, ob diese Objekte " -"für Sie erstellt wurden, rufen Sie den Abschnitt 'Netzwerk-Topologie' des " -"OpenStack-Dashboards auf." - -msgid "" -"Most instances require access to the Internet. The instances in your " -"Fractals app are no exception! Add routers to pass traffic between the " -"various networks that you use." -msgstr "" -"Die meisten Instanzen benötigen Zugang zum Internet. Die Instanzen in Ihrer " -"Fractals App sind keine Ausnahme! Fügen Sie Router hinzu, um den " -"Datenverkehr zwischen den verschiedenen Netzwerken, die Sie verwenden, zu " -"übergeben." - -msgid "Multiple clouds" -msgstr "Mehrere Clouds" - -msgid "Name" -msgstr "Name" - -msgid "" -"Network access. By default, OpenStack filters all traffic. You must create a " -"security group and apply it to your instance. The security group allows HTTP " -"and SSH access. We will go into more detail in :doc:`/introduction`." -msgstr "" -"Netzwerkzugang. Standardmäßig filtert OpenStack den gesamten Traffic. Sie " -"müssen eine Sicherheitsgruppe erstellen und diese auf Ihre Instanz anwenden. " -"Die Sicherheitsgruppe ermöglicht HTTP- und SSH-Zugriff. Wir werden " -"ausführlicher in :doc:`/introduction`." - -msgid "Networking" -msgstr "Vernetzung" - -msgid "Networking segmentation" -msgstr "Vernetzungsegmentierung" - -msgid "Neutron LbaaS API" -msgstr "Neutron LbaaS API" - -# #-#-#-#-# ceilometer-next-steps.pot (Installation Guide 0.1) #-#-#-#-# -# #-#-#-#-# cinder-next-steps.pot (Installation Guide 0.1) #-#-#-#-# -# #-#-#-#-# dashboard-next-step.pot (Installation Guide 0.1) #-#-#-#-# -# #-#-#-#-# heat-next-step.pot (Installation Guide 0.1) #-#-#-#-# -# #-#-#-#-# networking-next-steps.pot (Installation Guide 0.1) #-#-#-#-# -# #-#-#-#-# swift-next-steps.pot (Installation Guide 0.1) #-#-#-#-# -msgid "Next steps" -msgstr "Nächste Schritte" - -msgid "" -"Next, back up all existing fractals from the database to the swift " -"container. A simple loop takes care of that:" -msgstr "" -"Als nächstes unterstützen Sie alle vorhandenen Fraktale aus der Datenbank in " -"den swift Container. Eine einfache Schleife kümmert sich darum:" - -msgid "Next, create a network and subnet for the API servers." -msgstr "" -"Als nächstes erstellen Sie ein Netzwerk und Subnetz für die API-Server." - -msgid "Next, create a network and subnet for the workers." -msgstr "Als nächstes erstellen Sie ein Netzwerk und Subnetz für die Worker." - -msgid "" -"Next, create additional floating IPs. Specify the fixed IP addresses they " -"should point to and the ports that they should use:" -msgstr "" -"Als nächstes erstellen Sie zusätzliche Floating-IPs. Geben Sie die festen IP-" -"Adressen an, auf die sie verweisen sollen, und die Ports, die sie verwenden " -"sollten:" - -msgid "Next, start a second instance, which will be the worker instance:" -msgstr "" -"Als nächstes starten Sie eine zweite Instanz, die die Worker-Instanz sein " -"wird:" - -msgid "Next, tell the script which flavor you want to use:" -msgstr "" -"Als nächstes sagen Sie dem Skript, welche Variante Sie verwenden möchten:" - -msgid "" -"Note that the worker instance is part of an :code:`OS::Heat::" -"AutoScalingGroup`." -msgstr "" -"Beachten Sie, dass die Worker-Instanz Teil eines :code:`OS::Heat::" -"AutoScalingGroup` ist." - -msgid "" -"Note that this time, when you create a security group, you include a rule " -"that applies to only instances that are part of the worker group." -msgstr "" -"Beachten Sie, dass dieses Mal, wenn Sie eine Sicherheitsgruppe erstellen, " -"eine Regel enthält, die nur für Instanzen gilt, die Teil der Worker-Gruppe " -"sind." - -msgid "" -"Note that we will be showing the commands in a more idiomatic Java way: as " -"methods on a class." -msgstr "" -"Beachten Sie, dass wir die Befehle in einer idiomatischeren Java-Weise " -"darstellen werden: als Methoden für eine Klasse." - -msgid "" -"Notice that you have added this instance to the worker_group, so it can " -"access the controller." -msgstr "" -"Beachten Sie, dass Sie diese Instanz der worker_group hinzugefügt haben, " -"damit sie auf den Controller zugreifen kann." - -msgid "" -"Now call the Fractal application's command line interface (:code:`faafo`) to " -"request a few new fractals. The following command requests a few fractals " -"with random parameters:" -msgstr "" -"Rufen Sie nun die Befehlszeilenschnittstelle der Fractal-Anwendung an (:code:" -"`faafo`), um ein paar neue Fraktale anzufordern. Der folgende Befehl fordert " -"einige Fraktale mit zufälligen Parametern an:" - -msgid "" -"Now create a virtual IP that will be used to direct traffic between the " -"various members of the pool:" -msgstr "" -"Erstellen Sie nun eine virtuelle IP, die für den direkten Verkehr zwischen " -"den verschiedenen Mitgliedern des Pools verwendet wird:" - -msgid "" -"Now if you make a request for a new fractal, you connect to the controller " -"instance, :code:`app-controller`, but the work will actually be performed by " -"a separate worker instance - :code:`app-worker-1`." -msgstr "" -"Nun, wenn Sie eine Anfrage für ein neues Fraktal machen, verbinden Sie sich " -"mit der Controller-Instanz :code:`App-Controller`, aber die Arbeit wird " -"tatsächlich von einer separaten Worker-Instanz durchgeführt - :code:` app-" -"worker-1` ." - -msgid "" -"Now log into the controller instance, :code:`app-controller`, also with SSH, " -"using the previously added SSH key pair \"demokey\"." -msgstr "" -"Melden Sie sich jetzt bei der Controller-Instanz an :code:`app-controller`, " -"auch mit SSH, mit dem zuvor hinzugefügten SSH-Schlüsselpaar' demokey ' an ." - -msgid "Now prepare the empty block device." -msgstr "Jetzt das leere Blockgerät vorbereiten." - -msgid "" -"Now request an address from this network to be allocated to your project." -msgstr "" -"Fordern Sie nun eine Adresse aus diesem Netzwerk an, die Ihrem Projekt " -"zugeordnet werden soll." - -msgid "" -"Now request that an address from this pool be allocated to your project." -msgstr "" -"Bitte fordern Sie an, dass eine Adresse aus diesem Pool Ihrem Projekt " -"zugewiesen wird." - -msgid "" -"Now that you have an unused floating IP address allocated to your project, " -"attach it to an instance." -msgstr "" -"Nun, da Sie eine unbenutzte Floating-IP-Adresse für Ihr Projekt zugeordnet " -"haben, fügen Sie es an eine Instanz." - -msgid "" -"Now that you have got the networks created, go ahead and create two Floating " -"IPs, for web servers. Ensure that you replace 'public' with the name of the " -"public/external network offered by your cloud provider." -msgstr "" -"Jetzt haben Sie die Netzwerke erstellt, gehen Sie vor und erstellen Sie zwei " -"Floating IPs, für Web-Server. Stellen Sie sicher, dass Sie 'public' durch " -"den Namen des öffentlichen/externen Netzwerks ersetzen, das von Ihrem Cloud-" -"Provider angeboten wird." - -msgid "" -"Now that you have prepared the networking infrastructure, you can go ahead " -"and boot an instance on it. Ensure you use appropriate flavor and image " -"values for your cloud - see :doc:`getting_started` if you have not already." -msgstr "" -"Nun, da Sie die Netzwerk-Infrastruktur vorbereitet haben, können Sie voran " -"gehen und eine Instanz auf ihr booten. Vergewissern Sie sich, dass Sie " -"geeignete Varianten- und Abbildwerte für Ihre Cloud verwenden - siehe :doc:" -"`get_started`, wenn Sie noch nicht dort waren." - -msgid "" -"Now that you know how to create and delete instances, you can deploy the " -"sample application. The instance that you create for the application is " -"similar to the first instance that you created, but this time, we introduce " -"a few extra concepts." -msgstr "" -"Nun, da Sie wissen, wie Sie Instanzen erstellen und löschen, können Sie die " -"Beispielanwendung bereitstellen. Die Instanz, die Sie für die Anwendung " -"erstellen, ähnelt der ersten Instanz, die Sie erstellt haben, aber dieses " -"Mal stellen wir Ihnen einige zusätzliche Konzepte vor." - -msgid "Now you can SSH into the instance:" -msgstr "Jetzt können Sie mit SSH in die Instanz:" - -msgid "Now, attach your router to the worker, API, and web server subnets." -msgstr "" -"Jetzt fügen Sie Ihren Router an die Worker-, API- und Web-Server-Subnetze an." - -msgid "" -"Now, create a health monitor that will ensure that members of the load " -"balancer pool are active and able to respond to requests. If a member in the " -"pool dies or is unresponsive, the member is removed from the pool so that " -"client requests are routed to another active member." -msgstr "" -"Erstellen Sie nun einen Gesundheitsmonitor, der sicherstellt, dass " -"Mitglieder des Load Balancer Pools aktiv sind und auf Anfragen antworten " -"können. Wenn ein Mitglied im Pool stirbt oder nicht reagiert, wird das " -"Mitglied aus dem Pool entfernt, so dass Client-Anfragen an ein anderes " -"aktives Mitglied weitergeleitet werden." - -msgid "Now, create a network and subnet for the web servers." -msgstr "Erstellen Sie nun ein Netzwerk und ein Subnetz für die Webserver." - -msgid "Now, look at the big picture." -msgstr "Jetzt schauen Sie sich das große Bild an." - -msgid "Now, no more objects are available in the :code:`fractals` container." -msgstr "Jetzt sind keine Objekte mehr im :code: `fractals` container." - -msgid "" -"Now, wait until all the fractals are generated and the instances have idled " -"for some time." -msgstr "" -"Warten Sie jetzt, bis alle Fraktale erzeugt sind und die Instanzen für " -"einige Zeit im Leerlauf sind." - -msgid "Now, you can boot and configure the instance." -msgstr "Jetzt können Sie die Instanz booten und konfigurieren." - -msgid "Now, you can launch the instance." -msgstr "Jetzt können Sie die Instanz starten." - -msgid "Obtain the following information from your cloud provider:" -msgstr "Erhalten Sie die folgenden Informationen von Ihrem Cloud-Anbieter:" - -msgid "" -"Of course there is also a web interface which offers a more human friendly " -"way of accessing the API to view the created fractal images, and a simple " -"command line interface." -msgstr "" -"Natürlich gibt es auch eine Web-Schnittstelle, die eine menschlichere Art " -"und Weise des Zugriffs auf die API bietet, um die erzeugten Fraktalbilder " -"und eine einfache Befehlszeilenschnittstelle anzuzeigen." - -msgid "" -"Of course, creating a monitoring system for a single application might not " -"make sense. To learn how to use the OpenStack Orchestration monitoring and " -"auto-scaling capabilities to automate these steps, see :doc:`orchestration`." -msgstr "" -"Natürlich kann das Erstellen eines Überwachungssystems für eine einzelne " -"Anwendung nicht sinnvoll sein. Um zu erlernen, wie man die OpenStack " -"Orchestrierung Monitoring und Auto-Scaling-Funktionen verwendet, um diese " -"Schritte zu automatisieren, siehe :doc:`orchestration`." - -msgid "" -"Of course, having access to additional resources is only part of the game " -"plan; while you can manually add or delete resources, you get more value and " -"more responsiveness if the application automatically requests additional " -"resources when it needs them." -msgstr "" -"Natürlich ist der Zugang zu zusätzlichen Ressourcen nur ein Teil des " -"Spielplans; während Sie Ressourcen manuell hinzufügen oder löschen können, " -"erhalten Sie mehr Wert und mehr Reaktionsfähigkeit, wenn die Anwendung " -"automatisch zusätzliche Ressourcen anfordert, wenn sie sie benötigen." - -msgid "Official Python-based library for OpenStack." -msgstr "Offizielle Python-basierte Bibliothek für OpenStack." - -msgid "" -"Once you have configured permissions, you must know where to access the " -"application." -msgstr "" -"Sobald Sie Berechtigungen konfiguriert haben, müssen Sie wissen, wo Sie auf " -"die Anwendung zugreifen können." - -msgid "Once you have created a rule or group, you can also delete it:" -msgstr "" -"Sobald Sie eine Regel oder Gruppe erstellt haben, können Sie sie auch " -"löschen:" - -msgid "" -"Once you have logged in, check to see whether the worker service process is " -"running as expected. You can find the logs of the worker service in the " -"directory :code:`/var/log/supervisor/`." -msgstr "" -"Sobald Sie angemeldet sind, überprüfen Sie, ob der Worker-Service-Prozess " -"wie erwartet ausgeführt wird. Sie finden die Protokolle des Worker Service " -"im Verzeichnis :code:`/var/log/supervisor/`." - -msgid "" -"One of the latest trends in scalable cloud application deployment is " -"`continuous integration `_ and `continuous deployment `_ (CI/CD)." -msgstr "" -"Einer der neuesten Trends in der skalierbaren Cloud-Anwendung ist die " -"'kontinuierliche Integration' `` und `kontinuierliche Bereitstellung `_ (CI / CD)." - -msgid "" -"Open :code:`top` to monitor the CPU usage of the :code:`faafo-worker` " -"process." -msgstr "" -"Starten Sie :code:`top` zur Überwachung der CPU-Nutzung des :code:`faafo-" -"worker` process." - -msgid "" -"OpenStack Object Storage automatically replicates each object at least twice " -"before returning 'write success' to your API call. A good strategy is to " -"keep three copies of objects, by default, at all times, replicating them " -"across the system in case of hardware failure, maintenance, network outage, " -"or another kind of breakage. This strategy is very convenient for app " -"creation. You can just dump objects into object storage and not worry about " -"the additional work that it takes to keep them safe." -msgstr "" -"OpenStack Object Storage repliziert automatisch jedes Objekt mindestens " -"zweimal, bevor er 'write success' in Ihren API-Aufruf zurückgibt. Eine gute " -"Strategie ist es, drei Exemplare von Objekten standardmäßig zu halten, indem " -"sie sie im Falle eines Hardwarefehlers, einer Wartung, eines " -"Netzwerkausfalls oder einer anderen Art von Bruch über das System " -"replizieren. Diese Strategie ist sehr praktisch für die App-Erstellung. Sie " -"können einfach Objekte in Objektspeicher reintun und sich nicht um die " -"zusätzliche Arbeit kümmern, die es braucht, um sie sicher zu halten." - -msgid "OpenStack SDK" -msgstr "OpenStack SDK" - -msgid "OpenStack SDK for Microsoft .NET" -msgstr "OpenStack SDK für Microsoft .NET" - -msgid "OpenStack SDKs" -msgstr "OpenStack SDKs" - -msgid "" -"OpenStack provides a couple of tools that make it easy to back up data. If " -"your provider runs OpenStack Object Storage, you can use its API calls and " -"CLI tools to work with archive files." -msgstr "" -"OpenStack bietet ein paar Tools, die es einfach machen, Daten zu sichern. " -"Wenn Ihr Provider OpenStack Object Storage anbietet, können Sie mit seinen " -"API-Aufrufen und CLI-Tools mit Archivdateien arbeiten." - -msgid "" -"OpenStack supports 'regions', which are geographically-separated " -"installations that are connected to a single service catalog. This section " -"explains how to expand the Fractal application to use multiple regions for " -"high availability." -msgstr "" -"OpenStack unterstützt 'Regionen', die geografisch getrennte Installationen " -"sind, die mit einem einzigen Dienstkatalog verbunden sind. In diesem " -"Abschnitt wird erläutert, wie die Fractal-Anwendung erweitert werden kann, " -"um mehrere Regionen für eine hohe Verfügbarkeit zu verwenden." - -msgid "Or, try one of these tutorial steps:" -msgstr "Oder versuchen Sie eines dieser Tutorial Schritte:" - -msgid "Orchestration" -msgstr "Orchestrierung" - -msgid "" -"Other features, such as creating volume snapshots, are useful for backups:" -msgstr "" -"Weitere Features, wie das Erstellen von Volume-Snapshots, sind für Backups " -"nützlich:" - -msgid "" -"Other versions of this guide show you how to use the other SDKs and " -"languages to complete these tasks. If you are a developer for another " -"toolkit that you would like this guide to include, feel free to submit code " -"snippets. For more information, contact `OpenStack Documentation team " -"`_ members." -msgstr "" -"Andere Versionen dieses Handbuchs zeigen Ihnen, wie Sie die anderen SDKs und " -"Sprachen verwenden, um diese Aufgaben abzuschließen. Wenn Sie ein Entwickler " -"für ein anderes Toolkit sind, dass Sie diesen Leitfaden einschließen " -"möchten, fühlen Sie sich frei, Code-Snippets einzureichen. Für weitere " -"Informationen wenden Sie sich bitte an `OpenStack Documentation Team " -" `_ Mitglieder." - -msgid "" -"Otherwise, continue reading to learn how to work with, and move the Fractal " -"application database server to use, block storage." -msgstr "" -"Andernfalls lesen Sie weiter, um zu lernen, wie Sie arbeiten können, und " -"verschieben Sie den Fractal-Anwendungsdatenbank-Server, um den Speicher zu " -"blockieren." - -msgid "" -"Our code samples use `Java 8 `_." -msgstr "" -"Unsere Code-Samples verwenden `Java 8 `_." - -msgid "PHP" -msgstr "PHP" - -msgid "" -"PHP-OpenCloud supports the OpenStack Networking API, but this section has " -"not been completed." -msgstr "" -"PHP-OpenCloud unterstützt die OpenStack Networking API, aber dieser " -"Abschnitt wurde noch nicht abgeschlossen." - -msgid "" -"PHP-opencloud supports OpenStack Orchestration :D:D:D but this section is " -"not written yet." -msgstr "" -"PHP-opencloud unterstützt OpenStack Orchestrierung: D:D:D aber dieser " -"Abschnitt ist noch nicht geschrieben." - -msgid "Parameter" -msgstr "Parameter" - -msgid "" -"Perhaps you can `contribute `_?" -msgstr "" -"Vielleicht können Sie dazu `beitragen `_?" - -msgid "Phoenix servers" -msgstr "Phoenix-Server" - -msgid "" -"Pkgcloud supports OpenStack Orchestration :D:D:D but this section is `not " -"written yet `_" -msgstr "" -"Pkgcloud unterstützt OpenStack Orchestration: D:D:D aber dieser Abschnitt " -"ist noch nicht geschrieben `_" - -msgid "" -"Pkgcloud supports the OpenStack Networking API, but this section has not " -"been completed." -msgstr "" -"Pkgcloud unterstützt die OpenStack Networking API, aber dieser Abschnitt " -"wurde noch nicht abgeschlossen." - -msgid "" -"Place the above pom.xml into the root directory of your project. Then create " -"the nested subdirectory tree :code:`src` -> :code:`main` -> :code:`java`. " -"Place the Java code samples that you copy from this book into the folder " -"named \":code:`java`\"." -msgstr "" -"Lege die obige pom.xml in das Wurzelverzeichnis Ihres Projekts. Dann " -"erstellen Sie den verschachtelten Unterverzeichnisbaum :code: `src` ->:code:" -"` main` ->:code: `java`. Legen Sie die Java-Code-Beispiele, die Sie aus " -"diesem Buch kopieren, in den Ordner mit dem Namen ':code:` java` '." - -msgid "Place the images in the :code:`fractals` container:" -msgstr "Legen Sie die Bilder in den :code: `Fraktale` Container:" - -msgid "" -"Previously, you manually created the database, which is useful for a single " -"database that you rarely update. However, the OpenStack :code:`trove` " -"component provides Database as a Service (DBaaS)." -msgstr "" -"Bisher haben Sie die Datenbank manuell erstellt, was für eine einzige " -"Datenbank nützlich ist, die Sie selten aktualisieren. Allerdings bietet die " -"OpenStack :code: `trove`-Komponente Datenbank als Service (DBaaS)." - -msgid "" -"Prior to this section, the network layout for the Fractal application would " -"be similar to the following diagram:" -msgstr "" -"Vor diesem Abschnitt wäre das Netzwerklayout für die Fractal-Anwendung " -"ähnlich dem folgenden Diagramm:" - -msgid "Programmatic interfaces (APIs)" -msgstr "Programmatische Schnittstellen (APIs)" - -msgid "Python" -msgstr "Python" - -msgid "Regions and geographic diversity" -msgstr "Regionen und geografische Vielfalt" - -msgid "Remove the existing app" -msgstr "Entfernen Sie die vorhandene App" - -msgid "" -"Removing the egress rule created by OpenStack will cause your instance " -"networking to break." -msgstr "" -"Das Entfernen der von OpenStack erstellten Ausstiegsregel wird dazu führen, " -"dass Ihre Instanz-Netzwerke zusammenbrechen." - -msgid "" -"Replace :code:`IP_API_1` and :code:`IP_API_2` with the corresponding " -"floating IPs. Replace FRACTAL_UUID with the UUID of an existing fractal." -msgstr "" -"Ersetzen Sie :code:`IP_API_1` und :code:`IP_API_2` mit den entsprechenden " -"Floating IPs. Ersetzen Sie FRACTAL_UUID durch die UUID eines vorhandenen " -"Fraktals." - -msgid "Replace :code:`IP_API_1` with the IP address of the API instance." -msgstr "Ersetzen Sie :code: `IP_API_1` mit der IP-Adresse der API-Instanz." - -msgid "" -"Replace :code:`IP_API_1` with the IP address of the first API instance and " -"USERNAME with the appropriate user name." -msgstr "" -"Ersetzen Sie :code:`IP_API_1` mit der IP-Adresse der ersten API-Instanz und " -"USERNAME mit dem entsprechenden Benutzernamen." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance " -"and USERNAME to the appropriate user name." -msgstr "" -"Ersetzen Sie :code:`IP_CONTROLLER` mit der IP-Adresse der Controller-Instanz " -"und USERNAME an den entsprechenden Benutzernamen." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance " -"and USERNAME with the appropriate user name." -msgstr "" -"Ersetzen Sie :code:`IP_CONTROLLER` mit der IP-Adresse der Controller-Instanz " -"und USERNAME mit dem entsprechenden Benutzernamen." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance." -msgstr "" -"Ersetzen Sie :code:`IP_CONTROLLER` mit der IP-Adresse der Controller-Instanz." - -msgid "" -"Replace :code:`IP_DATABASE` with the IP address of the database instance and " -"USERNAME to the appropriate user name." -msgstr "" -"Ersetzen Sie :code: `IP_DATABASE` mit der IP-Adresse der Datenbankinstanz " -"und USERNAME an den entsprechenden Benutzernamen." - -msgid "" -"Replace :code:`IP_WORKER_1` with the IP address of the worker instance and " -"USERNAME to the appropriate user name." -msgstr "" -"Ersetzen Sie :code:`IP_WORKER_1` mit der IP-Adresse der Workerinstanz und " -"USERNAME mit den entsprechenden Benutzernamen." - -msgid "" -"Replace :code:`IP_WORKER` with the IP address of the worker instance and " -"USERNAME with the appropriate user name." -msgstr "" -"Ersetzen Sie :code:`IP_WORKER` mit der IP-Adresse der Worker-Instanz und " -"USERNAME mit dem entsprechenden Benutzernamen." - -msgid "Ruby" -msgstr "Rubin" - -msgid "" -"Run the :code:`ceilometer_statistics_query`: command to see the derived " -"statistics." -msgstr "" -"Führen Sie den Befehl :code:`ceilometer_statistics_query` aus, um die " -"abgeleiteten Statistiken zu sehen." - -msgid "" -"Run the :code:`nova list` command to confirm that the :code:`OS::Heat::" -"AutoScalingGroup` has created more instances:" -msgstr "" -"Führen Sie den Befehl :code:`nova list` aus, um zu bestätigen, dass der :" -"code:`OS::Heat::AutoScalingGroup` mehr Instanzen erstellt hat:" - -msgid "" -"Run the :code:`nova list` command to confirm that the :code:`OS::Heat::" -"AutoScalingGroup` removed the unneeded instances:" -msgstr "" -"Führen Sie den Befehl :code:`nova list` aus, um zu bestätigen, dass der :" -"code:`OS::Heat::AutoScalingGroup` die nicht benötigten Instanzen entfernt " -"hat:" - -msgid "" -"Run the :code:`nova list` command. This template created three instances:" -msgstr "" -"Führen Sie den Befehl :code:`nova list` aus. Diese Vorlage hat drei " -"Instanzen erstellt:" - -msgid "Run the script to start the deployment." -msgstr "Führen Sie das Skript aus, um die Bereitstellung zu starten." - -msgid "" -"SDKs do not generally support the service yet, but you can use the 'trove' " -"command-line client to work with it instead." -msgstr "" -"SDKs unterstützen den Dienst noch nicht, aber Sie können den " -"Kommandozeilenclient 'trove' verwenden, um dort zu arbeiten." - -msgid "Scalability" -msgstr "Skalierbarkeit" - -msgid "Scale available resources up and down." -msgstr "Skalieren Sie verfügbare Ressourcen auf und ab." - -msgid "Scale the API service" -msgstr "Skalieren Sie den API-Dienst" - -msgid "Scale the workers" -msgstr "Skalieren Sie die Worker" - -msgid "Scaling out" -msgstr "Skalieren" - -msgid "Security" -msgstr "Sicherheit" - -msgid "" -"Security groups are sets of network access rules that are applied to an " -"instance's networking. By default, only egress (outbound) traffic is " -"allowed. You must explicitly enable ingress (inbound) network access by " -"creating a security group rule." -msgstr "" -"Sicherheitsgruppen sind Sätze von Netzwerkzugriffsregeln, die auf die " -"Vernetzung einer Instanz angewendet werden. Standardmäßig ist nur Austritt " -"(ausgehender) Verkehr erlaubt. Sie müssen explizit den Eintritt (Eingang) " -"des Netzwerkzugriffs aktivieren, indem Sie eine Sicherheitsgruppenregel " -"erstellen." - -msgid "" -"Security is important when it comes to your instances; you can not have just " -"anyone accessing them. To enable logging into an instance, you must provide " -"the public key of an SSH key pair during instance creation. In section one, " -"you created and uploaded a key pair to OpenStack, and cloud-init installed " -"it for the user account." -msgstr "" -"Sicherheit ist wichtig, wenn es um Ihre Instanzen geht; es kann nicht jeder " -"auf sie zugreifen. Um die Anmeldung in einer Instanz zu aktivieren, müssen " -"Sie während der Instanzerstellung den öffentlichen Schlüssel eines SSH-" -"Schlüsselpaars angeben. Im Abschnitt Eins haben Sie ein Schlüsselpaar zu " -"OpenStack erstellt und hochgeladen und Cloud-init für das Benutzerkonto " -"installiert." - -msgid "See the state of the alarms set up by the template:" -msgstr "" -"Sehen Sie den Zustand der Alarme, die von der Vorlage eingerichtet wurden:" - -msgid "" -"Set the image and size variables to appropriate values for your cloud. We " -"will use these variables in later sections." -msgstr "" -"Setzen Sie die Abbild- und Größenvariablen auf entsprechende Werte für Ihre " -"Cloud. Wir werden diese Variablen in späteren Abschnitten verwenden." - -msgid "Shade" -msgstr "Shade" - -msgid "" -"Shade's create_object function has a \"use_slo\" parameter (that defaults to " -"true) which will break your object into smaller objects for upload and " -"rejoin them if needed." -msgstr "" -"Shade's create_object-Funktion hat einen 'use_slo' -Parameter (der " -"standardmäßig auf true), der Ihr Objekt in kleinere Objekte zum Hochladen " -"zerbricht und bei Bedarf wieder zusammenbringt." - -msgid "" -"Similar to the UNIX programming model, an object, such as a document or an " -"image, is a \"bag of bytes\" that contains data. You use containers to group " -"objects. You can place many objects inside a container, and your account can " -"have many containers." -msgstr "" -"Ähnlich wie bei dem UNIX-Programmiermodell ist ein Objekt wie ein Dokument " -"oder ein Bild ein 'Beutel von Bytes', der Daten enthält. Sie verwenden " -"Container, um Objekte zu gruppieren. Sie können viele Objekte in einem " -"Container platzieren, und Ihr Konto kann viele Container haben." - -msgid "" -"So what exactly was that request doing at the end of the previous section? " -"Let us look at it again. In this subsection, we are just explaining what you " -"have already done in the previous section; you do not need to run these " -"commands again." -msgstr "" -"Also, was genau war die Frage am Ende des vorherigen Abschnitts? Lassen Sie " -"uns es noch einmal anschauen. In diesem Unterabschnitt erklären wir nur, was " -"Sie bereits im vorigen Abschnitt gemacht haben. Sie müssen diese Befehle " -"nicht mehr ausführen." - -msgid "" -"So, for example, the file named :code:`GettingStarted.java` from the end of " -"this chapter would be located as follows:" -msgstr "" -"So würde zum Beispiel die Datei mit dem Namen :code: `GettingStarted.java` " -"am Ende dieses Kapitels wie folgt liegen:" - -msgid "Specify a network during instance build" -msgstr "Geben Sie während des Instanzbaus ein Netzwerk an" - -msgid "" -"Specify an external gateway for your router to tell OpenStack which network " -"to use for Internet access." -msgstr "" -"Geben Sie ein externes Gateway für Ihren Router an, um OpenStack " -"mitzuteilen, welches Netzwerk für den Internet-Zugang verwendet werden soll." - -msgid "Specify the flavor ID that you would like to use." -msgstr "Geben Sie die Varianten-ID an, die Sie verwenden möchten." - -msgid "" -"Spend some time playing with the stack and the Fractal app to see how it " -"works." -msgstr "" -"Verbringen Sie einige Zeit mit dem Stack und der Fractal App zu sehen, wie " -"es funktioniert." - -msgid "Split the database and message queue" -msgstr "Teilen Sie die Datenbank und die Nachrichtenwarteschlange" - -msgid "Splitting services across multiple instances" -msgstr "Aufteilung von Diensten über mehrere Instanzen hinweg" - -msgid "" -"Start by creating a security group for the all-in-one instance and adding " -"the appropriate rules, such as HTTP (TCP port 80) and SSH (TCP port 22):" -msgstr "" -"Beginnen Sie mit dem Erstellen einer Sicherheitsgruppe für die All-in-One-" -"Instanz und Hinzufügen der entsprechenden Regeln wie HTTP (TCP-Port 80) und " -"SSH (TCP-Port 22):" - -msgid "Start by looking at what is already in place." -msgstr "Beginnen Sie mit dem Betrachten, was bereits vorhanden ist." - -msgid "" -"Stop the running MySQL database service and move the database files from :" -"file:`/var/lib/mysql` to the new volume, which is temporarily mounted at :" -"file:`/mnt/database`." -msgstr "" -"Stoppen Sie den laufenden MySQL-Datenbankdienst und verschieben Sie die " -"Datenbankdateien aus :file: `/var/lib/mysql` auf das neue Volume, das " -"vorübergehend an: file :`/mnt/database` angebracht ist." - -msgid "" -"Swift metadata keys are prepended with \"x-object-meta-\" so when you get " -"the object with get_object(), in order to get the value of the metadata your " -"key will be \"x-object-meta-foo\"." -msgstr "" -"swift Metadatentasten werden mit 'x-object-meta-' vorangestellt, also wenn " -"Sie das Objekt mit get_object () bekommen, um den Wert der Metadaten zu " -"erhalten, wird Ihr Schlüssel 'x-object-meta-foo' sein." - -msgid "" -"Sync the file systems and mount the block device that contains the database " -"files to :file:`/var/lib/mysql`." -msgstr "" -"Synchronisieren Sie die Dateisysteme und montieren Sie das Blockgerät, das " -"die Datenbankdateien enthält, an :file: `/var/lib/mysql`." - -msgid "" -"That brings us to where we ended up at the end of :doc:`/getting_started`. " -"But where do we go from here?" -msgstr "" -"Das bringt uns dahin, wo wir am Ende von :doc:`/ getting_started` enden. " -"Aber wohin gehen wir von hier" - -msgid "" -"That example is simplistic, of course, but the flexibility of the resource " -"object enables the creation of templates that contain all the required cloud " -"infrastructure to run an application, such as load balancers, block storage " -"volumes, compute instances, networking topology, and security policies." -msgstr "" -"Das Beispiel ist natürlich einfach, aber die Flexibilität des Resource-" -"Objekts ermöglicht die Erstellung von Templates, die alle benötigten Cloud-" -"Infrastrukturen enthalten, um eine Applikation auszuführen, wie z.B. Load " -"Balancer, Blockspeichervolumen, Compute-Instanzen, Netzwerktopologie und " -"Sicherheitsrichtlinien." - -msgid "" -"That, as it happens, is the new reality of programming. Applications and " -"systems used to be created on large, expensive servers, cared for by " -"operations staff dedicated to keeping them healthy. If something went wrong " -"with one of those servers, the staff's job was to do whatever it took to " -"make it right again and save the server and the application." -msgstr "" -"Das ist, wie es geschieht, die neue Realität der Programmierung. Anwendungen " -"und Systeme wurden auf großen, teuren Servern erstellt, die von Betriebs-" -"Mitarbeitern betreut wurden, um sie gesund zu halten. Wenn etwas mit einem " -"dieser Server schief gegangen wäre, war die Aufgabe des Mitarbeiters zu tun, " -"was notwendig ist, um sie wieder ganz zu machen und den Server und die " -"Anwendung wiederherzustellen." - -msgid "" -"The :code:`OS::Heat::AutoScalingGroup` removes instances in creation order. " -"So the worker instance that was created first is the first instance to be " -"removed." -msgstr "" -"Der :code:`OS::Heat::AutoScalingGroup` entfernt Instanzen in der " -"Erstellungsreihenfolge. Also die Worker-Instanz, die zuerst erstellt wurde, " -"ist die erste Instanz, die entfernt werden soll." - -msgid "" -"The :doc:`/introduction` section describes how to build in a modular " -"fashion, create an API, and other aspects of the application architecture. " -"Now you will see why those strategies are so important. By creating a " -"modular application with decoupled services, you can identify components " -"that cause application performance bottlenecks and scale them out. Just as " -"importantly, you can also remove resources when they are no longer " -"necessary. It is very difficult to overstate the cost savings that this " -"feature can bring, as compared to traditional infrastructure." -msgstr "" -"Der Abschnitt :doc:`/introduction` beschreibt, wie man modular aufbaut, eine " -"API erstellt und andere Aspekte der Anwendungsarchitektur. Jetzt werden Sie " -"sehen, warum diese Strategien so wichtig sind. Durch die Erstellung einer " -"modularen Anwendung mit entkoppelten Diensten können Sie Komponenten " -"identifizieren, die Anwendungsperformance verursachen und sie ausgleichen. " -"Genauso wichtig, man kann auch Ressourcen entfernen, wenn sie nicht mehr " -"nötig sind. Es ist sehr schwierig, die Kosteneinsparungen zu beziffern, die " -"diese Funktion im Vergleich zur herkömmlichen Infrastruktur bringen kann." - -msgid "" -"The CPU utilization across workers increases as workers start to create the " -"fractals." -msgstr "" -"Die CPU-Auslastung über die Worker steigt, wenn die Worker die Fraktale " -"erschaffen." - -msgid "" -"The Fractals app currently uses the local file system on the instance to " -"store the images that it generates. For a number of reasons, this approach " -"is not scalable or durable." -msgstr "" -"Die Fractals App verwendet derzeit das lokale Dateisystem auf der Instanz, " -"um die von ihm erzeugten Bilder zu speichern. Aus einer Reihe von Gründen " -"ist dieser Ansatz nicht skalierbar oder langlebig." - -msgid "" -"The Fractals application was designed with the principles of the previous " -"subsection in mind. You will note that in :doc:`getting_started`, we " -"deployed the application in an all-in-one style, on a single virtual " -"machine. This is not a good practice, but because the application uses micro-" -"services to decouple logical application functions, we can change this " -"easily." -msgstr "" -"Die Fractals-Anwendung wurde mit den Prinzipien des vorherigen " -"Unterabschnitts entworfen. Sie werden feststellen, dass in :doc: " -"`getting_started`, wir die Anwendung in einem All-in-One-Stil, auf einer " -"einzigen virtuellen Maschine einsetzen. Dies ist keine gute Praxis, aber " -"weil die Anwendung Mikrodienste verwendet, um logische Anwendungsfunktionen " -"zu entkoppeln, können wir dies leicht ändern." - -msgid "The Object Storage API is organized around objects and containers." -msgstr "Die Objektspeicher-API ist um Objekte und Container herum angeordnet." - -msgid "" -"The Object Storage service manages many of the tasks normally managed by the " -"application owner. The Object Storage service provides a scalable and " -"durable API that you can use for the fractals app, eliminating the need to " -"be aware of the low level details of how objects are stored and replicated, " -"and how to grow the storage pool. Object Storage handles replication for " -"you. It stores multiple copies of each object. You can use the Object " -"Storage API to return an object, on demand." -msgstr "" -"Der Objektspeicherdienst verwaltet viele Aufgaben, die normalerweise vom " -"Anwendungsbesitzer verwaltet werden. Der Object Storage Service bietet eine " -"skalierbare und langlebige API, die Sie für die Fractals App verwenden " -"können, wodurch es keine Notwendigkeit gibt, sich der niederen Details wie " -"Objekte gespeichert und repliziert zu widmen, und wie der Speicherpool " -"wächst. Object Storage behandelt Replikation für Sie. Es speichert mehrere " -"Kopien jedes Objekts. Sie können die Objektspeicher-API verwenden, um ein " -"Objekt auf Anfrage zurückzusenden." - -msgid "" -"The OpenStack Networking API provides support for creating loadbalancers, " -"which can be used to scale the Fractal app web service. In the following " -"example, we create two compute instances via the Compute API, then " -"instantiate a load balancer that will use a virtual IP (VIP) for accessing " -"the web service offered by the two compute nodes. The end result will be the " -"following network topology:" -msgstr "" -"Die OpenStack Networking API bietet Unterstützung für das Erstellen von " -"Loadbalancern, mit denen der Fractal App Web Service skaliert werden kann. " -"Im folgenden Beispiel erstellen wir zwei Compute-Instanzen über die Compute " -"API und instanziieren dann einen Load Balancer, der eine virtuelle IP (VIP) " -"für den Zugriff auf den von den beiden Compute-Knoten angebotenen Webdienst " -"verwendet. Das Ergebnis ist die folgende Netzwerktopologie:" - -msgid "" -"The OpenStack Orchestration API uses the stacks, resources, and templates " -"constructs." -msgstr "" -"Die OpenStack Orchestration API verwendet die Stapel-, Ressourcen- und " -"Vorlagenkonstrukte." - -msgid "The OpenStack SDK does not currently support OpenStack Orchestration." -msgstr "Das OpenStack SDK unterstützt derzeit keine OpenStack Orchestrierung" - -msgid "" -"The Orchestration service is not deployed by default in every cloud. If " -"these commands do not work, it means the Orchestration API is not available; " -"ask your support team for assistance." -msgstr "" -"Der Orchestrierungsdienst wird in jeder Cloud nicht standardmäßig " -"bereitgestellt. Wenn diese Befehle nicht funktionieren, bedeutet dies, dass " -"die Orchestrierungs-API nicht verfügbar ist. fragen Sie Ihr Support-Team um " -"Hilfe." - -msgid "" -"The Orchestration service provides a template-based way to describe a cloud " -"application, then coordinates running the needed OpenStack API calls to run " -"cloud applications. The templates enable you to create most OpenStack " -"resource types, such as instances, networking information, volumes, security " -"groups, and even users. It also provides more advanced functionality, such " -"as instance high availability, instance auto-scaling, and nested stacks." -msgstr "" -"Der Orchestrierungsdienst bietet eine Vorlagen-basierte Möglichkeit, eine " -"Cloud-Anwendung zu beschreiben und koordiniert dann die erforderlichen " -"OpenStack-API-Aufrufe, um Cloud-Anwendungen auszuführen. Mit den Vorlagen " -"können Sie die meisten OpenStack-Ressourcentypen wie Instanzen, " -"Netzwerkinformationen, Volumes, Sicherheitsgruppen und sogar Benutzer " -"erstellen. Es bietet auch erweiterte Funktionalität, wie z.B. " -"Hochverfügbarkeit, Instanz Auto-Skalierung und verschachtelte Stacks." - -msgid "" -"The Telemetry service is not deployed by default in every cloud. If the " -"ceilometer commands do not work, this example does not work; ask your " -"support team for assistance." -msgstr "" -"Der Telemetrieservice wird in jeder Cloud nicht standardmäßig " -"bereitgestellt. Wenn die Ceilometer-Befehle nicht funktionieren, " -"funktioniert dieses Beispiel nicht; fragen Sie Ihr Support-Team um Hilfe." - -msgid "" -"The Telemetry service uses meters to measure a given aspect of a resources " -"usage. The meter that we are interested in is the :code:`cpu_util` meter." -msgstr "" -"Der Telemetrie-Service nutzt Meter, um einen bestimmten Aspekt eines " -"Ressourcenverbrauchs zu messen. Der Zähler, an dem wir interessiert sind, " -"ist der :code:`cpu_util` Meter." - -msgid "" -"The `RabbitMQ getting started tutorial `_ provides a great introduction to message queues." -msgstr "" -"Das 'RabbitMQ Start Tutorial `_ " -"bietet eine gute Einführung in die Nachrichtenwarteschlangen." - -msgid "" -"The `generated_by` field shows the worker that created the fractal. Because " -"multiple worker instances share the work, fractals are generated more " -"quickly and users might not even notice when a worker fails." -msgstr "" -"Das Feld `generated_by` zeigt den Worker, der das Fraktal erstellt hat. Weil " -"mehrere Workerinstanzen die Arbeit teilen, werden Fraktale schneller erzeugt " -"und Benutzer können nicht einmal bemerken, wenn ein Arbeiter ausfällt." - -msgid "" -"The `outputs` property shows the URL through which you can access the " -"Fractal application. You can SSH into the instance." -msgstr "" -"Die Eigenschaft `output` zeigt die URL an, über die Sie auf die Fractal-" -"Anwendung zugreifen können. Du kannst SSH in die Instanz bringen." - -msgid "The actual auth URL is:" -msgstr "Die aktuelle Auth-URL lautet:" - -msgid "The alarms have the form:" -msgstr "Die Alarme haben die Form:" - -msgid "" -"The application stores the generated fractal images directly in the database " -"used by the API service instance. Storing image files in a database is not " -"good practice. We are doing it here as an example only as an easy way to " -"enable multiple instances to have access to the data. For best practice, we " -"recommend storing objects in Object Storage, which is covered in :doc:" -"`durability`." -msgstr "" -"Die Anwendung speichert die erzeugten Fraktalbilder direkt in der Datenbank, " -"die von der API-Dienstinstanz verwendet wird. Das Speichern von Bilddateien " -"in einer Datenbank ist nicht gut. Wir machen es hier als Beispiel nur als " -"eine einfache Möglichkeit, mehreren Instanzen zu ermöglichen, Zugriff auf " -"die Daten zu haben. Für die bewährte Praxis empfehlen wir die Speicherung " -"von Objekten in Object Storage, die in :doc:`durability` abgedeckt ist." - -msgid "" -"The auto-scaling stack sets up an API instance, a services instance, and an " -"auto-scaling group with a single worker instance. It also sets up ceilometer " -"alarms that add worker instances to the auto-scaling group when it is under " -"load, and removes instances when the group is idling. To do this, the alarms " -"post to URLs." -msgstr "" -"Der Auto-Skalierungsstapel richtet eine API-Instanz, eine Dienstinstanz und " -"eine Auto-Skalierungsgruppe mit einer einzelnen Worker-Instanz ein. Es setzt " -"auch Ceilometer-Alarme ein, die Worker-Instanzen der Auto-Skalierungsgruppe " -"hinzufügen, wenn sie unter Last ist, und entfernt Instanzen, wenn die Gruppe " -"im Leerlauf ist. Um dies zu tun, die Alarme Posten zu URLs." - -msgid "" -"The client object accesses the Compute v2.0 service and type v2.1, so that " -"version is in this tutorial." -msgstr "" -"Das Clientobjekt greift auf den Compute v2.0-Dienst und Typ v2.1 zu, sodass " -"diese Version in diesem Tutorial verwendet wird." - -msgid "The connection URL for the database (not used here)." -msgstr "Die Verbindungs-URL für die Datenbank (hier nicht verwendet)." - -msgid "The endpoint URL of the API service." -msgstr "Die Endpunkt-URL des API-Dienstes." - -msgid "" -"The example code uses the awesome `Requests library `_. Before you try to run the previous script, make " -"sure that it is installed on your system." -msgstr "" -"Der Beispielcode verwendet die wunderbare `Requests library `_. Bevor Sie versuchen, das vorherige " -"Skript auszuführen, stellen Sie sicher, dass es auf Ihrem System installiert " -"ist." - -msgid "" -"The example template depends on the ceilometer project, which is part of the " -"`Telemetry service `_." -msgstr "" -"Die Beispielvorlage hängt vom Ceilometer-Projekt ab, das Teil des " -"Telemetrieservice ist `_." - -msgid "" -"The first step is to start the controller instance. The instance has the API " -"service, the database, and the messaging service, as you can see from the " -"parameters passed to the installation script." -msgstr "" -"Der erste Schritt ist, die Controller-Instanz zu starten. Die Instanz " -"verfügt über den API-Dienst, die Datenbank und den Messaging-Dienst, wie Sie " -"aus den an das Installationsskript übergebenen Parametern sehen können." - -msgid "The flavor" -msgstr "Die Variante" - -msgid "" -"The following file contains all of the code from this section of the " -"tutorial. This comprehensive code sample lets you view and run the code as a " -"single file." -msgstr "" -"Die folgende Datei enthält den gesamten Code aus diesem Abschnitt des " -"Tutorials. Mit diesem umfassenden Code-Beispiel können Sie den Code als " -"einzelne Datei anzeigen und ausführen." - -msgid "" -"The following file contains all of the code from this section of the " -"tutorial. This comprehensive code sample lets you view and run the code as a " -"single script." -msgstr "" -"Die folgende Datei enthält den gesamten Code aus diesem Abschnitt des " -"Tutorials. Mit diesem umfassenden Code-Beispiel können Sie den Code als " -"einzelnes Skript anzeigen und ausführen." - -msgid "" -"The following instance creation example assumes that you have a single-" -"tenant network. If you receive the 'Exception: 400 Bad Request Multiple " -"possible networks found, use a Network ID to be more specific' error, you " -"have multiple-tenant networks. You must add a `networks` parameter to the " -"call that creates the server. See :doc:`/appendix` for details." -msgstr "" -"Das folgende Beispiel-Erstellungsbeispiel geht davon aus, dass Sie ein Ein-" -"Tenant-Netzwerk haben. Wenn Sie die 'Exception: 400 Bad Request Multiple " -"possible networks found, use a Network ID to be more specific' Fehlermeldung " -"bekommen, haben Sie mehrere Tenant-Netzwerke. Sie müssen dem Aufruf, der den " -"Server erstellt, einen 'Netzwerk' -Parameter hinzufügen. Siehe :doc: `/" -"appendix` für Details." - -msgid "The following operations are destructive and result in data loss." -msgstr "" -"Die folgenden Operationen sind zerstörerisch und führen zu Datenverlust." - -msgid "" -"The fractal application we are building contains these types of network " -"traffic:" -msgstr "" -"Die Fraktalanwendung, die wir bauen, enthält diese Arten von Netzwerkverkehr:" - -msgid "" -"The fractals are now available from any of the app-api hosts. To verify, " -"visit http://IP_API_1/fractal/FRACTAL_UUID and http://IP_API_2/fractal/" -"FRACTAL_UUID. You now have multiple redundant web services. If one fails, " -"you can use the others." -msgstr "" -"Die Fraktale sind jetzt bei jedem der app-api-Hosts erhältlich. Um zu " -"überprüfen, besuchen Sie http://IP_API_1/fraktal/FRACTAL_UUID und http://" -"IP_API_2/fraktal/FRACTAL_UUID. Sie haben jetzt mehrere redundante Web-" -"Services. Wenn einer versagt, können Sie die anderen benutzen." - -msgid "The magic revisited" -msgstr "Die Magie entzaubert" - -msgid "" -"The message queue can take a while to notice that worker instances have died." -msgstr "" -"Die Nachrichtenwarteschlange kann eine Weile dauern, um zu bemerken, dass " -"Worker-Instanzen gestorben sind." - -msgid "" -"The most common way for OpenStack clouds to allocate Internet rout-able IP " -"addresses to instances, however, is through the use of floating IPs. A " -"floating IP is an address that exists as an entity unto itself, and can be " -"associated to a specific instance network interface. When a floating IP " -"address is associated to an instance network interface, OpenStack re-directs " -"traffic bound for that address to the address of the instance's internal " -"network interface address. Your cloud provider will generally offer pools of " -"floating IPs for your use." -msgstr "" -"Der häufigste Weg für OpenStack-Clouds, um Internet-Router-fähige IP-" -"Adressen zu Instanzen zuzuordnen, ist jedoch durch die Verwendung von " -"Floating-IPs. Eine Floating-IP ist eine Adresse, die als Entität für sich " -"selbst existiert und einer bestimmten Instanznetzwerkschnittstelle " -"zugeordnet werden kann. Wenn eine Floating-IP-Adresse einer " -"Instanznetzwerkschnittstelle zugeordnet ist, leitet OpenStack den für diese " -"Adresse verknüpften Verkehr an die Adresse der internen " -"Netzwerkschnittstellenadresse der Instanz zurück. Ihr Cloud-Anbieter bietet " -"in der Regel Pools von Floating-IPs für Ihren Einsatz." - -msgid "The new instance appears." -msgstr "Die neue Instanz erscheint." - -msgid "" -"The next logical step is to upload an object. Find a photo of a goat online, " -"name it :code:`goat.jpg`, and upload it to your :code:`fractals` container:" -msgstr "" -"Der nächste logische Schritt besteht darin, ein Objekt hochzuladen. Finden " -"Sie ein Foto von einer Ziege online, nennen Sie es :Code: `goat.jpg`, und " -"laden Sie es auf Ihre :Code:`Fraktale` Container:" - -msgid "" -"The outputs section of the stack contains two ceilometer command-line " -"queries:" -msgstr "" -"Der Ausgabestand des Stapels enthält zwei Ceilometer-Befehlszeilenabfragen:" - -msgid "The parameter :code:`Size` is in gigabytes." -msgstr "Der Parameter :Code: `Größe` ist in Gigabyte." - -msgid "The parameter :code:`size` is in gigabytes." -msgstr "Der Parameter :code: `size` ist in Gigabyte." - -msgid "The prefix is `metering.` For example, `metering.some_name`." -msgstr "Das Präfix ist 'metering'. Zum Beispiel `metering.some_name`." - -msgid "" -"The previous section uses two virtual machines - one 'control' service and " -"one 'worker'. The speed at which your application can generate fractals " -"depends on the number of workers. With just one worker, you can produce only " -"one fractal at a time. Before long, you will need more resources." -msgstr "" -"Der vorhergehende Abschnitt verwendet zwei virtuelle Maschinen - einen " -"'Steuerdienst' und einen 'Worker'. Die Geschwindigkeit, mit der Ihre " -"Anwendung Fraktale erzeugen kann, hängt von der Anzahl der Worker ab. Mit " -"nur einem Worker können Sie nur ein Fraktal zu einer Zeit produzieren. Bis " -"dahin benötigen Sie mehr Ressourcen." - -msgid "" -"The rest of this tutorial will not reference the all-in-one instance you " -"created in section one. Take a moment to delete this instance." -msgstr "" -"Der Rest dieses Tutorials bezieht sich nicht auf die All-in-One-Instanz, die " -"Sie in Abschnitt eins erstellt haben. Nehmen Sie sich einen Moment Zeit, um " -"diese Instanz zu löschen." - -msgid "The samples and the statistics are listed in opposite time order!" -msgstr "" -"Die Muster und die Statistiken sind in umgekehrter Reihenfolge aufgeführt!" - -msgid "The second application is an OpenStack application that enables you to:" -msgstr "" -"Die zweite Anwendung ist eine OpenStack-Anwendung, die es Ihnen ermöglicht:" - -msgid "The shade framework can select and assign a free floating IP quickly" -msgstr "" -"Das shade-Framework kann eine Floating-IP schnell auswählen und zuordnen" - -msgid "" -"The sheer number of requests means that some requests for fractals might not " -"make it to the message queue for processing. To ensure that you can cope " -"with demand, you must also scale out the API capability of the Fractals " -"application." -msgstr "" -"Die schiere Anzahl von Anfragen bedeutet, dass einige Anfragen für Fraktale " -"es nicht zur Nachrichtenwarteschlange zur Verarbeitung machen können. Um " -"sicherzustellen, dass Sie mit der Nachfrage fertig werden können, müssen Sie " -"auch die API-Fähigkeit der Fractals-Anwendung skalieren." - -msgid "The stack automatically creates a Nova instance, as follows:" -msgstr "Der Stapel erstellt automatisch eine Nova-Instanz wie folgt:" - -msgid "" -"The stack reports an initial :code:`CREATE_IN_PROGRESS` status. When all " -"software is installed, the status changes to :code:`CREATE_COMPLETE`." -msgstr "" -"Der Stapel meldet initial :code: `CREATE_IN_PROGRESS` Status. Wenn alle " -"Software installiert ist, wechselt der Status zu :code:`CREATE_COMPLETE`." - -msgid "" -"The stack we will be building uses the firing of alarms to control the " -"addition or removal of worker instances." -msgstr "" -"Der Stapel, den wir bauen werden, nutzt das Abfeuern von Alarmen, um die " -"Hinzufügung oder Entfernung von Worker-Instanzen zu kontrollieren." - -msgid "The transport URL of the messaging service." -msgstr "Die Transport-URL des Messaging-Dienstes." - -msgid "The unique identifier (UUID) of the image" -msgstr "Die eindeutige Kennung (UUID) des Abbildes" - -msgid "The value of a meter is regularly sampled and saved with a timestamp." -msgstr "" -"Der Wert eines Meters wird regelmäßig abgetastet und mit einem Zeitstempel " -"gespeichert." - -msgid "" -"The worker service consumes messages from the work queue and then processes " -"them to create the corresponding fractal image file." -msgstr "" -"Der Workerservice konsumiert Nachrichten aus der Arbeitswarteschlange und " -"verarbeitet sie dann, um die entsprechende Fraktalbilddatei zu erstellen." - -msgid "" -"The world is running out of IPv4 addresses. If you get the \"No more IP " -"addresses available on network\" error, contact your cloud administrator. " -"You may also want to ask about IPv6 :)" -msgstr "" -"Die Welt verliert IPv4-Adressen. Wenn Sie den Fehler 'Keine weitere IP-" -"Adressen im Netzwerk' erhalten, wenden Sie sich an Ihren Cloud-" -"Administrator. Sie können auch nach IPv6 fragen :)" - -msgid "Then attach it to the instance:" -msgstr "Dann fügen Sie sie an die Instanz:" - -msgid "Then request an IP number be allocated from the pool." -msgstr "Dann fordern Sie eine IP-Nummer aus dem Pool zuzuordnen." - -msgid "Then, create a pair of large fractals:" -msgstr "Dann erstellen Sie ein paar große Fraktale:" - -msgid "" -"There are also multiple storage back ends (to store the generated fractal " -"images) and a database component (to store the state of tasks), but we will " -"talk about those in :doc:`/durability` and :doc:`/block_storage` " -"respectively." -msgstr "" -"Es gibt auch mehrere Speicher-Backends (um die erzeugten Fraktalbilder zu " -"speichern) und eine Datenbankkomponente (um den Status der Aufgaben zu " -"speichern), aber wir sprechen über die in :doc:`/durability` und :doc:`/" -"block_storage`." - -msgid "" -"There are definite advantages to this architecture. It is easy to get a \"new" -"\" server, without any of the issues that inevitably arise when a server has " -"been up and running for months, or even years." -msgstr "" -"Es gibt definitive Vorteile für diese Architektur. Es ist leicht, einen " -"'neuen' Server zu bekommen, ohne irgendwelche Probleme, die unweigerlich " -"entstehen, wenn ein Server seit Monaten läuft oder sogar Jahre alt ist." - -msgid "" -"There are more commands available; find out more details about them with :" -"code:`faafo get --help`, :code:`faafo list --help`, and :code:`faafo delete " -"--help`." -msgstr "" -"Es stehen mehr Befehle zur Verfügung; erfahren Sie mehr über sie mit :code: " -"`faafo get --help`, :code:`faafo list --help` und :code:`faafo delete --" -"help`." - -msgid "" -"These demonstrate how the Ceilometer alarms add and remove instances. To use " -"them:" -msgstr "" -"Dies zeigt, wie die Ceilometer Alarme Instanzen hinzufügen und entfernen. Um " -"sie zu benutzen:" - -msgid "These queries provide a view into the behavior of the stack." -msgstr "Diese Abfragen geben einen Einblick in das Verhalten des Stapels." - -msgid "" -"These saved samples are aggregated to produce a statistic. The statistic " -"that we are interested in is **avg**: the average of the samples over a " -"given period." -msgstr "" -"Diese gespeicherten Proben werden zusammengefasst, um eine Statistik zu " -"erzeugen. Die Statistik, die wir interessieren, ist **avg**: der " -"Durchschnitt der Proben über einen bestimmten Zeitraum." - -msgid "" -"These services are client-facing, so unlike the workers they do not use a " -"message queue to distribute tasks. Instead, you must introduce some kind of " -"load balancing mechanism to share incoming requests between the different " -"API services." -msgstr "" -"Diese Dienste sind kundenorientiert, so dass sie im Gegensatz zu den " -"Mitarbeitern keine Nachrichtenwarteschlange verwenden, um Aufgaben zu " -"verteilen. Stattdessen müssen Sie eine Art Lastverteilungsmechanismus " -"einführen, um eingehende Anfragen zwischen den verschiedenen API-Diensten zu " -"teilen." - -msgid "" -"These tools vastly reduce the effort it takes to work with large numbers of " -"servers, and also improve the ability to recreate, update, move, and " -"distribute applications." -msgstr "" -"Diese Tools reduzieren den Aufwand, den es braucht, um mit einer großen " -"Anzahl von Servern zu arbeiten, und verringert auch die Fähigkeit, " -"Anwendungen neu zu erstellen, zu aktualisieren, zu verschieben und zu " -"verteilen." - -msgid "" -"This OpenStack Database service is not installed in many clouds right now, " -"but if your cloud supports it, it can make your life a lot easier when " -"working with databases." -msgstr "" -"Dieser OpenStack-Datenbank-Service ist derzeit nicht in vielen Clouds " -"installiert, aber wenn Ihre Cloud es unterstützt, kann es Ihr Leben bei der " -"Arbeit mit Datenbanken viel einfacher machen." - -msgid "This adds a \"foo\" key to the metadata that has a value of \"bar\"." -msgstr "" -"Dies fügt einen 'foo' Schlüssel zu den Metadaten hinzu, die einen Wert von " -"'bar' haben." - -msgid "" -"This chapter explains the importance of durability and scalability for your " -"cloud-based applications. In most cases, really achieving these qualities " -"means automating tasks such as scaling and other operational tasks." -msgstr "" -"In diesem Kapitel wird die Bedeutung von Langlebigkeit und Skalierbarkeit " -"für Ihre Cloud-basierten Anwendungen erläutert. In den meisten Fällen " -"bedeutet es wirklich, diese Qualitäten zu erreichen, um Aufgaben wie " -"Skalierung und andere operative Aufgaben zu automatisieren." - -msgid "" -"This chapter introduces the Networking API. This will enable us to build " -"networking topologies that separate public traffic accessing the application " -"from traffic between the API and the worker components. We also introduce " -"load balancing for resilience, and create a secure back-end network for " -"communication between the database, web server, file storage, and worker " -"components." -msgstr "" -"In diesem Kapitel wird die Networking API vorgestellt. Dies ermöglicht es " -"uns, Netzwerk-Topologien zu erstellen, die den öffentlichen Verkehrszugriff " -"auf die Anwendung vom Verkehr zwischen der API und den Worker-Komponenten " -"trennen. Wir führen auch Lastverteilung für Resilienz ein und schaffen ein " -"sicheres Back-End-Netzwerk für die Kommunikation zwischen Datenbank, " -"Webserver, Dateispeicher und Worker-Komponenten." - -msgid "This code returns output like this:" -msgstr "Dieser Code gibt die Ausgabe wie folgt zurück:" - -msgid "This code returns the floating IP address:" -msgstr "Dieser Code gibt die Floating-IP-Adresse zurück:" - -msgid "" -"This command returns a very long list of meters. Once a meter is created, it " -"is never thrown away!" -msgstr "" -"Dieser Befehl gibt eine sehr lange Liste von Metern zurück. Sobald ein Meter " -"erstellt ist, wird er niemals weggeworfen!" - -msgid "This document has not yet been completed for the .NET SDK." -msgstr "Dieses Dokument ist noch nicht für das .NET SDK abgeschlossen." - -msgid "This document has not yet been completed for the fog SDK." -msgstr "Dieses Dokument ist noch nicht für das fog-SDK abgeschlossen." - -msgid "This document has not yet been completed for the php-opencloud SDK." -msgstr "" -"Dieses Dokument ist noch nicht für das php-opencloud SDK abgeschlossen." - -msgid "" -"This file contains all the code from this tutorial section. This class lets " -"you view and run the code." -msgstr "" -"Diese Datei enthält den ganzen Code aus diesem Tutorial. Mit dieser Klasse " -"können Sie den Code anzeigen und ausführen." - -msgid "" -"This file contains all the code from this tutorial section. This " -"comprehensive code sample lets you view and run the code as a single script." -msgstr "" -"Diese Datei enthält den ganzen Code aus diesem Tutorial. Mit diesem " -"umfassenden Code-Beispiel können Sie den Code als einzelnes Skript anzeigen " -"und ausführen." - -msgid "This gets an IP address that you can assign to your instance:" -msgstr "Dies bekommt eine IP-Adresse, die Sie Ihrer Instanz zuordnen können:" - -msgid "" -"This guide is for experienced software developers who want to deploy " -"applications to OpenStack clouds." -msgstr "" -"Dieser Leitfaden ist für erfahrene Softwareentwickler, die Anwendungen auf " -"OpenStack-Clouds einsetzen möchten." - -msgid "" -"This is a `useful pattern `_ for many cloud applications that have long lists of requests coming " -"in and a pool of resources from which to service them. This also means that " -"a worker may crash and the tasks will be processed by other workers." -msgstr "" -"Dies ist ein 'nützliches Muster' `_ für viele Cloud-Anwendungen, die lange Listen von Anfragen " -"bekommen und ein Pool von Ressourcen, von denen sie zu bedienen haben. Dies " -"bedeutet auch, dass ein Arbeiter abstürzen kann und die Aufgaben von anderen " -"Workern verarbeitet werden." - -msgid "" -"This option also uses a bit stream to upload the file, iterating bit by bit " -"over the file and passing those bits to Object Storage as they come. " -"Compared to loading the entire file in memory and then sending it, this " -"method is more efficient, especially for larger files." -msgstr "" -"Diese Option verwendet auch einen Bit-Stream zum Hochladen der Datei, " -"Iteration von Bit für Bit über die Datei und übergeben diese Bits an Object " -"Storage, wie sie kommen. Im Vergleich zum Laden der gesamten Datei im " -"Speicher und dann senden ist diese Methode effizienter, vor allem für " -"größere Dateien." - -msgid "" -"This process was obviously a very manual one. Figuring out that we needed " -"more workers and then starting new ones required some effort. Ideally the " -"system would do this itself. If you build your application to detect these " -"situations, you can have it automatically request and remove resources, " -"which saves you the effort of doing this work yourself. Instead, the " -"OpenStack Orchestration service can monitor load and start instances, as " -"appropriate. To find out how to set that up, see :doc:`orchestration`." -msgstr "" -"Dieser Vorgang war offensichtlich ein sehr manueller. Herauszufinden, dass " -"wir mehr Worker brauchten und diese dann zu starten, bedarf einiger " -"Anstrengungen. Idealerweise würde das System das selbst tun. Wenn Sie Ihre " -"Anwendung aufbauen, um diese Situationen zu erkennen, können Sie sie " -"automatisch Ressourcen anfordern und entfernen, was Ihnen Mühe macht ist, " -"diese Arbeit selbst zu tun. Stattdessen kann der OpenStack " -"Orchestrierungsdienst die Last überwachen und Instanzen starten. Um " -"herauszufinden, wie man das einrichtet, siehe :doc:`orchestration`." - -msgid "" -"This section assumes that your cloud provider has implemented the OpenStack " -"Networking API (neutron). Users of clouds which have implemented legacy " -"networking (nova-network) will have access to networking via the Compute " -"API. Log in to the Horizon dashboard and navigate to :guilabel:`Project-" -">Access & Security->API Access`. If you see a service endpoint for the " -"Network API, your cloud is most likely running the Networking API. If you " -"are still in doubt, ask your cloud provider for more information." -msgstr "" -"In diesem Abschnitt wird davon ausgegangen, dass Ihr Cloud-Provider die " -"OpenStack Networking API (Neutron) implementiert hat. Benutzer von Clouds, " -"die Legacy Networking (nova-network) implementiert haben, haben Zugriff auf " -"die Vernetzung über die Compute API. Melden Sie sich im Horizon-Dashboard an " -"und navigieren Sie zu :guilabel:`Project->Access % Security->API Access`. " -"Wenn Sie einen Service-Endpunkt für die Netzwerk-API sehen, ist Ihre Cloud " -"wahrscheinlich die Netzwerk-API. Wenn Sie noch im Zweifel sind, fragen Sie " -"Ihren Cloud-Anbieter nach weiteren Informationen." - -msgid "" -"This section continues to illustrate the separation of services onto " -"multiple instances and highlights some of the choices that we have made that " -"facilitate scalability in the application architecture." -msgstr "" -"Dieser Abschnitt veranschaulicht weiterhin die Trennung von Diensten auf " -"mehrere Instanzen und hebt einige der Entscheidungen hervor, die wir gemacht " -"haben, die Skalierbarkeit in der Anwendungsarchitektur erleichtern." - -msgid "This section explores options for expanding the sample application." -msgstr "" -"In diesem Abschnitt werden Optionen für die Erweiterung der " -"Beispielanwendung untersucht." - -msgid "This section has not yet been completed for the .NET SDK" -msgstr "Dieser Abschnitt ist noch nicht für das .NET SDK abgeschlossen" - -msgid "This section has not yet been completed for the .NET SDK." -msgstr "Dieser Abschnitt ist noch nicht für das .NET SDK abgeschlossen." - -msgid "This section has not yet been completed for the OpenStack SDK." -msgstr "Dieser Abschnitt ist noch nicht für das OpenStack SDK abgeschlossen." - -msgid "This section has not yet been completed for the PHP-OpenCloud SDK." -msgstr "" -"Dieser Abschnitt ist noch nicht für das PHP-OpenCloud SDK abgeschlossen." - -msgid "This section has not yet been completed for the fog SDK." -msgstr "Dieser Abschnitt ist noch nicht für das Nebel-SDK abgeschlossen." - -msgid "This section has not yet been completed for the pkgcloud SDK." -msgstr "Dieser Abschnitt ist noch nicht für das pkgcloud SDK abgeschlossen." - -msgid "" -"This section introduces block storage, also known as volume storage, which " -"provides access to persistent storage devices. You interact with block " -"storage by attaching volumes to running instances just as you might attach a " -"USB drive to a physical server. You can detach volumes from one instance and " -"reattach them to another instance and the data remains intact. The OpenStack " -"Block Storage (cinder) project implements block storage." -msgstr "" -"In diesem Abschnitt wird ein Blockspeicher eingeführt, der auch als Volume-" -"Speicher bezeichnet wird und den Zugriff auf persistente Speichergeräte " -"ermöglicht. Sie interagieren mit Blockspeicher, indem Sie Volumes an " -"laufende Instanzen anhängen, so wie Sie ein USB-Laufwerk an einen physischen " -"Server anschließen können. Sie können Volumes von einer Instanz trennen und " -"sie wieder an eine andere Instanz anschließen und die Daten bleiben intakt. " -"Das OpenStack Block Storage (Cinder)-Projekt implementiert Blockspeicher." - -msgid "This section introduces object storage." -msgstr "In diesem Abschnitt wird der Objektspeicher eingeführt." - -msgid "" -"This section introduces some operational concepts and tasks to developers " -"who have not written cloud applications before." -msgstr "" -"In diesem Abschnitt werden den Entwicklern, die noch keine Cloud-Anwendungen " -"geschrieben haben, einige operative Konzepte und Aufgaben vorgestellt." - -msgid "" -"This section introduces the `HOT templating language `_, and takes you through some " -"common OpenStack Orchestration calls." -msgstr "" -"In diesem Abschnitt wird die 'HOT Templating Language' vorgestellt `_, und führt " -"Sie durch einige gemeinsame OpenStack Orchestrierung Anrufe." - -msgid "" -"This section introduces the application architecture and explains how it was " -"designed to take advantage of cloud features in general and OpenStack in " -"particular. It also describes some commands in the previous section." -msgstr "" -"Dieser Abschnitt stellt die Anwendungsarchitektur vor und erklärt, wie es " -"entworfen wurde, um die Vorteile von Cloud-Features im Allgemeinen und " -"OpenStack insbesondere zu nutzen. Es beschreibt auch einige Befehle im " -"vorherigen Abschnitt." - -msgid "" -"This section is based on the Neutron LBaaS API version 1.0 https://docs." -"openstack.org/admin-guide/networking_adv-features.html#basic-load-balancer-" -"as-a-service-operations" -msgstr "" -"Dieser Abschnitt basiert auf der Neutron LBaaS API Version 1.0 https://docs." -"openstack.org/admin-guide/networking_adv-features.html#basic-load-balancer-" -"as-a-service-operations" - -msgid "This section is incomplete. Please help us finish it!" -msgstr "" -"Dieser Abschnitt ist unvollständig. Bitte helfen Sie uns, ihn zu beenden!" - -msgid "" -"This tutorial shows two applications. The first application is a simple " -"fractal generator that uses mathematical equations to generate beautiful " -"`fractal images `_. We show you this " -"application in its entirety so that you can compare it to a second, more " -"robust, application." -msgstr "" -"Dieses Tutorial zeigt zwei Anwendungen. Die erste Anwendung ist ein " -"einfacher Fraktalgenerator, der mathematische Gleichungen verwendet, um " -"schöne `Fraktalbilder zu erzeugen `_. " -"Wir zeigen Ihnen diese Anwendung in ihrer Gesamtheit, damit Sie sie mit " -"einer zweiten, robusteren Anwendung vergleichen können." - -msgid "" -"Though you might have configured Object Storage to store images, the Fractal " -"application needs a database to track the location of, and parameters that " -"were used to create, images in Object Storage. This database server cannot " -"fail." -msgstr "" -"Obwohl Sie Objektspeicher zum Speichern von Bildern konfiguriert haben, " -"benötigt die Fractal-Anwendung eine Datenbank, um den Speicherort und die " -"Parameter, die zum Erstellen von Bildern in Objektspeicher verwendet wurden, " -"zu verfolgen. Dieser Datenbankserver kann nicht kaputtgehen." - -msgid "" -"To begin to store objects, we must first make a container. Call yours :code:" -"`fractals`:" -msgstr "" -"Um Objekte zu speichern, müssen wir zuerst einen Container bauen. Rufen sie " -"auf :code: `fractals`:" - -msgid "" -"To better understand how the template works, use this guide to install the " -"'ceilometer' command-line client:" -msgstr "" -"Um zu verstehen, wie die Vorlage funktioniert, verwenden Sie diese " -"Anleitung, um den 'ceilometer' Befehlszeilen-Client zu installieren:" - -msgid "" -"To configure shade using a profile, use your credentials above to specify " -"the cloud provider name, username, password, project name, and region name " -"in the file :file:`~/.config/openstack/clouds.yml`." -msgstr "" -"Um shade mit einem Profil zu konfigurieren, verwenden Sie Ihre " -"Anmeldeinformationen oben, um den Namen des Cloud-Providers, den " -"Benutzernamen, das Kennwort, den Projektnamen und den Namen der Region in " -"der Datei anzugeben: file: `~/.config/openstack/clouds.yml`." - -msgid "To create a floating IP address to use with your instance:" -msgstr "" -"So erstellen Sie eine Floating-IP-Adresse, die Sie mit Ihrer Instanz " -"verwenden können:" - -msgid "" -"To delete a container, you must first remove all objects from the container. " -"Otherwise, the delete operation fails:" -msgstr "" -"Um einen Container zu löschen, müssen Sie zuerst alle Objekte aus dem " -"Container entfernen. Andernfalls schlägt der Löschvorgang fehl:" - -msgid "To detach and delete a volume:" -msgstr "Um ein Volume abzulösen und zu löschen:" - -msgid "To determine whether a public IP address is assigned to your instance:" -msgstr "" -"Um festzustellen, ob eine öffentliche IP-Adresse Ihrer Instanz zugewiesen " -"ist:" - -msgid "To increase the overall capacity, add three workers:" -msgstr "Um die Gesamtkapazität zu erhöhen, fügen Sie drei Worker hinzu:" - -msgid "" -"To install the 'trove' command-line client, see `Install the OpenStack " -"command-line clients `_." -msgstr "" -"Um den Befehlszeilenclient 'trove' zu installieren, siehe `Installieren der " -"OpenStack-Befehlszeilenclients " -"`_." - -msgid "" -"To install the OpenStack .NET SDK, use the NeGet Package Manager that is " -"included with Visual Studio and Xamarin Studio. You simply add a package " -"named 'openstack.net' and the NeGet Package Manager automatically installs " -"the necessary dependencies." -msgstr "" -"Um das OpenStack .NET SDK zu installieren, verwenden Sie den NeGet Package " -"Manager, der in Visual Studio und Xamarin Studio enthalten ist. Sie fügen " -"einfach ein Paket namens 'openstack.net' hinzu und der NeGet Package Manager " -"installiert automatisch die notwendigen Abhängigkeiten." - -msgid "To interact with the cloud, you must also have" -msgstr "Um mit der Cloud zu interagieren, müssen Sie aber auch haben" - -msgid "" -"To launch an instance, you choose a flavor and an image. The flavor " -"represents the size of the instance, including the number of CPUs and amount " -"of RAM and disk space. An image is a prepared OS installation from which you " -"clone your instance. When you boot instances in a public cloud, larger " -"flavors can be more expensive than smaller ones in terms of resources and " -"monetary cost." -msgstr "" -"Um eine Instanz zu starten, wählen Sie eine Variante und ein Abbild. Die " -"Variante repräsentiert die Größe der Instanz, einschließlich der Anzahl der " -"CPUs und der Menge an RAM und Speicherplatz. Ein Abbild ist eine " -"vorbereitete OS-Installation, von der aus Sie Ihre Instanz klonen. Wenn Sie " -"Instanzen in einer öffentlichen Cloud booten, können größere Varianten " -"teurer sein als kleinere in Bezug auf Ressourcen und monetäre Kosten." - -msgid "" -"To learn about auto-scaling with the Orchestration API, read these articles:" -msgstr "" -"Um über die automatische Skalierung mit der Orchestrierungs-API zu erfahren, " -"lesen Sie diese Artikel:" - -msgid "" -"To learn about the template syntax for OpenStack Orchestration, how to " -"create basic templates, and their inputs and outputs, see `Heat " -"Orchestration Template (HOT) Guide `_." -msgstr "" -"Um die Vorlage-Syntax für die OpenStack Orchestration zu erlernen, wie Sie " -"grundlegende Vorlagen erstellen und ihre Eingaben und Ausgänge erstellen, " -"finden Sie unter 'Heat Orchestration Template (HOT) Guide' `_." - -msgid "" -"To list the images that are available in your cloud, run some API calls:" -msgstr "" -"Um die Abbilder aufzurufen, die in Ihrer Cloud verfügbar sind, führen Sie " -"einige API-Aufrufe aus:" - -msgid "To recap:" -msgstr "Zur Wiederholung:" - -msgid "" -"To run your application, you must launch an instance. This instance serves " -"as a virtual machine." -msgstr "" -"Um Ihre Anwendung auszuführen, müssen Sie eine Instanz starten. Diese " -"Instanz dient als virtuelle Maschine." - -msgid "To see if the volume creation was successful, list all volumes:" -msgstr "" -"Um zu sehen, ob die Volumenerstellung erfolgreich war, listen Sie alle " -"Volumes auf:" - -msgid "" -"To see the application running, you must know where to look for it. By " -"default, your instance has outbound network access. To make your instance " -"reachable from the Internet, you need an IP address. By default in some " -"cases, your instance is provisioned with a publicly rout-able IP address. In " -"this case, you see an IP address listed under `public_ips` or `private_ips` " -"when you list the instances. If not, you must create and attach a floating " -"IP address to your instance." -msgstr "" -"Um die Anwendung zu sehen, müssen Sie wissen, wo sie sie suchen. " -"Standardmäßig verfügt Ihre Instanz über einen ausgehenden Netzwerkzugriff. " -"Um Ihre Instanz aus dem Internet zu erreichen, benötigen Sie eine IP-" -"Adresse. In manchen Fällen ist Ihre Instanz standardmäßig mit einer " -"öffentlich routbaren IP-Adresse versorgt. In diesem Fall sehen Sie eine IP-" -"Adresse, die unter `public_ips` oder `private_ips` aufgeführt ist, wenn Sie " -"die Instanzen auflisten. Wenn nicht, müssen Sie eine Floating-IP-Adresse an " -"Ihre Instanz erstellen und anhängen." - -msgid "To see whether a private IP address is assigned to your instance:" -msgstr "Um zu sehen, ob eine private IP-Adresse Ihrer Instanz zugewiesen ist:" - -msgid "To see which security groups apply to an instance, you can:" -msgstr "" -"Um zu sehen, welche Sicherheitsgruppen für eine Instanz gelten, können Sie:" - -msgid "" -"To set up environment variables for your cloud in an :file:`openrc.sh` file, " -"see `Set environment variables using the OpenStack RC file `_." -msgstr "" -"Um die Umgebungsvariablen für Ihre Cloud in einer: file: `openrc.sh` Datei " -"einzurichten, siehe` Umgebungsvariablen mit der OpenStack RC Datei " -"einstellen `_." - -msgid "" -"To set up the necessary variables for your cloud in an 'openrc' file, use " -"this guide:" -msgstr "" -"Um die notwendigen Variablen für Ihre Cloud in einer 'openrc' Datei " -"einzurichten, benutzen Sie diese Anleitung:" - -msgid "" -"To show the details of a specific fractal use the subcommand :code:`show` of " -"the Faafo CLI." -msgstr "" -"Um die Details eines bestimmten Fraktals zu zeigen, verwenden Sie den " -"Unterbefehl :code:`show` der Faafo CLI." - -msgid "" -"To test what happens when the Fractals application is under load, you can:" -msgstr "" -"Um zu testen, was passiert, wenn die Fractals-Anwendung unter Last ist, " -"können Sie:" - -msgid "" -"To try it out, add the following code to a Python script (or use an " -"interactive Python shell) by calling :code:`python -i`." -msgstr "" -"Um es auszuprobieren, fügen Sie den folgenden Code zu einem Python-Skript " -"hinzu (oder verwenden Sie eine interaktive Python-Shell), indem Sie " -"aufrufen :code: `python -i`." - -msgid "To try it out, make a 1GB volume called 'test'." -msgstr "Um es auszuprobieren, machen Sie ein 1GB Volumen namens 'Test'." - -msgid "" -"To try it, add the following code to a Python script (or use an interactive " -"Python shell) by calling :code:`python -i`." -msgstr "" -"Um es zu versuchen, fügen Sie den folgenden Code zu einem Python-Skript " -"(oder verwenden Sie eine interaktive Python-Shell), indem Sie :code: `python " -"-i` eingeben." - -msgid "" -"To try it, use an interactive Node.js shell by calling :code:`node` or add " -"the following code to a script." -msgstr "" -"Um es auszuprobieren, benutzen Sie eine interaktive Node.js-Shell, indem " -"Sie :code: `node` ausführen oder den folgenden Code zu einem Skript " -"hinzufügen." - -msgid "" -"To use Maven to compile a downloaded sample, with the command prompt located " -"in the same directory as the :code:`pom.xml` file, enter:" -msgstr "" -"Um Maven zu verwenden, um ein heruntergeladenes Sample zu kompilieren, mit " -"der Eingabeaufforderung im selben Verzeichnis wie die :code: `pom.xml` " -"Datei, geben Sie Folgendes ein:" - -msgid "" -"To use Maven to run each downloaded sample, with the command prompt located " -"in the same directory as the :code:`pom.xml` file, enter:" -msgstr "" -"Um Maven zu verwenden, um jedes heruntergeladene Beispiel auszuführen, mit " -"der Eingabeaufforderung, die sich im selben Verzeichnis wie die Datei :code: " -"`pom.xml` befindet, geben Sie Folgendes ein:" - -msgid "" -"To use a floating IP, you must first allocate an IP to your project, then " -"associate it to your instance's network interface." -msgstr "" -"Um eine Floating-IP zu verwenden, müssen Sie zuerst Ihr Projekt eine IP " -"zuordnen und sie dann der Netzwerkschnittstelle Ihrer Instanz zuordnen." - -msgid "" -"To use the OpenStack .NET SDK, add the following code in the required " -"namespace section." -msgstr "" -"Um das OpenStack .NET SDK zu verwenden, fügen Sie den folgenden Code in den " -"erforderlichen Namespace-Abschnitt hinzu." - -msgid "To verify that ceilometer is installed, list the known meters:" -msgstr "" -"Um zu überprüfen, ob der Ceilometer installiert ist, liste die bekannten " -"Zähler auf:" - -msgid "URL" -msgstr "URL" - -msgid "" -"Use :code:`ex_list_floating_ip_pools()` and select the first floating IP " -"address pool. Allocate this pool to your project and use it to get a " -"floating IP address." -msgstr "" -"Verwenden Sie :code: `ex_list_floating_ip_pools ()` und wählen Sie den " -"ersten floating IP-Adresspool aus. Weisen Sie diesen Pool zu Ihrem Projekt " -"und verwenden Sie ihn, um eine Floating-IP-Adresse zu erhalten." - -msgid "" -"Use :code:`getFloatingIps` to check for unused addresses. Select the first " -"available address. Otherwise, use :code:`allocateNewFloatingIp` to allocate " -"a floating IP to your project from the default address pool." -msgstr "" -"Verwenden Sie :code: `getFloatingIps`, um nach unbenutzten Adressen zu " -"suchen. Wählen Sie die erste verfügbare Adresse aus. Andernfalls verwenden " -"Sie :code:`allocateNewFloatingIp`, um Ihrem Projekt eine Floating-IP " -"zuzuweisen, aus dem Standard-Adresspool." - -msgid "Use Block Storage for the Fractal database server" -msgstr "Verwenden Sie Blockspeicher für den Fractal-Datenbankserver" - -msgid "Use Object Storage instead of a database" -msgstr "Verwenden Sie Objektspeicher anstelle einer Datenbank" - -msgid "Use Object Storage to store fractals" -msgstr "Verwenden Sie Objektspeicher, um Fraktale zu speichern" - -msgid "Use Object and Block storage for file and database persistence." -msgstr "" -"Verwenden Sie Objekt- und Blockspeicher für Datei- und Datenbankpersistenz." - -msgid "Use Orchestration services to automatically adjust to the environment." -msgstr "" -"Verwenden Sie Orchestrierungsdienste, um sich automatisch an die Umgebung " -"anzupassen." - -msgid "" -"Use SSH with the existing SSH keypair to log in to the :code:`app-" -"controller` controller instance." -msgstr "" -"Verwenden Sie SSH mit dem vorhandenen SSH-Schlüsselpaar, um sich an dem :" -"code:`app-controller` Controller-Instanz anzumelden." - -msgid "" -"Use a for loop to call the :code:`faafo` command-line interface to request a " -"random set of fractals 500 times:" -msgstr "" -"Verwenden Sie eine for-Schleife, um den :code:`faafo`-Befehlszeilen-" -"Interface anzurufen, um einen zufälligen Satz von Fraktalen 500 mal " -"anzufordern:" - -msgid "Use conf.d and etc.d." -msgstr "Verwenden Sie conf.d und etc.d." - -msgid "Use environment variables to set your cloud credentials" -msgstr "" -"Verwenden Sie Umgebungsvariablen, um Ihre Cloud-Anmeldeinformationen " -"festzulegen" - -msgid "" -"Use network service client to select the first floating IP address pool. " -"Allocate this pool to your project and use it to get a floating IP address." -msgstr "" -"Verwenden Sie den Netzwerkdienstclient, um den ersten Floating-IP-Adresspool " -"auszuwählen. Weisen Sie diesen Pool zu Ihrem Projekt und verwenden Sie ihn, " -"um eine Floating-IP-Adresse zu erhalten." - -msgid "Use the :code:`faafo UUID` command to examine some of the fractals." -msgstr "" -"Verwenden Sie den :code:`faafo UUID` Befehl, um einige der Fraktale zu " -"untersuchen." - -msgid "Use the :code:`faafo create` command to generate fractals." -msgstr "" -"Verwenden Sie den :code:`faafo create` Befehl, um Fraktale zu erzeugen." - -msgid "" -"Use the :code:`faafo list` command to watch the progress of fractal " -"generation." -msgstr "" -"Verwenden Sie den :code:`faafo list` Befehl, um den Fortschritt der " -"Fraktalgenerierung zu beobachten." - -msgid "" -"Use the `Health Endpoint Monitoring Pattern ` to implement functional checks within your " -"application that external tools can access through exposed endpoints at " -"regular intervals." -msgstr "" -"Verwenden Sie das `Health Endpoint Monitoring Pattern ` um funktionale Prüfungen " -"innerhalb Ihrer Anwendung zu implementieren, sodass externe Werkzeuge über " -"exponierte Endpunkte in regelmäßigen Abständen zugreifen können." - -msgid "" -"Use the image, flavor, key pair, and userdata to create an instance. After " -"you request the instance, wait for it to build." -msgstr "" -"Verwenden Sie das Abbild, die Variante, das Schlüsselpaar und die Userdata, " -"um eine Instanz zu erstellen. Nachdem Sie die Instanz angefordert haben, " -"warten Sie, bis sie gebaut wird." - -msgid "Use the stack ID to get more information about the stack:" -msgstr "" -"Verwenden Sie die Stack-ID, um mehr Informationen über den Stapel zu " -"erhalten:" - -msgid "" -"Use this guide to install the 'openstack' command-line client: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"Verwenden Sie diese Anleitung, um den Befehlszeilenclient 'openstack' zu " -"installieren: https://docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"Use this guide to set up the necessary variables for your cloud in an " -"'openrc' file: https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" -msgstr "" -"Verwenden Sie diese Anleitung, um die notwendigen Variablen für Ihre Cloud " -"in einer 'openrc' Datei einzurichten: https://docs.openstack.org/cli-" -"reference/common/cli_set_environment_variables_using_openstack_rc.html" - -msgid "" -"Use your credentials above to specify the cloud provider name, username, " -"password, project_name and region_name in the file :file:`~/.config/" -"openstack/clouds.yml`." -msgstr "" -"Verwenden Sie Ihre Anmeldeinformationen oben, um den Namen des Cloud-" -"Providers, den Benutzernamen, das Kennwort, den Projektnamen und den " -"Regionalnamen in der Datei anzugeben: file: `~/.config/openstack/clouds.yml`." - -msgid "Use your selected image and flavor to create an instance." -msgstr "" -"Verwenden Sie Ihr ausgewähltes Abbild und Ihre Variante, um eine Instanz zu " -"erstellen." - -msgid "User data in openstacksdk must be encoded to Base64" -msgstr "Userdata in openstacksdk müssen zu Base64 codiert werden" - -msgid "User data in openstacksdk must be encoded to Base64." -msgstr "Benutzerdaten in openstacksdk müssen zu Base64 codiert werden." - -msgid "" -"Userdata. During instance creation, you can provide userdata to OpenStack to " -"configure instances after they boot. The cloud-init service applies the user " -"data to an instance. You must pre-install the cloud-init service on your " -"chosen image. We will go into more detail in :doc:`/introduction`." -msgstr "" -"Userdata. Während der Instanzerstellung können Sie Userdata OpenStack zur " -"Verfügung stellen, um Instanzen nach dem Booten zu konfigurieren. Der Cloud-" -"init-Dienst wendet die Userdata auf eine Instanz an. Sie müssen den Cloud-" -"Init-Service auf Ihrem gewählten Abbild vorinstallieren. Wir werden " -"ausführlicher in :doc:`/introductiong`." - -msgid "Using Pacemaker to look at the API." -msgstr "Mit Pacemaker auf die API schauen." - -msgid "Values" -msgstr "Werte" - -msgid "Verify that the stack was successfully created:" -msgstr "Vergewissern Sie sich, dass der Stapel erfolgreich erstellt wurde:" - -msgid "Verify that we have had an impact" -msgstr "Vergewissern Sie sich, dass wir einen Einfluss hatten" - -msgid "Verify the nova instance was deleted when the stack was removed:" -msgstr "" -"Überprüfen Sie, ob die Nova-Instanz gelöscht wurde, als der Stapel entfernt " -"wurde:" - -msgid "Wait for it to reach the :code:`CREATE_COMPLETE` status:" -msgstr "Warten Sie, bis Sie den Status :code:`CREATE_COMPLETE` erreicht haben:" - -msgid "" -"Watch :code:`top` on the worker instance. Right after calling :code:`faafo` " -"the :code:`faafo-worker` process should start consuming a lot of CPU cycles." -msgstr "" -"Überwachen Sie :code:`top` auf der Worker-Instanz. Nach dem Aufruf :code:" -"`faafo` sollte der Prozess :code:` faafo-worker` beginnen, eine Menge von " -"CPU-Zyklen zu verbrauchen." - -msgid "" -"We are interested because the Telemetry service supports alarms: an alarm is " -"fired when our average statistic breaches a configured threshold. When the " -"alarm fires, an associated action is performed." -msgstr "" -"Wir sind interessiert, weil der Telemetrie-Service Alarme unterstützt: Ein " -"Alarm wird ausgelöst, wenn unsere durchschnittliche Statistik einen " -"konfigurierten Schwellenwert verletzt. Wenn der Alarm ausgelöst wird, wird " -"eine entsprechende Aktion durchgeführt." - -msgid "" -"We assume that you can already access an OpenStack cloud. You must have a " -"project, also known as a tenant, with a minimum quota of six instances. " -"Because the Fractals application runs in Ubuntu, Debian, Fedora-based, and " -"openSUSE-based distributions, you must create instances that use one of " -"these operating systems." -msgstr "" -"Wir gehen davon aus, dass Sie bereits auf eine OpenStack Cloud zugreifen " -"können. Sie müssen ein Projekt haben, auch bekannt als Tenant, mit einem " -"Mindestkontingent von sechs Instanzen. Da die Fractals-Anwendung in Ubuntu-, " -"Debian-, Fedora-basierten und openSUSE-basierten Distributionen ausgeführt " -"wird, müssen Sie Instanzen erstellen, die eines dieser Betriebssysteme " -"verwenden." - -msgid "We cover networking in detail in :doc:`/networking`." -msgstr "Wir decken die Vernetzung im Detail ab in :doc:`/networking`." - -msgid "" -"We explained image and flavor in :doc:`getting_started`, so in the following " -"sections, we will explain the other parameters in detail, including :code:" -"`ex_userdata` (cloud-init) and :code:`ex_keyname` (key pairs)." -msgstr "" -"Wir erklärten das Abbild und die Variante in :doc:`get_started`, also in den " -"folgenden Abschnitten werden wir die anderen Parameter im Detail erklären, " -"darunter :code:`ex_userdata` (cloud-init) und :code:`ex_keyname` " -"(Schlüsselpaare )." - -msgid "We have created a Maven POM file to help you get started." -msgstr "" -"Wir haben eine Maven POM Datei erstellt, um Ihnen den Einstieg zu " -"erleichtern." - -msgid "" -"We have not quite figured out how to stop using a database, but the general " -"steps are:" -msgstr "" -"Wir haben nicht ganz herausgefunden, wie man aufhört, eine Datenbank zu " -"benutzen, aber die allgemeinen Schritte sind:" - -msgid "" -"We have talked about separating functions into different micro-services, and " -"how that enables us to make use of the cloud architecture. Now let us see " -"that in action." -msgstr "" -"Wir haben über die Trennung von Funktionen in verschiedene Mikro-Dienste " -"gesprochen und wie das uns ermöglicht, die Cloud-Architektur zu nutzen. Nun " -"lassen Sie uns das in Aktion sehen." - -msgid "What you need" -msgstr "Was Sie brauchen" - -msgid "What you will learn" -msgstr "Was Sie lernen werden" - -msgid "" -"When an SSH public key is provided during instance creation, cloud-init " -"installs this key on a user account. (The user name varies between cloud " -"images.) See the `Obtaining Images `_ section of the image guide for guidance about which " -"user name you should use when SSHing. If you still have problems logging in, " -"ask your cloud provider to confirm the user name." -msgstr "" -"Wenn während der Instanzerstellung ein SSH-Public-Key zur Verfügung gestellt " -"wird, installiert cloud-init diesen Schlüssel auf einem Benutzerkonto. (Der " -"Benutzername variiert zwischen Cloud-Abbildern.) Siehe 'Erhalten von " -"Abbildern `_ " -"Abschnitt der Abbildanleitung zur Anleitung, welche Benutzernamen Sie " -"verwenden sollten, wenn SSHen. Wenn Sie noch Probleme beim Anmelden haben, " -"fragen Sie Ihren Cloud-Anbieter, um den Benutzernamen zu bestätigen." - -msgid "" -"When the instance boots, the `ex_userdata` variable value instructs the " -"instance to deploy the Fractals application." -msgstr "" -"Wenn die Instanz startet, weist die Variable 'ex_userdata' die Instanz an, " -"die Fractals-Anwendung bereitzustellen." - -msgid "" -"When you create an instance for the application, you want to give it a bit " -"more information than you supplied to the bare instance that you just " -"created and deleted. We will go into more detail in later sections, but for " -"now, simply create the following resources so that you can feed them to the " -"instance:" -msgstr "" -"Wenn Sie eine Instanz für die Anwendung erstellen, möchten Sie es ein " -"bisschen mehr Informationen geben als Sie an die bloße Instanz geliefert " -"haben, die Sie gerade erstellt und gelöscht haben. Wir werden in späteren " -"Abschnitten näher eingehen, aber jetzt schaffen wir einfach die folgenden " -"Ressourcen, damit Sie sie der Instanz zuführen können:" - -msgid "" -"When you deal with pets, you name and care for them. If they get sick, you " -"nurse them back to health, which can be difficult and very time consuming. " -"When you deal with cattle, you attach a numbered tag to their ear. If they " -"get sick, you put them down and move on." -msgstr "" -"Wenn Sie mit Haustieren umgehen, benennen und pflegen Sie sie. Wenn sie " -"krank werden, pflegt man sie wieder gesund, was schwierig und sehr " -"zeitraubend sein kann. Wenn Sie mit Vieh umgehen, fügen Sie ein nummeriertes " -"Etikett ans Ohr. Wenn sie krank werden, machen Sie sie weg und ziehen weiter." - -msgid "" -"While this stack starts a single instance that builds and runs the Fractal " -"application as an all-in-one installation, you can make very complicated " -"templates that impact dozens of instances or that add and remove instances " -"on demand. Continue to the next section to learn more." -msgstr "" -"Während dieser Stapel eine einzelne Instanz startet, die die Fractal-" -"Anwendung als All-in-One-Installation aufbaut und ausführt, können Sie sehr " -"komplizierte Vorlagen erstellen, die Dutzende von Instanzen beeinflussen " -"oder Instanzen auf Anfrage hinzufügen und entfernen. Fahren Sie mit dem " -"nächsten Abschnitt fort, um mehr zu erfahren." - -msgid "Who should read this guide" -msgstr "Wer sollte diesen Leitfaden lesen" - -msgid "" -"With multiple workers producing fractals as fast as they can, the system " -"must be able to receive the requests for fractals as quickly as possible. If " -"our application becomes popular, many thousands of users might connect to " -"our API to generate fractals." -msgstr "" -"Mit mehreren Workern, die Fraktale erzegen so schnell wie sie können, muss " -"das System in der Lage sein, die Anfragen für Fraktale so schnell wie " -"möglich zu erhalten. Wenn unsere Anwendung populär wird, können viele " -"Tausende von Benutzern eine Verbindung zu unserer API herstellen, um " -"Fraktale zu erzeugen." - -msgid "" -"With the OpenStack Networking API, the workflow for creating a network " -"topology that separates the public-facing Fractals app API from the worker " -"back end is as follows:" -msgstr "" -"Mit der OpenStack Networking API ist der Workflow zur Erstellung einer " -"Netzwerktopologie, die die öffentlich zugängliche Fractals App API vom " -"Worker Back End trennt, wie folgt:" - -msgid "" -"With the Orchestration API, the Fractal application can create an auto-" -"scaling group for all parts of the application, to dynamically provision " -"more compute resources during periods of heavy utilization, and also " -"terminate compute instances to scale down, as demand decreases." -msgstr "" -"Mit der Orchestrierungs-API kann die Fractal-Anwendung eine Auto-" -"Skalierungsgruppe für alle Teile der Anwendung erstellen, um dynamisch mehr " -"Rechenressourcen in Zeiten schwerer Auslastung bereitzustellen und auch " -"Compute-Instanzen zu verkleinern, wenn die Nachfrage sinkt." - -msgid "" -"With the addition of the load balancer, the Fractal app's networking " -"topology now reflects the modular nature of the application itself." -msgstr "" -"Mit der Ergänzung des Load Balancers spiegelt die Netzwerktopologie der " -"Fractal App die modulare Art der Applikation selbst wider." - -msgid "Work with stacks: Advanced" -msgstr "Arbeit mit Stapeln: Fortgeschrittene" - -msgid "Work with stacks: Basics" -msgstr "Arbeit mit Stapeln: Grundlagen" - -msgid "Work with the CLI" -msgstr "Arbeit mit der CLI" - -msgid "Work with the OpenStack Database service" -msgstr "Arbeiten Sie mit dem OpenStack Datenbankdienst" - -msgid "" -"Wow! If you have made it through this section, you know more than the " -"authors of this guide know about working with OpenStack clouds." -msgstr "" -"Beeindruckend! Wenn Sie es durch diesen Abschnitt geschaff haben, wissen Sie " -"mehr als die Autoren dieses Leitfadens über die Arbeit mit OpenStack-Clouds " -"wissen." - -msgid "Writing your first OpenStack application" -msgstr "Schreiben Sie Ihre erste OpenStack Anwendung" - -msgid "" -"You also need a security group to permit access to the database server (for " -"MySQL, port 3306) from the network:" -msgstr "" -"Sie benötigen auch eine Sicherheitsgruppe, um den Zugriff auf den " -"Datenbankserver (für MySQL, Port 3306) aus dem Netzwerk zu ermöglichen:" - -msgid "" -"You are ready to create members for the load balancer pool, which reference " -"the floating IPs:" -msgstr "" -"Sie sind bereit, Mitglieder für den Load Balancer Pool zu erstellen, die auf " -"die Floating-IPs verweisen:" - -msgid "" -"You can aggregate samples and calculate statistics across all instances with " -"the `metering.some_name` metadata that has `some_value` by using a query of " -"the form:" -msgstr "" -"Sie können Samples zusammenfassen und Statistiken über alle Instanzen mit " -"den Metadaten 'metering.some_name' berechnen, die `some_value` haben, indem " -"Sie eine Abfrage des Formulars verwenden:" - -msgid "" -"You can also download the OpenStack RC file from the OpenStack Horizon " -"dashboard. Log in to the dashboard and click :guilabel:`Project->Access & " -"Security->API Access->Download OpenStack RC file`. If you use this method, " -"be aware that the \"auth URL\" does not include the path. For example, if " -"your :file:`openrc.sh` file shows:" -msgstr "" -"Sie können die OpenStack RC-Datei auch aus dem OpenStack Horizon Dashboard " -"herunterladen. Melden Sie sich im Dashboard an und klicken Sie auf :" -"guilabel: `Project-> Access & Security-> API Access-> Download OpenStack RC " -"Datei`. Wenn Sie diese Methode verwenden, beachten Sie, dass die 'auth URL' " -"den Pfad nicht enthält. Zum Beispiel, wenn Ihre: Datei: `openrc.sh` Datei " -"zeigt:" - -msgid "You can also get information about available flavors:" -msgstr "Sie können auch Informationen über verfügbare Varianten erhalten:" - -msgid "" -"You can also use the OpenStack API to create snapshots of running instances " -"and persistent volumes. For more information, see your SDK documentation." -msgstr "" -"Sie können auch die OpenStack-API verwenden, um Snapshots von laufenden " -"Instanzen und persistenten Volumes zu erstellen. Weitere Informationen " -"finden Sie in Ihrer SDK-Dokumentation." - -msgid "" -"You can complete advanced tasks such as uploading an object with metadata, " -"as shown in following example. For more information, see the documentation " -"for your SDK." -msgstr "" -"Sie können erweiterte Aufgaben wie das Hochladen eines Objekts mit Metadaten " -"abschließen, wie im folgenden Beispiel gezeigt. Weitere Informationen finden " -"Sie in der Dokumentation zu Ihrem SDK." - -msgid "" -"You can detach the volume and reattach it elsewhere, or use the following " -"steps to delete the volume." -msgstr "" -"Sie können das Volume ablösen und an anderer Stelle wieder anbringen, oder " -"verwenden Sie die folgenden Schritte, um das Volume zu löschen." - -msgid "You can list available security groups with:" -msgstr "Sie können verfügbare Sicherheitsgruppen mit:" - -msgid "You can then attach it to the instance:" -msgstr "Sie können sie dann an die Instanz anschließen:" - -msgid "" -"You create stacks from templates, which contain resources. Resources are an " -"abstraction in the HOT (Heat Orchestration Template) template language, " -"which enables you to define different cloud resources by setting the :code:" -"`type` attribute." -msgstr "" -"Sie erstellen Stacks aus Vorlagen, die Ressourcen enthalten. Ressourcen sind " -"eine Abstraktion in der Schablonensprache von HOT (Heat Orchestration " -"Template), mit der Sie verschiedene Cloud-Ressourcen definieren können, " -"indem Sie das Attribut :code:`type` setzen." - -msgid "" -"You might have to run the :command:`openstack stack list` command a few " -"times before the stack creation is complete." -msgstr "" -"Möglicherweise müssen Sie :command: 'openstack stack list' ein paar Mal " -"ausführen, bevor die Stapelerstellung abgeschlossen ist." - -msgid "" -"You might want to use multiple clouds, such as a private cloud inside your " -"organization and a public cloud. This section attempts to do exactly that." -msgstr "" -"Vielleicht möchten Sie mehrere Clouds verwenden, z. B. eine private Cloud in " -"Ihrer Organisation und eine öffentliche Cloud. Dieser Abschnitt versucht " -"genau das zu tun." - -msgid "You must pass in objects and not object names to the delete commands." -msgstr "" -"Sie müssen Objekte und nicht Objektnamen an die Löschbefehle übergeben." - -msgid "" -"You need a server for the dedicated database. Use the image, flavor, and " -"keypair that you used in :doc:`/getting_started` to launch an :code:`app-" -"database` instance." -msgstr "" -"Sie benötigen einen Server für die dedizierte Datenbank. Verwenden Sie das " -"Abbild, die Variante und das Schlüsselpaar, das Sie verwendet haben :doc: `/ " -"getting_started`, um einen :code:` app-database` Instanz zu starten." - -msgid "You pass in these configuration settings as parameters:" -msgstr "Sie übergeben diese Konfigurationseinstellungen als Parameter:" - -msgid "You should be able to see them in the member list:" -msgstr "Sie sollten sie in der Mitgliederliste sehen können:" - -msgid "" -"You should be fairly confident about starting instances and distributing " -"services from an application among these instances." -msgstr "" -"Sie sollten sich ziemlich sicher über das Starten von Instanzen und die " -"Verteilung von Diensten aus einer Anwendung unter diesen Instanzen sein." - -msgid "" -"You should now be able to see this container appear in a listing of all " -"containers in your account:" -msgstr "" -"Sie sollten nun in der Lage sein, diesen Container in einer Auflistung aller " -"Container in Ihrem Konto sehen:" - -msgid "" -"You should now be fairly confident working with Block Storage volumes. For " -"information about other calls, see the volume documentation for your SDK. " -"Or, try one of these tutorial steps:" -msgstr "" -"Sie sollten jetzt ziemlich sicher sein, mit Block Storage Volumes zu " -"arbeiten. Weitere Informationen zu anderen Anrufen finden Sie in der " -"Datenträgerdokumentation für Ihr SDK. Oder versuchen Sie eines dieser " -"Tutorial Schritte:" - -msgid "" -"You should now be fairly confident working with Object Storage. You can find " -"more information about the Object Storage SDK calls at:" -msgstr "" -"Sie sollten jetzt ziemlich sicher sein, mit Object Storage zu arbeiten. " -"Weitere Informationen zu den Object Storage SDK-Anrufen finden Sie unter:" - -msgid "" -"You should now be fairly confident working with the Network API. To see " -"calls that we did not cover, see the volume documentation of your SDK, or " -"try one of these tutorial steps:" -msgstr "" -"Sie sollten jetzt ziemlich sicher sein, mit der Netzwerk-API zu arbeiten. Um " -"Aufrufe zu sehen, die wir nicht abgedeckt haben, sehen Sie die " -"Datenträgerdokumentation Ihres SDK oder versuchen Sie einen dieser Tutorial " -"Schritte:" - -msgid "" -"You should now be fairly confident working with the Orchestration service. " -"To see the calls that we did not cover and more, see the volume " -"documentation of your SDK. Or, try one of these steps in the tutorial:" -msgstr "" -"Sie sollten jetzt ziemlich sicher sein, mit dem Orchestrationsdienst zu " -"arbeiten. Um die Anrufe zu sehen, die wir nicht abgedeckt haben und mehr, " -"sehen Sie die Datendokumentation Ihres SDK. Oder versuchen Sie einen dieser " -"Schritte im Tutorial:" - -msgid "" -"You should now have a basic understanding of the architecture of cloud-based " -"applications. In addition, you have had practice starting new instances, " -"automatically configuring them at boot, and even modularizing an application " -"so that you may use multiple instances to run it. These are the basic steps " -"for requesting and using compute resources in order to run your application " -"on an OpenStack cloud." -msgstr "" -"Sie sollten nun ein grundlegendes Verständnis der Architektur von Cloud-" -"basierten Anwendungen haben. Darüber hinaus haben Sie Praxis, neue Instanzen " -"zu starten, automatisch konfigurieren sie beim Booten, und sogar " -"modularisieren eine Anwendung, so dass Sie mehrere Instanzen verwenden " -"können, um sie auszuführen. Dies sind die grundlegenden Schritte zum " -"Anfordern und Verwenden von Compute-Ressourcen, um Ihre Anwendung auf einer " -"OpenStack-Cloud auszuführen." - -msgid "You should see output like this:" -msgstr "Die Ausgabe sollte wie folgt aussehen:" - -msgid "You should see output something like this:" -msgstr "Sie sollten so etwas wie folgt sehen:" - -msgid "You should see output something like:" -msgstr "Sie sollten so etwas sehen:" - -msgid "You should see output such as:" -msgstr "Sie sollten Ausgaben sehen wie:" - -msgid "" -"You will progressively ramp up to use up six instances, so make sure that " -"your cloud account has the appropriate quota." -msgstr "" -"Sie werden fortschreitend hochfahren, um sechs Instanzen zu verwenden, also " -"stellen Sie sicher, dass Ihr Cloud-Konto die entsprechende Quote hat." - -msgid "Your SDK might call an instance a 'node' or 'server'." -msgstr "Ihr SDK könnte eine Instanz einen 'Knoten' oder 'Server' aufrufen." - -msgid "Your images and flavors will be different, of course." -msgstr "Ihre Abbilder und Varianten werden natürlich anders sein." - -msgid "Your ssh key name" -msgstr "Ihr ssh Schlüssel Name" - -msgid "`Libcloud `_" -msgstr "`Libcloud `_" - -msgid "" -"`Micro-services `_ are an " -"important design pattern that helps achieve application modularity. " -"Separating logical application functions into independent services " -"simplifies maintenance and re-use. Decoupling components also makes it " -"easier to selectively scale individual components, as required. Further, " -"application modularity is a required feature of applications that scale out " -"well and are fault tolerant." -msgstr "" -"`Mikro-Dienste `_ sind ein " -"wichtiges Design-Muster, das hilft, die Modularität der Anwendung zu " -"erreichen. Die Trennung von logischen Applikationsfunktionen in unabhängige " -"Dienste vereinfacht die Wartung und Wiederverwendung. " -"Entkopplungskomponenten erleichtern auch die selektive Skalierung einzelner " -"Komponenten nach Bedarf. Weiterhin ist die Anwendungsmodularität ein " -"notwendiges Merkmal von Anwendungen, die gut skalieren und fehlertolerant " -"sind." - -msgid "" -"`OpenStack Cloud SDK for Microsoft .NET 1.4.0.1 or later installed `_." -msgstr "" -"`OpenStack Cloud SDK für Microsoft .NET 1.4.0.1 oder höher installiert " -" `_." - -msgid "" -"`OpenStack Object Storage `_ (code-named swift) is open-source software that enables you to " -"create redundant, scalable data storage by using clusters of standardized " -"servers to store petabytes of accessible data. It is a long-term storage " -"system for large amounts of static data that you can retrieve, leverage, and " -"update. Unlike more traditional storage systems that you access through a " -"file system, you access Object Storage through an API." -msgstr "" -"`OpenStack Objektspeicher `` (code-named swift) ist Open-Source-Software, mit der Sie " -"redundante, skalierbare Datenspeicherung erstellen können, indem Sie Cluster " -"von standardisierten Servern verwenden, um Petabyte zugängliche Daten zu " -"speichern. Es ist ein langfristiges Speichersystem für große Mengen an " -"statischen Daten, die Sie abrufen, nutzen und aktualisieren können. Im " -"Gegensatz zu herkömmlichen Speichersystemen, die Sie über ein Dateisystem " -"aufrufen, greifen Sie über eine API auf Objektspeicher zu." - -msgid "" -"`Phoenix Servers `_, named " -"for the mythical bird that is consumed by fire and rises from the ashes to " -"live again, make it easy to start over with new instances." -msgstr "" -"`Phoenix-Servern `_, " -"benannt nach dem mythischen Vogel, der vom Feuer verbrannt wird und von der " -"Asche aufsteigt, um wieder zu leben, macht es leicht, mit neuen Instanzen zu " -"starten." - -msgid "" -"`a recent version of gophercloud installed `_" -msgstr "" -"'eine neue Version von gophercloud installiert `_" - -msgid "" -"`a recent version of php-opencloud installed `_." -msgstr "" -"`eine aktuelle Version von php-opencloud installiert `_." - -msgid "" -"`a recent version of shade installed `_." -msgstr "" -"`eine aktuelle Version der shade-Bibliothek installiert `_." - -msgid "" -"`cloud-init `_ is a tool that " -"performs instance configuration tasks during the boot of a cloud instance, " -"and comes installed on most cloud images. :code:`ex_userdata`, which was " -"passed to :code:`create_node`, is the configuration data passed to cloud-" -"init." -msgstr "" -"`cloud-init `_ ist ein Tool, " -"das Instanz-Konfigurationsaufgaben während des Bootens einer Cloud-Instanz " -"ausführt und auf den meisten Cloud-Abbildern installiert wird. :code:" -"`ex_userdata`, der an :code:`create_node` übergeben wurde, sind die an cloud-" -"init übergebenen Konfigurationsdaten." - -msgid "" -"`fog 1.19 or higher installed `_ and working with ruby gems 1.9." -msgstr "" -"`fog 1.19 oder höher installiert `_ und die Arbeit mit ruby gems 1.9." - -msgid "`fog `_" -msgstr "`fog `_" - -msgid "`gophercloud `_" -msgstr "`gophercloud `_" - -msgid "" -"`jClouds 1.8 or higher installed `_." -msgstr "" -"`jClouds 1.8 oder höher installiert `_." - -msgid "`jClouds `_" -msgstr "`jClouds `_" - -msgid "" -"`libcloud 0.15.1 or higher installed `_." -msgstr "" -"`libcloud 0.15.1 oder höher installiert `_." - -msgid "`php-opencloud `_" -msgstr "`php-opencloud `_" - -msgid "" -"`pkgcloud 1.2 or higher installed `_." -msgstr "" -"`pkgcloud 1.2 oder höher installiert `_." - -msgid "`pkgcloud `_" -msgstr "`pkgcloud `_" - -msgid "" -"a recent version of `OpenStackSDK `_ installed." -msgstr "" -"eine aktuelle Version von `openstacksdk `_ installiert" - -msgid "amqp://guest:guest@localhost:5672/" -msgstr "amqp://guest:guest@localhost:5672/" - -msgid "auth URL" -msgstr "Auth URL" - -msgid "cloud region" -msgstr "Cloud Region" - -msgid "conf.d, etc.d" -msgstr "conf.d, etc.d" - -msgid "" -"fog `does support OpenStack Orchestration `_." -msgstr "" -"fog 'unterstützt OpenStack Orchestrierung `_." - -msgid "" -"fog `supports `_ the OpenStack Networking API, but this section has not yet been " -"completed." -msgstr "" -"fog 'Unterstützung `` die OpenStack Networking API, aber dieser Abschnitt ist noch " -"nicht abgeschlossen." - -msgid "http://gophercloud.io/" -msgstr "http://gophercloud.io/" - -msgid "http://localhost/" -msgstr "http://localhost/" - -msgid "" -"http://php-opencloud.readthedocs.org/en/latest/getting-started-with-" -"openstack.html" -msgstr "" -"http://php-opencloud.readthedocs.org/de/latest/getting-started-with-" -"openstack.html" - -msgid "" -"https://docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"https://docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" -msgstr "" -"https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" - -msgid "https://docs.openstack.org/infra/shade/" -msgstr "https://docs.openstack.org/infra/shade/" - -msgid "https://docs.openstack.org/openstacksdk/latest/" -msgstr "https://docs.openstack.org/openstacksdk/latest/" - -msgid "" -"https://github.com/fog/fog-openstack/blob/master/docs/getting_started.md" -msgstr "" -"https://github.com/fog/fog-openstack/blob/master/docs/getting_started.md" - -msgid "" -"https://github.com/fog/fog/blob/master/lib/fog/openstack/docs/storage.md" -msgstr "" -"https://github.com/fog/fog/blob/master/lib/fog/openstack/docs/storage.md" - -msgid "" -"https://github.com/pkgcloud/pkgcloud/tree/master/docs/providers/openstack" -msgstr "" -"https://github.com/pkgcloud/pkgcloud/tree/master/docs/providers/openstack" - -msgid "https://jclouds.apache.org/guides/openstack/" -msgstr "https://jclouds.apache.org/guides/openstack/" - -msgid "" -"https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html" -msgstr "" -"https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html" - -msgid "https://libcloud.readthedocs.org/en/latest/storage/api.html" -msgstr "https://libcloud.readthedocs.org/en/latest/storage/api.html" - -msgid "" -"https://superuser.openstack.org/articles/simple-auto-scaling-environment-" -"with-heat" -msgstr "" -"https://superuser.openstack.org/articles/simple-auto-scaling-environment-" -"with-heat" - -msgid "" -"https://superuser.openstack.org/articles/understanding-openstack-heat-auto-" -"scaling" -msgstr "" -"https://superuser.openstack.org/articles/understanding-openstack-heat-auto-" -"scaling" - -msgid "https://www.nuget.org/packages/openstack.net" -msgstr "https://www.nuget.org/packages/openstack.net" - -msgid "internal worker traffic" -msgstr "interner Worker-Verkehr" - -msgid "" -"jClouds supports the OpenStack Networking API, but section has not yet been " -"completed. Please see `this `_ in the meantime." -msgstr "" -"jClouds unterstützt die OpenStack Networking API, aber der Bereich ist noch " -"nicht abgeschlossen. Bitte sehen Sie `_ in der Zwischenzeit." - -msgid "libcloud does not currently support OpenStack Orchestration." -msgstr "libcloud unterstützt derzeit keine OpenStack Orchestrierung." - -msgid "" -"libcloud support added 0.14: https://developer.rackspace.com/blog/libcloud-0-" -"dot-14-released/" -msgstr "" -"libcloud support hinzugefügt 0.14: https://developer.rackspace.com/blog/" -"libcloud-0-dot-14-released/" - -msgid "node.js" -msgstr "node.js" - -msgid "password" -msgstr "Passwort" - -msgid "project ID or name (projects are also known as tenants)" -msgstr "Projekt-ID oder Name (Projekte sind auch als Tenant bekannt)" - -msgid "public-facing web traffic" -msgstr "öffentlich zugänglichen Webverkehr" - -msgid "sqlite:////tmp/sqlite.db" -msgstr "sqlite:////tmp/sqlite.db" - -msgid "the .NET SDK does not currently support OpenStack Orchestration." -msgstr "Das .NET SDK unterstützt derzeit keine OpenStack Orchestrierung." - -msgid "user name" -msgstr "Benutzername" diff --git a/firstapp/source/locale/en_GB/LC_MESSAGES/firstapp.po b/firstapp/source/locale/en_GB/LC_MESSAGES/firstapp.po deleted file mode 100644 index 33bea5250..000000000 --- a/firstapp/source/locale/en_GB/LC_MESSAGES/firstapp.po +++ /dev/null @@ -1,4336 +0,0 @@ -# OpenStack Infra , 2015. #zanata -# Rob Cresswell , 2015. #zanata -# Andi Chandler , 2017. #zanata -# Andi Chandler , 2018. #zanata -msgid "" -msgstr "" -"Project-Id-Version: OpenStack First Application 2013.2.1.dev4245\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-23 14:55+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2018-11-18 10:59+0000\n" -"Last-Translator: Andi Chandler \n" -"Language: en_GB\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"X-Generator: Zanata 4.3.3\n" -"Language-Team: English (United Kingdom)\n" - -msgid "**GettingStarted.java:**" -msgstr "**GettingStarted.java:**" - -msgid "**Remove the stack**" -msgstr "**Remove the stack**" - -msgid "**Show information about the stack**" -msgstr "**Show information about the stack**" - -msgid "**Stack create**" -msgstr "**Stack create**" - -msgid "**pom.xml:**" -msgstr "**pom.xml:**" - -msgid ".NET Framework" -msgstr ".NET Framework" - -msgid ":code:`-d`" -msgstr ":code:`-d`" - -msgid ":code:`-e`" -msgstr ":code:`-e`" - -msgid ":code:`-i`" -msgstr ":code:`-i`" - -msgid ":code:`-m`" -msgstr ":code:`-m`" - -msgid ":code:`-r`" -msgstr ":code:`-r`" - -msgid "" -":code:`api` (enable and start the API service), :code:`worker` (enable and " -"start the worker service), and :code:`demo` (run the demo mode to request " -"random fractals)." -msgstr "" -":code:`api` (enable and start the API service), :code:`worker` (enable and " -"start the worker service), and :code:`demo` (run the demo mode to request " -"random fractals)." - -msgid "" -":code:`ceilometer_sample_query`: shows the samples used to build the " -"statistics." -msgstr "" -":code:`ceilometer_sample_query`: shows the samples used to build the " -"statistics." - -msgid "" -":code:`ceilometer_statistics_query`: shows the statistics used to trigger " -"the alarms." -msgstr "" -":code:`ceilometer_statistics_query`: shows the statistics used to trigger " -"the alarms." - -msgid "" -":code:`detach_volume` and :code:`destroy_volume` take a volume object, not a " -"name." -msgstr "" -":code:`detach_volume` and :code:`destroy_volume` take a volume object, not a " -"name." - -msgid "" -":code:`ex_create_security_group_rule()` takes ranges of ports as input. This " -"is why ports 80 and 22 are passed twice." -msgstr "" -":code:`ex_create_security_group_rule()` takes ranges of ports as input. This " -"is why ports 80 and 22 are passed twice." - -msgid "" -":code:`messaging` (install RabbitMQ) and :code:`faafo` (install the Faafo " -"app)." -msgstr "" -":code:`messaging` (install RabbitMQ) and :code:`faafo` (install the Faafo " -"app)." - -msgid "" -":code:`scale__workers_up_url`: A post to this url will add worker instances." -msgstr "" -":code:`scale__workers_up_url`: A post to this URL will add worker instances." - -msgid "" -":code:`scale_workers_down_url`: A post to this url will remove worker " -"instances." -msgstr "" -":code:`scale_workers_down_url`: A post to this URL will remove worker " -"instances." - -msgid ":doc:`/advice`: Get advice about operations." -msgstr ":doc:`/advice`: Get advice about operations." - -msgid "" -":doc:`/block_storage`: Migrate the database to block storage, or use the " -"database-as-a-service component." -msgstr "" -":doc:`/block_storage`: Migrate the database to block storage, or use the " -"database-as-a-service component." - -msgid "" -":doc:`/craziness`: Learn some crazy things that you might not think to do ;)" -msgstr "" -":doc:`/craziness`: Learn some crazy things that you might not think to do ;)" - -msgid "" -":doc:`/durability`: Learn how to use Object Storage to make your application " -"durable." -msgstr "" -":doc:`/durability`: Learn how to use Object Storage to make your application " -"durable." - -msgid "" -":doc:`/durability`: Learn how to use Object Storage to make your application " -"more durable." -msgstr "" -":doc:`/durability`: Learn how to use Object Storage to make your application " -"more durable." - -msgid ":doc:`/networking`: Learn about complex networking." -msgstr ":doc:`/networking`: Learn about complex networking." - -msgid ":doc:`/orchestration`: Automatically orchestrate your application." -msgstr ":doc:`/orchestration`: Automatically orchestrate your application." - -msgid ":doc:`/scaling_out`: Learn how to scale your application." -msgstr ":doc:`/scaling_out`: Learn how to scale your application." - -msgid "" -"A .NET-based library. Use it to write C++ or C# code for Microsoft " -"applications." -msgstr "" -"A .NET-based library. Use it to write C++ or C# code for Microsoft " -"applications." - -msgid "" -"A Java-based library that the Apache Foundation manages. Use it to work with " -"multiple cloud types." -msgstr "" -"A Java-based library that the Apache Foundation manages. Use it to work with " -"multiple cloud types." - -msgid "A Node.js-based SDK. Use it work with multiple clouds." -msgstr "A Node.js-based SDK. Use it work with multiple clouds." - -msgid "" -"A PHP-based library. Use it to write PHP code that works with OpenStack " -"clouds." -msgstr "" -"A PHP-based library. Use it to write PHP code that works with OpenStack " -"clouds." - -msgid "" -"A Python-based library developed by OpenStack Infra team. Use it to operate " -"multiple OpenStack clouds." -msgstr "" -"A Python-based library developed by OpenStack Infra team. Use it to operate " -"multiple OpenStack clouds." - -msgid "" -"A Python-based library that the Apache Foundation manages. Use it to work " -"with multiple cloud types." -msgstr "" -"A Python-based library that the Apache Foundation manages. Use it to work " -"with multiple cloud types." - -msgid "A Ruby-based SDK. Use it to work with multiple clouds." -msgstr "A Ruby-based SDK. Use it to work with multiple clouds." - -msgid "A floating IP helper function" -msgstr "A floating IP helper function" - -msgid "A general overview" -msgstr "A general overview" - -msgid "" -"A go-based SDK. Use it to write Golang code that works with OpenStack clouds." -msgstr "" -"A go-based SDK. Use it to write Golang code that works with OpenStack clouds." - -msgid "" -"A key pair. To access your instance, you must import an SSH public key into " -"OpenStack to create a key pair. OpenStack installs this key pair on the new " -"instance. Typically, your public key is written to :code:`.ssh/id_rsa.pub`. " -"If you do not have an SSH public key file, follow `these instructions " -"`_ first. We will " -"cover these instructions in depth in :doc:`/introduction`." -msgstr "" -"A key pair. To access your instance, you must import an SSH public key into " -"OpenStack to create a key pair. OpenStack installs this key pair on the new " -"instance. Typically, your public key is written to :code:`.ssh/id_rsa.pub`. " -"If you do not have an SSH public key file, follow `these instructions " -"`_ first. We will " -"cover these instructions in depth in :doc:`/introduction`." - -msgid "" -"A simple solution is to give half of your friends one address and half the " -"other, but that solution is not sustainable. Instead, you can use a `DNS " -"round robin `_ to do that " -"automatically. However, OpenStack networking can provide Load Balancing as a " -"Service, which :doc:`/networking` explains." -msgstr "" -"A simple solution is to give half of your friends one address and half the " -"other, but that solution is not sustainable. Instead, you can use a `DNS " -"round robin `_ to do that " -"automatically. However, OpenStack networking can provide Load Balancing as a " -"Service, which :doc:`/networking` explains." - -msgid "" -"API load is a slightly different problem than the previous one regarding " -"capacity to work. We can simulate many requests to the API, as follows:" -msgstr "" -"API load is a slightly different problem than the previous one regarding " -"capacity to work. We can simulate many requests to the API, as follows:" - -msgid "API traffic" -msgstr "API traffic" - -msgid "Access the application" -msgstr "Access the application" - -msgid "Add metadata to objects" -msgstr "Add metadata to objects" - -msgid "Add the option Networks and send its id to attach the instance to:" -msgstr "Add the option Networks and send its id to attach the instance to:" - -msgid "" -"Add the parameter network and send its name or id to attach the instance to:" -msgstr "" -"Add the parameter network and send its name or id to attach the instance to:" - -msgid "" -"Adding this capacity enables you to deal with a higher number of requests " -"for fractals. As soon as these worker instances start, they begin checking " -"the message queue for requests, reducing the overall backlog like a new " -"register opening in the supermarket." -msgstr "" -"Adding this capacity enables you to deal with a higher number of requests " -"for fractals. As soon as these worker instances start, they begin checking " -"the message queue for requests, reducing the overall backlog like a new " -"checkout opening in the supermarket." - -msgid "Advice for developers new to operations" -msgstr "Advice for developers new to operations" - -msgid "" -"After separating the Fractal worker nodes into their own networks, the next " -"logical step is to move the Fractal API service to a load balancer, so that " -"multiple API workers can handle requests. By using a load balancer, the API " -"service can be scaled out in a similar fashion to the worker nodes." -msgstr "" -"After separating the Fractal worker nodes into their own networks, the next " -"logical step is to move the Fractal API service to a load balancer, so that " -"multiple API workers can handle requests. By using a load balancer, the API " -"service can be scaled out in a similar fashion to the worker nodes." - -msgid "" -"After the instance is created, cloud-init downloads and runs a script " -"called :code:`install.sh`. This script installs the Fractals application. " -"Cloud-init can consume bash scripts and a number of different types of data. " -"You can even provide multiple types of data. You can find more information " -"about cloud-init in the `official documentation `_." -msgstr "" -"After the instance is created, cloud-init downloads and runs a script " -"called :code:`install.sh`. This script installs the Fractals application. " -"Cloud-init can consume bash scripts and a number of different types of data. " -"You can even provide multiple types of data. You can find more information " -"about cloud-init in the `official documentation `_." - -msgid "Allocate floating ips and assign them to the web server nodes." -msgstr "Allocate Floating IPs and assign them to the web server nodes." - -msgid "Allocate the floating IP address:" -msgstr "Allocate the floating IP address:" - -msgid "" -"Allocating a floating IP address to an instance does not change the IP " -"address of the instance, it causes OpenStack to establish the network " -"translation rules to allow an *additional* IP address." -msgstr "" -"Allocating a floating IP address to an instance does not change the IP " -"address of the instance, it causes OpenStack to establish the network " -"translation rules to allow an *additional* IP address." - -msgid "" -"An often-cited reason for designing applications by using cloud patterns is " -"the ability to **scale out**. That is: to add additional resources, as " -"required. Contrast this strategy to the previous one of increasing capacity " -"by scaling up the size of existing resources. To scale out, you must:" -msgstr "" -"An often-cited reason for designing applications by using cloud patterns is " -"the ability to **scale out**. That is: to add additional resources, as " -"required. Contrast this strategy to the previous one of increasing capacity " -"by scaling up the size of existing resources. To scale out, you must:" - -msgid "And as before, the stack takes a few minutes to build!" -msgstr "And as before, the stack takes a few minutes to build!" - -msgid "And confirm it is in place:" -msgstr "And confirm it is in place:" - -msgid "" -"Another approach is to create a 'gold' image, which pre-installs your " -"application and its dependencies. A 'gold' image enables faster boot times " -"and more control over what is on the instance. However, if you use 'gold' " -"images, you must have a process in place to ensure that these images do not " -"fall behind on security updates." -msgstr "" -"Another approach is to create a 'gold' image, which pre-installs your " -"application and its dependencies. A 'gold' image enables faster boot times " -"and more control over what is on the instance. However, if you use 'gold' " -"images, you must have a process in place to ensure that these images do not " -"fall behind on security updates." - -msgid "" -"Anyone with a programming background can easily read the code in this guide. " -"Although this guide focuses on a particular SDK, you can use other languages " -"and toolkits with the OpenStack cloud:" -msgstr "" -"Anyone with a programming background can easily read the code in this guide. " -"Although this guide focuses on a particular SDK, you can use other languages " -"and toolkits with the OpenStack cloud:" - -msgid "Appendix" -msgstr "Appendix" - -msgid "Application deployment" -msgstr "Application deployment" - -msgid "" -"Application developers and operators who use phoenix servers have access to " -"systems that are built from a known baseline, such as a specific operating " -"system version, and to tooling that automatically builds, installs, and " -"configures a system." -msgstr "" -"Application developers and operators who use phoenix servers have access to " -"systems that are built from a known baseline, such as a specific operating " -"system version, and to tooling that automatically builds, installs, and " -"configures a system." - -msgid "Architect your application to make use of additional resources." -msgstr "Architect your application to make use of additional resources." - -msgid "" -"Armed with a security group, image, and flavor size, you can add multiple " -"API services:" -msgstr "" -"Armed with a security group, image, and flavour size, you can add multiple " -"API services:" - -msgid "As before, pass in configuration settings as parameters." -msgstr "As before, pass in configuration settings as parameters." - -msgid "" -"As in traditional IT, cloud instances are accessed through IP addresses that " -"OpenStack assigns. How this is actually done depends on the networking setup " -"for your cloud. In some cases, you will simply get an Internet rout-able IP " -"address assigned directly to your instance." -msgstr "" -"As in traditional IT, cloud instances are accessed through IP addresses that " -"OpenStack assigns. How this is actually done depends on the networking setup " -"for your cloud. In some cases, you will simply get an Internet routable IP " -"address assigned directly to your instance." - -msgid "" -"As mentioned in :doc:`/introduction`, the generated fractal images are saved " -"on the local file system of the API service instances. Because you have " -"multiple API instances up and running, the fractal images are spread across " -"multiple API services, which causes a number of :code:`IOError: [Errno 2] No " -"such file or directory` exceptions when trying to download a fractal image " -"from an API service instance that does not have the fractal image on its " -"local file system." -msgstr "" -"As mentioned in :doc:`/introduction`, the generated fractal images are saved " -"on the local file system of the API service instances. Because you have " -"multiple API instances up and running, the fractal images are spread across " -"multiple API services, which causes a number of :code:`IOError: [Errno 2] No " -"such file or directory` exceptions when trying to download a fractal image " -"from an API service instance that does not have the fractal image on its " -"local file system." - -msgid "" -"As with classical infrastructure, failures of the underpinning cloud " -"infrastructure (hardware, networks, and software) are unavoidable. When you " -"design for the cloud, it is crucial that your application is designed for an " -"environment where failures can happen at any moment. This may sound like a " -"liability, but it is not; by designing your application with a high degree " -"of fault tolerance, you also make it resilient, and more adaptable, in the " -"face of change." -msgstr "" -"As with classical infrastructure, failures of the underpinning cloud " -"infrastructure (hardware, networks, and software) are unavoidable. When you " -"design for the cloud, it is crucial that your application is designed for an " -"environment where failures can happen at any moment. This may sound like a " -"liability, but it is not; by designing your application with a high degree " -"of fault tolerance, you also make it resilient, and more adaptable, in the " -"face of change." - -msgid "" -"As you can see from the parameters passed to the installation script, you " -"define this instance as the worker instance. But, you also pass the address " -"of the API instance and the message queue so the worker can pick up " -"requests. The Fractals application installation script accepts several " -"parameters." -msgstr "" -"As you can see from the parameters passed to the installation script, you " -"define this instance as the worker instance. But, you also pass the address " -"of the API instance and the message queue so the worker can pick up " -"requests. The Fractals application installation script accepts several " -"parameters." - -msgid "" -"As you change the topology of your applications, you must update or create " -"security groups. Here, you re-create the required security groups." -msgstr "" -"As you change the topology of your applications, you must update or create " -"security groups. Here, you re-create the required security groups." - -msgid "Associate a floating IP for external connectivity" -msgstr "Associate a floating IP for external connectivity" - -msgid "" -"At the end of this section, you make some slight changes to the networking " -"topology by using the OpenStack Networking API to create the 10.0.1.0/24 " -"network to which the worker nodes attach. You use the 10.0.3.0/24 API " -"network to attach the Fractal API servers. Web server instances have their " -"own 10.0.2.0/24 network, which is accessible by fractal aficionados " -"worldwide, by allocating floating IPs from the public network." -msgstr "" -"At the end of this section, you make some slight changes to the networking " -"topology by using the OpenStack Networking API to create the 10.0.1.0/24 " -"network to which the worker nodes attach. You use the 10.0.3.0/24 API " -"network to attach the Fractal API servers. Web server instances have their " -"own 10.0.2.0/24 network, which is accessible by fractal aficionados " -"worldwide, by allocating floating IPs from the public network." - -msgid "Attach the floating IP address to the instance:" -msgstr "Attach the floating IP address to the instance:" - -msgid "Automation" -msgstr "Automation" - -msgid "" -"Back up the Fractals app images, which are currently stored inside the " -"database, on Object Storage." -msgstr "" -"Back up the Fractals app images, which are currently stored inside the " -"database, on Object Storage." - -msgid "Back up the Fractals from the database on the Object Storage" -msgstr "Back up the Fractals from the database on the Object Storage" - -msgid "Backups" -msgstr "Backups" - -msgid "Basics" -msgstr "Basics" - -msgid "" -"Because all service endpoints use the Identity Service for authentication " -"and authorization, place the following code in the 'void Main()' entry-point " -"function." -msgstr "" -"Because all service endpoints use the Identity Service for authentication " -"and authorisation, place the following code in the 'void Main()' entry-point " -"function." - -msgid "" -"Because the SDKs do not fully support the OpenStack Networking API, this " -"section uses the command-line clients." -msgstr "" -"Because the SDKs do not fully support the OpenStack Networking API, this " -"section uses the command-line clients." - -msgid "" -"Because the local file system is ephemeral storage, the fractal images are " -"lost along with the instance when the instance is terminated. Block-based " -"storage, which the :doc:`/block_storage` section discusses, avoids that " -"problem, but like local file systems, it requires administration to ensure " -"that it does not fill up, and immediate attention if disks fail." -msgstr "" -"Because the local file system is ephemeral storage, the fractal images are " -"lost along with the instance when the instance is terminated. Block-based " -"storage, which the :doc:`/block_storage` section discusses, avoids that " -"problem, but like local file systems, it requires administration to ensure " -"that it does not fill up, and immediate attention if disks fail." - -msgid "" -"Because the tutorial reuses the :code:`conn` object, make sure that you " -"always have one handy." -msgstr "" -"Because the tutorial reuses the :code:`conn` object, make sure that you " -"always have one handy." - -msgid "Before proceeding, install the latest version of shade." -msgstr "Before proceeding, install the latest version of shade." - -msgid "Before you continue, you must do one more thing." -msgstr "Before you continue, you must do one more thing." - -msgid "" -"Before you run this class, confirm that you have configured it for your " -"cloud and the instance running the Fractals application." -msgstr "" -"Before you run this class, confirm that you have configured it for your " -"cloud and the instance running the Fractals application." - -msgid "" -"Before you run this script, confirm that you have set your authentication " -"information, the flavor ID, and image ID." -msgstr "" -"Before you run this script, confirm that you have set your authentication " -"information, the flavour ID, and image ID." - -msgid "" -"Before you scale out your application services, like the API service or the " -"workers, you must add a central database and an :code:`app-services` " -"messaging instance. The database and messaging queue will be used to track " -"the state of fractals and to coordinate the communication between the " -"services." -msgstr "" -"Before you scale out your application services, like the API service or the " -"workers, you must add a central database and an :code:`app-services` " -"messaging instance. The database and messaging queue will be used to track " -"the state of fractals and to coordinate the communication between the " -"services." - -msgid "Block Storage" -msgstr "Block Storage" - -msgid "Boot and configure an instance" -msgstr "Boot and configure an instance" - -msgid "Booting a worker" -msgstr "Booting a worker" - -msgid "Bootstrap your network" -msgstr "Bootstrap your network" - -msgid "" -"By default, data in OpenStack instances is stored on 'ephemeral' disks. " -"These disks remain with the instance throughout its lifetime. When you " -"terminate the instance, that storage and all the data stored on it " -"disappears. Ephemeral storage is allocated to a single instance and cannot " -"be moved to another instance." -msgstr "" -"By default, data in OpenStack instances is stored on 'ephemeral' disks. " -"These disks remain with the instance throughout its lifetime. When you " -"terminate the instance, that storage and all the data stored on it " -"disappears. Ephemeral storage is allocated to a single instance and cannot " -"be moved to another instance." - -msgid "" -"CI/CD means that you always test your application and make frequent " -"deployments to production." -msgstr "" -"CI/CD means that you always test your application and make frequent " -"deployments to production." - -msgid "" -"Call the :code:`faafo` command-line interface to request the generation of " -"five large fractals." -msgstr "" -"Call the :code:`faafo` command-line interface to request the generation of " -"five large fractals." - -msgid "" -"Change the API code, such as \"list fractals,\" to query Object Storage to " -"get the metadata." -msgstr "" -"Change the API code, such as \"list fractals,\" to query Object Storage to " -"get the metadata." - -msgid "" -"Change the Fractal upload code to store metadata with the object in Object " -"Storage." -msgstr "" -"Change the Fractal upload code to store metadata with the object in Object " -"Storage." - -msgid "" -"Check to see whether the API service process is running like expected. You " -"can find the logs for the API service in the directory :file:`/var/log/" -"supervisor/`." -msgstr "" -"Check to see whether the API service process is running like expected. You " -"can find the logs for the API service in the directory :file:`/var/log/" -"supervisor/`." - -msgid "" -"Choose an image and flavor for your instance. You need about 1GB RAM, 1 CPU, " -"and a 1GB disk. This example uses the Ubuntu image with a small flavor, " -"which is a safe choice. In subsequent tutorial sections in this guide, you " -"must change the image and flavor IDs to correspond to the image and flavor " -"that you choose." -msgstr "" -"Choose an image and flavour for your instance. You need about 1GB RAM, 1 " -"CPU, and a 1GB disk. This example uses the Ubuntu image with a small " -"flavour, which is a safe choice. In subsequent tutorial sections in this " -"guide, you must change the image and flavour IDs to correspond to the image " -"and flavour that you choose." - -msgid "Choose your OpenStack SDK" -msgstr "Choose your OpenStack SDK" - -msgid "Cloud application architecture principles" -msgstr "Cloud application architecture principles" - -msgid "" -"Cloud applications often use many small instances rather than a few large " -"instances. Provided that an application is sufficiently modular, you can " -"easily distribute micro-services across as many instances as required. This " -"architecture enables an application to grow past the limit imposed by the " -"maximum size of an instance. It is like trying to move a large number of " -"people from one place to another; there is only so many people you can put " -"on the largest bus, but you can use an unlimited number of buses or small " -"cars, which provide just the capacity you need - and no more." -msgstr "" -"Cloud applications often use many small instances rather than a few large " -"instances. Provided that an application is sufficiently modular, you can " -"easily distribute micro-services across as many instances as required. This " -"architecture enables an application to grow past the limit imposed by the " -"maximum size of an instance. It is like trying to move a large number of " -"people from one place to another; there is only so many people you can put " -"on the largest bus, but you can use an unlimited number of buses or small " -"cars, which provide just the capacity you need - and no more." - -msgid "" -"Cloud applications typically share several design principles. These " -"principles influenced the design of the Fractals application." -msgstr "" -"Cloud applications typically share several design principles. These " -"principles influenced the design of the Fractals application." - -msgid "" -"Cloud resources, such as running instances that you no longer use, can cost " -"money. To avoid unexpected expenses, destroy cloud resources." -msgstr "" -"Cloud resources, such as running instances that you no longer use, can cost " -"money. To avoid unexpected expenses, destroy cloud resources." - -msgid "Complete code sample" -msgstr "Complete code sample" - -msgid "Configuration management" -msgstr "Configuration management" - -msgid "" -"Configuration management tools, such as Ansible, Chef, and Puppet, enable " -"you to describe exactly what to install and configure on an instance. Using " -"these descriptions, these tools implement the changes that are required to " -"get to the desired state." -msgstr "" -"Configuration management tools, such as Ansible, Chef, and Puppet, enable " -"you to describe exactly what to install and configure on an instance. Using " -"these descriptions, these tools implement the changes that are required to " -"get to the desired state." - -msgid "Configure the Fractals app to use Object Storage" -msgstr "Configure the Fractals app to use Object Storage" - -msgid "Confirm that the stack created two alarms:" -msgstr "Confirm that the stack created two alarms:" - -msgid "Confirm that they were added:" -msgstr "Confirm that they were added:" - -msgid "" -"Confirm that we have a public network by listing the networks our tenant has " -"access to. The public network does not have to be named public - it could be " -"'external', 'net04_ext' or something else - the important thing is it exists " -"and can be used to reach the Internet." -msgstr "" -"Confirm that we have a public network by listing the networks our tenant has " -"access to. The public network does not have to be named public - it could be " -"'external', 'net04_ext' or something else - the important thing is it exists " -"and can be used to reach the Internet." - -msgid "Connect to the API endpoint:" -msgstr "Connect to the API endpoint:" - -msgid "Connecting to the Internet" -msgstr "Connecting to the Internet" - -msgid "Contents" -msgstr "Contents" - -msgid "Create a network and subnet for the web server nodes." -msgstr "Create a network and subnet for the web server nodes." - -msgid "" -"Create a network and subnet for the worker nodes. This is the private data " -"network." -msgstr "" -"Create a network and subnet for the worker nodes. This is the private data " -"network." - -msgid "Create a router for the private data network." -msgstr "Create a router for the private data network." - -msgid "" -"Create a volume object by using the unique identifier (UUID) for the volume. " -"Then, use the server object from the previous code snippet to attach the " -"volume to it at :code:`/dev/vdb`:" -msgstr "" -"Create a volume object by using the unique identifier (UUID) for the volume. " -"Then, use the server object from the previous code snippet to attach the " -"volume to it at :code:`/dev/vdb`:" - -msgid "" -"Create and delete compute resources. These resources are virtual machine " -"instances where the Fractals application runs." -msgstr "" -"Create and delete compute resources. These resources are virtual machine " -"instances where the Fractals application runs." - -msgid "Create more API service requests" -msgstr "Create more API service requests" - -msgid "Create more tasks" -msgstr "Create more tasks" - -msgid "Create networks" -msgstr "Create networks" - -msgid "Create the instance." -msgstr "Create the instance." - -msgid "" -"Currently, you cannot directly store generated images in OpenStack Object " -"Storage. Please revisit this section again in the future." -msgstr "" -"Currently, you cannot directly store generated images in OpenStack Object " -"Storage. Please revisit this section again in the future." - -msgid "Customize networking for better performance and segregation." -msgstr "Customise networking for better performance and segregation." - -msgid "" -"Define a short function to locate unused or allocate floating IPs. This " -"saves a few lines of code and prevents you from reaching your floating IP " -"quota too quickly." -msgstr "" -"Define a short function to locate unused or allocate floating IPs. This " -"saves a few lines of code and prevents you from reaching your floating IP " -"quota too quickly." - -msgid "Delete containers" -msgstr "Delete containers" - -msgid "Deploy the application to a new instance" -msgstr "Deploy the application to a new instance" - -msgid "" -"Deploying application data and configuration to the instance can take some " -"time. Consider enjoying a cup of coffee while you wait. After the " -"application deploys, you can use your preferred browser to visit the awesome " -"graphic interface at the following link." -msgstr "" -"Deploying application data and configuration to the instance can take some " -"time. Consider enjoying a cup of coffee while you wait. After the " -"application deploys, you can use your preferred browser to visit the awesome " -"graphic interface at the following link." - -msgid "" -"Deploying applications in a cloud environment can be very different from " -"deploying them in a traditional IT environment. This guide teaches you how " -"to deploy applications on OpenStack and some best practices for cloud " -"application development." -msgstr "" -"Deploying applications in a cloud environment can be very different from " -"deploying them in a traditional IT environment. This guide teaches you how " -"to deploy applications on OpenStack and some best practices for cloud " -"application development." - -msgid "Description" -msgstr "Description" - -msgid "Destroy an instance" -msgstr "Destroy an instance" - -msgid "" -"Do not worry if these concepts are not yet completely clear. In :doc:`/" -"introduction`, we explore these concepts in more detail." -msgstr "" -"Do not worry if these concepts are not yet completely clear. In :doc:`/" -"introduction`, we explore these concepts in more detail." - -msgid "Enable/start something" -msgstr "Enable/start something" - -msgid "" -"Ensure you have an :file:`openrc.sh` file, source it, and validate that your " -"trove client works:" -msgstr "" -"Ensure you have an :file:`openrc.sh` file, source it, and validate that your " -"trove client works:" - -msgid "" -"Ensure you have an openrc.sh file, source it, and then check that your " -"openstack client works: ::" -msgstr "" -"Ensure you have an openrc.sh file, source it, and then check that your " -"openstack client works: ::" - -msgid "" -"Even with a key in place, however, you must have the appropriate security " -"group rules in place to access your instance." -msgstr "" -"Even with a key in place, however, you must have the appropriate security " -"group rules in place to access your instance." - -msgid "Example" -msgstr "Example" - -msgid "Explore and apply advanced OpenStack cloud features." -msgstr "Explore and apply advanced OpenStack cloud features." - -msgid "Extra features" -msgstr "Extra features" - -msgid "Extra security groups" -msgstr "Extra security groups" - -msgid "Extras" -msgstr "Extras" - -msgid "Fail fast" -msgstr "Fail fast" - -msgid "Fault tolerance" -msgstr "Fault tolerance" - -msgid "Fault tolerance is essential to the cloud-based application." -msgstr "Fault tolerance is essential to the cloud-based application." - -msgid "Final result" -msgstr "Final result" - -msgid "Finally, clean up by deleting the test object:" -msgstr "Finally, clean up by deleting the test object:" - -msgid "" -"Finally, start the stopped MySQL database service and validate that " -"everything works as expected." -msgstr "" -"Finally, start the stopped MySQL database service and validate that " -"everything works as expected." - -msgid "First check for an unused floating IP." -msgstr "First check for an unused floating IP." - -msgid "" -"First provide the appropriate identity, credentials and authorization URL " -"for your project. Then get an instance of the Nova API interface." -msgstr "" -"First provide the appropriate identity, credentials and authorisation URL " -"for your project. Then get an instance of the Nova API interface." - -msgid "First, learn how to connect to the Object Storage endpoint:" -msgstr "First, learn how to connect to the Object Storage endpoint:" - -msgid "" -"First, tell the connection to get a specified image by using the ID of the " -"image that you picked in the previous section:" -msgstr "" -"First, tell the connection to get a specified image by using the ID of the " -"image that you picked in the previous section:" - -msgid "Flavors and images" -msgstr "Flavours and images" - -msgid "" -"For a list of available SDKs, see `Software Development Kits `_." -msgstr "" -"For a list of available SDKs, see `Software Development Kits `_." - -msgid "" -"For efficiency, most Object Storage installations treat large objects, :code:" -"`> 5GB`, differently than smaller objects." -msgstr "" -"For efficiency, most Object Storage installations treat large objects, :code:" -"`> 5GB`, differently than smaller objects." - -msgid "" -"For example, you might use the Orchestration API to create two compute " -"instances by creating a stack and by passing a template to the Orchestration " -"API. That template contains two resources with the :code:`type` attribute " -"set to :code:`OS::Nova::Server`." -msgstr "" -"For example, you might use the Orchestration API to create two compute " -"instances by creating a stack and by passing a template to the Orchestration " -"API. That template contains two resources with the :code:`type` attribute " -"set to :code:`OS::Nova::Server`." - -msgid "For example:" -msgstr "For example:" - -msgid "" -"For information about supported features and how to work with an existing " -"database service installation, see `Database as a Service in OpenStack " -"`_." -msgstr "" -"For information about supported features and how to work with an existing " -"database service installation, see `Database as a Service in OpenStack " -"`_." - -msgid "" -"For information about these and other calls, see `libcloud documentation " -"`_." -msgstr "" -"For information about these and other calls, see `libcloud documentation " -"`_." - -msgid "" -"For more information about hybrid clouds, see the `Hybrid Cloud chapter " -"`_ in the Architecture " -"Design Guide." -msgstr "" -"For more information about hybrid clouds, see the `Hybrid Cloud chapter " -"`_ in the Architecture " -"Design Guide." - -msgid "" -"For more information about multi-site clouds, see the `Multi-Site chapter " -"`_ in the " -"Architecture Design Guide." -msgstr "" -"For more information about multi-site clouds, see the `Multi-Site chapter " -"`_ in the " -"Architecture Design Guide." - -msgid "" -"For performance reasons, it makes sense to have a network for each tier, so " -"that traffic from one tier does not \"crowd out\" other types of traffic and " -"cause the application to fail. In addition, having separate networks makes " -"controlling access to parts of the application easier to manage, improving " -"the overall security of the application." -msgstr "" -"For performance reasons, it makes sense to have a network for each tier, so " -"that traffic from one tier does not \"crowd out\" other types of traffic and " -"cause the application to fail. In addition, having separate networks makes " -"controlling access to parts of the application easier to manage, improving " -"the overall security of the application." - -msgid "" -"For this example, we take a floating IP pool from the 'public' network, " -"which is your external network." -msgstr "" -"For this example, we take a floating IP pool from the 'public' network, " -"which is your external network." - -msgid "Fractals application architecture" -msgstr "Fractals application architecture" - -msgid "" -"From here, go to :doc:`/scaling_out` to learn how to further scale your " -"application. Or, try one of these steps in the tutorial:" -msgstr "" -"From here, go to :doc:`/scaling_out` to learn how to further scale your " -"application. Or, try one of these steps in the tutorial:" - -msgid "Generate load" -msgstr "Generate load" - -msgid "Get more information about the stack:" -msgstr "Get more information about the stack:" - -msgid "Getting started" -msgstr "Getting started" - -msgid "Go" -msgstr "Go" - -msgid "Go ahead and create two instances." -msgstr "Go ahead and create two instances." - -msgid "" -"Go ahead and delete the existing instances and security groups that you " -"created in previous sections. Remember, when instances in the cloud are no " -"longer working, remove them and re-create something new." -msgstr "" -"Go ahead and delete the existing instances and security groups that you " -"created in previous sections. Remember, when instances in the cloud are no " -"longer working, remove them and re-create something new." - -msgid "" -"Go ahead and test the fault tolerance. Start deleting workers and API " -"instances. As long as you have one of each, your application is fine. " -"However, be aware of one weak point. The database contains the fractals and " -"fractal metadata. If you lose that instance, the application stops. Future " -"sections will explain how to address this weak point." -msgstr "" -"Go ahead and test the fault tolerance. Start deleting workers and API " -"instances. As long as you have one of each, your application is fine. " -"However, be aware of one weak point. The database contains the fractals and " -"fractal metadata. If you lose that instance, the application stops. Future " -"sections will explain how to address this weak point." - -msgid "" -"Go to :doc:`/durability` to learn how to use Object Storage to solve this " -"problem in an elegant way. Or, you can proceed to one of these sections:" -msgstr "" -"Go to :doc:`/durability` to learn how to use Object Storage to solve this " -"problem in an elegant way. Or, you can proceed to one of these sections:" - -msgid "Going crazy" -msgstr "Going crazy" - -msgid "HOT templating language" -msgstr "HOT templating language" - -msgid "High availability" -msgstr "High availability" - -msgid "" -"How do you deploy your application? For example, do you pull the latest code " -"from a source control repository? Do you make packaged releases that update " -"infrequently? Do you perform haphazard tests in a development environment " -"and deploy only after major changes?" -msgstr "" -"How do you deploy your application? For example, do you pull the latest code " -"from a source control repository? Do you make packaged releases that update " -"infrequently? Do you perform haphazard tests in a development environment " -"and deploy only after major changes?" - -msgid "How the Fractals application interacts with OpenStack" -msgstr "How the Fractals application interacts with OpenStack" - -msgid "How you interact with OpenStack" -msgstr "How you interact with OpenStack" - -msgid "If a key pair of the given name is not found then one is generated." -msgstr "If a key pair of the given name is not found then one is generated." - -msgid "" -"If an application is meant to automatically scale up and down to meet " -"demand, it is not feasible have any manual steps in the process of deploying " -"any component of the application. Automation also decreases the time to " -"recovery for your application in the event of component failures, increasing " -"fault tolerance and resilience." -msgstr "" -"If an application is meant to automatically scale up and down to meet " -"demand, it is not feasible have any manual steps in the process of deploying " -"any component of the application. Automation also decreases the time to " -"recovery for your application in the event of component failures, increasing " -"fault tolerance and resilience." - -msgid "" -"If either alarm reports the :code:`insufficient data` state, the default " -"sampling period of the stack is probably too low for your cloud; ask your " -"support team for assistance. You can set the period through the :code:" -"`period` parameter of the stack to match your clouds requirements." -msgstr "" -"If either alarm reports the :code:`insufficient data` state, the default " -"sampling period of the stack is probably too low for your cloud; ask your " -"support team for assistance. You can set the period through the :code:" -"`period` parameter of the stack to match your clouds requirements." - -msgid "" -"If one application instance is compromised, all instances with the same " -"image and configuration will likely suffer the same vulnerability. The " -"safest path is to use configuration management to rebuild all instances." -msgstr "" -"If one application instance is compromised, all instances with the same " -"image and configuration will likely suffer the same vulnerability. The " -"safest path is to use configuration management to rebuild all instances." - -msgid "" -"If one is assigned, users can use this address to access the instance on " -"some OpenStack clouds." -msgstr "" -"If one is assigned, users can use this address to access the instance on " -"some OpenStack clouds." - -msgid "If one is assigned, users can use this address to access the instance." -msgstr "If one is assigned, users can use this address to access the instance." - -msgid "" -"If the image that you want is not available in your cloud, you can usually " -"upload one depending on the policy settings of your cloud. For information " -"about how to upload images, see `obtaining images `_." -msgstr "" -"If the image that you want is not available in your cloud, you can usually " -"upload one depending on the policy settings of your cloud. For information " -"about how to upload images, see `obtaining images `_." - -msgid "" -"If you are an advanced user, think about how you might remove the database " -"from the architecture and replace it with Object Storage metadata, and then " -"contribute these steps to :doc:`craziness`." -msgstr "" -"If you are an advanced user, think about how you might remove the database " -"from the architecture and replace it with Object Storage metadata, and then " -"contribute these steps to :doc:`craziness`." - -msgid "" -"If you are familiar with OpenStack but have not created a cloud application " -"in general or an OpenStack application in particular, this section teaches " -"you how to program with OpenStack components." -msgstr "" -"If you are familiar with OpenStack but have not created a cloud application " -"in general or an OpenStack application in particular, this section teaches " -"you how to program with OpenStack components." - -msgid "" -"If you check the load on the :code:`app-controller` API service instance, " -"you see that the instance is not doing well. On your single CPU flavor " -"instance, a load average greater than 1 means that the server is at capacity." -msgstr "" -"If you check the load on the :code:`app-controller` API service instance, " -"you see that the instance is not doing well. On your single CPU flavour " -"instance, a load average greater than 1 means that the server is at capacity." - -msgid "" -"If you check the load on the worker, you can see that the instance is not " -"doing well. On the single CPU flavor instance, a load average greater than 1 " -"means that the server is at capacity." -msgstr "" -"If you check the load on the worker, you can see that the instance is not " -"doing well. On the single CPU flavour instance, a load average greater than " -"1 means that the server is at capacity." - -msgid "" -"If you deploy your application on a regular basis, you can resolve outages " -"and make security updates without manual intervention. If an outage occurs, " -"you can provision more resources in another region. If you must patch " -"security holes, you can provision additional compute nodes that are built " -"with the updated software. Then, you can terminate vulnerable nodes and " -"automatically fail-over traffic to the new instances." -msgstr "" -"If you deploy your application on a regular basis, you can resolve outages " -"and make security updates without manual intervention. If an outage occurs, " -"you can provision more resources in another region. If you must patch " -"security holes, you can provision additional compute nodes that are built " -"with the updated software. Then, you can terminate vulnerable nodes and " -"automatically fail-over traffic to the new instances." - -msgid "" -"If you do not have a working application, follow the steps in :doc:" -"`introduction` to create one." -msgstr "" -"If you do not have a working application, follow the steps in :doc:" -"`introduction` to create one." - -msgid "" -"If you do not know Maven then the `Maven home site `_ is a good place to learn more." -msgstr "" -"If you do not know Maven then the `Maven home site `_ is a good place to learn more." - -msgid "" -"If you do not use floating IP addresses, substitute another IP address, as " -"appropriate." -msgstr "" -"If you do not use floating IP addresses, substitute another IP address, as " -"appropriate." - -msgid "" -"If you had a load balancer, you could distribute this load between the two " -"different API services. You have several options. The :doc:`networking` " -"section shows you one option." -msgstr "" -"If you had a load balancer, you could distribute this load between the two " -"different API services. You have several options. The :doc:`networking` " -"section shows you one option." - -msgid "" -"If you have no free floating IPs that have been allocated for your project, " -"first select a network which offer allocation of floating IPs. In this " -"example we use network which is called :code:`public`." -msgstr "" -"If you have no free floating IPs that have been allocated for your project, " -"first select a network which offer allocation of floating IPs. In this " -"example we use network which is called :code:`public`." - -msgid "" -"If you have no free floating IPs that have been previously allocated for " -"your project, first select a floating IP pool offered by your provider. In " -"this example, we have selected the first one and assume that it has " -"available IP addresses." -msgstr "" -"If you have no free floating IPs that have been previously allocated for " -"your project, first select a floating IP pool offered by your provider. In " -"this example, we have selected the first one and assume that it has " -"available IP addresses." - -msgid "" -"If you have no free floating IPs that have been previously allocated for " -"your project, then select a floating IP pool offered by your provider. In " -"this example, we have selected the first one and assume that it has " -"available IP addresses." -msgstr "" -"If you have no free floating IPs that have been previously allocated for " -"your project, then select a floating IP pool offered by your provider. In " -"this example, we have selected the first one and assume that it has " -"available IP addresses." - -msgid "If you list existing instances:" -msgstr "If you list existing instances:" - -msgid "If you list the instances again, the instance disappears." -msgstr "If you list the instances again, the instance disappears." - -msgid "" -"If you receive the :code:`libcloud.common.types.InvalidCredsError: 'Invalid " -"credentials with the provider'` exception when you run one of these API " -"calls, double-check your credentials." -msgstr "" -"If you receive the :code:`libcloud.common.types.InvalidCredsError: 'Invalid " -"credentials with the provider'` exception when you run one of these API " -"calls, double-check your credentials." - -msgid "" -"If you receive the exception :code:`openstack.exceptions.HttpException: " -"HttpException: 401 Client Error: Unauthorized,` while trying to run one of " -"the following API calls please double-check your credentials." -msgstr "" -"If you receive the exception :code:`openstack.exceptions.HttpException: " -"HttpException: 401 Client Error: Unauthorised,` while trying to run one of " -"the following API calls please double-check your credentials." - -msgid "" -"If you see an IOError, you may need to change ``~/.ssh/`` to ``/home/" -"{USERNAME}/.ssh/``, using an absolute path." -msgstr "" -"If you see an IOError, you may need to change ``~/.ssh/`` to ``/home/" -"{USERNAME}/.ssh/``, using an absolute path." - -msgid "" -"If you think about how you traditionally make what you store durable, you " -"quickly conclude that keeping multiple copies of your objects on separate " -"systems is a good way strategy. However, keeping track of those multiple " -"copies is difficult, and building that into an app requires complicated " -"logic." -msgstr "" -"If you think about how you traditionally make what you store durable, you " -"quickly conclude that keeping multiple copies of your objects on separate " -"systems is a good way strategy. However, keeping track of those multiple " -"copies is difficult, and building that into an app requires complicated " -"logic." - -msgid "" -"If you work with large objects, use the :code:`RegionScopedBlobStoreContext` " -"class family instead of the ones used so far." -msgstr "" -"If you work with large objects, use the :code:`RegionScopedBlobStoreContext` " -"class family instead of the ones used so far." - -msgid "" -"If you work with large objects, use the :code:`ex_multipart_upload_object` " -"call instead of the simpler :code:`upload_object` call. The call splits the " -"large object into chunks and creates a manifest so that the chunks can be " -"recombined on download. Change the :code:`chunk_size` parameter, in bytes, " -"to a value that your cloud can accept." -msgstr "" -"If you work with large objects, use the :code:`ex_multipart_upload_object` " -"call instead of the simpler :code:`upload_object` call. The call splits the " -"large object into chunks and creates a manifest so that the chunks can be " -"recombined on download. Change the :code:`chunk_size` parameter, in bytes, " -"to a value that your cloud can accept." - -msgid "" -"If your provider does not support regions, try a blank string ('') for the " -"`region_name`." -msgstr "" -"If your provider does not support regions, try a blank string ('') for the " -"`region_name`." - -msgid "" -"In a new Terminal window, SSH into the 'api' API instance. Use the key pair " -"name that you passed in as a parameter." -msgstr "" -"In a new Terminal window, SSH into the 'api' API instance. Use the key pair " -"name that you passed in as a parameter." - -msgid "" -"In addition to configuring backups, review your policies about what you back " -"up and how long to retain each backed up item." -msgstr "" -"In addition to configuring backups, review your policies about what you back " -"up and how long to retain each backed up item." - -msgid "" -"In addition to this kind of monitoring, you should consider availability " -"monitoring. Although your application might not care about a failed worker, " -"it should care about a failed database server." -msgstr "" -"In addition to this kind of monitoring, you should consider availability " -"monitoring. Although your application might not care about a failed worker, " -"it should care about a failed database server." - -msgid "" -"In cloud programming, it is very different. Rather than large, expensive " -"servers, you have virtual machines that are disposable; if something goes " -"wrong, you shut the server down and spin up a new one. There is still " -"operations staff, but rather than nursing individual servers back to health, " -"their job is to monitor the health of the overall system." -msgstr "" -"In cloud programming, it is very different. Rather than large, expensive " -"servers, you have virtual machines that are disposable; if something goes " -"wrong, you shut the server down and spin up a new one. There is still " -"operations staff, but rather than nursing individual servers back to health, " -"their job is to monitor the health of the overall system." - -msgid "" -"In cloud programming, there is a well-known analogy known as \"cattle vs pets" -"\". If you have not heard it before, it goes like this:" -msgstr "" -"In cloud programming, there is a well-known analogy known as \"cattle vs pets" -"\". If you have not heard it before, it goes like this:" - -msgid "" -"In earlier sections, the Fractal application used an installation script " -"into which the metadata API passed parameters to bootstrap the cluster. " -"`Etcd `_ is \"a distributed, consistent key-" -"value store for shared configuration and service discovery\" that you can " -"use to store configurations. You can write updated versions of the Fractal " -"worker component to connect to Etcd or use `Confd `_ to poll for changes from Etcd and write changes to " -"a configuration file on the local file system, which the Fractal worker can " -"use for configuration." -msgstr "" -"In earlier sections, the Fractal application used an installation script " -"into which the metadata API passed parameters to bootstrap the cluster. " -"`Etcd `_ is \"a distributed, consistent key-" -"value store for shared configuration and service discovery\" that you can " -"use to store configurations. You can write updated versions of the Fractal " -"worker component to connect to Etcd or use `Confd `_ to poll for changes from Etcd and write changes to " -"a configuration file on the local file system, which the Fractal worker can " -"use for configuration." - -msgid "" -"In openstacksdk parameter :code:`ex_userdata` is called :code:`user_data` " -"and parameter :code:`ex_keyname` is called :code:`key_name`." -msgstr "" -"In openstacksdk parameter :code:`ex_userdata` is called :code:`user_data` " -"and parameter :code:`ex_keyname` is called :code:`key_name`." - -msgid "" -"In previous chapters, all nodes that comprise the fractal application were " -"attached to the same network." -msgstr "" -"In previous chapters, all nodes that comprise the fractal application were " -"attached to the same network." - -msgid "" -"In previous sections, you used your SDK to programmatically interact with " -"OpenStack. In this section, you use the 'heat' command-line client to access " -"the Orchestration API directly through template files." -msgstr "" -"In previous sections, you used your SDK to programmatically interact with " -"OpenStack. In this section, you use the 'heat' command-line client to access " -"the Orchestration API directly through template files." - -msgid "" -"In the Terminal window where you run ceilometer, run :code:" -"`ceilometer_sample_query` to see the samples." -msgstr "" -"In the Terminal window where you run Ceilometer, run :code:" -"`ceilometer_sample_query` to see the samples." - -msgid "" -"In the following example, set :code:`pub_key_file` to the location of your " -"public SSH key file." -msgstr "" -"In the following example, set :code:`pub_key_file` to the location of your " -"public SSH key file." - -msgid "In the outputs section of the stack, you can run these web API calls:" -msgstr "In the outputs section of the stack, you can run these web API calls:" - -msgid "" -"In the previous steps, you split out several services and expanded capacity. " -"To see the new features of the Fractals application, SSH to one of the app " -"instances and create a few fractals." -msgstr "" -"In the previous steps, you split out several services and expanded capacity. " -"To see the new features of the Fractals application, SSH to one of the app " -"instances and create a few fractals." - -msgid "" -"In theory, you could use a simple script to monitor the load on your workers " -"and API services and trigger the creation of instances, which you already " -"know how to do. Congratulations! You are ready to create scalable cloud " -"applications." -msgstr "" -"In theory, you could use a simple script to monitor the load on your workers " -"and API services and trigger the creation of instances, which you already " -"know how to do. Congratulations! You are ready to create scalable cloud " -"applications." - -msgid "" -"In this case, we are presenting a shell script as the `userdata `_. " -"When :code:`create_node` creates the instance, :code:`cloud-init` executes " -"the shell script in the :code:`userdata` variable." -msgstr "" -"In this case, we are presenting a shell script as the `userdata `_. " -"When :code:`create_node` creates the instance, :code:`cloud-init` executes " -"the shell script in the :code:`userdata` variable." - -msgid "" -"In this network layout, we assume that the OpenStack cloud in which you have " -"been building your application has a public network and tenant router that " -"was previously created by your cloud provider or by yourself, following the " -"instructions in the appendix." -msgstr "" -"In this network layout, we assume that the OpenStack cloud in which you have " -"been building your application has a public network and tenant router that " -"was previously created by your cloud provider or by yourself, following the " -"instructions in the appendix." - -msgid "" -"In this template, the alarms use metadata that is attached to each worker " -"instance. The metadata is in the :code:`metering.stack=stack_id` format." -msgstr "" -"In this template, the alarms use metadata that is attached to each worker " -"instance. The metadata is in the :code:`metering.stack=stack_id` format." - -msgid "" -"In this tutorial, we have downloaded the latest version of our application " -"from source and installed it on a standard image. Our magic installation " -"script also updates the standard image to have the latest dependencies that " -"you need to run the application." -msgstr "" -"In this tutorial, we have downloaded the latest version of our application " -"from source and installed it on a standard image. Our magic installation " -"script also updates the standard image to have the latest dependencies that " -"you need to run the application." - -msgid "" -"In this tutorial, you interact with your OpenStack cloud through the SDK " -"that you chose in \"Choose your OpenStack SDK.\" This guide assumes that you " -"know how to run code snippets in your language of choice." -msgstr "" -"In this tutorial, you interact with your OpenStack cloud through the SDK " -"that you chose in \"Choose your OpenStack SDK.\" This guide assumes that you " -"know how to run code snippets in your language of choice." - -msgid "" -"In traditional data centers, network segments are dedicated to specific " -"types of network traffic." -msgstr "" -"In traditional data centres, network segments are dedicated to specific " -"types of network traffic." - -msgid "In your SSH session, confirm that no fractals were generated:" -msgstr "In your SSH session, confirm that no fractals were generated:" - -msgid "" -"Initially, the focus is on scaling the workers because they consume the most " -"resources." -msgstr "" -"Initially, the focus is on scaling the workers because they consume the most " -"resources." - -msgid "Install a service" -msgstr "Install a service" - -msgid "" -"Install the 'heat' command-line client by following this guide: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"Install the 'heat' command-line client by following this guide: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"Internet connectivity from your cloud instance is required to download the " -"application." -msgstr "" -"Internet connectivity from your cloud instance is required to download the " -"application." - -msgid "Introduction to Floating IPs" -msgstr "Introduction to Floating IPs" - -msgid "Introduction to cloud-init" -msgstr "Introduction to cloud-init" - -msgid "Introduction to key pairs" -msgstr "Introduction to key pairs" - -msgid "Introduction to security groups" -msgstr "Introduction to security groups" - -msgid "Introduction to tenant networking" -msgstr "Introduction to tenant networking" - -msgid "Introduction to the fractals application architecture" -msgstr "Introduction to the fractals application architecture" - -msgid "" -"It is easy to split out services into multiple instances. We will create a " -"controller instance called :code:`app-controller`, which hosts the API, " -"database, and messaging services. We will also create a worker instance " -"called :code:`app-worker-1`, which just generates fractals." -msgstr "" -"It is easy to split out services into multiple instances. We will create a " -"controller instance called :code:`app-controller`, which hosts the API, " -"database, and messaging services. We will also create a worker instance " -"called :code:`app-worker-1`, which just generates fractals." - -msgid "It is not possible to restore deleted objects. Be careful." -msgstr "It is not possible to restore deleted objects. Be careful." - -msgid "Java" -msgstr "Java" - -msgid "" -"Jclouds does not currently support OpenStack Orchestration. See this `bug " -"report `_." -msgstr "" -"Jclouds does not currently support OpenStack Orchestration. See this `bug " -"report `_." - -msgid "" -"Just as you back up information on a non-cloud server, you must back up non-" -"reproducible information, such as information on a database server, file " -"server, or in application log files. Just because something is 'in the " -"cloud' does not mean that the underlying hardware or systems cannot fail." -msgstr "" -"Just as you back up information on a non-cloud server, you must back up non-" -"reproducible information, such as information on a database server, file " -"server, or in application log files. Just because something is 'in the " -"cloud' does not mean that the underlying hardware or systems cannot fail." - -msgid "Language" -msgstr "Language" - -msgid "" -"Large file uploads that use the :code:`openstack-swift` provider are " -"supported in only jclouds V2, currently in beta. Also, the default chunk " -"size is 64 Mb. Consider changing this as homework." -msgstr "" -"Large file uploads that use the :code:`openstack-swift` provider are " -"supported in only jclouds V2, currently in beta. Also, the default chunk " -"size is 64 Mb. Consider changing this as homework." - -msgid "Large objects" -msgstr "Large objects" - -msgid "" -"Later on, you will use a Block Storage volume to provide persistent storage " -"for the database server for the Fractal application. But first, learn how to " -"create and attach a Block Storage device." -msgstr "" -"Later on, you will use a Block Storage volume to provide persistent storage " -"for the database server for the Fractal application. But first, learn how to " -"create and attach a Block Storage device." - -msgid "Launch an instance" -msgstr "Launch an instance" - -msgid "Launch the stack with auto-scaling workers:" -msgstr "Launch the stack with auto-scaling workers:" - -msgid "" -"Leave your shell open to use it for another instance deployment in this " -"section." -msgstr "" -"Leave your shell open to use it for another instance deployment in this " -"section." - -msgid "" -"Libcloud 0.16 and 0.17 are afflicted with a bug that means authentication to " -"a swift endpoint can fail with `a Python exception `_. If you encounter this, you can upgrade your " -"libcloud version, or apply a simple `2-line patch `_." -msgstr "" -"Libcloud 0.16 and 0.17 are afflicted with a bug that means authentication to " -"a swift endpoint can fail with `a Python exception `_. If you encounter this, you can upgrade your " -"libcloud version, or apply a simple `2-line patch `_." - -msgid "Libcloud does not support the OpenStack Networking API." -msgstr "Libcloud does not support the OpenStack Networking API." - -msgid "" -"Libcloud uses a different connector for Object Storage to all other " -"OpenStack services, so a conn object from previous sections will not work " -"here and we have to create a new one named :code:`swift`." -msgstr "" -"Libcloud uses a different connector for Object Storage to all other " -"OpenStack services, so a connector object from previous sections will not " -"work here and we have to create a new one named :code:`swift`." - -msgid "" -"Like many cloud applications, the Fractals application has a `RESTful API " -"`_. You can " -"connect to it directly and generate fractals, or you can integrate it as a " -"component of a larger application. Any time a standard interface such as an " -"API is available, automated testing becomes much more feasible, increasing " -"software quality." -msgstr "" -"Like many cloud applications, the Fractals application has a `RESTful API " -"`_. You can " -"connect to it directly and generate fractals, or you can integrate it as a " -"component of a larger application. Any time a standard interface such as an " -"API is available, automated testing becomes much more feasible, increasing " -"software quality." - -msgid "" -"List all available floating IPs for this project and select the first free " -"one. Allocate a new floating IP if none is available." -msgstr "" -"List all available floating IPs for this project and select the first free " -"one. Allocate a new floating IP if none is available." - -msgid "" -"List objects in your :code:`fractals` container to see if the upload was " -"successful. Then, download the file to verify that the md5sum is the same:" -msgstr "" -"List objects in your :code:`fractals` container to see if the upload was " -"successful. Then, download the file to verify that the md5sum is the same:" - -msgid "Load balancing" -msgstr "Load Balancing" - -msgid "Load the API: Create a lot of API service requests" -msgstr "Load the API: Create a lot of API service requests" - -msgid "" -"Load the worker: Create a lot of tasks to max out the CPU of existing worker " -"instances" -msgstr "" -"Load the worker: Create a lot of tasks to max out the CPU of existing worker " -"instances" - -msgid "Log in to the server to run the following steps." -msgstr "Log in to the server to run the following steps." - -msgid "" -"Login to the worker instance, :code:`app-worker-1`, with SSH, using the " -"previous added SSH key pair \"demokey\". Start by getting the IP address of " -"the worker:" -msgstr "" -"Login to the worker instance, :code:`app-worker-1`, with SSH, using the " -"previous added SSH key pair \"demokey\". Start by getting the IP address of " -"the worker:" - -msgid "Login with SSH and use the Fractal app" -msgstr "Login with SSH and use the Fractal app" - -msgid "Look at which ports are available:" -msgstr "Look at which ports are available:" - -msgid "" -"Make cloud-related architecture decisions such as turning functions into " -"micro-services and modularizing them." -msgstr "" -"Make cloud-related architecture decisions such as turning functions into " -"micro-services and modularising them." - -msgid "Make it durable" -msgstr "Make it durable" - -msgid "Make it possible to add new resources to your application." -msgstr "Make it possible to add new resources to your application." - -msgid "" -"Many of the network concepts that are discussed in this section are already " -"present in the diagram above. A tenant router provides routing and external " -"access for the worker nodes, and floating IP addresses are associated with " -"each node in the Fractal application cluster to facilitate external access." -msgstr "" -"Many of the network concepts that are discussed in this section are already " -"present in the diagram above. A tenant router provides routing and external " -"access for the worker nodes, and floating IP addresses are associated with " -"each node in the Fractal application cluster to facilitate external access." - -msgid "" -"Maven will download and install any dependencies required for compilation, " -"then execute the Java compiler. All files in the :code:`java` subdirectory " -"will be compiled." -msgstr "" -"Maven will download and install any dependencies required for compilation, " -"then execute the Java compiler. All files in the :code:`java` subdirectory " -"will be compiled." - -msgid "" -"Maven will download and install any further dependencies required and then " -"run the chosen class." -msgstr "" -"Maven will download and install any further dependencies required and then " -"run the chosen class." - -msgid "" -"Message queues are used to facilitate communication between the Fractal " -"application services. The Fractal application uses a `work queue `_ (or task queue) to " -"distribute tasks to the worker services." -msgstr "" -"Message queues are used to facilitate communication between the Fractal " -"application services. The Fractal application uses a `work queue `_ (or task queue) to " -"distribute tasks to the worker services." - -msgid "" -"Message queues work in a way similar to a queue (or a line, for those of us " -"on the other side of the ocean) in a bank being served by multiple clerks. " -"The message queue in our application provides a feed of work requests that " -"can be taken one-at-a-time by worker services, whether there is a single " -"worker service or hundreds of them." -msgstr "" -"Message queues work in a way similar to a queue (or a line, for those of us " -"on the other side of the ocean) in a bank being served by multiple clerks. " -"The message queue in our application provides a feed of work requests that " -"can be taken one-at-a-time by worker services, whether there is a single " -"worker service or hundreds of them." - -msgid "Modularity and micro-services" -msgstr "Modularity and micro-services" - -msgid "Monitoring" -msgstr "Monitoring" - -msgid "" -"Monitoring is essential for 'scalable' cloud applications. You must know how " -"many requests are coming in and the impact that these requests have on " -"various services. You must have enough information to determine whether to " -"start another worker or API service as you did in :doc:`/scaling_out`." -msgstr "" -"Monitoring is essential for 'scalable' cloud applications. You must know how " -"many requests are coming in and the impact that these requests have on " -"various services. You must have enough information to determine whether to " -"start another worker or API service as you did in :doc:`/scaling_out`." - -msgid "" -"Most cloud providers make a public network accessible to you. We will attach " -"a router to this public network to grant Internet access to our instances. " -"After also attaching this router to our internal networks, we will allocate " -"floating IPs from the public network for instances which need to be accessed " -"from the Internet." -msgstr "" -"Most cloud providers make a public network accessible to you. We will attach " -"a router to this public network to grant Internet access to our instances. " -"After also attaching this router to our internal networks, we will allocate " -"Floating IPs from the public network for instances which need to be accessed " -"from the Internet." - -msgid "" -"Most cloud providers provision all network objects that are required to boot " -"an instance. To determine whether these objects were created for you, access " -"the Network Topology section of the OpenStack dashboard." -msgstr "" -"Most cloud providers provision all network objects that are required to boot " -"an instance. To determine whether these objects were created for you, access " -"the Network Topology section of the OpenStack dashboard." - -msgid "" -"Most instances require access to the Internet. The instances in your " -"Fractals app are no exception! Add routers to pass traffic between the " -"various networks that you use." -msgstr "" -"Most instances require access to the Internet. The instances in your " -"Fractals app are no exception! Add routers to pass traffic between the " -"various networks that you use." - -msgid "Multiple clouds" -msgstr "Multiple clouds" - -msgid "Name" -msgstr "Name" - -msgid "" -"Network access. By default, OpenStack filters all traffic. You must create a " -"security group and apply it to your instance. The security group allows HTTP " -"and SSH access. We will go into more detail in :doc:`/introduction`." -msgstr "" -"Network access. By default, OpenStack filters all traffic. You must create a " -"security group and apply it to your instance. The security group allows HTTP " -"and SSH access. We will go into more detail in :doc:`/introduction`." - -msgid "Networking" -msgstr "Networking" - -msgid "Networking segmentation" -msgstr "Networking segmentation" - -msgid "Neutron LbaaS API" -msgstr "Neutron LBaaS API" - -msgid "Next steps" -msgstr "Next steps" - -msgid "" -"Next, back up all existing fractals from the database to the swift " -"container. A simple loop takes care of that:" -msgstr "" -"Next, back up all existing fractals from the database to the swift " -"container. A simple loop takes care of that:" - -msgid "Next, create a network and subnet for the API servers." -msgstr "Next, create a network and subnet for the API servers." - -msgid "Next, create a network and subnet for the workers." -msgstr "Next, create a network and subnet for the workers." - -msgid "" -"Next, create additional floating IPs. Specify the fixed IP addresses they " -"should point to and the ports that they should use:" -msgstr "" -"Next, create additional floating IPs. Specify the fixed IP addresses they " -"should point to and the ports that they should use:" - -msgid "Next, start a second instance, which will be the worker instance:" -msgstr "Next, start a second instance, which will be the worker instance:" - -msgid "Next, tell the script which flavor you want to use:" -msgstr "Next, tell the script which flavour you want to use:" - -msgid "" -"Note that the worker instance is part of an :code:`OS::Heat::" -"AutoScalingGroup`." -msgstr "" -"Note that the worker instance is part of an :code:`OS::Heat::" -"AutoScalingGroup`." - -msgid "" -"Note that this time, when you create a security group, you include a rule " -"that applies to only instances that are part of the worker group." -msgstr "" -"Note that this time, when you create a security group, you include a rule " -"that applies to only instances that are part of the worker group." - -msgid "" -"Note that we will be showing the commands in a more idiomatic Java way: as " -"methods on a class." -msgstr "" -"Note that we will be showing the commands in a more idiomatic Java way: as " -"methods on a class." - -msgid "" -"Notice that you have added this instance to the worker_group, so it can " -"access the controller." -msgstr "" -"Notice that you have added this instance to the worker_group, so it can " -"access the controller." - -msgid "" -"Now call the Fractal application's command line interface (:code:`faafo`) to " -"request a few new fractals. The following command requests a few fractals " -"with random parameters:" -msgstr "" -"Now call the Fractal application's command line interface (:code:`faafo`) to " -"request a few new fractals. The following command requests a few fractals " -"with random parameters:" - -msgid "" -"Now create a virtual IP that will be used to direct traffic between the " -"various members of the pool:" -msgstr "" -"Now create a virtual IP that will be used to direct traffic between the " -"various members of the pool:" - -msgid "" -"Now if you make a request for a new fractal, you connect to the controller " -"instance, :code:`app-controller`, but the work will actually be performed by " -"a separate worker instance - :code:`app-worker-1`." -msgstr "" -"Now if you make a request for a new fractal, you connect to the controller " -"instance, :code:`app-controller`, but the work will actually be performed by " -"a separate worker instance - :code:`app-worker-1`." - -msgid "" -"Now log into the controller instance, :code:`app-controller`, also with SSH, " -"using the previously added SSH key pair \"demokey\"." -msgstr "" -"Now log into the controller instance, :code:`app-controller`, also with SSH, " -"using the previously added SSH key pair \"demokey\"." - -msgid "Now prepare the empty block device." -msgstr "Now prepare the empty block device." - -msgid "" -"Now request an address from this network to be allocated to your project." -msgstr "" -"Now request an address from this network to be allocated to your project." - -msgid "" -"Now request that an address from this pool be allocated to your project." -msgstr "" -"Now request that an address from this pool be allocated to your project." - -msgid "" -"Now that you have an unused floating IP address allocated to your project, " -"attach it to an instance." -msgstr "" -"Now that you have an unused floating IP address allocated to your project, " -"attach it to an instance." - -msgid "" -"Now that you have got the networks created, go ahead and create two Floating " -"IPs, for web servers. Ensure that you replace 'public' with the name of the " -"public/external network offered by your cloud provider." -msgstr "" -"Now that you have got the networks created, go ahead and create two Floating " -"IPs, for web servers. Ensure that you replace 'public' with the name of the " -"public/external network offered by your cloud provider." - -msgid "" -"Now that you have prepared the networking infrastructure, you can go ahead " -"and boot an instance on it. Ensure you use appropriate flavor and image " -"values for your cloud - see :doc:`getting_started` if you have not already." -msgstr "" -"Now that you have prepared the networking infrastructure, you can go ahead " -"and boot an instance on it. Ensure you use appropriate flavour and image " -"values for your cloud - see :doc:`getting_started` if you have not already." - -msgid "" -"Now that you know how to create and delete instances, you can deploy the " -"sample application. The instance that you create for the application is " -"similar to the first instance that you created, but this time, we introduce " -"a few extra concepts." -msgstr "" -"Now that you know how to create and delete instances, you can deploy the " -"sample application. The instance that you create for the application is " -"similar to the first instance that you created, but this time, we introduce " -"a few extra concepts." - -msgid "Now you can SSH into the instance:" -msgstr "Now you can SSH into the instance:" - -msgid "Now, attach your router to the worker, API, and web server subnets." -msgstr "Now, attach your router to the worker, API, and web server subnets." - -msgid "" -"Now, create a health monitor that will ensure that members of the load " -"balancer pool are active and able to respond to requests. If a member in the " -"pool dies or is unresponsive, the member is removed from the pool so that " -"client requests are routed to another active member." -msgstr "" -"Now, create a health monitor that will ensure that members of the load " -"balancer pool are active and able to respond to requests. If a member in the " -"pool dies or is unresponsive, the member is removed from the pool so that " -"client requests are routed to another active member." - -msgid "Now, create a network and subnet for the web servers." -msgstr "Now, create a network and subnet for the web servers." - -msgid "Now, look at the big picture." -msgstr "Now, look at the big picture." - -msgid "Now, no more objects are available in the :code:`fractals` container." -msgstr "Now, no more objects are available in the :code:`fractals` container." - -msgid "" -"Now, wait until all the fractals are generated and the instances have idled " -"for some time." -msgstr "" -"Now, wait until all the fractals are generated and the instances have idled " -"for some time." - -msgid "Now, you can boot and configure the instance." -msgstr "Now, you can boot and configure the instance." - -msgid "Now, you can launch the instance." -msgstr "Now, you can launch the instance." - -msgid "Obtain the following information from your cloud provider:" -msgstr "Obtain the following information from your cloud provider:" - -msgid "" -"Of course there is also a web interface which offers a more human friendly " -"way of accessing the API to view the created fractal images, and a simple " -"command line interface." -msgstr "" -"Of course there is also a web interface which offers a more human friendly " -"way of accessing the API to view the created fractal images, and a simple " -"command line interface." - -msgid "" -"Of course, creating a monitoring system for a single application might not " -"make sense. To learn how to use the OpenStack Orchestration monitoring and " -"auto-scaling capabilities to automate these steps, see :doc:`orchestration`." -msgstr "" -"Of course, creating a monitoring system for a single application might not " -"make sense. To learn how to use the OpenStack Orchestration monitoring and " -"auto-scaling capabilities to automate these steps, see :doc:`orchestration`." - -msgid "" -"Of course, having access to additional resources is only part of the game " -"plan; while you can manually add or delete resources, you get more value and " -"more responsiveness if the application automatically requests additional " -"resources when it needs them." -msgstr "" -"Of course, having access to additional resources is only part of the game " -"plan; while you can manually add or delete resources, you get more value and " -"more responsiveness if the application automatically requests additional " -"resources when it needs them." - -msgid "Official Python-based library for OpenStack." -msgstr "Official Python-based library for OpenStack." - -msgid "" -"Once you have configured permissions, you must know where to access the " -"application." -msgstr "" -"Once you have configured permissions, you must know where to access the " -"application." - -msgid "Once you have created a rule or group, you can also delete it:" -msgstr "Once you have created a rule or group, you can also delete it:" - -msgid "" -"Once you have logged in, check to see whether the worker service process is " -"running as expected. You can find the logs of the worker service in the " -"directory :code:`/var/log/supervisor/`." -msgstr "" -"Once you have logged in, check to see whether the worker service process is " -"running as expected. You can find the logs of the worker service in the " -"directory :code:`/var/log/supervisor/`." - -msgid "" -"One of the latest trends in scalable cloud application deployment is " -"`continuous integration `_ and `continuous deployment `_ (CI/CD)." -msgstr "" -"One of the latest trends in scalable cloud application deployment is " -"`continuous integration `_ and `continuous deployment `_ (CI/CD)." - -msgid "" -"Open :code:`top` to monitor the CPU usage of the :code:`faafo-worker` " -"process." -msgstr "" -"Open :code:`top` to monitor the CPU usage of the :code:`faafo-worker` " -"process." - -msgid "" -"OpenStack Object Storage automatically replicates each object at least twice " -"before returning 'write success' to your API call. A good strategy is to " -"keep three copies of objects, by default, at all times, replicating them " -"across the system in case of hardware failure, maintenance, network outage, " -"or another kind of breakage. This strategy is very convenient for app " -"creation. You can just dump objects into object storage and not worry about " -"the additional work that it takes to keep them safe." -msgstr "" -"OpenStack Object Storage automatically replicates each object at least twice " -"before returning 'write success' to your API call. A good strategy is to " -"keep three copies of objects, by default, at all times, replicating them " -"across the system in case of hardware failure, maintenance, network outage, " -"or another kind of breakage. This strategy is very convenient for app " -"creation. You can just dump objects into object storage and not worry about " -"the additional work that it takes to keep them safe." - -msgid "OpenStack SDK" -msgstr "OpenStack SDK" - -msgid "OpenStack SDK for Microsoft .NET" -msgstr "OpenStack SDK for Microsoft .NET" - -msgid "OpenStack SDKs" -msgstr "OpenStack SDKs" - -msgid "" -"OpenStack provides a couple of tools that make it easy to back up data. If " -"your provider runs OpenStack Object Storage, you can use its API calls and " -"CLI tools to work with archive files." -msgstr "" -"OpenStack provides a couple of tools that make it easy to back up data. If " -"your provider runs OpenStack Object Storage, you can use its API calls and " -"CLI tools to work with archive files." - -msgid "" -"OpenStack supports 'regions', which are geographically-separated " -"installations that are connected to a single service catalog. This section " -"explains how to expand the Fractal application to use multiple regions for " -"high availability." -msgstr "" -"OpenStack supports 'regions', which are geographically-separated " -"installations that are connected to a single service catalogue. This section " -"explains how to expand the Fractal application to use multiple regions for " -"high availability." - -msgid "Or, try one of these tutorial steps:" -msgstr "Or, try one of these tutorial steps:" - -msgid "Orchestration" -msgstr "Orchestration" - -msgid "" -"Other features, such as creating volume snapshots, are useful for backups:" -msgstr "" -"Other features, such as creating volume snapshots, are useful for backups:" - -msgid "" -"Other versions of this guide show you how to use the other SDKs and " -"languages to complete these tasks. If you are a developer for another " -"toolkit that you would like this guide to include, feel free to submit code " -"snippets. For more information, contact `OpenStack Documentation team " -"`_ members." -msgstr "" -"Other versions of this guide show you how to use the other SDKs and " -"languages to complete these tasks. If you are a developer for another " -"toolkit that you would like this guide to include, feel free to submit code " -"snippets. For more information, contact `OpenStack Documentation team " -"`_ members." - -msgid "" -"Otherwise, continue reading to learn how to work with, and move the Fractal " -"application database server to use, block storage." -msgstr "" -"Otherwise, continue reading to learn how to work with, and move the Fractal " -"application database server to use, block storage." - -msgid "" -"Our code samples use `Java 8 `_." -msgstr "" -"Our code samples use `Java 8 `_." - -msgid "PHP" -msgstr "PHP" - -msgid "" -"PHP-OpenCloud supports the OpenStack Networking API, but this section has " -"not been completed." -msgstr "" -"PHP-OpenCloud supports the OpenStack Networking API, but this section has " -"not been completed." - -msgid "" -"PHP-opencloud supports OpenStack Orchestration :D:D:D but this section is " -"not written yet." -msgstr "" -"PHP-opencloud supports OpenStack Orchestration :D:D:D but this section is " -"not written yet." - -msgid "Parameter" -msgstr "Parameter" - -msgid "" -"Perhaps you can `contribute `_?" -msgstr "" -"Perhaps you can `contribute `_?" - -msgid "Phoenix servers" -msgstr "Phoenix servers" - -msgid "" -"Pkgcloud supports OpenStack Orchestration :D:D:D but this section is `not " -"written yet `_" -msgstr "" -"Pkgcloud supports OpenStack Orchestration :D:D:D but this section is `not " -"written yet `_" - -msgid "" -"Pkgcloud supports the OpenStack Networking API, but this section has not " -"been completed." -msgstr "" -"Pkgcloud supports the OpenStack Networking API, but this section has not " -"been completed." - -msgid "" -"Place the above pom.xml into the root directory of your project. Then create " -"the nested subdirectory tree :code:`src` -> :code:`main` -> :code:`java`. " -"Place the Java code samples that you copy from this book into the folder " -"named \":code:`java`\"." -msgstr "" -"Place the above pom.xml into the root directory of your project. Then create " -"the nested subdirectory tree :code:`src` -> :code:`main` -> :code:`java`. " -"Place the Java code samples that you copy from this book into the folder " -"named \":code:`java`\"." - -msgid "Place the images in the :code:`fractals` container:" -msgstr "Place the images in the :code:`fractals` container:" - -msgid "" -"Previously, you manually created the database, which is useful for a single " -"database that you rarely update. However, the OpenStack :code:`trove` " -"component provides Database as a Service (DBaaS)." -msgstr "" -"Previously, you manually created the database, which is useful for a single " -"database that you rarely update. However, the OpenStack :code:`trove` " -"component provides Database as a Service (DBaaS)." - -msgid "" -"Prior to this section, the network layout for the Fractal application would " -"be similar to the following diagram:" -msgstr "" -"Prior to this section, the network layout for the Fractal application would " -"be similar to the following diagram:" - -msgid "Programmatic interfaces (APIs)" -msgstr "Programmatic interfaces (APIs)" - -msgid "Python" -msgstr "Python" - -msgid "Regions and geographic diversity" -msgstr "Regions and geographic diversity" - -msgid "Remove the existing app" -msgstr "Remove the existing app" - -msgid "" -"Removing the egress rule created by OpenStack will cause your instance " -"networking to break." -msgstr "" -"Removing the egress rule created by OpenStack will cause your instance " -"networking to break." - -msgid "" -"Replace :code:`IP_API_1` and :code:`IP_API_2` with the corresponding " -"floating IPs. Replace FRACTAL_UUID with the UUID of an existing fractal." -msgstr "" -"Replace :code:`IP_API_1` and :code:`IP_API_2` with the corresponding " -"floating IPs. Replace FRACTAL_UUID with the UUID of an existing fractal." - -msgid "Replace :code:`IP_API_1` with the IP address of the API instance." -msgstr "Replace :code:`IP_API_1` with the IP address of the API instance." - -msgid "" -"Replace :code:`IP_API_1` with the IP address of the first API instance and " -"USERNAME with the appropriate user name." -msgstr "" -"Replace :code:`IP_API_1` with the IP address of the first API instance and " -"USERNAME with the appropriate user name." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance " -"and USERNAME to the appropriate user name." -msgstr "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance " -"and USERNAME to the appropriate user name." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance " -"and USERNAME with the appropriate user name." -msgstr "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance " -"and USERNAME with the appropriate user name." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance." -msgstr "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance." - -msgid "" -"Replace :code:`IP_DATABASE` with the IP address of the database instance and " -"USERNAME to the appropriate user name." -msgstr "" -"Replace :code:`IP_DATABASE` with the IP address of the database instance and " -"USERNAME to the appropriate user name." - -msgid "" -"Replace :code:`IP_WORKER_1` with the IP address of the worker instance and " -"USERNAME to the appropriate user name." -msgstr "" -"Replace :code:`IP_WORKER_1` with the IP address of the worker instance and " -"USERNAME to the appropriate user name." - -msgid "" -"Replace :code:`IP_WORKER` with the IP address of the worker instance and " -"USERNAME with the appropriate user name." -msgstr "" -"Replace :code:`IP_WORKER` with the IP address of the worker instance and " -"USERNAME with the appropriate user name." - -msgid "Ruby" -msgstr "Ruby" - -msgid "" -"Run the :code:`ceilometer_statistics_query`: command to see the derived " -"statistics." -msgstr "" -"Run the :code:`ceilometer_statistics_query`: command to see the derived " -"statistics." - -msgid "" -"Run the :code:`nova list` command to confirm that the :code:`OS::Heat::" -"AutoScalingGroup` has created more instances:" -msgstr "" -"Run the :code:`nova list` command to confirm that the :code:`OS::Heat::" -"AutoScalingGroup` has created more instances:" - -msgid "" -"Run the :code:`nova list` command to confirm that the :code:`OS::Heat::" -"AutoScalingGroup` removed the unneeded instances:" -msgstr "" -"Run the :code:`nova list` command to confirm that the :code:`OS::Heat::" -"AutoScalingGroup` removed the unneeded instances:" - -msgid "" -"Run the :code:`nova list` command. This template created three instances:" -msgstr "" -"Run the :code:`nova list` command. This template created three instances:" - -msgid "Run the script to start the deployment." -msgstr "Run the script to start the deployment." - -msgid "" -"SDKs do not generally support the service yet, but you can use the 'trove' " -"command-line client to work with it instead." -msgstr "" -"SDKs do not generally support the service yet, but you can use the 'trove' " -"command-line client to work with it instead." - -msgid "Scalability" -msgstr "Scalability" - -msgid "Scale available resources up and down." -msgstr "Scale available resources up and down." - -msgid "Scale the API service" -msgstr "Scale the API service" - -msgid "Scale the workers" -msgstr "Scale the workers" - -msgid "Scaling out" -msgstr "Scaling out" - -msgid "Security" -msgstr "Security" - -msgid "" -"Security groups are sets of network access rules that are applied to an " -"instance's networking. By default, only egress (outbound) traffic is " -"allowed. You must explicitly enable ingress (inbound) network access by " -"creating a security group rule." -msgstr "" -"Security groups are sets of network access rules that are applied to an " -"instance's networking. By default, only egress (outbound) traffic is " -"allowed. You must explicitly enable ingress (inbound) network access by " -"creating a security group rule." - -msgid "" -"Security is important when it comes to your instances; you can not have just " -"anyone accessing them. To enable logging into an instance, you must provide " -"the public key of an SSH key pair during instance creation. In section one, " -"you created and uploaded a key pair to OpenStack, and cloud-init installed " -"it for the user account." -msgstr "" -"Security is important when it comes to your instances; you can not have just " -"anyone accessing them. To enable logging into an instance, you must provide " -"the public key of an SSH key pair during instance creation. In section one, " -"you created and uploaded a key pair to OpenStack, and cloud-init installed " -"it for the user account." - -msgid "See the state of the alarms set up by the template:" -msgstr "See the state of the alarms set up by the template:" - -msgid "" -"Set the image and size variables to appropriate values for your cloud. We " -"will use these variables in later sections." -msgstr "" -"Set the image and size variables to appropriate values for your cloud. We " -"will use these variables in later sections." - -msgid "Shade" -msgstr "Shade" - -msgid "" -"Shade's create_object function has a \"use_slo\" parameter (that defaults to " -"true) which will break your object into smaller objects for upload and " -"rejoin them if needed." -msgstr "" -"Shade's create_object function has a \"use_slo\" parameter (that defaults to " -"true) which will break your object into smaller objects for upload and " -"rejoin them if needed." - -msgid "" -"Similar to the UNIX programming model, an object, such as a document or an " -"image, is a \"bag of bytes\" that contains data. You use containers to group " -"objects. You can place many objects inside a container, and your account can " -"have many containers." -msgstr "" -"Similar to the UNIX programming model, an object, such as a document or an " -"image, is a \"bag of bytes\" that contains data. You use containers to group " -"objects. You can place many objects inside a container, and your account can " -"have many containers." - -msgid "" -"So what exactly was that request doing at the end of the previous section? " -"Let us look at it again. In this subsection, we are just explaining what you " -"have already done in the previous section; you do not need to run these " -"commands again." -msgstr "" -"So what exactly was that request doing at the end of the previous section? " -"Let us look at it again. In this subsection, we are just explaining what you " -"have already done in the previous section; you do not need to run these " -"commands again." - -msgid "" -"So, for example, the file named :code:`GettingStarted.java` from the end of " -"this chapter would be located as follows:" -msgstr "" -"So, for example, the file named :code:`GettingStarted.java` from the end of " -"this chapter would be located as follows:" - -msgid "Specify a network during instance build" -msgstr "Specify a network during instance build" - -msgid "" -"Specify an external gateway for your router to tell OpenStack which network " -"to use for Internet access." -msgstr "" -"Specify an external gateway for your router to tell OpenStack which network " -"to use for Internet access." - -msgid "Specify the flavor ID that you would like to use." -msgstr "Specify the flavour ID that you would like to use." - -msgid "" -"Spend some time playing with the stack and the Fractal app to see how it " -"works." -msgstr "" -"Spend some time playing with the stack and the Fractal app to see how it " -"works." - -msgid "Split the database and message queue" -msgstr "Split the database and message queue" - -msgid "Splitting services across multiple instances" -msgstr "Splitting services across multiple instances" - -msgid "" -"Start by creating a security group for the all-in-one instance and adding " -"the appropriate rules, such as HTTP (TCP port 80) and SSH (TCP port 22):" -msgstr "" -"Start by creating a security group for the all-in-one instance and adding " -"the appropriate rules, such as HTTP (TCP port 80) and SSH (TCP port 22):" - -msgid "Start by looking at what is already in place." -msgstr "Start by looking at what is already in place." - -msgid "" -"Stop the running MySQL database service and move the database files from :" -"file:`/var/lib/mysql` to the new volume, which is temporarily mounted at :" -"file:`/mnt/database`." -msgstr "" -"Stop the running MySQL database service and move the database files from :" -"file:`/var/lib/mysql` to the new volume, which is temporarily mounted at :" -"file:`/mnt/database`." - -msgid "" -"Swift metadata keys are prepended with \"x-object-meta-\" so when you get " -"the object with get_object(), in order to get the value of the metadata your " -"key will be \"x-object-meta-foo\"." -msgstr "" -"Swift metadata keys are prepended with \"x-object-meta-\" so when you get " -"the object with get_object(), in order to get the value of the metadata your " -"key will be \"x-object-meta-foo\"." - -msgid "" -"Sync the file systems and mount the block device that contains the database " -"files to :file:`/var/lib/mysql`." -msgstr "" -"Sync the file systems and mount the block device that contains the database " -"files to :file:`/var/lib/mysql`." - -msgid "" -"That brings us to where we ended up at the end of :doc:`/getting_started`. " -"But where do we go from here?" -msgstr "" -"That brings us to where we ended up at the end of :doc:`/getting_started`. " -"But where do we go from here?" - -msgid "" -"That example is simplistic, of course, but the flexibility of the resource " -"object enables the creation of templates that contain all the required cloud " -"infrastructure to run an application, such as load balancers, block storage " -"volumes, compute instances, networking topology, and security policies." -msgstr "" -"That example is simplistic, of course, but the flexibility of the resource " -"object enables the creation of templates that contain all the required cloud " -"infrastructure to run an application, such as load balancers, block storage " -"volumes, compute instances, networking topology, and security policies." - -msgid "" -"That, as it happens, is the new reality of programming. Applications and " -"systems used to be created on large, expensive servers, cared for by " -"operations staff dedicated to keeping them healthy. If something went wrong " -"with one of those servers, the staff's job was to do whatever it took to " -"make it right again and save the server and the application." -msgstr "" -"That, as it happens, is the new reality of programming. Applications and " -"systems used to be created on large, expensive servers, cared for by " -"operations staff dedicated to keeping them healthy. If something went wrong " -"with one of those servers, the staff's job was to do whatever it took to " -"make it right again and save the server and the application." - -msgid "" -"The :code:`OS::Heat::AutoScalingGroup` removes instances in creation order. " -"So the worker instance that was created first is the first instance to be " -"removed." -msgstr "" -"The :code:`OS::Heat::AutoScalingGroup` removes instances in creation order. " -"So the worker instance that was created first is the first instance to be " -"removed." - -msgid "" -"The :doc:`/introduction` section describes how to build in a modular " -"fashion, create an API, and other aspects of the application architecture. " -"Now you will see why those strategies are so important. By creating a " -"modular application with decoupled services, you can identify components " -"that cause application performance bottlenecks and scale them out. Just as " -"importantly, you can also remove resources when they are no longer " -"necessary. It is very difficult to overstate the cost savings that this " -"feature can bring, as compared to traditional infrastructure." -msgstr "" -"The :doc:`/introduction` section describes how to build in a modular " -"fashion, create an API, and other aspects of the application architecture. " -"Now you will see why those strategies are so important. By creating a " -"modular application with decoupled services, you can identify components " -"that cause application performance bottlenecks and scale them out. Just as " -"importantly, you can also remove resources when they are no longer " -"necessary. It is very difficult to overstate the cost savings that this " -"feature can bring, as compared to traditional infrastructure." - -msgid "" -"The CPU utilization across workers increases as workers start to create the " -"fractals." -msgstr "" -"The CPU utilisation across workers increases as workers start to create the " -"fractals." - -msgid "" -"The Fractals app currently uses the local file system on the instance to " -"store the images that it generates. For a number of reasons, this approach " -"is not scalable or durable." -msgstr "" -"The Fractals app currently uses the local file system on the instance to " -"store the images that it generates. For a number of reasons, this approach " -"is not scalable or durable." - -msgid "" -"The Fractals application was designed with the principles of the previous " -"subsection in mind. You will note that in :doc:`getting_started`, we " -"deployed the application in an all-in-one style, on a single virtual " -"machine. This is not a good practice, but because the application uses micro-" -"services to decouple logical application functions, we can change this " -"easily." -msgstr "" -"The Fractals application was designed with the principles of the previous " -"subsection in mind. You will note that in :doc:`getting_started`, we " -"deployed the application in an all-in-one style, on a single virtual " -"machine. This is not a good practice, but because the application uses micro-" -"services to decouple logical application functions, we can change this " -"easily." - -msgid "The Object Storage API is organized around objects and containers." -msgstr "The Object Storage API is organised around objects and containers." - -msgid "" -"The Object Storage service manages many of the tasks normally managed by the " -"application owner. The Object Storage service provides a scalable and " -"durable API that you can use for the fractals app, eliminating the need to " -"be aware of the low level details of how objects are stored and replicated, " -"and how to grow the storage pool. Object Storage handles replication for " -"you. It stores multiple copies of each object. You can use the Object " -"Storage API to return an object, on demand." -msgstr "" -"The Object Storage service manages many of the tasks normally managed by the " -"application owner. The Object Storage service provides a scalable and " -"durable API that you can use for the fractals app, eliminating the need to " -"be aware of the low level details of how objects are stored and replicated, " -"and how to grow the storage pool. Object Storage handles replication for " -"you. It stores multiple copies of each object. You can use the Object " -"Storage API to return an object, on demand." - -msgid "" -"The OpenStack Networking API provides support for creating loadbalancers, " -"which can be used to scale the Fractal app web service. In the following " -"example, we create two compute instances via the Compute API, then " -"instantiate a load balancer that will use a virtual IP (VIP) for accessing " -"the web service offered by the two compute nodes. The end result will be the " -"following network topology:" -msgstr "" -"The OpenStack Networking API provides support for creating load balancers, " -"which can be used to scale the Fractal app web service. In the following " -"example, we create two compute instances via the Compute API, then " -"instantiate a load balancer that will use a virtual IP (VIP) for accessing " -"the web service offered by the two compute nodes. The end result will be the " -"following network topology:" - -msgid "" -"The OpenStack Orchestration API uses the stacks, resources, and templates " -"constructs." -msgstr "" -"The OpenStack Orchestration API uses the stacks, resources, and templates " -"constructs." - -msgid "The OpenStack SDK does not currently support OpenStack Orchestration." -msgstr "The OpenStack SDK does not currently support OpenStack Orchestration." - -msgid "" -"The Orchestration service is not deployed by default in every cloud. If " -"these commands do not work, it means the Orchestration API is not available; " -"ask your support team for assistance." -msgstr "" -"The Orchestration service is not deployed by default in every cloud. If " -"these commands do not work, it means the Orchestration API is not available; " -"ask your support team for assistance." - -msgid "" -"The Orchestration service provides a template-based way to describe a cloud " -"application, then coordinates running the needed OpenStack API calls to run " -"cloud applications. The templates enable you to create most OpenStack " -"resource types, such as instances, networking information, volumes, security " -"groups, and even users. It also provides more advanced functionality, such " -"as instance high availability, instance auto-scaling, and nested stacks." -msgstr "" -"The Orchestration service provides a template-based way to describe a cloud " -"application, then coordinates running the needed OpenStack API calls to run " -"cloud applications. The templates enable you to create most OpenStack " -"resource types, such as instances, networking information, volumes, security " -"groups, and even users. It also provides more advanced functionality, such " -"as instance high availability, instance auto-scaling, and nested stacks." - -msgid "" -"The Telemetry service is not deployed by default in every cloud. If the " -"ceilometer commands do not work, this example does not work; ask your " -"support team for assistance." -msgstr "" -"The Telemetry service is not deployed by default in every cloud. If the " -"Ceilometer commands do not work, this example does not work; ask your " -"support team for assistance." - -msgid "" -"The Telemetry service uses meters to measure a given aspect of a resources " -"usage. The meter that we are interested in is the :code:`cpu_util` meter." -msgstr "" -"The Telemetry service uses meters to measure a given aspect of a resources " -"usage. The meter that we are interested in is the :code:`cpu_util` meter." - -msgid "" -"The `RabbitMQ getting started tutorial `_ provides a great introduction to message queues." -msgstr "" -"The `RabbitMQ getting started tutorial `_ provides a great introduction to message queues." - -msgid "" -"The `generated_by` field shows the worker that created the fractal. Because " -"multiple worker instances share the work, fractals are generated more " -"quickly and users might not even notice when a worker fails." -msgstr "" -"The `generated_by` field shows the worker that created the fractal. Because " -"multiple worker instances share the work, fractals are generated more " -"quickly and users might not even notice when a worker fails." - -msgid "" -"The `outputs` property shows the URL through which you can access the " -"Fractal application. You can SSH into the instance." -msgstr "" -"The `outputs` property shows the URL through which you can access the " -"Fractal application. You can SSH into the instance." - -msgid "The actual auth URL is:" -msgstr "The actual auth URL is:" - -msgid "The alarms have the form:" -msgstr "The alarms have the form:" - -msgid "" -"The application stores the generated fractal images directly in the database " -"used by the API service instance. Storing image files in a database is not " -"good practice. We are doing it here as an example only as an easy way to " -"enable multiple instances to have access to the data. For best practice, we " -"recommend storing objects in Object Storage, which is covered in :doc:" -"`durability`." -msgstr "" -"The application stores the generated fractal images directly in the database " -"used by the API service instance. Storing image files in a database is not " -"good practice. We are doing it here as an example only as an easy way to " -"enable multiple instances to have access to the data. For best practice, we " -"recommend storing objects in Object Storage, which is covered in :doc:" -"`durability`." - -msgid "" -"The auto-scaling stack sets up an API instance, a services instance, and an " -"auto-scaling group with a single worker instance. It also sets up ceilometer " -"alarms that add worker instances to the auto-scaling group when it is under " -"load, and removes instances when the group is idling. To do this, the alarms " -"post to URLs." -msgstr "" -"The auto-scaling stack sets up an API instance, a services instance, and an " -"auto-scaling group with a single worker instance. It also sets up Ceilometer " -"alarms that add worker instances to the auto-scaling group when it is under " -"load, and removes instances when the group is idling. To do this, the alarms " -"post to URLs." - -msgid "" -"The client object accesses the Compute v2.0 service and type v2.1, so that " -"version is in this tutorial." -msgstr "" -"The client object accesses the Compute v2.0 service and type v2.1, so that " -"version is in this tutorial." - -msgid "The connection URL for the database (not used here)." -msgstr "The connection URL for the database (not used here)." - -msgid "The endpoint URL of the API service." -msgstr "The endpoint URL of the API service." - -msgid "" -"The example code uses the awesome `Requests library `_. Before you try to run the previous script, make " -"sure that it is installed on your system." -msgstr "" -"The example code uses the awesome `Requests library `_. Before you try to run the previous script, make " -"sure that it is installed on your system." - -msgid "" -"The example template depends on the ceilometer project, which is part of the " -"`Telemetry service `_." -msgstr "" -"The example template depends on the Ceilometer project, which is part of the " -"`Telemetry service `_." - -msgid "" -"The first step is to start the controller instance. The instance has the API " -"service, the database, and the messaging service, as you can see from the " -"parameters passed to the installation script." -msgstr "" -"The first step is to start the controller instance. The instance has the API " -"service, the database, and the messaging service, as you can see from the " -"parameters passed to the installation script." - -msgid "The flavor" -msgstr "The flavour" - -msgid "" -"The following file contains all of the code from this section of the " -"tutorial. This comprehensive code sample lets you view and run the code as a " -"single file." -msgstr "" -"The following file contains all of the code from this section of the " -"tutorial. This comprehensive code sample lets you view and run the code as a " -"single file." - -msgid "" -"The following file contains all of the code from this section of the " -"tutorial. This comprehensive code sample lets you view and run the code as a " -"single script." -msgstr "" -"The following file contains all of the code from this section of the " -"tutorial. This comprehensive code sample lets you view and run the code as a " -"single script." - -msgid "" -"The following instance creation example assumes that you have a single-" -"tenant network. If you receive the 'Exception: 400 Bad Request Multiple " -"possible networks found, use a Network ID to be more specific' error, you " -"have multiple-tenant networks. You must add a `networks` parameter to the " -"call that creates the server. See :doc:`/appendix` for details." -msgstr "" -"The following instance creation example assumes that you have a single-" -"tenant network. If you receive the 'Exception: 400 Bad Request Multiple " -"possible networks found, use a Network ID to be more specific' error, you " -"have multiple-tenant networks. You must add a `networks` parameter to the " -"call that creates the server. See :doc:`/appendix` for details." - -msgid "The following operations are destructive and result in data loss." -msgstr "The following operations are destructive and result in data loss." - -msgid "" -"The fractal application we are building contains these types of network " -"traffic:" -msgstr "" -"The fractal application we are building contains these types of network " -"traffic:" - -msgid "" -"The fractals are now available from any of the app-api hosts. To verify, " -"visit http://IP_API_1/fractal/FRACTAL_UUID and http://IP_API_2/fractal/" -"FRACTAL_UUID. You now have multiple redundant web services. If one fails, " -"you can use the others." -msgstr "" -"The fractals are now available from any of the app-api hosts. To verify, " -"visit http://IP_API_1/fractal/FRACTAL_UUID and http://IP_API_2/fractal/" -"FRACTAL_UUID. You now have multiple redundant web services. If one fails, " -"you can use the others." - -msgid "The magic revisited" -msgstr "The magic revisited" - -msgid "" -"The message queue can take a while to notice that worker instances have died." -msgstr "" -"The message queue can take a while to notice that worker instances have died." - -msgid "" -"The most common way for OpenStack clouds to allocate Internet rout-able IP " -"addresses to instances, however, is through the use of floating IPs. A " -"floating IP is an address that exists as an entity unto itself, and can be " -"associated to a specific instance network interface. When a floating IP " -"address is associated to an instance network interface, OpenStack re-directs " -"traffic bound for that address to the address of the instance's internal " -"network interface address. Your cloud provider will generally offer pools of " -"floating IPs for your use." -msgstr "" -"The most common way for OpenStack clouds to allocate Internet routable IP " -"addresses to instances, however, is through the use of floating IPs. A " -"floating IP is an address that exists as an entity unto itself, and can be " -"associated to a specific instance network interface. When a floating IP " -"address is associated to an instance network interface, OpenStack re-directs " -"traffic bound for that address to the address of the instance's internal " -"network interface address. Your cloud provider will generally offer pools of " -"floating IPs for your use." - -msgid "The new instance appears." -msgstr "The new instance appears." - -msgid "" -"The next logical step is to upload an object. Find a photo of a goat online, " -"name it :code:`goat.jpg`, and upload it to your :code:`fractals` container:" -msgstr "" -"The next logical step is to upload an object. Find a photo of a goat online, " -"name it :code:`goat.jpg`, and upload it to your :code:`fractals` container:" - -msgid "" -"The outputs section of the stack contains two ceilometer command-line " -"queries:" -msgstr "" -"The outputs section of the stack contains two Ceilometer command-line " -"queries:" - -msgid "The parameter :code:`Size` is in gigabytes." -msgstr "The parameter :code:`Size` is in gigabytes." - -msgid "The parameter :code:`size` is in gigabytes." -msgstr "The parameter :code:`size` is in gigabytes." - -msgid "The prefix is `metering.` For example, `metering.some_name`." -msgstr "The prefix is `metering.` For example, `metering.some_name`." - -msgid "" -"The previous section uses two virtual machines - one 'control' service and " -"one 'worker'. The speed at which your application can generate fractals " -"depends on the number of workers. With just one worker, you can produce only " -"one fractal at a time. Before long, you will need more resources." -msgstr "" -"The previous section uses two virtual machines - one 'control' service and " -"one 'worker'. The speed at which your application can generate fractals " -"depends on the number of workers. With just one worker, you can produce only " -"one fractal at a time. Before long, you will need more resources." - -msgid "" -"The rest of this tutorial will not reference the all-in-one instance you " -"created in section one. Take a moment to delete this instance." -msgstr "" -"The rest of this tutorial will not reference the all-in-one instance you " -"created in section one. Take a moment to delete this instance." - -msgid "The samples and the statistics are listed in opposite time order!" -msgstr "The samples and the statistics are listed in opposite time order!" - -msgid "The second application is an OpenStack application that enables you to:" -msgstr "" -"The second application is an OpenStack application that enables you to:" - -msgid "The shade framework can select and assign a free floating IP quickly" -msgstr "The shade framework can select and assign a free floating IP quickly" - -msgid "" -"The sheer number of requests means that some requests for fractals might not " -"make it to the message queue for processing. To ensure that you can cope " -"with demand, you must also scale out the API capability of the Fractals " -"application." -msgstr "" -"The sheer number of requests means that some requests for fractals might not " -"make it to the message queue for processing. To ensure that you can cope " -"with demand, you must also scale out the API capability of the Fractals " -"application." - -msgid "The stack automatically creates a Nova instance, as follows:" -msgstr "The stack automatically creates a Nova instance, as follows:" - -msgid "" -"The stack reports an initial :code:`CREATE_IN_PROGRESS` status. When all " -"software is installed, the status changes to :code:`CREATE_COMPLETE`." -msgstr "" -"The stack reports an initial :code:`CREATE_IN_PROGRESS` status. When all " -"software is installed, the status changes to :code:`CREATE_COMPLETE`." - -msgid "" -"The stack we will be building uses the firing of alarms to control the " -"addition or removal of worker instances." -msgstr "" -"The stack we will be building uses the firing of alarms to control the " -"addition or removal of worker instances." - -msgid "The transport URL of the messaging service." -msgstr "The transport URL of the messaging service." - -msgid "The unique identifier (UUID) of the image" -msgstr "The unique identifier (UUID) of the image" - -msgid "The value of a meter is regularly sampled and saved with a timestamp." -msgstr "The value of a meter is regularly sampled and saved with a timestamp." - -msgid "" -"The worker service consumes messages from the work queue and then processes " -"them to create the corresponding fractal image file." -msgstr "" -"The worker service consumes messages from the work queue and then processes " -"them to create the corresponding fractal image file." - -msgid "" -"The world is running out of IPv4 addresses. If you get the \"No more IP " -"addresses available on network\" error, contact your cloud administrator. " -"You may also want to ask about IPv6 :)" -msgstr "" -"The world is running out of IPv4 addresses. If you get the \"No more IP " -"addresses available on network\" error, contact your cloud administrator. " -"You may also want to ask about IPv6 :)" - -msgid "Then attach it to the instance:" -msgstr "Then attach it to the instance:" - -msgid "Then request an IP number be allocated from the pool." -msgstr "Then request an IP number be allocated from the pool." - -msgid "Then, create a pair of large fractals:" -msgstr "Then, create a pair of large fractals:" - -msgid "" -"There are also multiple storage back ends (to store the generated fractal " -"images) and a database component (to store the state of tasks), but we will " -"talk about those in :doc:`/durability` and :doc:`/block_storage` " -"respectively." -msgstr "" -"There are also multiple storage back ends (to store the generated fractal " -"images) and a database component (to store the state of tasks), but we will " -"talk about those in :doc:`/durability` and :doc:`/block_storage` " -"respectively." - -msgid "" -"There are definite advantages to this architecture. It is easy to get a \"new" -"\" server, without any of the issues that inevitably arise when a server has " -"been up and running for months, or even years." -msgstr "" -"There are definite advantages to this architecture. It is easy to get a \"new" -"\" server, without any of the issues that inevitably arise when a server has " -"been up and running for months, or even years." - -msgid "" -"There are more commands available; find out more details about them with :" -"code:`faafo get --help`, :code:`faafo list --help`, and :code:`faafo delete " -"--help`." -msgstr "" -"There are more commands available; find out more details about them with :" -"code:`faafo get --help`, :code:`faafo list --help`, and :code:`faafo delete " -"--help`." - -msgid "" -"These demonstrate how the Ceilometer alarms add and remove instances. To use " -"them:" -msgstr "" -"These demonstrate how the Ceilometer alarms add and remove instances. To use " -"them:" - -msgid "These queries provide a view into the behavior of the stack." -msgstr "These queries provide a view into the behaviour of the stack." - -msgid "" -"These saved samples are aggregated to produce a statistic. The statistic " -"that we are interested in is **avg**: the average of the samples over a " -"given period." -msgstr "" -"These saved samples are aggregated to produce a statistic. The statistic " -"that we are interested in is **avg**: the average of the samples over a " -"given period." - -msgid "" -"These services are client-facing, so unlike the workers they do not use a " -"message queue to distribute tasks. Instead, you must introduce some kind of " -"load balancing mechanism to share incoming requests between the different " -"API services." -msgstr "" -"These services are client-facing, so unlike the workers they do not use a " -"message queue to distribute tasks. Instead, you must introduce some kind of " -"load balancing mechanism to share incoming requests between the different " -"API services." - -msgid "" -"These tools vastly reduce the effort it takes to work with large numbers of " -"servers, and also improve the ability to recreate, update, move, and " -"distribute applications." -msgstr "" -"These tools vastly reduce the effort it takes to work with large numbers of " -"servers, and also improve the ability to recreate, update, move, and " -"distribute applications." - -msgid "" -"This OpenStack Database service is not installed in many clouds right now, " -"but if your cloud supports it, it can make your life a lot easier when " -"working with databases." -msgstr "" -"This OpenStack Database service is not installed in many clouds right now, " -"but if your cloud supports it, it can make your life a lot easier when " -"working with databases." - -msgid "This adds a \"foo\" key to the metadata that has a value of \"bar\"." -msgstr "This adds a \"foo\" key to the metadata that has a value of \"bar\"." - -msgid "" -"This chapter explains the importance of durability and scalability for your " -"cloud-based applications. In most cases, really achieving these qualities " -"means automating tasks such as scaling and other operational tasks." -msgstr "" -"This chapter explains the importance of durability and scalability for your " -"cloud-based applications. In most cases, really achieving these qualities " -"means automating tasks such as scaling and other operational tasks." - -msgid "" -"This chapter introduces the Networking API. This will enable us to build " -"networking topologies that separate public traffic accessing the application " -"from traffic between the API and the worker components. We also introduce " -"load balancing for resilience, and create a secure back-end network for " -"communication between the database, web server, file storage, and worker " -"components." -msgstr "" -"This chapter introduces the Networking API. This will enable us to build " -"networking topologies that separate public traffic accessing the application " -"from traffic between the API and the worker components. We also introduce " -"load balancing for resilience, and create a secure back-end network for " -"communication between the database, web server, file storage, and worker " -"components." - -msgid "This code returns output like this:" -msgstr "This code returns output like this:" - -msgid "This code returns the floating IP address:" -msgstr "This code returns the floating IP address:" - -msgid "" -"This command returns a very long list of meters. Once a meter is created, it " -"is never thrown away!" -msgstr "" -"This command returns a very long list of meters. Once a meter is created, it " -"is never thrown away!" - -msgid "This document has not yet been completed for the .NET SDK." -msgstr "This document has not yet been completed for the .NET SDK." - -msgid "This document has not yet been completed for the fog SDK." -msgstr "This document has not yet been completed for the fog SDK." - -msgid "This document has not yet been completed for the php-opencloud SDK." -msgstr "This document has not yet been completed for the php-opencloud SDK." - -msgid "" -"This file contains all the code from this tutorial section. This class lets " -"you view and run the code." -msgstr "" -"This file contains all the code from this tutorial section. This class lets " -"you view and run the code." - -msgid "" -"This file contains all the code from this tutorial section. This " -"comprehensive code sample lets you view and run the code as a single script." -msgstr "" -"This file contains all the code from this tutorial section. This " -"comprehensive code sample lets you view and run the code as a single script." - -msgid "This gets an IP address that you can assign to your instance:" -msgstr "This gets an IP address that you can assign to your instance:" - -msgid "" -"This guide is for experienced software developers who want to deploy " -"applications to OpenStack clouds." -msgstr "" -"This guide is for experienced software developers who want to deploy " -"applications to OpenStack clouds." - -msgid "" -"This is a `useful pattern `_ for many cloud applications that have long lists of requests coming " -"in and a pool of resources from which to service them. This also means that " -"a worker may crash and the tasks will be processed by other workers." -msgstr "" -"This is a `useful pattern `_ for many cloud applications that have long lists of requests coming " -"in and a pool of resources from which to service them. This also means that " -"a worker may crash and the tasks will be processed by other workers." - -msgid "" -"This option also uses a bit stream to upload the file, iterating bit by bit " -"over the file and passing those bits to Object Storage as they come. " -"Compared to loading the entire file in memory and then sending it, this " -"method is more efficient, especially for larger files." -msgstr "" -"This option also uses a bit stream to upload the file, iterating bit by bit " -"over the file and passing those bits to Object Storage as they come. " -"Compared to loading the entire file in memory and then sending it, this " -"method is more efficient, especially for larger files." - -msgid "" -"This process was obviously a very manual one. Figuring out that we needed " -"more workers and then starting new ones required some effort. Ideally the " -"system would do this itself. If you build your application to detect these " -"situations, you can have it automatically request and remove resources, " -"which saves you the effort of doing this work yourself. Instead, the " -"OpenStack Orchestration service can monitor load and start instances, as " -"appropriate. To find out how to set that up, see :doc:`orchestration`." -msgstr "" -"This process was obviously a very manual one. Figuring out that we needed " -"more workers and then starting new ones required some effort. Ideally the " -"system would do this itself. If you build your application to detect these " -"situations, you can have it automatically request and remove resources, " -"which saves you the effort of doing this work yourself. Instead, the " -"OpenStack Orchestration service can monitor load and start instances, as " -"appropriate. To find out how to set that up, see :doc:`orchestration`." - -msgid "" -"This section assumes that your cloud provider has implemented the OpenStack " -"Networking API (neutron). Users of clouds which have implemented legacy " -"networking (nova-network) will have access to networking via the Compute " -"API. Log in to the Horizon dashboard and navigate to :guilabel:`Project-" -">Access & Security->API Access`. If you see a service endpoint for the " -"Network API, your cloud is most likely running the Networking API. If you " -"are still in doubt, ask your cloud provider for more information." -msgstr "" -"This section assumes that your cloud provider has implemented the OpenStack " -"Networking API (neutron). Users of clouds which have implemented legacy " -"networking (nova-network) will have access to networking via the Compute " -"API. Log in to the Horizon dashboard and navigate to :guilabel:`Project-" -">Access & Security->API Access`. If you see a service endpoint for the " -"Network API, your cloud is most likely running the Networking API. If you " -"are still in doubt, ask your cloud provider for more information." - -msgid "" -"This section continues to illustrate the separation of services onto " -"multiple instances and highlights some of the choices that we have made that " -"facilitate scalability in the application architecture." -msgstr "" -"This section continues to illustrate the separation of services onto " -"multiple instances and highlights some of the choices that we have made that " -"facilitate scalability in the application architecture." - -msgid "This section explores options for expanding the sample application." -msgstr "This section explores options for expanding the sample application." - -msgid "This section has not yet been completed for the .NET SDK" -msgstr "This section has not yet been completed for the .NET SDK" - -msgid "This section has not yet been completed for the .NET SDK." -msgstr "This section has not yet been completed for the .NET SDK." - -msgid "This section has not yet been completed for the OpenStack SDK." -msgstr "This section has not yet been completed for the OpenStack SDK." - -msgid "This section has not yet been completed for the PHP-OpenCloud SDK." -msgstr "This section has not yet been completed for the PHP-OpenCloud SDK." - -msgid "This section has not yet been completed for the fog SDK." -msgstr "This section has not yet been completed for the fog SDK." - -msgid "This section has not yet been completed for the pkgcloud SDK." -msgstr "This section has not yet been completed for the pkgcloud SDK." - -msgid "" -"This section introduces block storage, also known as volume storage, which " -"provides access to persistent storage devices. You interact with block " -"storage by attaching volumes to running instances just as you might attach a " -"USB drive to a physical server. You can detach volumes from one instance and " -"reattach them to another instance and the data remains intact. The OpenStack " -"Block Storage (cinder) project implements block storage." -msgstr "" -"This section introduces block storage, also known as volume storage, which " -"provides access to persistent storage devices. You interact with block " -"storage by attaching volumes to running instances just as you might attach a " -"USB drive to a physical server. You can detach volumes from one instance and " -"reattach them to another instance and the data remains intact. The OpenStack " -"Block Storage (Cinder) project implements block storage." - -msgid "This section introduces object storage." -msgstr "This section introduces object storage." - -msgid "" -"This section introduces some operational concepts and tasks to developers " -"who have not written cloud applications before." -msgstr "" -"This section introduces some operational concepts and tasks to developers " -"who have not written cloud applications before." - -msgid "" -"This section introduces the `HOT templating language `_, and takes you through some " -"common OpenStack Orchestration calls." -msgstr "" -"This section introduces the `HOT templating language `_, and takes you through some " -"common OpenStack Orchestration calls." - -msgid "" -"This section introduces the application architecture and explains how it was " -"designed to take advantage of cloud features in general and OpenStack in " -"particular. It also describes some commands in the previous section." -msgstr "" -"This section introduces the application architecture and explains how it was " -"designed to take advantage of cloud features in general and OpenStack in " -"particular. It also describes some commands in the previous section." - -msgid "" -"This section is based on the Neutron LBaaS API version 1.0 https://docs." -"openstack.org/admin-guide/networking_adv-features.html#basic-load-balancer-" -"as-a-service-operations" -msgstr "" -"This section is based on the Neutron LBaaS API version 1.0 https://docs." -"openstack.org/admin-guide/networking_adv-features.html#basic-load-balancer-" -"as-a-service-operations" - -msgid "This section is incomplete. Please help us finish it!" -msgstr "This section is incomplete. Please help us finish it!" - -msgid "" -"This tutorial shows two applications. The first application is a simple " -"fractal generator that uses mathematical equations to generate beautiful " -"`fractal images `_. We show you this " -"application in its entirety so that you can compare it to a second, more " -"robust, application." -msgstr "" -"This tutorial shows two applications. The first application is a simple " -"fractal generator that uses mathematical equations to generate beautiful " -"`fractal images `_. We show you this " -"application in its entirety so that you can compare it to a second, more " -"robust, application." - -msgid "" -"Though you might have configured Object Storage to store images, the Fractal " -"application needs a database to track the location of, and parameters that " -"were used to create, images in Object Storage. This database server cannot " -"fail." -msgstr "" -"Though you might have configured Object Storage to store images, the Fractal " -"application needs a database to track the location of, and parameters that " -"were used to create, images in Object Storage. This database server cannot " -"fail." - -msgid "" -"To begin to store objects, we must first make a container. Call yours :code:" -"`fractals`:" -msgstr "" -"To begin to store objects, we must first make a container. Call yours :code:" -"`fractals`:" - -msgid "" -"To better understand how the template works, use this guide to install the " -"'ceilometer' command-line client:" -msgstr "" -"To better understand how the template works, use this guide to install the " -"'ceilometer' command-line client:" - -msgid "" -"To configure shade using a profile, use your credentials above to specify " -"the cloud provider name, username, password, project name, and region name " -"in the file :file:`~/.config/openstack/clouds.yml`." -msgstr "" -"To configure shade using a profile, use your credentials above to specify " -"the cloud provider name, username, password, project name, and region name " -"in the file :file:`~/.config/openstack/clouds.yml`." - -msgid "To create a floating IP address to use with your instance:" -msgstr "To create a floating IP address to use with your instance:" - -msgid "" -"To delete a container, you must first remove all objects from the container. " -"Otherwise, the delete operation fails:" -msgstr "" -"To delete a container, you must first remove all objects from the container. " -"Otherwise, the delete operation fails:" - -msgid "To detach and delete a volume:" -msgstr "To detach and delete a volume:" - -msgid "To determine whether a public IP address is assigned to your instance:" -msgstr "To determine whether a public IP address is assigned to your instance:" - -msgid "To increase the overall capacity, add three workers:" -msgstr "To increase the overall capacity, add three workers:" - -msgid "" -"To install the 'trove' command-line client, see `Install the OpenStack " -"command-line clients `_." -msgstr "" -"To install the 'trove' command-line client, see `Install the OpenStack " -"command-line clients `_." - -msgid "" -"To install the OpenStack .NET SDK, use the NeGet Package Manager that is " -"included with Visual Studio and Xamarin Studio. You simply add a package " -"named 'openstack.net' and the NeGet Package Manager automatically installs " -"the necessary dependencies." -msgstr "" -"To install the OpenStack .NET SDK, use the NeGet Package Manager that is " -"included with Visual Studio and Xamarin Studio. You simply add a package " -"named 'openstack.net' and the NeGet Package Manager automatically installs " -"the necessary dependencies." - -msgid "To interact with the cloud, you must also have" -msgstr "To interact with the cloud, you must also have" - -msgid "" -"To launch an instance, you choose a flavor and an image. The flavor " -"represents the size of the instance, including the number of CPUs and amount " -"of RAM and disk space. An image is a prepared OS installation from which you " -"clone your instance. When you boot instances in a public cloud, larger " -"flavors can be more expensive than smaller ones in terms of resources and " -"monetary cost." -msgstr "" -"To launch an instance, you choose a flavour and an image. The flavour " -"represents the size of the instance, including the number of CPUs and amount " -"of RAM and disk space. An image is a prepared OS installation from which you " -"clone your instance. When you boot instances in a public cloud, larger " -"flavours can be more expensive than smaller ones in terms of resources and " -"monetary cost." - -msgid "" -"To learn about auto-scaling with the Orchestration API, read these articles:" -msgstr "" -"To learn about auto-scaling with the Orchestration API, read these articles:" - -msgid "" -"To learn about the template syntax for OpenStack Orchestration, how to " -"create basic templates, and their inputs and outputs, see `Heat " -"Orchestration Template (HOT) Guide `_." -msgstr "" -"To learn about the template syntax for OpenStack Orchestration, how to " -"create basic templates, and their inputs and outputs, see `Heat " -"Orchestration Template (HOT) Guide `_." - -msgid "" -"To list the images that are available in your cloud, run some API calls:" -msgstr "" -"To list the images that are available in your cloud, run some API calls:" - -msgid "To recap:" -msgstr "To recap:" - -msgid "" -"To run your application, you must launch an instance. This instance serves " -"as a virtual machine." -msgstr "" -"To run your application, you must launch an instance. This instance serves " -"as a virtual machine." - -msgid "To see if the volume creation was successful, list all volumes:" -msgstr "To see if the volume creation was successful, list all volumes:" - -msgid "" -"To see the application running, you must know where to look for it. By " -"default, your instance has outbound network access. To make your instance " -"reachable from the Internet, you need an IP address. By default in some " -"cases, your instance is provisioned with a publicly rout-able IP address. In " -"this case, you see an IP address listed under `public_ips` or `private_ips` " -"when you list the instances. If not, you must create and attach a floating " -"IP address to your instance." -msgstr "" -"To see the application running, you must know where to look for it. By " -"default, your instance has outbound network access. To make your instance " -"reachable from the Internet, you need an IP address. By default in some " -"cases, your instance is provisioned with a publicly rout-able IP address. In " -"this case, you see an IP address listed under `public_ips` or `private_ips` " -"when you list the instances. If not, you must create and attach a floating " -"IP address to your instance." - -msgid "To see whether a private IP address is assigned to your instance:" -msgstr "To see whether a private IP address is assigned to your instance:" - -msgid "To see which security groups apply to an instance, you can:" -msgstr "To see which security groups apply to an instance, you can:" - -msgid "" -"To set up environment variables for your cloud in an :file:`openrc.sh` file, " -"see `Set environment variables using the OpenStack RC file `_." -msgstr "" -"To set up environment variables for your cloud in an :file:`openrc.sh` file, " -"see `Set environment variables using the OpenStack RC file `_." - -msgid "" -"To set up the necessary variables for your cloud in an 'openrc' file, use " -"this guide:" -msgstr "" -"To set up the necessary variables for your cloud in an 'openrc' file, use " -"this guide:" - -msgid "" -"To show the details of a specific fractal use the subcommand :code:`show` of " -"the Faafo CLI." -msgstr "" -"To show the details of a specific fractal use the subcommand :code:`show` of " -"the Faafo CLI." - -msgid "" -"To test what happens when the Fractals application is under load, you can:" -msgstr "" -"To test what happens when the Fractals application is under load, you can:" - -msgid "" -"To try it out, add the following code to a Python script (or use an " -"interactive Python shell) by calling :code:`python -i`." -msgstr "" -"To try it out, add the following code to a Python script (or use an " -"interactive Python shell) by calling :code:`python -i`." - -msgid "To try it out, make a 1GB volume called 'test'." -msgstr "To try it out, make a 1GB volume called 'test'." - -msgid "" -"To try it, add the following code to a Python script (or use an interactive " -"Python shell) by calling :code:`python -i`." -msgstr "" -"To try it, add the following code to a Python script (or use an interactive " -"Python shell) by calling :code:`python -i`." - -msgid "" -"To try it, use an interactive Node.js shell by calling :code:`node` or add " -"the following code to a script." -msgstr "" -"To try it, use an interactive Node.js shell by calling :code:`node` or add " -"the following code to a script." - -msgid "" -"To use Maven to compile a downloaded sample, with the command prompt located " -"in the same directory as the :code:`pom.xml` file, enter:" -msgstr "" -"To use Maven to compile a downloaded sample, with the command prompt located " -"in the same directory as the :code:`pom.xml` file, enter:" - -msgid "" -"To use Maven to run each downloaded sample, with the command prompt located " -"in the same directory as the :code:`pom.xml` file, enter:" -msgstr "" -"To use Maven to run each downloaded sample, with the command prompt located " -"in the same directory as the :code:`pom.xml` file, enter:" - -msgid "" -"To use a floating IP, you must first allocate an IP to your project, then " -"associate it to your instance's network interface." -msgstr "" -"To use a floating IP, you must first allocate an IP to your project, then " -"associate it to your instance's network interface." - -msgid "" -"To use the OpenStack .NET SDK, add the following code in the required " -"namespace section." -msgstr "" -"To use the OpenStack .NET SDK, add the following code in the required " -"namespace section." - -msgid "To verify that ceilometer is installed, list the known meters:" -msgstr "To verify that Ceilometer is installed, list the known meters:" - -msgid "URL" -msgstr "URL" - -msgid "" -"Use :code:`ex_list_floating_ip_pools()` and select the first floating IP " -"address pool. Allocate this pool to your project and use it to get a " -"floating IP address." -msgstr "" -"Use :code:`ex_list_floating_ip_pools()` and select the first floating IP " -"address pool. Allocate this pool to your project and use it to get a " -"floating IP address." - -msgid "" -"Use :code:`getFloatingIps` to check for unused addresses. Select the first " -"available address. Otherwise, use :code:`allocateNewFloatingIp` to allocate " -"a floating IP to your project from the default address pool." -msgstr "" -"Use :code:`getFloatingIps` to check for unused addresses. Select the first " -"available address. Otherwise, use :code:`allocateNewFloatingIp` to allocate " -"a floating IP to your project from the default address pool." - -msgid "Use Block Storage for the Fractal database server" -msgstr "Use Block Storage for the Fractal database server" - -msgid "Use Object Storage instead of a database" -msgstr "Use Object Storage instead of a database" - -msgid "Use Object Storage to store fractals" -msgstr "Use Object Storage to store fractals" - -msgid "Use Object and Block storage for file and database persistence." -msgstr "Use Object and Block storage for file and database persistence." - -msgid "Use Orchestration services to automatically adjust to the environment." -msgstr "Use Orchestration services to automatically adjust to the environment." - -msgid "" -"Use SSH with the existing SSH keypair to log in to the :code:`app-" -"controller` controller instance." -msgstr "" -"Use SSH with the existing SSH keypair to log in to the :code:`app-" -"controller` controller instance." - -msgid "" -"Use a for loop to call the :code:`faafo` command-line interface to request a " -"random set of fractals 500 times:" -msgstr "" -"Use a for loop to call the :code:`faafo` command-line interface to request a " -"random set of fractals 500 times:" - -msgid "Use conf.d and etc.d." -msgstr "Use conf.d and etc.d." - -msgid "Use environment variables to set your cloud credentials" -msgstr "Use environment variables to set your cloud credentials" - -msgid "" -"Use network service client to select the first floating IP address pool. " -"Allocate this pool to your project and use it to get a floating IP address." -msgstr "" -"Use network service client to select the first floating IP address pool. " -"Allocate this pool to your project and use it to get a floating IP address." - -msgid "Use the :code:`faafo UUID` command to examine some of the fractals." -msgstr "Use the :code:`faafo UUID` command to examine some of the fractals." - -msgid "Use the :code:`faafo create` command to generate fractals." -msgstr "Use the :code:`faafo create` command to generate fractals." - -msgid "" -"Use the :code:`faafo list` command to watch the progress of fractal " -"generation." -msgstr "" -"Use the :code:`faafo list` command to watch the progress of fractal " -"generation." - -msgid "" -"Use the `Health Endpoint Monitoring Pattern ` to implement functional checks within your " -"application that external tools can access through exposed endpoints at " -"regular intervals." -msgstr "" -"Use the `Health Endpoint Monitoring Pattern ` to implement functional checks within your " -"application that external tools can access through exposed endpoints at " -"regular intervals." - -msgid "" -"Use the image, flavor, key pair, and userdata to create an instance. After " -"you request the instance, wait for it to build." -msgstr "" -"Use the image, flavour, key pair, and userdata to create an instance. After " -"you request the instance, wait for it to build." - -msgid "Use the stack ID to get more information about the stack:" -msgstr "Use the stack ID to get more information about the stack:" - -msgid "" -"Use this guide to install the 'openstack' command-line client: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"Use this guide to install the 'openstack' command-line client: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"Use this guide to set up the necessary variables for your cloud in an " -"'openrc' file: https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" -msgstr "" -"Use this guide to set up the necessary variables for your cloud in an " -"'openrc' file: https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" - -msgid "" -"Use your credentials above to specify the cloud provider name, username, " -"password, project_name and region_name in the file :file:`~/.config/" -"openstack/clouds.yml`." -msgstr "" -"Use your credentials above to specify the cloud provider name, username, " -"password, project_name and region_name in the file :file:`~/.config/" -"openstack/clouds.yml`." - -msgid "Use your selected image and flavor to create an instance." -msgstr "Use your selected image and flavour to create an instance." - -msgid "User data in openstacksdk must be encoded to Base64" -msgstr "User data in openstacksdk must be encoded to Base64" - -msgid "User data in openstacksdk must be encoded to Base64." -msgstr "User data in openstacksdk must be encoded to Base64." - -msgid "" -"Userdata. During instance creation, you can provide userdata to OpenStack to " -"configure instances after they boot. The cloud-init service applies the user " -"data to an instance. You must pre-install the cloud-init service on your " -"chosen image. We will go into more detail in :doc:`/introduction`." -msgstr "" -"Userdata. During instance creation, you can provide userdata to OpenStack to " -"configure instances after they boot. The cloud-init service applies the user " -"data to an instance. You must pre-install the cloud-init service on your " -"chosen image. We will go into more detail in :doc:`/introduction`." - -msgid "Using Pacemaker to look at the API." -msgstr "Using Pacemaker to look at the API." - -msgid "Values" -msgstr "Values" - -msgid "Verify that the stack was successfully created:" -msgstr "Verify that the stack was successfully created:" - -msgid "Verify that we have had an impact" -msgstr "Verify that we have had an impact" - -msgid "Verify the nova instance was deleted when the stack was removed:" -msgstr "Verify the Nova instance was deleted when the stack was removed:" - -msgid "Wait for it to reach the :code:`CREATE_COMPLETE` status:" -msgstr "Wait for it to reach the :code:`CREATE_COMPLETE` status:" - -msgid "" -"Watch :code:`top` on the worker instance. Right after calling :code:`faafo` " -"the :code:`faafo-worker` process should start consuming a lot of CPU cycles." -msgstr "" -"Watch :code:`top` on the worker instance. Right after calling :code:`faafo` " -"the :code:`faafo-worker` process should start consuming a lot of CPU cycles." - -msgid "" -"We are interested because the Telemetry service supports alarms: an alarm is " -"fired when our average statistic breaches a configured threshold. When the " -"alarm fires, an associated action is performed." -msgstr "" -"We are interested because the Telemetry service supports alarms: an alarm is " -"fired when our average statistic breaches a configured threshold. When the " -"alarm fires, an associated action is performed." - -msgid "" -"We assume that you can already access an OpenStack cloud. You must have a " -"project, also known as a tenant, with a minimum quota of six instances. " -"Because the Fractals application runs in Ubuntu, Debian, Fedora-based, and " -"openSUSE-based distributions, you must create instances that use one of " -"these operating systems." -msgstr "" -"We assume that you can already access an OpenStack cloud. You must have a " -"project, also known as a tenant, with a minimum quota of six instances. " -"Because the Fractals application runs in Ubuntu, Debian, Fedora-based, and " -"openSUSE-based distributions, you must create instances that use one of " -"these operating systems." - -msgid "We cover networking in detail in :doc:`/networking`." -msgstr "We cover networking in detail in :doc:`/networking`." - -msgid "" -"We explained image and flavor in :doc:`getting_started`, so in the following " -"sections, we will explain the other parameters in detail, including :code:" -"`ex_userdata` (cloud-init) and :code:`ex_keyname` (key pairs)." -msgstr "" -"We explained image and flavour in :doc:`getting_started`, so in the " -"following sections, we will explain the other parameters in detail, " -"including :code:`ex_userdata` (cloud-init) and :code:`ex_keyname` (key " -"pairs)." - -msgid "We have created a Maven POM file to help you get started." -msgstr "We have created a Maven POM file to help you get started." - -msgid "" -"We have not quite figured out how to stop using a database, but the general " -"steps are:" -msgstr "" -"We have not quite figured out how to stop using a database, but the general " -"steps are:" - -msgid "" -"We have talked about separating functions into different micro-services, and " -"how that enables us to make use of the cloud architecture. Now let us see " -"that in action." -msgstr "" -"We have talked about separating functions into different micro-services, and " -"how that enables us to make use of the cloud architecture. Now let us see " -"that in action." - -msgid "What you need" -msgstr "What you need" - -msgid "What you will learn" -msgstr "What you will learn" - -msgid "" -"When an SSH public key is provided during instance creation, cloud-init " -"installs this key on a user account. (The user name varies between cloud " -"images.) See the `Obtaining Images `_ section of the image guide for guidance about which " -"user name you should use when SSHing. If you still have problems logging in, " -"ask your cloud provider to confirm the user name." -msgstr "" -"When an SSH public key is provided during instance creation, cloud-init " -"installs this key on a user account. (The user name varies between cloud " -"images.) See the `Obtaining Images `_ section of the image guide for guidance about which " -"user name you should use when SSHing. If you still have problems logging in, " -"ask your cloud provider to confirm the user name." - -msgid "" -"When the instance boots, the `ex_userdata` variable value instructs the " -"instance to deploy the Fractals application." -msgstr "" -"When the instance boots, the `ex_userdata` variable value instructs the " -"instance to deploy the Fractals application." - -msgid "" -"When you create an instance for the application, you want to give it a bit " -"more information than you supplied to the bare instance that you just " -"created and deleted. We will go into more detail in later sections, but for " -"now, simply create the following resources so that you can feed them to the " -"instance:" -msgstr "" -"When you create an instance for the application, you want to give it a bit " -"more information than you supplied to the bare instance that you just " -"created and deleted. We will go into more detail in later sections, but for " -"now, simply create the following resources so that you can feed them to the " -"instance:" - -msgid "" -"When you deal with pets, you name and care for them. If they get sick, you " -"nurse them back to health, which can be difficult and very time consuming. " -"When you deal with cattle, you attach a numbered tag to their ear. If they " -"get sick, you put them down and move on." -msgstr "" -"When you deal with pets, you name and care for them. If they get sick, you " -"nurse them back to health, which can be difficult and very time consuming. " -"When you deal with cattle, you attach a numbered tag to their ear. If they " -"get sick, you put them down and move on." - -msgid "" -"While this stack starts a single instance that builds and runs the Fractal " -"application as an all-in-one installation, you can make very complicated " -"templates that impact dozens of instances or that add and remove instances " -"on demand. Continue to the next section to learn more." -msgstr "" -"While this stack starts a single instance that builds and runs the Fractal " -"application as an all-in-one installation, you can make very complicated " -"templates that impact dozens of instances or that add and remove instances " -"on demand. Continue to the next section to learn more." - -msgid "Who should read this guide" -msgstr "Who should read this guide" - -msgid "" -"With multiple workers producing fractals as fast as they can, the system " -"must be able to receive the requests for fractals as quickly as possible. If " -"our application becomes popular, many thousands of users might connect to " -"our API to generate fractals." -msgstr "" -"With multiple workers producing fractals as fast as they can, the system " -"must be able to receive the requests for fractals as quickly as possible. If " -"our application becomes popular, many thousands of users might connect to " -"our API to generate fractals." - -msgid "" -"With the OpenStack Networking API, the workflow for creating a network " -"topology that separates the public-facing Fractals app API from the worker " -"back end is as follows:" -msgstr "" -"With the OpenStack Networking API, the workflow for creating a network " -"topology that separates the public-facing Fractals app API from the worker " -"back end is as follows:" - -msgid "" -"With the Orchestration API, the Fractal application can create an auto-" -"scaling group for all parts of the application, to dynamically provision " -"more compute resources during periods of heavy utilization, and also " -"terminate compute instances to scale down, as demand decreases." -msgstr "" -"With the Orchestration API, the Fractal application can create an auto-" -"scaling group for all parts of the application, to dynamically provision " -"more compute resources during periods of heavy utilisation, and also " -"terminate compute instances to scale down, as demand decreases." - -msgid "" -"With the addition of the load balancer, the Fractal app's networking " -"topology now reflects the modular nature of the application itself." -msgstr "" -"With the addition of the load balancer, the Fractal app's networking " -"topology now reflects the modular nature of the application itself." - -msgid "Work with stacks: Advanced" -msgstr "Work with stacks: Advanced" - -msgid "Work with stacks: Basics" -msgstr "Work with stacks: Basics" - -msgid "Work with the CLI" -msgstr "Work with the CLI" - -msgid "Work with the OpenStack Database service" -msgstr "Work with the OpenStack Database service" - -msgid "" -"Wow! If you have made it through this section, you know more than the " -"authors of this guide know about working with OpenStack clouds." -msgstr "" -"Wow! If you have made it through this section, you know more than the " -"authors of this guide know about working with OpenStack clouds." - -msgid "Writing your first OpenStack application" -msgstr "Writing your first OpenStack application" - -msgid "" -"You also need a security group to permit access to the database server (for " -"MySQL, port 3306) from the network:" -msgstr "" -"You also need a security group to permit access to the database server (for " -"MySQL, port 3306) from the network:" - -msgid "" -"You are ready to create members for the load balancer pool, which reference " -"the floating IPs:" -msgstr "" -"You are ready to create members for the load balancer pool, which reference " -"the Floating IPs:" - -msgid "" -"You can aggregate samples and calculate statistics across all instances with " -"the `metering.some_name` metadata that has `some_value` by using a query of " -"the form:" -msgstr "" -"You can aggregate samples and calculate statistics across all instances with " -"the `metering.some_name` metadata that has `some_value` by using a query of " -"the form:" - -msgid "" -"You can also download the OpenStack RC file from the OpenStack Horizon " -"dashboard. Log in to the dashboard and click :guilabel:`Project->Access & " -"Security->API Access->Download OpenStack RC file`. If you use this method, " -"be aware that the \"auth URL\" does not include the path. For example, if " -"your :file:`openrc.sh` file shows:" -msgstr "" -"You can also download the OpenStack RC file from the OpenStack Horizon " -"dashboard. Log in to the dashboard and click :guilabel:`Project->Access & " -"Security->API Access->Download OpenStack RC file`. If you use this method, " -"be aware that the \"auth URL\" does not include the path. For example, if " -"your :file:`openrc.sh` file shows:" - -msgid "You can also get information about available flavors:" -msgstr "You can also get information about available flavours:" - -msgid "" -"You can also use the OpenStack API to create snapshots of running instances " -"and persistent volumes. For more information, see your SDK documentation." -msgstr "" -"You can also use the OpenStack API to create snapshots of running instances " -"and persistent volumes. For more information, see your SDK documentation." - -msgid "" -"You can complete advanced tasks such as uploading an object with metadata, " -"as shown in following example. For more information, see the documentation " -"for your SDK." -msgstr "" -"You can complete advanced tasks such as uploading an object with metadata, " -"as shown in following example. For more information, see the documentation " -"for your SDK." - -msgid "" -"You can detach the volume and reattach it elsewhere, or use the following " -"steps to delete the volume." -msgstr "" -"You can detach the volume and reattach it elsewhere, or use the following " -"steps to delete the volume." - -msgid "You can list available security groups with:" -msgstr "You can list available security groups with:" - -msgid "You can then attach it to the instance:" -msgstr "You can then attach it to the instance:" - -msgid "" -"You create stacks from templates, which contain resources. Resources are an " -"abstraction in the HOT (Heat Orchestration Template) template language, " -"which enables you to define different cloud resources by setting the :code:" -"`type` attribute." -msgstr "" -"You create stacks from templates, which contain resources. Resources are an " -"abstraction in the HOT (Heat Orchestration Template) template language, " -"which enables you to define different cloud resources by setting the :code:" -"`type` attribute." - -msgid "" -"You might have to run the :command:`openstack stack list` command a few " -"times before the stack creation is complete." -msgstr "" -"You might have to run the :command:`openstack stack list` command a few " -"times before the stack creation is complete." - -msgid "" -"You might want to use multiple clouds, such as a private cloud inside your " -"organization and a public cloud. This section attempts to do exactly that." -msgstr "" -"You might want to use multiple clouds, such as a private cloud inside your " -"organization and a public cloud. This section attempts to do exactly that." - -msgid "You must pass in objects and not object names to the delete commands." -msgstr "You must pass in objects and not object names to the delete commands." - -msgid "" -"You need a server for the dedicated database. Use the image, flavor, and " -"keypair that you used in :doc:`/getting_started` to launch an :code:`app-" -"database` instance." -msgstr "" -"You need a server for the dedicated database. Use the image, flavour, and " -"keypair that you used in :doc:`/getting_started` to launch an :code:`app-" -"database` instance." - -msgid "You pass in these configuration settings as parameters:" -msgstr "You pass in these configuration settings as parameters:" - -msgid "You should be able to see them in the member list:" -msgstr "You should be able to see them in the member list:" - -msgid "" -"You should be fairly confident about starting instances and distributing " -"services from an application among these instances." -msgstr "" -"You should be fairly confident about starting instances and distributing " -"services from an application among these instances." - -msgid "" -"You should now be able to see this container appear in a listing of all " -"containers in your account:" -msgstr "" -"You should now be able to see this container appear in a listing of all " -"containers in your account:" - -msgid "" -"You should now be fairly confident working with Block Storage volumes. For " -"information about other calls, see the volume documentation for your SDK. " -"Or, try one of these tutorial steps:" -msgstr "" -"You should now be fairly confident working with Block Storage volumes. For " -"information about other calls, see the volume documentation for your SDK. " -"Or, try one of these tutorial steps:" - -msgid "" -"You should now be fairly confident working with Object Storage. You can find " -"more information about the Object Storage SDK calls at:" -msgstr "" -"You should now be fairly confident working with Object Storage. You can find " -"more information about the Object Storage SDK calls at:" - -msgid "" -"You should now be fairly confident working with the Network API. To see " -"calls that we did not cover, see the volume documentation of your SDK, or " -"try one of these tutorial steps:" -msgstr "" -"You should now be fairly confident working with the Network API. To see " -"calls that we did not cover, see the volume documentation of your SDK, or " -"try one of these tutorial steps:" - -msgid "" -"You should now be fairly confident working with the Orchestration service. " -"To see the calls that we did not cover and more, see the volume " -"documentation of your SDK. Or, try one of these steps in the tutorial:" -msgstr "" -"You should now be fairly confident working with the Orchestration service. " -"To see the calls that we did not cover and more, see the volume " -"documentation of your SDK. Or, try one of these steps in the tutorial:" - -msgid "" -"You should now have a basic understanding of the architecture of cloud-based " -"applications. In addition, you have had practice starting new instances, " -"automatically configuring them at boot, and even modularizing an application " -"so that you may use multiple instances to run it. These are the basic steps " -"for requesting and using compute resources in order to run your application " -"on an OpenStack cloud." -msgstr "" -"You should now have a basic understanding of the architecture of cloud-based " -"applications. In addition, you have had practice starting new instances, " -"automatically configuring them at boot, and even modularizing an application " -"so that you may use multiple instances to run it. These are the basic steps " -"for requesting and using compute resources in order to run your application " -"on an OpenStack cloud." - -msgid "You should see output like this:" -msgstr "You should see output like this:" - -msgid "You should see output something like this:" -msgstr "You should see output something like this:" - -msgid "You should see output something like:" -msgstr "You should see output something like:" - -msgid "You should see output such as:" -msgstr "You should see output such as:" - -msgid "" -"You will progressively ramp up to use up six instances, so make sure that " -"your cloud account has the appropriate quota." -msgstr "" -"You will progressively ramp up to use up six instances, so make sure that " -"your cloud account has the appropriate quota." - -msgid "Your SDK might call an instance a 'node' or 'server'." -msgstr "Your SDK might call an instance a 'node' or 'server'." - -msgid "Your images and flavors will be different, of course." -msgstr "Your images and flavours will be different, of course." - -msgid "Your ssh key name" -msgstr "Your SSH key name" - -msgid "`Libcloud `_" -msgstr "`Libcloud `_" - -msgid "" -"`Micro-services `_ are an " -"important design pattern that helps achieve application modularity. " -"Separating logical application functions into independent services " -"simplifies maintenance and re-use. Decoupling components also makes it " -"easier to selectively scale individual components, as required. Further, " -"application modularity is a required feature of applications that scale out " -"well and are fault tolerant." -msgstr "" -"`Micro-services `_ are an " -"important design pattern that helps achieve application modularity. " -"Separating logical application functions into independent services " -"simplifies maintenance and re-use. Decoupling components also makes it " -"easier to selectively scale individual components, as required. Further, " -"application modularity is a required feature of applications that scale out " -"well and are fault tolerant." - -msgid "" -"`OpenStack Cloud SDK for Microsoft .NET 1.4.0.1 or later installed `_." -msgstr "" -"`OpenStack Cloud SDK for Microsoft .NET 1.4.0.1 or later installed `_." - -msgid "" -"`OpenStack Object Storage `_ (code-named swift) is open-source software that enables you to " -"create redundant, scalable data storage by using clusters of standardized " -"servers to store petabytes of accessible data. It is a long-term storage " -"system for large amounts of static data that you can retrieve, leverage, and " -"update. Unlike more traditional storage systems that you access through a " -"file system, you access Object Storage through an API." -msgstr "" -"`OpenStack Object Storage `_ (code-named swift) is open-source software that enables you to " -"create redundant, scalable data storage by using clusters of standardised " -"servers to store petabytes of accessible data. It is a long-term storage " -"system for large amounts of static data that you can retrieve, leverage, and " -"update. Unlike more traditional storage systems that you access through a " -"file system, you access Object Storage through an API." - -msgid "" -"`Phoenix Servers `_, named " -"for the mythical bird that is consumed by fire and rises from the ashes to " -"live again, make it easy to start over with new instances." -msgstr "" -"`Phoenix Servers `_, named " -"for the mythical bird that is consumed by fire and rises from the ashes to " -"live again, make it easy to start over with new instances." - -msgid "" -"`a recent version of gophercloud installed `_" -msgstr "" -"`a recent version of gophercloud installed `_" - -msgid "" -"`a recent version of php-opencloud installed `_." -msgstr "" -"`a recent version of php-opencloud installed `_." - -msgid "" -"`a recent version of shade installed `_." -msgstr "" -"`a recent version of shade installed `_." - -msgid "" -"`cloud-init `_ is a tool that " -"performs instance configuration tasks during the boot of a cloud instance, " -"and comes installed on most cloud images. :code:`ex_userdata`, which was " -"passed to :code:`create_node`, is the configuration data passed to cloud-" -"init." -msgstr "" -"`cloud-init `_ is a tool that " -"performs instance configuration tasks during the boot of a cloud instance, " -"and comes installed on most cloud images. :code:`ex_userdata`, which was " -"passed to :code:`create_node`, is the configuration data passed to cloud-" -"init." - -msgid "" -"`fog 1.19 or higher installed `_ and working with ruby gems 1.9." -msgstr "" -"`fog 1.19 or higher installed `_ and working with ruby gems 1.9." - -msgid "`fog `_" -msgstr "`fog `_" - -msgid "`gophercloud `_" -msgstr "`gophercloud `_" - -msgid "" -"`jClouds 1.8 or higher installed `_." -msgstr "" -"`jClouds 1.8 or higher installed `_." - -msgid "`jClouds `_" -msgstr "`jClouds `_" - -msgid "" -"`libcloud 0.15.1 or higher installed `_." -msgstr "" -"`libcloud 0.15.1 or higher installed `_." - -msgid "`php-opencloud `_" -msgstr "`php-opencloud `_" - -msgid "" -"`pkgcloud 1.2 or higher installed `_." -msgstr "" -"`pkgcloud 1.2 or higher installed `_." - -msgid "`pkgcloud `_" -msgstr "`pkgcloud `_" - -msgid "" -"a recent version of `OpenStackSDK `_ installed." -msgstr "" -"a recent version of `OpenStackSDK `_ installed." - -msgid "amqp://guest:guest@localhost:5672/" -msgstr "amqp://guest:guest@localhost:5672/" - -msgid "auth URL" -msgstr "auth URL" - -msgid "cloud region" -msgstr "cloud region" - -msgid "conf.d, etc.d" -msgstr "conf.d, etc.d" - -msgid "" -"fog `does support OpenStack Orchestration `_." -msgstr "" -"fog `does support OpenStack Orchestration `_." - -msgid "" -"fog `supports `_ the OpenStack Networking API, but this section has not yet been " -"completed." -msgstr "" -"fog `supports `_ the OpenStack Networking API, but this section has not yet been " -"completed." - -msgid "http://gophercloud.io/" -msgstr "http://gophercloud.io/" - -msgid "http://localhost/" -msgstr "http://localhost/" - -msgid "" -"http://php-opencloud.readthedocs.org/en/latest/getting-started-with-" -"openstack.html" -msgstr "" -"http://php-opencloud.readthedocs.org/en/latest/getting-started-with-" -"openstack.html" - -msgid "" -"https://docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"https://docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" -msgstr "" -"https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" - -msgid "https://docs.openstack.org/infra/shade/" -msgstr "https://docs.openstack.org/infra/shade/" - -msgid "https://docs.openstack.org/openstacksdk/latest/" -msgstr "https://docs.openstack.org/openstacksdk/latest/" - -msgid "" -"https://github.com/fog/fog-openstack/blob/master/docs/getting_started.md" -msgstr "" -"https://github.com/fog/fog-openstack/blob/master/docs/getting_started.md" - -msgid "" -"https://github.com/fog/fog/blob/master/lib/fog/openstack/docs/storage.md" -msgstr "" -"https://github.com/fog/fog/blob/master/lib/fog/openstack/docs/storage.md" - -msgid "" -"https://github.com/pkgcloud/pkgcloud/tree/master/docs/providers/openstack" -msgstr "" -"https://github.com/pkgcloud/pkgcloud/tree/master/docs/providers/openstack" - -msgid "https://jclouds.apache.org/guides/openstack/" -msgstr "https://jclouds.apache.org/guides/openstack/" - -msgid "" -"https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html" -msgstr "" -"https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html" - -msgid "https://libcloud.readthedocs.org/en/latest/storage/api.html" -msgstr "https://libcloud.readthedocs.org/en/latest/storage/api.html" - -msgid "" -"https://superuser.openstack.org/articles/simple-auto-scaling-environment-" -"with-heat" -msgstr "" -"https://superuser.openstack.org/articles/simple-auto-scaling-environment-" -"with-heat" - -msgid "" -"https://superuser.openstack.org/articles/understanding-openstack-heat-auto-" -"scaling" -msgstr "" -"https://superuser.openstack.org/articles/understanding-openstack-heat-auto-" -"scaling" - -msgid "https://www.nuget.org/packages/openstack.net" -msgstr "https://www.nuget.org/packages/openstack.net" - -msgid "internal worker traffic" -msgstr "internal worker traffic" - -msgid "" -"jClouds supports the OpenStack Networking API, but section has not yet been " -"completed. Please see `this `_ in the meantime." -msgstr "" -"jClouds supports the OpenStack Networking API, but section has not yet been " -"completed. Please see `this `_ in the meantime." - -msgid "libcloud does not currently support OpenStack Orchestration." -msgstr "libcloud does not currently support OpenStack Orchestration." - -msgid "" -"libcloud support added 0.14: https://developer.rackspace.com/blog/libcloud-0-" -"dot-14-released/" -msgstr "" -"libcloud support added 0.14: https://developer.rackspace.com/blog/libcloud-0-" -"dot-14-released/" - -msgid "node.js" -msgstr "node.js" - -msgid "password" -msgstr "password" - -msgid "project ID or name (projects are also known as tenants)" -msgstr "project ID or name (projects are also known as tenants)" - -msgid "public-facing web traffic" -msgstr "public-facing web traffic" - -msgid "sqlite:////tmp/sqlite.db" -msgstr "sqlite:////tmp/sqlite.db" - -msgid "the .NET SDK does not currently support OpenStack Orchestration." -msgstr "the .NET SDK does not currently support OpenStack Orchestration." - -msgid "user name" -msgstr "user name" diff --git a/firstapp/source/locale/id/LC_MESSAGES/firstapp.po b/firstapp/source/locale/id/LC_MESSAGES/firstapp.po deleted file mode 100644 index b997579bf..000000000 --- a/firstapp/source/locale/id/LC_MESSAGES/firstapp.po +++ /dev/null @@ -1,4446 +0,0 @@ -# OpenStack Infra , 2015. #zanata -# suhartono , 2017. #zanata -# suhartono , 2018. #zanata -# suhartono , 2019. #zanata -msgid "" -msgstr "" -"Project-Id-Version: OpenStack First Application 2013.2.1.dev4245\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-23 14:55+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-04-25 03:44+0000\n" -"Last-Translator: suhartono \n" -"Language: id\n" -"Plural-Forms: nplurals=1; plural=0\n" -"X-Generator: Zanata 4.3.3\n" -"Language-Team: Indonesian\n" - -msgid "**GettingStarted.java:**" -msgstr "**GettingStarted.java:**" - -msgid "**Remove the stack**" -msgstr "**Remove the stack**" - -msgid "**Show information about the stack**" -msgstr "**Show information about the stack**" - -msgid "**Stack create**" -msgstr "**Stack create**" - -msgid "**pom.xml:**" -msgstr "**pom.xml:**" - -msgid ".NET Framework" -msgstr ".NET Framework" - -msgid ":code:`-d`" -msgstr ":code:`-d`" - -msgid ":code:`-e`" -msgstr ":code:`-e`" - -msgid ":code:`-i`" -msgstr ":code:`-i`" - -msgid ":code:`-m`" -msgstr ":code:`-m`" - -msgid ":code:`-r`" -msgstr ":code:`-r`" - -msgid "" -":code:`api` (enable and start the API service), :code:`worker` (enable and " -"start the worker service), and :code:`demo` (run the demo mode to request " -"random fractals)." -msgstr "" -":code:`api` (enable and start the API service), :code:`worker` (enable and " -"start the worker service), dan :code:`demo` (run the demo mode to request " -"random fractals)." - -msgid "" -":code:`ceilometer_sample_query`: shows the samples used to build the " -"statistics." -msgstr "" -":code:`ceilometer_sample_query`: menunjukkan sampel yang digunakan untuk " -"membangun statistik." - -msgid "" -":code:`ceilometer_statistics_query`: shows the statistics used to trigger " -"the alarms." -msgstr "" -":code:`ceilometer_statistics_query`: menunjukkan statistik yang digunakan " -"untuk memicu alarm." - -msgid "" -":code:`detach_volume` and :code:`destroy_volume` take a volume object, not a " -"name." -msgstr "" -":code:`detach_volume` dan :code:`destroy_volume` ambil objek volume, bukan " -"nama." - -msgid "" -":code:`ex_create_security_group_rule()` takes ranges of ports as input. This " -"is why ports 80 and 22 are passed twice." -msgstr "" -":code:`ex_create_security_group_rule()` mengambil rentang port sebagai " -"masukan. Inilah sebabnya mengapa port 80 dan 22 dilewati dua kali." - -msgid "" -":code:`messaging` (install RabbitMQ) and :code:`faafo` (install the Faafo " -"app)." -msgstr "" -":code:`messaging` (install RabbitMQ) and :code:`faafo` (install the Faafo " -"app)." - -msgid "" -":code:`scale__workers_up_url`: A post to this url will add worker instances." -msgstr "" -":code:`scale__workers_up_url`: Post ke url ini akan menambahkan instance " -"pekerja." - -msgid "" -":code:`scale_workers_down_url`: A post to this url will remove worker " -"instances." -msgstr "" -":code:`scale_workers_down_url`: Post ke url ini akan menghapus instance " -"pekerja." - -msgid ":doc:`/advice`: Get advice about operations." -msgstr ":doc:`/advice`: Get advice about operations." - -msgid "" -":doc:`/block_storage`: Migrate the database to block storage, or use the " -"database-as-a-service component." -msgstr "" -":doc:`/block_storage`: Migrasikan database untuk memblokir penyimpanan, atau " -"gunakan komponen basis data as-a-service." - -msgid "" -":doc:`/craziness`: Learn some crazy things that you might not think to do ;)" -msgstr "" -":doc:`/craziness`: Pelajari beberapa hal gila yang mungkin tidak Anda " -"pikirkan untuk dilakukan;)" - -msgid "" -":doc:`/durability`: Learn how to use Object Storage to make your application " -"durable." -msgstr "" -":doc:`/durability`: Pelajari cara menggunakan Object Storage agar aplikasi " -"Anda awet." - -msgid "" -":doc:`/durability`: Learn how to use Object Storage to make your application " -"more durable." -msgstr "" -":doc:`/durability`: Pelajari cara menggunakan Object Storage agar aplikasi " -"Anda lebih awet." - -msgid ":doc:`/networking`: Learn about complex networking." -msgstr ":doc:`/networking`: Learn about complex networking." - -msgid ":doc:`/orchestration`: Automatically orchestrate your application." -msgstr ":doc:`/orchestration`: Automatically orchestrate your application." - -msgid ":doc:`/scaling_out`: Learn how to scale your application." -msgstr ":doc:`/scaling_out`: Pelajari bagaimana melakukan skala aplikasi Anda." - -msgid "" -"A .NET-based library. Use it to write C++ or C# code for Microsoft " -"applications." -msgstr "" -"Perpustakaan berbasis .NET. Gunakan untuk menulis kode C ++ atau C # untuk " -"aplikasi Microsoft." - -msgid "" -"A Java-based library that the Apache Foundation manages. Use it to work with " -"multiple cloud types." -msgstr "" -"Perpustakaan berbasis Java yang dikelola Apache Foundation. Gunakan untuk " -"bekerja dengan beberapa jenis awan." - -msgid "A Node.js-based SDK. Use it work with multiple clouds." -msgstr "SDK berbasis Node.js. Gunakan bekerja dengan banyak awan." - -msgid "" -"A PHP-based library. Use it to write PHP code that works with OpenStack " -"clouds." -msgstr "" -"Sebuah perpustakaan berbasis PHP. Gunakan untuk menulis kode PHP yang " -"bekerja dengan awan OpenStack." - -msgid "" -"A Python-based library developed by OpenStack Infra team. Use it to operate " -"multiple OpenStack clouds." -msgstr "" -"Perpustakaan berbasis Python yang dikembangkan oleh tim OpenStack Infra. " -"Gunakan untuk mengoperasikan beberapa awan OpenStack." - -msgid "" -"A Python-based library that the Apache Foundation manages. Use it to work " -"with multiple cloud types." -msgstr "" -"Perpustakaan berbasis Python yang dikelola Apache Foundation. Gunakan untuk " -"bekerja dengan beberapa jenis awan." - -msgid "A Ruby-based SDK. Use it to work with multiple clouds." -msgstr "SDK berbasis Ruby. Gunakan untuk bekerja dengan beberapa awan." - -msgid "A floating IP helper function" -msgstr "Fungsi pembantu IP mengambang" - -msgid "A general overview" -msgstr "Gambaran umum" - -msgid "" -"A go-based SDK. Use it to write Golang code that works with OpenStack clouds." -msgstr "" -"SDK berbasis go. Gunakan untuk menulis kode Golang yang bekerja dengan awan " -"OpenStack." - -msgid "" -"A key pair. To access your instance, you must import an SSH public key into " -"OpenStack to create a key pair. OpenStack installs this key pair on the new " -"instance. Typically, your public key is written to :code:`.ssh/id_rsa.pub`. " -"If you do not have an SSH public key file, follow `these instructions " -"`_ first. We will " -"cover these instructions in depth in :doc:`/introduction`." -msgstr "" -"Pasangan kunci Untuk mengakses instance Anda, Anda harus mengimpor kunci " -"publik SSH ke OpenStack untuk membuat pasangan kunci. OpenStack menginstal " -"pasangan kunci ini pada instance baru. Biasanya, kunci publik Anda ditulis " -"ke :code:`.ssh/id_rsa.pub`. Jika Anda tidak memiliki file kunci publik SSH, " -"ikuti `these instructions `_ sebelumnya. Kami akan membahas instruksi ini secara mendalam :doc:`/" -"introduction`." - -msgid "" -"A simple solution is to give half of your friends one address and half the " -"other, but that solution is not sustainable. Instead, you can use a `DNS " -"round robin `_ to do that " -"automatically. However, OpenStack networking can provide Load Balancing as a " -"Service, which :doc:`/networking` explains." -msgstr "" -"Solusi sederhana adalah memberi setengah dari satu alamat teman Anda dan " -"setengah lainnya, namun solusi itu tidak berkelanjutan. Sebagai gantinya, " -"Anda bisa menggunakan `DNS round robin `_ untuk melakukannya secara otomatis. Namun, jaringan OpenStack " -"dapat menyediakan Load Balancing sebagai Service, yang mana :doc:`/" -"networking` menjelaskan." - -msgid "" -"API load is a slightly different problem than the previous one regarding " -"capacity to work. We can simulate many requests to the API, as follows:" -msgstr "" -"Beban API adalah masalah yang sedikit berbeda dari yang sebelumnya mengenai " -"kapasitas untuk bekerja. Kita bisa mensimulasikan banyak permintaan ke API, " -"sebagai berikut:" - -msgid "API traffic" -msgstr "Lalu lintas API" - -msgid "Access the application" -msgstr "Akses aplikasi" - -msgid "Add metadata to objects" -msgstr "Tambahkan metadata ke objek" - -msgid "Add the option Networks and send its id to attach the instance to:" -msgstr "Tambahkan opsi Networks dan kirim idnya untuk menyematkan instance ke:" - -msgid "" -"Add the parameter network and send its name or id to attach the instance to:" -msgstr "" -"Tambahkan jaringan parameter dan kirimkan nama atau id untuk menyematkan " -"instance ke:" - -msgid "" -"Adding this capacity enables you to deal with a higher number of requests " -"for fractals. As soon as these worker instances start, they begin checking " -"the message queue for requests, reducing the overall backlog like a new " -"register opening in the supermarket." -msgstr "" -"Menambahkan kapasitas ini memungkinkan Anda menangani jumlah permintaan " -"fraktal yang lebih tinggi. Begitu instance pekerja ini dimulai, mereka mulai " -"memeriksa antrian pesan untuk permintaan, mengurangi keseluruhan simpanan " -"keseluruhan seperti pembukaan pendaftar baru di supermarket." - -msgid "Advice for developers new to operations" -msgstr "Saran bagi pengembang baru untuk operasi" - -msgid "" -"After separating the Fractal worker nodes into their own networks, the next " -"logical step is to move the Fractal API service to a load balancer, so that " -"multiple API workers can handle requests. By using a load balancer, the API " -"service can be scaled out in a similar fashion to the worker nodes." -msgstr "" -"Setelah memisahkan node pekerja Fractal ke jaringan mereka sendiri, langkah " -"logis berikutnya adalah memindahkan layanan Fractal API ke penyeimbang " -"beban, sehingga beberapa pekerja API dapat menangani permintaan. Dengan " -"menggunakan penyeimbang beban, layanan API dapat disesuaikan dengan node " -"pekerja." - -msgid "" -"After the instance is created, cloud-init downloads and runs a script " -"called :code:`install.sh`. This script installs the Fractals application. " -"Cloud-init can consume bash scripts and a number of different types of data. " -"You can even provide multiple types of data. You can find more information " -"about cloud-init in the `official documentation `_." -msgstr "" -"Setelah instance dibuat, unduhan cloud-init dan jalankan skrip yang disebut :" -"code:`install.sh`. Script ini menginstal aplikasi Fractals. Cloud-init bisa " -"mengkonsumsi script bash dan sejumlah tipe data yang berbeda. Anda bahkan " -"bisa menyediakan beberapa jenis data. Anda dapat menemukan lebih banyak " -"informasi tentang cloud-init di `official documentation `_." - -msgid "Allocate floating ips and assign them to the web server nodes." -msgstr "Alokasikan floating ip dan tetapkan ke node server web." - -msgid "Allocate the floating IP address:" -msgstr "Alokasikan floating IP address:" - -msgid "" -"Allocating a floating IP address to an instance does not change the IP " -"address of the instance, it causes OpenStack to establish the network " -"translation rules to allow an *additional* IP address." -msgstr "" -"Mengalokasikan sebuah floating IP ke sebuah instance tidak mengubah alamat " -"IP dari instance, menyebabkan OpenStack untuk menetapkan aturan terjemahan " -"jaringan untuk mengizinkan sebuah *additional* alamat IP." - -msgid "" -"An often-cited reason for designing applications by using cloud patterns is " -"the ability to **scale out**. That is: to add additional resources, as " -"required. Contrast this strategy to the previous one of increasing capacity " -"by scaling up the size of existing resources. To scale out, you must:" -msgstr "" -"Alasan yang sering dikutip untuk merancang aplikasi dengan menggunakan pola " -"awan adalah kemampuan untuk **scale out**. Yaitu: menambahkan sumber daya " -"tambahan, sesuai kebutuhan. Bandingkan strategi ini dengan kapasitas " -"peningkatan sebelumnya dengan meningkatkan (scaling up) ukuran sumber daya " -"yang ada. Untuk scale out, Anda harus:" - -msgid "And as before, the stack takes a few minutes to build!" -msgstr "" -"Dan seperti sebelumnya, stack itu membutuhkan waktu beberapa menit untuk " -"dibangun!" - -msgid "And confirm it is in place:" -msgstr "Dan konfirmasikan sudah ada di tempat:" - -msgid "" -"Another approach is to create a 'gold' image, which pre-installs your " -"application and its dependencies. A 'gold' image enables faster boot times " -"and more control over what is on the instance. However, if you use 'gold' " -"images, you must have a process in place to ensure that these images do not " -"fall behind on security updates." -msgstr "" -"Pendekatan lain adalah dengan menciptakan 'gold' image, yang menginstall " -"aplikasi dan dependensinya. The 'gold' image, memungkinkan waktu boot yang " -"lebih cepat dan kontrol yang lebih besar atas apa yang ada pada instance. " -"Namun, jika Anda menggunakan 'gold' image, Anda harus memiliki proses untuk " -"memastikan images ini tidak ketinggalan dalam pembaruan keamanan." - -msgid "" -"Anyone with a programming background can easily read the code in this guide. " -"Although this guide focuses on a particular SDK, you can use other languages " -"and toolkits with the OpenStack cloud:" -msgstr "" -"Siapapun dengan latar belakang pemrograman dapat dengan mudah membaca kode " -"dalam panduan ini. Meskipun panduan ini berfokus pada SDK tertentu, Anda " -"dapat menggunakan bahasa dan toolkit lain dengan awan OpenStack:" - -msgid "Appendix" -msgstr "Appendix" - -msgid "Application deployment" -msgstr "Penerapan aplikasi" - -msgid "" -"Application developers and operators who use phoenix servers have access to " -"systems that are built from a known baseline, such as a specific operating " -"system version, and to tooling that automatically builds, installs, and " -"configures a system." -msgstr "" -"Pengembang aplikasi dan operator yang menggunakan server phoenix memiliki " -"akses ke sistem yang dibangun dari dasar yang diketahui, seperti versi " -"sistem operasi tertentu, dan menggunakan alat yang secara otomatis " -"membangun, memasang, dan mengonfigurasi sistem." - -msgid "Architect your application to make use of additional resources." -msgstr "Arsitek aplikasi Anda untuk memanfaatkan sumber daya tambahan." - -msgid "" -"Armed with a security group, image, and flavor size, you can add multiple " -"API services:" -msgstr "" -"Berbekal security group, image, dan flavor size, Anda dapat menambahkan " -"beberapa layanan API:" - -msgid "As before, pass in configuration settings as parameters." -msgstr "" -"Seperti sebelumnya, masuk dalam pengaturan konfigurasi sebagai parameter." - -msgid "" -"As in traditional IT, cloud instances are accessed through IP addresses that " -"OpenStack assigns. How this is actually done depends on the networking setup " -"for your cloud. In some cases, you will simply get an Internet rout-able IP " -"address assigned directly to your instance." -msgstr "" -"Seperti dalam TI tradisional, instance awan diakses melalui alamat IP yang " -"diberikan OpenStack. Bagaimana ini sebenarnya dilakukan tergantung pada " -"pengaturan jaringan untuk awan Anda. Dalam beberapa kasus, Anda hanya akan " -"mendapatkan alamat IP rout-able internet yang diberikan langsung ke instance " -"Anda." - -msgid "" -"As mentioned in :doc:`/introduction`, the generated fractal images are saved " -"on the local file system of the API service instances. Because you have " -"multiple API instances up and running, the fractal images are spread across " -"multiple API services, which causes a number of :code:`IOError: [Errno 2] No " -"such file or directory` exceptions when trying to download a fractal image " -"from an API service instance that does not have the fractal image on its " -"local file system." -msgstr "" -"Seperti yang disebutkan di :doc:`/introduction`, image fraktal yang " -"dihasilkan disimpan pada sistem file lokal dari instance layanan API. Karena " -"beberapa instance API Anda aktif dan berjalan, image fraktal tersebar di " -"beberapa layanan API, yang menyebabkan sejumlah pengecualian :code:`IOError: " -"[Errno 2] No such file or directory` saat mencoba mendownload image fraktal " -"dari instance layanan API yang tidak memiliki image fraktal pada sistem file " -"lokalnya." - -msgid "" -"As with classical infrastructure, failures of the underpinning cloud " -"infrastructure (hardware, networks, and software) are unavoidable. When you " -"design for the cloud, it is crucial that your application is designed for an " -"environment where failures can happen at any moment. This may sound like a " -"liability, but it is not; by designing your application with a high degree " -"of fault tolerance, you also make it resilient, and more adaptable, in the " -"face of change." -msgstr "" -"Seperti halnya infrastruktur klasik, kegagalan infrastruktur awan (hardware, " -"jaringan, dan perangkat lunak) yang tidak dapat dihindari tidak dapat " -"dihindari. Saat merancang awan, sangat penting aplikasi Anda dirancang untuk " -"lingkungan tempat terjadi kegagalan setiap saat. Ini mungkin terdengar " -"seperti pertanggungjawaban, tapi tidak demikian; Dengan merancang aplikasi " -"Anda dengan tingkat toleransi kesalahan yang tinggi, Anda juga membuatnya " -"tahan lama, dan lebih mudah beradaptasi, dalam menghadapi perubahan." - -msgid "" -"As you can see from the parameters passed to the installation script, you " -"define this instance as the worker instance. But, you also pass the address " -"of the API instance and the message queue so the worker can pick up " -"requests. The Fractals application installation script accepts several " -"parameters." -msgstr "" -"Seperti yang dapat Anda lihat dari parameter yang dilewatkan ke skrip " -"instalasi, Anda mendefinisikan instance ini sebagai instance pekerja. Tapi, " -"Anda juga menyampaikan alamat instance API dan antrean pesan sehingga " -"pekerja dapat mengambil permintaan. Skrip instalasi aplikasi Fractals " -"menerima beberapa parameter." - -msgid "" -"As you change the topology of your applications, you must update or create " -"security groups. Here, you re-create the required security groups." -msgstr "" -"Saat Anda mengubah topologi aplikasi Anda, Anda harus memperbarui atau " -"membuat grup keamanan. Di sini, Anda menciptakan kembali kelompok keamanan " -"yang dibutuhkan." - -msgid "Associate a floating IP for external connectivity" -msgstr "Mengaitkan IP terapung untuk konektivitas eksternal" - -msgid "" -"At the end of this section, you make some slight changes to the networking " -"topology by using the OpenStack Networking API to create the 10.0.1.0/24 " -"network to which the worker nodes attach. You use the 10.0.3.0/24 API " -"network to attach the Fractal API servers. Web server instances have their " -"own 10.0.2.0/24 network, which is accessible by fractal aficionados " -"worldwide, by allocating floating IPs from the public network." -msgstr "" -"Pada akhir bagian ini, Anda membuat sedikit perubahan pada topologi jaringan " -"dengan menggunakan OpenStack Networking API untuk membuat jaringan " -"10.0.1.0/24 tempat (worker node) simpul pekerja mengkaitkan. Anda " -"menggunakan jaringan API 10.0.3.0/24 untuk mengkaitkan server API Fraktal. " -"Instance server web memiliki jaringan 10.0.2.0/24 sendiri, yang dapat " -"diakses oleh aficionados (penggemar) fraktal di seluruh dunia, dengan " -"mengalokasikan IP mengambang (floating) dari jaringan publik." - -msgid "Attach the floating IP address to the instance:" -msgstr "Lekatkan floating IP address ke instance:" - -msgid "Automation" -msgstr "Otomatisasi" - -msgid "" -"Back up the Fractals app images, which are currently stored inside the " -"database, on Object Storage." -msgstr "" -"Cadangkan gambar aplikasi Fractals, yang saat ini tersimpan di dalam " -"database, di Object Storage." - -msgid "Back up the Fractals from the database on the Object Storage" -msgstr "Cadangkan Fractal dari database pada Object Storage" - -msgid "Backups" -msgstr "Cadangan (backup)" - -msgid "Basics" -msgstr "Dasar-dasar" - -msgid "" -"Because all service endpoints use the Identity Service for authentication " -"and authorization, place the following code in the 'void Main()' entry-point " -"function." -msgstr "" -"Karena semua titik akhir layanan menggunakan Layanan Identity untuk " -"otentikasi dan otorisasi, letakkan kode berikut di fungsi entry-point 'void " -"Main ()'." - -msgid "" -"Because the SDKs do not fully support the OpenStack Networking API, this " -"section uses the command-line clients." -msgstr "" -"Karena SDK tidak sepenuhnya mendukung OpenStack Networking API, bagian ini " -"menggunakan klien command-lin." - -msgid "" -"Because the local file system is ephemeral storage, the fractal images are " -"lost along with the instance when the instance is terminated. Block-based " -"storage, which the :doc:`/block_storage` section discusses, avoids that " -"problem, but like local file systems, it requires administration to ensure " -"that it does not fill up, and immediate attention if disks fail." -msgstr "" -"Karena sistem file lokal adalah penyimpanan singkat, image fraktal hilang " -"bersamaan dengan instance saat berakhir. Penyimpanan berbasis blok, dimana " -"bagian :doc:`/block_storage` membahas, menghindari masalah itu, tapi seperti " -"sistem file lokal, memerlukan administrasi untuk memastikan tidak terisi, " -"dan segera diperhatikan jika disk gagal." - -msgid "" -"Because the tutorial reuses the :code:`conn` object, make sure that you " -"always have one handy." -msgstr "" -"Karena tutorialnya menggunakan kembali obyek :code:`conn`, pastikan selalu " -"ada yang berguna." - -msgid "Before proceeding, install the latest version of shade." -msgstr "Sebelum melanjutkan, pasang versi terbaru dari shade (naungan)." - -msgid "Before you continue, you must do one more thing." -msgstr "Sebelum melanjutkan, Anda harus melakukan satu hal lagi." - -msgid "" -"Before you run this class, confirm that you have configured it for your " -"cloud and the instance running the Fractals application." -msgstr "" -"Sebelum menjalankan kelas ini, konfirmasikan bahwa Anda telah " -"mengonfigurasikannya untuk awan Anda dan instance menjalankan aplikasi " -"Fractals." - -msgid "" -"Before you run this script, confirm that you have set your authentication " -"information, the flavor ID, and image ID." -msgstr "" -"Sebelum menjalankan skrip ini, konfirmasikan bahwa Anda telah menyetel " -"informasi autentikasi, flavor ID, dan image ID." - -msgid "" -"Before you scale out your application services, like the API service or the " -"workers, you must add a central database and an :code:`app-services` " -"messaging instance. The database and messaging queue will be used to track " -"the state of fractals and to coordinate the communication between the " -"services." -msgstr "" -"Sebelum Anda mengurangi layanan aplikasi Anda, seperti layanan API atau " -"pekerja, Anda harus menambahkan database pusat dan instance pengiriman :" -"code:`app-services` . Database dan antrian pesan akan digunakan untuk " -"melacak keadaan fraktal dan untuk mengkoordinasikan komunikasi antara " -"layanan." - -msgid "Block Storage" -msgstr "Block Storage" - -msgid "Boot and configure an instance" -msgstr "Boot dan konfigurasikan sebuah instance" - -msgid "Booting a worker" -msgstr "Booting pekerja" - -msgid "Bootstrap your network" -msgstr "Bootstrap your network" - -msgid "" -"By default, data in OpenStack instances is stored on 'ephemeral' disks. " -"These disks remain with the instance throughout its lifetime. When you " -"terminate the instance, that storage and all the data stored on it " -"disappears. Ephemeral storage is allocated to a single instance and cannot " -"be moved to another instance." -msgstr "" -"Secara default, data dalam instance OpenStack disimpan pada disk " -"'ephemeral'. Disk ini tetap dengan instance selama masa hidupnya. Bila Anda " -"mengakhiri instance, penyimpanan dan semua data yang tersimpan di dalamnya " -"hilang. Penyimpanan sesaat dialokasikan ke satu instance dan tidak dapat " -"dipindahkan ke instance lain." - -msgid "" -"CI/CD means that you always test your application and make frequent " -"deployments to production." -msgstr "" -"CI/CD berarti Anda selalu menguji aplikasi Anda dan sering melakukan " -"penyebaran ke produksi." - -msgid "" -"Call the :code:`faafo` command-line interface to request the generation of " -"five large fractals." -msgstr "" -"Panggil antarmuka command-line :code:`faafo` untuk meminta pembangkit lima " -"fraktal besar." - -msgid "" -"Change the API code, such as \"list fractals,\" to query Object Storage to " -"get the metadata." -msgstr "" -"Ubah kode API, seperti \"list fractals,\" untuk query Object Storage untuk " -"mendapatkan metadata." - -msgid "" -"Change the Fractal upload code to store metadata with the object in Object " -"Storage." -msgstr "" -"Ubah kode upload Fractal untuk menyimpan metadata dengan objek di Object " -"Storage." - -msgid "" -"Check to see whether the API service process is running like expected. You " -"can find the logs for the API service in the directory :file:`/var/log/" -"supervisor/`." -msgstr "" -"Periksa untuk melihat apakah proses layanan API berjalan seperti yang " -"diharapkan. Anda dapat menemukan log untuk layanan API di direktori :file:`/" -"var/log/supervisor/`." - -msgid "" -"Choose an image and flavor for your instance. You need about 1GB RAM, 1 CPU, " -"and a 1GB disk. This example uses the Ubuntu image with a small flavor, " -"which is a safe choice. In subsequent tutorial sections in this guide, you " -"must change the image and flavor IDs to correspond to the image and flavor " -"that you choose." -msgstr "" -"Pilih flavor dan image untuk instance Anda. Anda memerlukan RAM 1GB, 1 CPU, " -"dan disk 1GB. Contoh ini menggunakan image Ubuntu dengan sedikit flavor, " -"yang merupakan pilihan yang aman. Di bagian tutorial berikutnya dalam " -"panduan ini, Anda harus mengubah ID image dan flavor agar sesuai dengan " -"image dan flavor yang Anda pilih." - -msgid "Choose your OpenStack SDK" -msgstr "Pilih SDK OpenStack Anda" - -msgid "Cloud application architecture principles" -msgstr "Prinsip arsitektur aplikasi cloud" - -msgid "" -"Cloud applications often use many small instances rather than a few large " -"instances. Provided that an application is sufficiently modular, you can " -"easily distribute micro-services across as many instances as required. This " -"architecture enables an application to grow past the limit imposed by the " -"maximum size of an instance. It is like trying to move a large number of " -"people from one place to another; there is only so many people you can put " -"on the largest bus, but you can use an unlimited number of buses or small " -"cars, which provide just the capacity you need - and no more." -msgstr "" -"Aplikasi awan sering menggunakan banyak instance kecil daripada beberapa " -"instance besar. Asalkan aplikasi cukup modular, Anda dapat dengan mudah " -"mendistribusikan micro-service sebanyak mungkin sesuai kebutuhan. " -"Arsitektur ini memungkinkan aplikasi tumbuh melewati batas yang diberlakukan " -"oleh ukuran maksimum sebuah instance. Ini seperti mencoba memindahkan " -"sejumlah besar orang dari satu tempat ke tempat lain; Hanya ada begitu " -"banyak orang yang bisa Anda pakai di bus terbesar, tapi Anda bisa " -"menggunakan jumlah bus atau mobil kecil yang tidak terbatas, yang hanya " -"menyediakan kapasitas yang Anda butuhkan - dan tidak lebih." - -msgid "" -"Cloud applications typically share several design principles. These " -"principles influenced the design of the Fractals application." -msgstr "" -"Aplikasi awan biasanya berbagi beberapa prinsip desain. Prinsip-prinsip ini " -"mempengaruhi disain aplikasi Fractals." - -msgid "" -"Cloud resources, such as running instances that you no longer use, can cost " -"money. To avoid unexpected expenses, destroy cloud resources." -msgstr "" -"Sumber daya awan, seperti instance yang tidak Anda gunakan lagi, bisa " -"menghabiskan biaya. Untuk menghindari biaya tak terduga, hancurkan sumber " -"daya awan." - -msgid "Complete code sample" -msgstr "Sampel kode lengkap" - -msgid "Configuration management" -msgstr "Pengelolaan konfigurasi" - -msgid "" -"Configuration management tools, such as Ansible, Chef, and Puppet, enable " -"you to describe exactly what to install and configure on an instance. Using " -"these descriptions, these tools implement the changes that are required to " -"get to the desired state." -msgstr "" -"Alat pengelolaan konfigurasi, seperti Ansible, Chef, and Puppet, " -"memungkinkan Anda untuk menjelaskan dengan tepat apa yang harus diinstal dan " -"dikonfigurasi pada sebuah instance. Dengan menggunakan deskripsi ini, alat " -"ini menerapkan perubahan yang diperlukan untuk mencapai keadaan yang " -"diinginkan." - -msgid "Configure the Fractals app to use Object Storage" -msgstr "Konfigurasikan aplikasi Fractal untuk menggunakan Object Storage" - -msgid "Confirm that the stack created two alarms:" -msgstr "Konfirmasikan bahwa stack itu membuat dua alarm:" - -msgid "Confirm that they were added:" -msgstr "Konfirmasikan bahwa mereka telah ditambahkan:" - -msgid "" -"Confirm that we have a public network by listing the networks our tenant has " -"access to. The public network does not have to be named public - it could be " -"'external', 'net04_ext' or something else - the important thing is it exists " -"and can be used to reach the Internet." -msgstr "" -"Konfirmasikan bahwa kami memiliki jaringan publik dengan mencantumkan " -"jaringan yang dapat diakses oleh penyewa kami. Jaringan publik tidak harus " -"diberi nama publik - bisa jadi 'external', 'net04_ext' atau yang lainnya - " -"yang terpenting ada dan bisa digunakan untuk menjangkau Internet." - -msgid "Connect to the API endpoint:" -msgstr "Hubungkan ke API endpoint:" - -msgid "Connecting to the Internet" -msgstr "Menghubungkan ke Internet" - -msgid "Contents" -msgstr "Isi" - -msgid "Create a network and subnet for the web server nodes." -msgstr "Buat jaringan dan subnet untuk node server web." - -msgid "" -"Create a network and subnet for the worker nodes. This is the private data " -"network." -msgstr "" -"Buat jaringan dan subnet untuk node pekerja. Ini adalah jaringan data " -"private." - -msgid "Create a router for the private data network." -msgstr "Buat router untuk jaringan data private." - -msgid "" -"Create a volume object by using the unique identifier (UUID) for the volume. " -"Then, use the server object from the previous code snippet to attach the " -"volume to it at :code:`/dev/vdb`:" -msgstr "" -"Buat objek volume dengan menggunakan unique identifier (UUID) untuk volume. " -"Kemudian, gunakan objek server dari cuplikan kode sebelumnya untuk " -"menempelkan volume ke :code:`/dev/vdb`:" - -msgid "" -"Create and delete compute resources. These resources are virtual machine " -"instances where the Fractals application runs." -msgstr "" -"Buat dan hapus sumber daya komputasi. Sumber daya ini adalah instance mesin " -"virtual tempat aplikasi Fractals berjalan." - -msgid "Create more API service requests" -msgstr "Buat lebih banyak permintaan layanan API" - -msgid "Create more tasks" -msgstr "Buat lebih banyak tugas" - -msgid "Create networks" -msgstr "Buat jaringan" - -msgid "Create the instance." -msgstr "Buat instance." - -msgid "" -"Currently, you cannot directly store generated images in OpenStack Object " -"Storage. Please revisit this section again in the future." -msgstr "" -"Saat ini, Anda tidak bisa langsung menyimpan image yang dihasilkan di " -"OpenStack Object Storage. Silakan kunjungi kembali bagian ini lagi di masa " -"mendatang." - -msgid "Customize networking for better performance and segregation." -msgstr "Sesuaikan jaringan untuk kinerja dan segregasi yang lebih baik." - -msgid "" -"Define a short function to locate unused or allocate floating IPs. This " -"saves a few lines of code and prevents you from reaching your floating IP " -"quota too quickly." -msgstr "" -"Tentukan fungsi singkat untuk menemukan yang tidak digunakan atau " -"mengalokasikan IP mengambang. Ini menghemat beberapa baris kode dan mencegah " -"Anda mencapai kuota IP mengambang Anda terlalu cepat." - -msgid "Delete containers" -msgstr "Hapus kontainer" - -msgid "Deploy the application to a new instance" -msgstr "Terapkan aplikasi ke instance baru" - -msgid "" -"Deploying application data and configuration to the instance can take some " -"time. Consider enjoying a cup of coffee while you wait. After the " -"application deploys, you can use your preferred browser to visit the awesome " -"graphic interface at the following link." -msgstr "" -"Menyebarkan data dan konfigurasi aplikasi ke instance bisa memakan waktu " -"lama. Pertimbangkan menikmati secangkir kopi sambil menunggu. Setelah " -"aplikasi menyebar, Anda dapat menggunakan browser pilihan Anda untuk " -"mengunjungi antarmuka grafis yang mempesona di link berikut." - -msgid "" -"Deploying applications in a cloud environment can be very different from " -"deploying them in a traditional IT environment. This guide teaches you how " -"to deploy applications on OpenStack and some best practices for cloud " -"application development." -msgstr "" -"Menerapkan aplikasi di lingkungan awan bisa sangat berbeda dengan " -"menerapkannya di lingkungan TI tradisional. Panduan ini mengajarkan Anda " -"cara menerapkan aplikasi pada OpenStack dan beberapa praktik terbaik untuk " -"pengembangan aplikasi awan." - -msgid "Description" -msgstr "Deskripsi" - -msgid "Destroy an instance" -msgstr "Hancurkan instance" - -msgid "" -"Do not worry if these concepts are not yet completely clear. In :doc:`/" -"introduction`, we explore these concepts in more detail." -msgstr "" -"Jangan khawatir jika konsep ini belum sepenuhnya jelas. Dalam :doc:`/" -"introduction`, kami mengeksplorasi konsep ini secara lebih rinci." - -msgid "Enable/start something" -msgstr "Enable/start something" - -msgid "" -"Ensure you have an :file:`openrc.sh` file, source it, and validate that your " -"trove client works:" -msgstr "" -"Pastikan Anda memiliki file :file:`openrc.sh`, sumber, dan memvalidasi bahwa " -"klien Anda bekerja:" - -msgid "" -"Ensure you have an openrc.sh file, source it, and then check that your " -"openstack client works: ::" -msgstr "" -"Pastikan Anda memiliki file openrc.sh, sumber, dan kemudian periksa apakah " -"klien openstack Anda bekerja: ::" - -msgid "" -"Even with a key in place, however, you must have the appropriate security " -"group rules in place to access your instance." -msgstr "" -"Bahkan dengan kunci di tempat, bagaimanapun, Anda harus memiliki peraturan " -"kelompok keamanan yang sesuai untuk mengakses instance Anda." - -msgid "Example" -msgstr "Contoh" - -msgid "Explore and apply advanced OpenStack cloud features." -msgstr "Jelajahi dan terapkan fitur awan OpenStack yang canggih." - -msgid "Extra features" -msgstr "Fitur tambahan" - -msgid "Extra security groups" -msgstr "Kelompok keamanan ekstra" - -msgid "Extras" -msgstr "Ekstra" - -msgid "Fail fast" -msgstr "Fail fast" - -msgid "Fault tolerance" -msgstr "Toleransi kesalahan" - -msgid "Fault tolerance is essential to the cloud-based application." -msgstr "Toleransi kesalahan sangat penting untuk aplikasi berbasis cloud." - -msgid "Final result" -msgstr "Hasil final" - -msgid "Finally, clean up by deleting the test object:" -msgstr "Akhirnya, bersihkan dengan cara menghapus objek test:" - -msgid "" -"Finally, start the stopped MySQL database service and validate that " -"everything works as expected." -msgstr "" -"Akhirnya, mulai menghentikan layanan database MySQL dan memvalidasi bahwa " -"semuanya berjalan seperti yang diharapkan." - -msgid "First check for an unused floating IP." -msgstr "Pertama periksa floating IP yang tidak terpakai." - -msgid "" -"First provide the appropriate identity, credentials and authorization URL " -"for your project. Then get an instance of the Nova API interface." -msgstr "" -"Pertama, berikan identitas, kredensial, dan otorisasi URL yang sesuai untuk " -"proyek Anda. Kemudian dapatkan sebuah instance dari antarmuka Nova API." - -msgid "First, learn how to connect to the Object Storage endpoint:" -msgstr "Pertama, pelajari cara menyambungkan ke Object Storage endpoint:" - -msgid "" -"First, tell the connection to get a specified image by using the ID of the " -"image that you picked in the previous section:" -msgstr "" -"Pertama, beritahu koneksi untuk mendapatkan image tertentu dengan " -"menggunakan ID image yang Anda pilih di bagian sebelumnya:" - -msgid "Flavors and images" -msgstr "Flavor dan image" - -msgid "" -"For a list of available SDKs, see `Software Development Kits `_." -msgstr "" -"Untuk daftar SDK yang tersedia, lihat `Software Development Kits `_." - -msgid "" -"For efficiency, most Object Storage installations treat large objects, :code:" -"`> 5GB`, differently than smaller objects." -msgstr "" -"Untuk efisiensi, sebagian besar instalasi Object Storage memperlakukan objek " -"besar, :code:`> 5GB`, berbeda dari objek yang lebih kecil." - -msgid "" -"For example, you might use the Orchestration API to create two compute " -"instances by creating a stack and by passing a template to the Orchestration " -"API. That template contains two resources with the :code:`type` attribute " -"set to :code:`OS::Nova::Server`." -msgstr "" -"Misalnya, Anda mungkin menggunakan Orchestration API untuk membuat dua " -"instance komputasi dengan membuat tumpukan dan dengan melewatkan template " -"ke Orchestration API. Template itu berisi dua sumber dengan atribut :code: " -"`type` yang disetel ke :code:`OS::Nova::Server`." - -msgid "For example:" -msgstr "Sebagai contoh:" - -msgid "" -"For information about supported features and how to work with an existing " -"database service installation, see `Database as a Service in OpenStack " -"`_." -msgstr "" -"Untuk informasi tentang fitur yang didukung dan cara bekerja dengan " -"instalasi layanan database yang ada, lihat `Database as a Service in " -"OpenStack `_." - -msgid "" -"For information about these and other calls, see `libcloud documentation " -"`_." -msgstr "" -"Untuk informasi tentang panggilan ini dan panggilan lainnya, lihat `libcloud " -"documentation `_." - -msgid "" -"For more information about hybrid clouds, see the `Hybrid Cloud chapter " -"`_ in the Architecture " -"Design Guide." -msgstr "" -"Untuk informasi lebih lanjut tentang awan hibrid, lihat `Hybrid Cloud " -"chapter `_ di " -"Architecture Design Guide." - -msgid "" -"For more information about multi-site clouds, see the `Multi-Site chapter " -"`_ in the " -"Architecture Design Guide." -msgstr "" -"Untuk informasi lebih lanjut tentang awan multi-site, lihat `Multi-Site " -"chapter `_ di " -"Architecture Design Guide." - -msgid "" -"For performance reasons, it makes sense to have a network for each tier, so " -"that traffic from one tier does not \"crowd out\" other types of traffic and " -"cause the application to fail. In addition, having separate networks makes " -"controlling access to parts of the application easier to manage, improving " -"the overall security of the application." -msgstr "" -"Untuk alasan kinerja, masuk akal untuk memiliki jaringan untuk setiap " -"tingkat, sehingga lalu lintas dari satu tingkat tidak \"mengacaukan\" jenis " -"lalu lintas lainnya dan menyebabkan aplikasi gagal. Selain itu, memiliki " -"jaringan yang terpisah membuat akses pengendali ke bagian aplikasi lebih " -"mudah dikelola, meningkatkan keamanan keseluruhan aplikasi." - -msgid "" -"For this example, we take a floating IP pool from the 'public' network, " -"which is your external network." -msgstr "" -"Untuk contoh ini, kita mengambil kolam floating IP dari jaringan 'public', " -"yang merupakan jaringan eksternal Anda." - -msgid "Fractals application architecture" -msgstr "Arsitektur aplikasi fraktal" - -msgid "" -"From here, go to :doc:`/scaling_out` to learn how to further scale your " -"application. Or, try one of these steps in the tutorial:" -msgstr "" -"Dari sini, buka :doc:`/scaling_out` untuk mempelajari cara meningkatkan " -"skala aplikasi Anda. Atau, cobalah salah satu langkah berikut dalam " -"tutorialnya:" - -msgid "Generate load" -msgstr "Membangkitkan muatan" - -msgid "Get more information about the stack:" -msgstr "Dapatkan informasi lebih lanjut tentang stack:" - -msgid "Getting started" -msgstr "Mulai" - -msgid "Go" -msgstr "Go" - -msgid "Go ahead and create two instances." -msgstr "Silakan membuat dua instance." - -msgid "" -"Go ahead and delete the existing instances and security groups that you " -"created in previous sections. Remember, when instances in the cloud are no " -"longer working, remove them and re-create something new." -msgstr "" -"Lanjutkan dan hapus instance dan kelompok keamanan yang ada yang Anda buat " -"di bagian sebelumnya. Ingat, saat kejadian di awan tidak lagi berfungsi, " -"lepaskan mereka dan ciptakan kembali sesuatu yang baru." - -msgid "" -"Go ahead and test the fault tolerance. Start deleting workers and API " -"instances. As long as you have one of each, your application is fine. " -"However, be aware of one weak point. The database contains the fractals and " -"fractal metadata. If you lose that instance, the application stops. Future " -"sections will explain how to address this weak point." -msgstr "" -"Silakan menguji toleransi kesalahan. Mulai menghapus pekerja dan instance " -"API. Selama Anda memilikinya, aplikasi Anda baik-baik saja. Namun, " -"perhatikan satu titik lemah. Database berisi fraktal dan metadata fraktal. " -"Jika Anda kehilangan instance itu, aplikasi akan berhenti. Bagian " -"selanjutnya akan menjelaskan bagaimana mengatasi titik lemah ini." - -msgid "" -"Go to :doc:`/durability` to learn how to use Object Storage to solve this " -"problem in an elegant way. Or, you can proceed to one of these sections:" -msgstr "" -"Lanjut ke :doc:`/durability` untuk belajar bagaimana menggunakan Object " -"Storage untuk mengatasi masalah ini dengan cara yang elegan. Atau, Anda bisa " -"melanjutkan ke salah satu bagian berikut:" - -msgid "Going crazy" -msgstr "Going crazy" - -msgid "HOT templating language" -msgstr "HOT templating language" - -msgid "High availability" -msgstr "High availability" - -msgid "" -"How do you deploy your application? For example, do you pull the latest code " -"from a source control repository? Do you make packaged releases that update " -"infrequently? Do you perform haphazard tests in a development environment " -"and deploy only after major changes?" -msgstr "" -"Bagaimana Anda menerapankan aplikasi Anda? Misalnya, apakah Anda menarik " -"kode terbaru dari repositori kontrol sumber? Apakah Anda membuat rilis paket " -"yang jarang diperbarui? Apakah Anda melakukan tes serampangan di lingkungan " -"pengembangan dan hanya menggunakan perubahan besar?" - -msgid "How the Fractals application interacts with OpenStack" -msgstr "Bagaimana aplikasi Fractals berinteraksi dengan OpenStack" - -msgid "How you interact with OpenStack" -msgstr "Bagaimana Anda berinteraksi dengan OpenStack" - -msgid "If a key pair of the given name is not found then one is generated." -msgstr "" -"Jika pasangan kunci dari nama yang diberikan tidak ditemukan maka satu " -"dihasilkan." - -msgid "" -"If an application is meant to automatically scale up and down to meet " -"demand, it is not feasible have any manual steps in the process of deploying " -"any component of the application. Automation also decreases the time to " -"recovery for your application in the event of component failures, increasing " -"fault tolerance and resilience." -msgstr "" -"Jika sebuah aplikasi dimaksudkan untuk secara otomatis naik turun untuk " -"memenuhi permintaan, maka tidak mungkin ada langkah manual dalam proses " -"penggelaran komponen aplikasi apapun. Otomasi juga mengurangi waktu untuk " -"pemulihan aplikasi Anda jika terjadi kegagalan komponen, meningkatkan " -"toleransi dan ketahanan kesalahan." - -msgid "" -"If either alarm reports the :code:`insufficient data` state, the default " -"sampling period of the stack is probably too low for your cloud; ask your " -"support team for assistance. You can set the period through the :code:" -"`period` parameter of the stack to match your clouds requirements." -msgstr "" -"Jika salah satu alarm melaporkan status :code:`insufficient data`, periode " -"sampling default stack mungkin terlalu rendah untuk awan Anda; Mintalah " -"bantuan tim pendukung Anda. Anda dapat mengatur periode melalui parameter :" -"code:`period` stack agar sesuai dengan persyaratan awan Anda." - -msgid "" -"If one application instance is compromised, all instances with the same " -"image and configuration will likely suffer the same vulnerability. The " -"safest path is to use configuration management to rebuild all instances." -msgstr "" -"Jika satu instance aplikasi dikompromikan, semua instance dengan image dan " -"konfigurasi yang sama kemungkinan akan mengalami kerentanan yang sama. Jalan " -"yang paling aman adalah menggunakan manajemen konfigurasi untuk membangun " -"kembali semua instance." - -msgid "" -"If one is assigned, users can use this address to access the instance on " -"some OpenStack clouds." -msgstr "" -"Jika IP private diberikan, pengguna dapat menggunakan alamat ini untuk " -"mengakses instance pada beberapa awan OpenStack." - -msgid "If one is assigned, users can use this address to access the instance." -msgstr "" -"Jika IP publik diberikan, pengguna dapat menggunakan alamat ini untuk " -"mengakses instance tersebut." - -msgid "" -"If the image that you want is not available in your cloud, you can usually " -"upload one depending on the policy settings of your cloud. For information " -"about how to upload images, see `obtaining images `_." -msgstr "" -"Jika image yang Anda inginkan tidak tersedia di awan Anda, biasanya Anda " -"dapat mengunggahnya berdasarkan setelan kebijakan awan Anda. Untuk informasi " -"tentang cara mengunggah image, lihat `obtaining images `_." - -msgid "" -"If you are an advanced user, think about how you might remove the database " -"from the architecture and replace it with Object Storage metadata, and then " -"contribute these steps to :doc:`craziness`." -msgstr "" -"Jika Anda adalah pengguna tingkat lanjut, pikirkan bagaimana Anda bisa " -"menghapus database dari arsitektur dan menggantinya dengan metadata Object " -"Storag, dan kemudian berkontribusi langkah-langkah ini ke :doc:`craziness`." - -msgid "" -"If you are familiar with OpenStack but have not created a cloud application " -"in general or an OpenStack application in particular, this section teaches " -"you how to program with OpenStack components." -msgstr "" -"Jika Anda sudah familiar dengan OpenStack namun belum membuat aplikasi cloud " -"secara umum atau aplikasi OpenStack pada khususnya, bagian ini mengajarkan " -"Anda bagaimana memprogram dengan komponen OpenStack." - -msgid "" -"If you check the load on the :code:`app-controller` API service instance, " -"you see that the instance is not doing well. On your single CPU flavor " -"instance, a load average greater than 1 means that the server is at capacity." -msgstr "" -"Jika Anda memeriksa beban pada instance layanan API :code:`app-" -"controller` , Anda melihat instance tidak berjalan dengan baik. Pada " -"instance flavor CPU tunggal Anda, rata-rata beban lebih besar dari 1 berarti " -"server berkapasitas." - -msgid "" -"If you check the load on the worker, you can see that the instance is not " -"doing well. On the single CPU flavor instance, a load average greater than 1 " -"means that the server is at capacity." -msgstr "" -"Jika Anda memeriksa muatan pekerja, Anda bisa melihat instance tidak " -"berjalan dengan baik. Pada instance flavor CPU tunggal, rata-rata muatan " -"lebih besar dari 1 berarti server berada pada kapasitas." - -msgid "" -"If you deploy your application on a regular basis, you can resolve outages " -"and make security updates without manual intervention. If an outage occurs, " -"you can provision more resources in another region. If you must patch " -"security holes, you can provision additional compute nodes that are built " -"with the updated software. Then, you can terminate vulnerable nodes and " -"automatically fail-over traffic to the new instances." -msgstr "" -"Jika Anda menerapkan aplikasi secara teratur, Anda dapat mengatasi pemadaman " -"listrik dan melakukan pembaruan keamanan tanpa intervensi manual. Jika " -"terjadi pemadaman, Anda dapat menyediakan lebih banyak sumber daya di " -"wilayah lain. Jika Anda harus menambal lubang keamanan, Anda dapat " -"menyediakan node komputasi tambahan yang dibangun dengan perangkat lunak " -"yang diperbarui. Kemudian, Anda dapat menghentikan nodus yang rentan dan " -"lalu lintas gagal (fail-over) ke instance baru secara otomatis." - -msgid "" -"If you do not have a working application, follow the steps in :doc:" -"`introduction` to create one." -msgstr "" -"Jika Anda tidak memiliki aplikasi yang bekerja, ikuti langkah-langkah di :" -"doc:`introduction` untuk membuatnya." - -msgid "" -"If you do not know Maven then the `Maven home site `_ is a good place to learn more." -msgstr "" -"Jika Anda tidak tahu Maven maka `Maven home site `_ adalah tempat yang baik untuk belajar lebih banyak." - -msgid "" -"If you do not use floating IP addresses, substitute another IP address, as " -"appropriate." -msgstr "" -"Jika Anda tidak menggunakan alamat IP mengambang, ganti alamat IP lain, jika " -"sesuai." - -msgid "" -"If you do use a public cloud `known by shade `_, you can avoid specifying :" -"code:`auth_url:` and instead specify :code:`profile: $PROVIDER_NAME` in the " -"clouds.yml file." -msgstr "" -"Jika Anda menggunakan cloud publik `known by shade ` _, Anda dapat " -"menghindari menentukan: code: `auth_url:` dan sebagai gantinya sebutkan :" -"code: `profil: $ PROVIDER_NAME` dalam file clouds.yml." - -msgid "" -"If you had a load balancer, you could distribute this load between the two " -"different API services. You have several options. The :doc:`networking` " -"section shows you one option." -msgstr "" -"Jika Anda memiliki penyeimbang beban, Anda dapat mendistribusikan beban ini " -"di antara dua layanan API yang berbeda. Anda memiliki beberapa pilihan. " -"Bagian :doc:`networking` menunjukkan satu pilihan." - -msgid "" -"If you have no free floating IPs that have been allocated for your project, " -"first select a network which offer allocation of floating IPs. In this " -"example we use network which is called :code:`public`." -msgstr "" -"Jika Anda tidak memiliki floating IP bebas yang telah dialokasikan untuk " -"proyek Anda, pertama pilih jaringan yang menawarkan alokasi floating IP. " -"Dalam contoh ini kita menggunakan jaringan yang disebut :code:`public`." - -msgid "" -"If you have no free floating IPs that have been previously allocated for " -"your project, first select a floating IP pool offered by your provider. In " -"this example, we have selected the first one and assume that it has " -"available IP addresses." -msgstr "" -"Jika Anda tidak memiliki floating IP bebas yang telah dialokasikan " -"sebelumnya untuk proyek Anda, pertama pilih kolam floating IP yang " -"ditawarkan oleh provider Anda. Dalam contoh ini, kami telah memilih yang " -"pertama dan menganggapnya memiliki alamat IP yang tersedia." - -msgid "" -"If you have no free floating IPs that have been previously allocated for " -"your project, then select a floating IP pool offered by your provider. In " -"this example, we have selected the first one and assume that it has " -"available IP addresses." -msgstr "" -"Jika Anda tidak memiliki floating IP bebas yang telah dialokasikan " -"sebelumnya untuk proyek Anda, pilih kolam floating IP yang ditawarkan oleh " -"provider Anda. Dalam contoh ini, kami telah memilih yang pertama dan " -"menganggapnya memiliki alamat IP yang tersedia." - -msgid "If you list existing instances:" -msgstr "Jika Anda mendaftar instance yang ada:" - -msgid "If you list the instances again, the instance disappears." -msgstr "Jika Anda mendaftar instance lagi, instance menghilang." - -msgid "" -"If you receive the :code:`libcloud.common.types.InvalidCredsError: 'Invalid " -"credentials with the provider'` exception when you run one of these API " -"calls, double-check your credentials." -msgstr "" -"Jika Anda menerima pengecualian :code:`libcloud.common.types." -"InvalidCredsError: 'Invalid credentials with the provider'` saat menjalankan " -"salah satu panggilan API ini, periksa kembali kredensial Anda." - -msgid "" -"If you receive the exception :code:`openstack.exceptions.HttpException: " -"HttpException: 401 Client Error: Unauthorized,` while trying to run one of " -"the following API calls please double-check your credentials." -msgstr "" -"Jika Anda menerima pengecualian :code:`openstack.exceptions.HttpException: " -"HttpException: 401 Client Error: Unauthorized,` saat mencoba menjalankan " -"salah satu panggilan API berikut, periksa kembali kredensial Anda." - -msgid "" -"If you see an IOError, you may need to change ``~/.ssh/`` to ``/home/" -"{USERNAME}/.ssh/``, using an absolute path." -msgstr "" -"Jika Anda melihat IOError, Anda mungkin perlu mengubahnya ``~/.ssh/`` ke ``/" -"home/{USERNAME}/.ssh/``, menggunakan jalur absolut." - -msgid "" -"If you think about how you traditionally make what you store durable, you " -"quickly conclude that keeping multiple copies of your objects on separate " -"systems is a good way strategy. However, keeping track of those multiple " -"copies is difficult, and building that into an app requires complicated " -"logic." -msgstr "" -"Jika Anda memikirkan bagaimana Anda secara tradisional membuat apa yang Anda " -"simpan dengan tahan lama, Anda dapat dengan cepat menyimpulkan bahwa " -"menyimpan banyak salinan objek Anda pada sistem yang terpisah adalah " -"strategi strategi yang bagus. Namun, mencatat banyak salinan itu sulit " -"dilakukan, dan membangunnya ke dalam sebuah aplikasi membutuhkan logika yang " -"rumit." - -msgid "" -"If you work with large objects, use the :code:`RegionScopedBlobStoreContext` " -"class family instead of the ones used so far." -msgstr "" -"Jika Anda bekerja dengan objek besar, gunakan keluarga kelas :code:" -"`RegionScopedBlobStoreContext` dan bukan yang digunakan sejauh ini." - -msgid "" -"If you work with large objects, use the :code:`ex_multipart_upload_object` " -"call instead of the simpler :code:`upload_object` call. The call splits the " -"large object into chunks and creates a manifest so that the chunks can be " -"recombined on download. Change the :code:`chunk_size` parameter, in bytes, " -"to a value that your cloud can accept." -msgstr "" -"Jika Anda bekerja dengan objek besar, gunakan panggilan :code:" -"`ex_multipart_upload_object` daripada panggilan lebih sederhana :code:" -"`upload_object`. Panggilan membagi objek besar menjadi potongan dan " -"menciptakan manifes sehingga potongan dapat digabungkan kembali pada " -"unduhan. Ubah parameter :code:`chunk_size` , dalam satuan byte, ke nilai " -"yang bisa diterima awan Anda." - -msgid "" -"If your provider does not support regions, try a blank string ('') for the " -"`region_name`." -msgstr "" -"Jika penyedia Anda tidak mendukung region (daerah), cobalah string kosong " -"('') untuk `region_name`." - -msgid "" -"In a new Terminal window, SSH into the 'api' API instance. Use the key pair " -"name that you passed in as a parameter." -msgstr "" -"Di jendela Terminal yang baru, SSH masuk ke instance API 'api'. Gunakan nama " -"pasangan kunci yang Anda disampaikan sebagai parameter." - -msgid "" -"In addition to configuring backups, review your policies about what you back " -"up and how long to retain each backed up item." -msgstr "" -"Selain mengonfigurasi cadang, tinjaulah kebijakan Anda tentang apa yang Anda " -"cadangkan dan berapa lama untuk menyimpan setiap item dicadangkan." - -msgid "" -"In addition to this kind of monitoring, you should consider availability " -"monitoring. Although your application might not care about a failed worker, " -"it should care about a failed database server." -msgstr "" -"Selain pemantauan semacam ini, Anda harus mempertimbangkan pemantauan " -"ketersediaan. Meskipun aplikasi Anda mungkin tidak peduli dengan pekerja " -"yang gagal, hal itu harus peduli dengan server database yang gagal." - -msgid "" -"In cloud programming, it is very different. Rather than large, expensive " -"servers, you have virtual machines that are disposable; if something goes " -"wrong, you shut the server down and spin up a new one. There is still " -"operations staff, but rather than nursing individual servers back to health, " -"their job is to monitor the health of the overall system." -msgstr "" -"Dalam pemrograman awan, sangat berbeda. Daripada server besar dan mahal, " -"Anda memiliki mesin virtual yang bisa dipakai; Jika ada yang tidak beres, " -"Anda mematikan server dan memutar yang baru. Masih ada staf operasi, tapi " -"bukannya mengelola server individual kembali ke kesehatan, tugas mereka " -"adalah memantau kesehatan keseluruhan sistem." - -msgid "" -"In cloud programming, there is a well-known analogy known as \"cattle vs pets" -"\". If you have not heard it before, it goes like this:" -msgstr "" -"Dalam pemrograman awan, ada analogi terkenal yang dikenal sebagai \"cattle " -"vs pets\". Jika Anda belum pernah mendengarnya, itu seperti ini:" - -msgid "" -"In earlier sections, the Fractal application used an installation script " -"into which the metadata API passed parameters to bootstrap the cluster. " -"`Etcd `_ is \"a distributed, consistent key-" -"value store for shared configuration and service discovery\" that you can " -"use to store configurations. You can write updated versions of the Fractal " -"worker component to connect to Etcd or use `Confd `_ to poll for changes from Etcd and write changes to " -"a configuration file on the local file system, which the Fractal worker can " -"use for configuration." -msgstr "" -"Pada bagian sebelumnya, aplikasi Fractal menggunakan skrip instalasi dimana " -"metadata API melewati parameter untuk melakukan bootstrap cluster. `Etcd " -"` _ adalah \"a distributed, consistent key-" -"value store for shared configuration and service discovery\" yang dapat Anda " -"gunakan untuk menyimpan konfigurasi. Anda dapat menulis versi terbaru " -"komponen Fractal worker untuk terhubung ke Etcd atau menggunakan `Confd " -"` _ untuk membuat jajak pendapat " -"atas perubahan dari Etcd dan tulis perubahan pada file konfigurasi pada " -"sistem file lokal, yang dapat digunakan oleh Fractal worker untuk " -"konfigurasi." - -msgid "" -"In openstacksdk parameter :code:`ex_userdata` is called :code:`user_data` " -"and parameter :code:`ex_keyname` is called :code:`key_name`." -msgstr "" -"Dalam parameter openstacksdk :code:`ex_userdata` is called :code:`user_data` " -"dan parameter :code:`ex_keyname` disebut :code:`key_name`." - -msgid "" -"In previous chapters, all nodes that comprise the fractal application were " -"attached to the same network." -msgstr "" -"Pada bab sebelumnya, semua node yang terdiri dari aplikasi fraktal " -"dilekatkan pada jaringan yang sama." - -msgid "" -"In previous sections, you used your SDK to programmatically interact with " -"OpenStack. In this section, you use the 'heat' command-line client to access " -"the Orchestration API directly through template files." -msgstr "" -"Di bagian sebelumnya, Anda menggunakan SDK untuk berinteraksi secara " -"pemrograman dengan OpenStack. Pada bagian ini, Anda menggunakan klien " -"command-line 'heat' untuk mengakses Orchestration API secara langsung " -"melalui file template." - -msgid "" -"In the Terminal window where you run ceilometer, run :code:" -"`ceilometer_sample_query` to see the samples." -msgstr "" -"Di jendela Terminal tempat Anda menjalankan ceilometer, jalankan :code:" -"`ceilometer_sample_query` untuk melihat sampelnya." - -msgid "" -"In the following example, set :code:`pub_key_file` to the location of your " -"public SSH key file." -msgstr "" -"Pada contoh berikut, mengatur :code:`pub_key_file` ke lokasi file kunci SSH " -"publik Anda." - -msgid "In the outputs section of the stack, you can run these web API calls:" -msgstr "" -"Di bagian keluaran stack, Anda dapat menjalankan panggilan API web ini:" - -msgid "" -"In the previous steps, you split out several services and expanded capacity. " -"To see the new features of the Fractals application, SSH to one of the app " -"instances and create a few fractals." -msgstr "" -"Pada langkah sebelumnya, Anda membagi beberapa layanan dan kapasitas yang " -"diperluas. Untuk melihat fitur baru aplikasi Fractal, SSH ke salah satu " -"instance aplikasi dan membuat beberapa fraktal." - -msgid "" -"In theory, you could use a simple script to monitor the load on your workers " -"and API services and trigger the creation of instances, which you already " -"know how to do. Congratulations! You are ready to create scalable cloud " -"applications." -msgstr "" -"Secara teori, Anda bisa menggunakan skrip sederhana untuk memantau beban " -"pada pekerja dan layanan API Anda dan memicu terciptanya instance, yang " -"sudah Anda ketahui bagaimana melakukannya. Selamat! Anda siap membuat " -"aplikasi cloud scalable." - -msgid "" -"In this case, we are presenting a shell script as the `userdata `_. " -"When :code:`create_node` creates the instance, :code:`cloud-init` executes " -"the shell script in the :code:`userdata` variable." -msgstr "" -"Dalam hal ini, kami menyajikan sebuah skrip shell sebagai `userdata `_. " -"Ketika :code:`create_node` Menciptakan instance, :code:`cloud-init` " -"Mengeksekusi skrip shell di variable :code:`userdata`." - -msgid "" -"In this network layout, we assume that the OpenStack cloud in which you have " -"been building your application has a public network and tenant router that " -"was previously created by your cloud provider or by yourself, following the " -"instructions in the appendix." -msgstr "" -"Dalam tata letak jaringan ini, kami berasumsi bahwa awan OpenStack tempat " -"Anda membangun aplikasi Anda memiliki jaringan publik dan tenant router " -"(router penyewa) yang sebelumnya dibuat oleh penyedia awan Anda atau oleh " -"Anda sendiri, mengikuti petunjuk di lampiran." - -msgid "" -"In this template, the alarms use metadata that is attached to each worker " -"instance. The metadata is in the :code:`metering.stack=stack_id` format." -msgstr "" -"Dalam template ini, alarm menggunakan metadata yang dilampirkan pada setiap " -"instance pekerja. Metadata ada di format :code:`metering.stack=stack_id`." - -msgid "" -"In this tutorial, we have downloaded the latest version of our application " -"from source and installed it on a standard image. Our magic installation " -"script also updates the standard image to have the latest dependencies that " -"you need to run the application." -msgstr "" -"Dalam tutorial ini, kami telah mendownload versi terbaru dari aplikasi kami " -"dari sumber dan memasangnya pada image standar. Script instalasi magic kami " -"juga memperbarui image standar untuk memiliki dependensi terbaru yang Anda " -"butuhkan untuk menjalankan aplikasi." - -msgid "" -"In this tutorial, you interact with your OpenStack cloud through the SDK " -"that you chose in \"Choose your OpenStack SDK.\" This guide assumes that you " -"know how to run code snippets in your language of choice." -msgstr "" -"Dalam tutorial ini, Anda berinteraksi dengan awan OpenStack Anda melalui SDK " -"yang Anda pilih di \"Choose your OpenStack SDK.\" Panduan ini mengasumsikan " -"bahwa Anda tahu cara menjalankan code snippet (cuplikan kode) dalam bahasa " -"pilihan Anda." - -msgid "" -"In traditional data centers, network segments are dedicated to specific " -"types of network traffic." -msgstr "" -"Di pusat data tradisional, segmen jaringan didedikasikan untuk jenis lalu " -"lintas jaringan tertentu." - -msgid "In your SSH session, confirm that no fractals were generated:" -msgstr "" -"Dalam sesi SSH Anda, konfirmasikan bahwa tidak ada fractal yang dihasilkan:" - -msgid "" -"Initially, the focus is on scaling the workers because they consume the most " -"resources." -msgstr "" -"Awalnya, fokusnya adalah pada penskalaan workers karena mereka mengkonsumsi " -"sumber daya paling banyak." - -msgid "Install a service" -msgstr "Instal layanan" - -msgid "" -"Install the 'heat' command-line client by following this guide: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"Instal klien command-line 'heat' dengan mengikuti panduan ini: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"Internet connectivity from your cloud instance is required to download the " -"application." -msgstr "" -"Konektivitas internet dari instance awan Anda diperlukan untuk mendownload " -"aplikasi." - -msgid "Introduction to Floating IPs" -msgstr "Pengantar Floating IP (IP Mengambang)" - -msgid "Introduction to cloud-init" -msgstr "Perkenalan pada cloud-init" - -msgid "Introduction to key pairs" -msgstr "Pengantar key pair (pasangan kunci)" - -msgid "Introduction to security groups" -msgstr "Pengantar kelompok keamanan" - -msgid "Introduction to tenant networking" -msgstr "Pengantar jaringan tenant (penyewa)" - -msgid "Introduction to the fractals application architecture" -msgstr "Pengantar arsitektur aplikasi fraktal" - -msgid "" -"It is easy to split out services into multiple instances. We will create a " -"controller instance called :code:`app-controller`, which hosts the API, " -"database, and messaging services. We will also create a worker instance " -"called :code:`app-worker-1`, which just generates fractals." -msgstr "" -"Mudah untuk membagi layanan menjadi beberapa instance. Kita akan membuat " -"instance controller yang disebut :code:`app-controller`, yang menghosting " -"layanan API, database, dan pesan. Kami juga akan membuat instance pekerja " -"yang disebut :code:`app-worker-1`, yang hanya menghasilkan fraktal." - -msgid "It is not possible to restore deleted objects. Be careful." -msgstr "Tidak mungkin mengembalikan objek yang dihapus. Hati-hati." - -msgid "Java" -msgstr "Java" - -msgid "" -"Jclouds does not currently support OpenStack Orchestration. See this `bug " -"report `_." -msgstr "" -"Jclouds saat ini tidak mendukung OpenStack Orchestration. Lihat ini `bug " -"report `_." - -msgid "" -"Just as you back up information on a non-cloud server, you must back up non-" -"reproducible information, such as information on a database server, file " -"server, or in application log files. Just because something is 'in the " -"cloud' does not mean that the underlying hardware or systems cannot fail." -msgstr "" -"Sama seperti Anda membuat cadangan informasi pada server non-cloud, Anda " -"harus mencadangkan informasi yang tidak dapat direproduksi, seperti " -"informasi tentang server database, file server, atau file log aplikasi. " -"Hanya karena ada sesuatu 'in the cloud', itu tidak berarti bahwa perangkat " -"keras atau sistem yang mendasarinya tidak dapat gagal." - -msgid "Language" -msgstr "Bahasa" - -msgid "" -"Large file uploads that use the :code:`openstack-swift` provider are " -"supported in only jclouds V2, currently in beta. Also, the default chunk " -"size is 64 Mb. Consider changing this as homework." -msgstr "" -"Upload file besar yang menggunakan :code:`openstack-swift` provider hanya " -"didukung oleh jclouds V2, saat ini dalam versi beta. Juga, ukuran chunk " -"default adalah 64 Mb. Pertimbangkan untuk mengubah ini sebagai pekerjaan " -"rumah." - -msgid "Large objects" -msgstr "Objek besar" - -msgid "" -"Later on, you will use a Block Storage volume to provide persistent storage " -"for the database server for the Fractal application. But first, learn how to " -"create and attach a Block Storage device." -msgstr "" -"Nantinya, Anda akan menggunakan volume Block Storage untuk menyediakan " -"penyimpanan persisten ke server database untuk aplikasi Fractal. Tapi " -"pertama, pelajari cara membuat dan mengikat perangkat Block Storage." - -msgid "Launch an instance" -msgstr "Luncurkan sebuah instance" - -msgid "Launch the stack with auto-scaling workers:" -msgstr "Luncurkan stack dengan pekerja auto-scaling:" - -msgid "" -"Leave your shell open to use it for another instance deployment in this " -"section." -msgstr "" -"Biarkan shell Anda terbuka untuk menggunakannya pengerahan instance lain di " -"bagian ini." - -msgid "" -"Libcloud 0.16 and 0.17 are afflicted with a bug that means authentication to " -"a swift endpoint can fail with `a Python exception `_. If you encounter this, you can upgrade your " -"libcloud version, or apply a simple `2-line patch `_." -msgstr "" -"Libcloud 0,16 dan 0,17 menderita bug yang berarti otentikasi ke swift " -"endpoin bisa gagal `a Python exception `_. Jika Anda menjumpai ini, Anda bisa mengupgrade versi " -"libcloud Anda, atau aplikasikan yang sederhana `2-line patch `_." - -msgid "Libcloud does not support the OpenStack Networking API." -msgstr "Libcloud tidak mendukung OpenStack Networking API." - -msgid "" -"Libcloud uses a different connector for Object Storage to all other " -"OpenStack services, so a conn object from previous sections will not work " -"here and we have to create a new one named :code:`swift`." -msgstr "" -"Libcloud menggunakan konektor yang berbeda untuk Object Storage ke semua " -"layanan OpenStack lainnya, jadi sebuah objek sambung dari bagian sebelumnya " -"tidak akan bekerja di sini dan kita harus membuat yang baru bernama :code:" -"`swift`." - -msgid "" -"Like many cloud applications, the Fractals application has a `RESTful API " -"`_. You can " -"connect to it directly and generate fractals, or you can integrate it as a " -"component of a larger application. Any time a standard interface such as an " -"API is available, automated testing becomes much more feasible, increasing " -"software quality." -msgstr "" -"Seperti banyak aplikasi cloud, aplikasi Fractals memiliki `RESTful API " -"`_. Anda dapat " -"menghubungkannya secara langsung dan menghasilkan fraktal, atau Anda dapat " -"mengintegrasikannya sebagai komponen aplikasi yang lebih besar. Setiap saat " -"antarmuka standar seperti API tersedia, pengujian otomatis menjadi jauh " -"lebih layak, meningkatkan kualitas perangkat lunak." - -msgid "" -"List all available floating IPs for this project and select the first free " -"one. Allocate a new floating IP if none is available." -msgstr "" -"Buat daftar semua floating IP yang ada untuk proyek ini dan pilih yang " -"pertama bebas. Alokasikan floating IP baru jika tidak ada yang tersedia." - -msgid "" -"List objects in your :code:`fractals` container to see if the upload was " -"successful. Then, download the file to verify that the md5sum is the same:" -msgstr "" -"Daftar objek di kontainer Anda :code:`fractals` untuk melihat apakah upload " -"berhasil dilakukan. Kemudian, download file untuk memverifikasi bahwa md5sum " -"adalah sama:" - -msgid "Load balancing" -msgstr "Penyeimbang beban (load balancing)" - -msgid "Load the API: Create a lot of API service requests" -msgstr "Muat API: Buat banyak permintaan layanan API" - -msgid "" -"Load the worker: Create a lot of tasks to max out the CPU of existing worker " -"instances" -msgstr "" -"Muatkan pekerja: Buat banyak tugas untuk memaksimalkan CPU dari instance " -"pekerja yang ada" - -msgid "Log in to the server to run the following steps." -msgstr "Log in ke server untuk menjalankan langkah-langkah berikut." - -msgid "" -"Login to the worker instance, :code:`app-worker-1`, with SSH, using the " -"previous added SSH key pair \"demokey\". Start by getting the IP address of " -"the worker:" -msgstr "" -"Masuk ke instance pekerja, :code:`app-worker-1`, dengan SSH, gunakan " -"pasangan kunci SSH yang sebelumnya ditambahkan\"demokey \". Mulailah dengan " -"mendapatkan alamat IP pekerja:" - -msgid "Login with SSH and use the Fractal app" -msgstr "Login dengan SSH dan gunakan aplikasi Fractal" - -msgid "Look at which ports are available:" -msgstr "Lihatlah port mana yang tersedia:" - -msgid "" -"Make cloud-related architecture decisions such as turning functions into " -"micro-services and modularizing them." -msgstr "" -"Buat keputusan arsitektur cloud-related seperti mengubah fraction menjadi " -"layanan micro-service dan memodulasinya." - -msgid "Make it durable" -msgstr "Make it durable" - -msgid "Make it possible to add new resources to your application." -msgstr "Memungkinkan untuk menambahkan sumber daya baru ke aplikasi Anda." - -msgid "" -"Many of the network concepts that are discussed in this section are already " -"present in the diagram above. A tenant router provides routing and external " -"access for the worker nodes, and floating IP addresses are associated with " -"each node in the Fractal application cluster to facilitate external access." -msgstr "" -"Banyak konsep jaringan yang dibahas di bagian ini sudah ada pada diagram di " -"atas. Router penyewa menyediakan routing dan akses eksternal untuk node " -"pekerja, dan alamat IP mengambang (floating) dikaitkan dengan setiap node di " -"cluster aplikasi Fractal untuk memudahkan akses eksternal." - -msgid "" -"Maven will download and install any dependencies required for compilation, " -"then execute the Java compiler. All files in the :code:`java` subdirectory " -"will be compiled." -msgstr "" -"Maven akan mendownload dan menginstal dependensi apapun yang diperlukan " -"untuk kompilasi, kemudian jalankan compiler Java. Semua file di " -"subdirektori :code:`java` akan dikompilasi." - -msgid "" -"Maven will download and install any further dependencies required and then " -"run the chosen class." -msgstr "" -"Maven akan mendownload dan menginstal dependensi lebih lanjut yang " -"diperlukan dan kemudian menjalankan kelas yang dipilih." - -msgid "" -"Message queues are used to facilitate communication between the Fractal " -"application services. The Fractal application uses a `work queue `_ (or task queue) to " -"distribute tasks to the worker services." -msgstr "" -"Pesan antrian digunakan untuk memudahkan komunikasi antara layanan aplikasi " -"Fraktal. Aplikasi Fraktal menggunakan `work queue `_ (atau task queue) untuk " -"mendistribusikan task (tugas) ke layanan pekerja." - -msgid "" -"Message queues work in a way similar to a queue (or a line, for those of us " -"on the other side of the ocean) in a bank being served by multiple clerks. " -"The message queue in our application provides a feed of work requests that " -"can be taken one-at-a-time by worker services, whether there is a single " -"worker service or hundreds of them." -msgstr "" -"Pesan antrian bekerja dengan cara yang mirip dengan antrean (atau berbaris, " -"bagi kita di sisi lain lautan) di bank yang dilayani oleh beberapa pegawai. " -"Antrian pesan dalam aplikasi kami memberikan umpan permintaan kerja yang " -"dapat dilakukan satu per satu oleh pekerja, apakah ada satu layanan pekerja " -"ataupun ratusan di antaranya." - -msgid "Modularity and micro-services" -msgstr "Modularitas dan micro-services" - -msgid "Monitoring" -msgstr "Mengamati" - -msgid "" -"Monitoring is essential for 'scalable' cloud applications. You must know how " -"many requests are coming in and the impact that these requests have on " -"various services. You must have enough information to determine whether to " -"start another worker or API service as you did in :doc:`/scaling_out`." -msgstr "" -"Pemantauan sangat penting untuk aplikasi awan 'scalable'. Anda harus tahu " -"berapa banyak permintaan yang masuk dan dampak dari permintaan ini terhadap " -"berbagai layanan. Anda harus memiliki cukup informasi untuk menentukan " -"apakah akan memulai layanan pekerja (worker) atau API lain seperti yang Anda " -"lakukan di :doc:`/scaling_out`." - -msgid "" -"Most cloud providers make a public network accessible to you. We will attach " -"a router to this public network to grant Internet access to our instances. " -"After also attaching this router to our internal networks, we will allocate " -"floating IPs from the public network for instances which need to be accessed " -"from the Internet." -msgstr "" -"Sebagian besar penyedia layanan cloud membuat jaringan publik dapat diakses " -"oleh Anda. Kami akan memasang router ke jaringan publik ini untuk memberikan " -"akses Internet ke instance kami. Setelah memasang router ini ke jaringan " -"internal kami, kami akan mengalokasikan IP floating dari jaringan publik " -"untuk instance yang perlu diakses dari Internet." - -msgid "" -"Most cloud providers provision all network objects that are required to boot " -"an instance. To determine whether these objects were created for you, access " -"the Network Topology section of the OpenStack dashboard." -msgstr "" -"Sebagian besar penyedia layanan awan menyediakan semua objek jaringan yang " -"diperlukan untuk melakukan booting sebuah instance. Untuk menentukan apakah " -"objek ini dibuat untuk Anda, akses bagian Network Topology pada dasbor " -"OpenStack." - -msgid "" -"Most instances require access to the Internet. The instances in your " -"Fractals app are no exception! Add routers to pass traffic between the " -"various networks that you use." -msgstr "" -"Sebagian besar instance memerlukan akses ke Internet. Instance di aplikasi " -"Fraktal Anda tidak terkecuali! Tambahkan router untuk melewati lalu lintas " -"antara berbagai jaringan yang Anda gunakan." - -msgid "Multiple clouds" -msgstr "Multiple clouds" - -msgid "Name" -msgstr "Nama" - -msgid "" -"Network access. By default, OpenStack filters all traffic. You must create a " -"security group and apply it to your instance. The security group allows HTTP " -"and SSH access. We will go into more detail in :doc:`/introduction`." -msgstr "" -"Akses jaringan. Secara default, OpenStack menyaring semua lalu lintas. Anda " -"harus membuat grup keamanan dan menerapkannya pada instance Anda. Grup " -"keamanan mengizinkan akses HTTP dan SSH. Kami akan membahas lebih rinci :doc:" -"`/introduction`." - -msgid "Networking" -msgstr "Jaringan" - -msgid "Networking segmentation" -msgstr "Segmentasi jaringan" - -msgid "Neutron LbaaS API" -msgstr "Neutron LbaaS API" - -msgid "Next steps" -msgstr "Langkah selanjutnya" - -msgid "" -"Next, back up all existing fractals from the database to the swift " -"container. A simple loop takes care of that:" -msgstr "" -"Selanjutnya, cadangkan semua fraktal yang ada dari database ke swift " -"container. Sebuah loop sederhana menangani hal itu:" - -msgid "Next, create a network and subnet for the API servers." -msgstr "Selanjutnya, buat jaringan dan subnet untuk server API." - -msgid "Next, create a network and subnet for the workers." -msgstr "Selanjutnya, buat jaringan dan subnet untuk para pekerja." - -msgid "" -"Next, create additional floating IPs. Specify the fixed IP addresses they " -"should point to and the ports that they should use:" -msgstr "" -"Selanjutnya, buat floating IP tambahan. Tentukan alamat IP tetap yang harus " -"mereka tunjuk dan port yang harus mereka gunakan:" - -msgid "Next, start a second instance, which will be the worker instance:" -msgstr "Selanjutnya, mulai instance kedua, yang akan menjadi instance pekerja:" - -msgid "Next, tell the script which flavor you want to use:" -msgstr "Selanjutnya, beritahu script yang flavor ingin Anda gunakan:" - -msgid "" -"Note that the worker instance is part of an :code:`OS::Heat::" -"AutoScalingGroup`." -msgstr "" -"Perhatikan bahwa instance pekerja adalah bagian dari :code:`OS::Heat::" -"AutoScalingGroup`." - -msgid "" -"Note that this time, when you create a security group, you include a rule " -"that applies to only instances that are part of the worker group." -msgstr "" -"Perhatikan bahwa saat ini, saat Anda membuat grup keamanan, Anda menyertakan " -"aturan yang hanya berlaku untuk instance yang merupakan bagian dari grup " -"pekerja." - -msgid "" -"Note that we will be showing the commands in a more idiomatic Java way: as " -"methods on a class." -msgstr "" -"Perhatikan bahwa kita akan menunjukkan perintah dengan Java way: yang lebih " -"idiomatik: sebagai metode di kelas." - -msgid "" -"Notice that you have added this instance to the worker_group, so it can " -"access the controller." -msgstr "" -"Perhatikan bahwa Anda telah menambahkan instance ini ke worker_group, " -"sehingga bisa mengakses controller." - -msgid "" -"Now call the Fractal application's command line interface (:code:`faafo`) to " -"request a few new fractals. The following command requests a few fractals " -"with random parameters:" -msgstr "" -"Sekarang panggil antarmuka command line aplikasi Fraktal (:code:`faafo`) " -"untuk meminta beberapa fraktal baru. Perintah berikut meminta beberapa " -"fraktal dengan parameter acak:" - -msgid "" -"Now create a virtual IP that will be used to direct traffic between the " -"various members of the pool:" -msgstr "" -"Sekarang buat IP virtual yang akan digunakan untuk mengarahkan lalu lintas " -"antar berbagai anggota pool:" - -msgid "" -"Now if you make a request for a new fractal, you connect to the controller " -"instance, :code:`app-controller`, but the work will actually be performed by " -"a separate worker instance - :code:`app-worker-1`." -msgstr "" -"Sekarang jika Anda membuat permintaan untuk fraktal baru, Anda terhubung ke " -"instance pengontrol, :code:`app-controller`, tapi pekerjaan sebenarnya akan " -"dilakukan oleh instance pekerja yang terpisah - :code:`app-worker-1`." - -msgid "" -"Now log into the controller instance, :code:`app-controller`, also with SSH, " -"using the previously added SSH key pair \"demokey\"." -msgstr "" -"Sekarang masuk ke instance controller, :code:`app-controller`, juga dengan " -"SSH, gunakan pasangan kunci SSH yang sebelumnya ditambahkan\"demokey \"." - -msgid "Now prepare the empty block device." -msgstr "Sekarang siapkan perangkat blok kosong." - -msgid "" -"Now request an address from this network to be allocated to your project." -msgstr "" -"Sekarang minta alamat dari jaringan ini untuk dialokasikan ke proyek Anda." - -msgid "" -"Now request that an address from this pool be allocated to your project." -msgstr "" -"Sekarang minta agar alamat dari kolam ini dialokasikan untuk proyek Anda." - -msgid "" -"Now that you have an unused floating IP address allocated to your project, " -"attach it to an instance." -msgstr "" -"Sekarang Anda memiliki alamat floating IP yang tidak terpakai yang " -"dialokasikan untuk proyek Anda, kaitkan ke sebuah instance." - -msgid "" -"Now that you have got the networks created, go ahead and create two Floating " -"IPs, for web servers. Ensure that you replace 'public' with the name of the " -"public/external network offered by your cloud provider." -msgstr "" -"Sekarang setelah Anda mendapatkan jaringan yang dibuat, lanjutkan dan buat " -"dua Floating IP, untuk server web. Pastikan Anda mengganti 'public' dengan " -"nama jaringan public/external yang ditawarkan oleh penyedia awan Anda." - -msgid "" -"Now that you have prepared the networking infrastructure, you can go ahead " -"and boot an instance on it. Ensure you use appropriate flavor and image " -"values for your cloud - see :doc:`getting_started` if you have not already." -msgstr "" -"Sekarang setelah Anda mempersiapkan infrastruktur jaringan, Anda bisa terus " -"maju dan melakukan booting sebuah instance di dalamnya. Pastikan Anda " -"menggunakan nilai flavor dan image yang sesuai untuk awan Anda - lihat :doc: " -"`getting_started` jika Anda belum melakukannya." - -msgid "" -"Now that you know how to create and delete instances, you can deploy the " -"sample application. The instance that you create for the application is " -"similar to the first instance that you created, but this time, we introduce " -"a few extra concepts." -msgstr "" -"Sekarang setelah Anda tahu cara membuat dan menghapus instance, Anda dapat " -"menerapkan contoh aplikasi tersebut. Instance yang Anda buat untuk aplikasi " -"ini mirip dengan instance pertama yang Anda buat, tapi kali ini, kami " -"memperkenalkan beberapa konsep tambahan." - -msgid "Now you can SSH into the instance:" -msgstr "Sekarang Anda bisa SSH ke instance:" - -msgid "Now, attach your router to the worker, API, and web server subnets." -msgstr "Sekarang, pasang router Anda ke subnet pekerja, API, dan web server." - -msgid "" -"Now, create a health monitor that will ensure that members of the load " -"balancer pool are active and able to respond to requests. If a member in the " -"pool dies or is unresponsive, the member is removed from the pool so that " -"client requests are routed to another active member." -msgstr "" -"Sekarang, buatlah monitor kesehatan yang akan memastikan bahwa anggota load " -"balancer pool aktif dan mampu merespons permintaan. Jika anggota di pool " -"mati atau tidak responsif, anggota tersebut dikeluarkan dari pool sehingga " -"permintaan klien diarahkan ke anggota aktif lainnya." - -msgid "Now, create a network and subnet for the web servers." -msgstr "Sekarang, buat jaringan dan subnet untuk server web." - -msgid "Now, look at the big picture." -msgstr "Sekarang, lihatlah gambaran besarnya." - -msgid "Now, no more objects are available in the :code:`fractals` container." -msgstr "" -"Sekarang, tidak ada lagi benda yang tersedia di container :code:`fractals``." - -msgid "" -"Now, wait until all the fractals are generated and the instances have idled " -"for some time." -msgstr "" -"Sekarang, tunggu sampai semua fractal dihasilkan dan instance telah hilang " -"selama beberapa waktu." - -msgid "Now, you can boot and configure the instance." -msgstr "Sekarang, Anda bisa boot dan mengkonfigurasi instance." - -msgid "Now, you can launch the instance." -msgstr "Sekarang, Anda bisa meluncurkan instance." - -msgid "Obtain the following information from your cloud provider:" -msgstr "Dapatkan informasi berikut dari penyedia awan Anda:" - -msgid "" -"Of course there is also a web interface which offers a more human friendly " -"way of accessing the API to view the created fractal images, and a simple " -"command line interface." -msgstr "" -"Tentu saja ada juga antarmuka web yang menawarkan cara yang lebih ramah " -"untuk mengakses API untuk melihat image fraktal yang dibuat, dan antarmuka " -"command line yang sederhana." - -msgid "" -"Of course, creating a monitoring system for a single application might not " -"make sense. To learn how to use the OpenStack Orchestration monitoring and " -"auto-scaling capabilities to automate these steps, see :doc:`orchestration`." -msgstr "" -"Tentu saja, membuat sistem pemantauan untuk satu aplikasi mungkin tidak " -"masuk akal. Untuk mempelajari cara menggunakan pemantauan OpenStack " -"Orchestration dan kemampuan penskalaan otomatis untuk mengotomatisasi " -"langkah-langkah ini, lihat :doc:`orchestration`." - -msgid "" -"Of course, having access to additional resources is only part of the game " -"plan; while you can manually add or delete resources, you get more value and " -"more responsiveness if the application automatically requests additional " -"resources when it needs them." -msgstr "" -"Tentu saja, memiliki akses ke sumber daya tambahan hanyalah bagian dari " -"rencana permainan; Sementara Anda dapat menambahkan atau menghapus sumber " -"daya secara manual, Anda mendapatkan nilai lebih dan lebih responsif jika " -"aplikasi meminta secara otomatis sumber daya tambahan saat dibutuhkan." - -msgid "Official Python-based library for OpenStack." -msgstr "Perpustakaan berbasis Python yang resmi untuk OpenStack." - -msgid "" -"Once you have configured permissions, you must know where to access the " -"application." -msgstr "" -"Setelah Anda mengkonfigurasi izin, Anda harus tahu di mana mengakses " -"aplikasi." - -msgid "Once you have created a rule or group, you can also delete it:" -msgstr "Setelah membuat aturan atau grup, Anda juga dapat menghapusnya:" - -msgid "" -"Once you have logged in, check to see whether the worker service process is " -"running as expected. You can find the logs of the worker service in the " -"directory :code:`/var/log/supervisor/`." -msgstr "" -"Setelah Anda masuk (logged in), periksa untuk melihat apakah proses layanan " -"pekerja berjalan seperti yang diharapkan. Anda dapat menemukan log dari " -"layanan pekerja di direktori :code:`/var/log/supervisor/`." - -msgid "" -"One of the latest trends in scalable cloud application deployment is " -"`continuous integration `_ and `continuous deployment `_ (CI/CD)." -msgstr "" -"Salah satu tren terbaru penerapan aplikasi cloud scalable ini `continuous " -"integration `_ dan " -"`continuous deployment `_ " -"(CI/CD)." - -msgid "" -"Open :code:`top` to monitor the CPU usage of the :code:`faafo-worker` " -"process." -msgstr "" -"Buka :code:`top` untuk memantau penggunaan CPU dari proses :code:`faafo-" -"worker`." - -msgid "" -"OpenStack Object Storage automatically replicates each object at least twice " -"before returning 'write success' to your API call. A good strategy is to " -"keep three copies of objects, by default, at all times, replicating them " -"across the system in case of hardware failure, maintenance, network outage, " -"or another kind of breakage. This strategy is very convenient for app " -"creation. You can just dump objects into object storage and not worry about " -"the additional work that it takes to keep them safe." -msgstr "" -"OpenStack Object Storage secara otomatis mereplikasi setiap objek setidaknya " -"dua kali sebelum mengembalikan 'write success' ke panggilan API Anda. " -"Strategi yang bagus adalah menyimpan tiga salinan objek, secara default, " -"setiap saat, mereplikasi di seluruh sistem jika terjadi kegagalan perangkat " -"keras, perawatan, pemadaman jaringan, atau jenis kerusakan lainnya. Strategi " -"ini sangat cocok untuk pembuatan aplikasi. Anda bisa membuang barang (dump " -"object) ke dalam penyimpanan objek dan tidak khawatir dengan pekerjaan " -"tambahan yang diperlukan agar mereka tetap aman." - -msgid "OpenStack SDK" -msgstr "OpenStack SDK" - -msgid "OpenStack SDK for Microsoft .NET" -msgstr "OpenStack SDK untuk Microsoft .NET" - -msgid "OpenStack SDKs" -msgstr "OpenStack SDKs" - -msgid "" -"OpenStack provides a couple of tools that make it easy to back up data. If " -"your provider runs OpenStack Object Storage, you can use its API calls and " -"CLI tools to work with archive files." -msgstr "" -"OpenStack menyediakan beberapa tool yang memudahkan backup data. Jika " -"penyedia Anda menjalankan OpenStack Object Storage, Anda dapat menggunakan " -"API call dan CLI tool untuk bekerja dengan file arsip." - -msgid "" -"OpenStack supports 'regions', which are geographically-separated " -"installations that are connected to a single service catalog. This section " -"explains how to expand the Fractal application to use multiple regions for " -"high availability." -msgstr "" -"OpenStack mendukung 'regions', yang merupakan instalasi yang dipisahkan " -"secara geografis yang terhubung ke katalog layanan tunggal. Bagian ini " -"menjelaskan bagaimana memperluas aplikasi Fractal untuk menggunakan beberapa " -"daerah untuk ketersediaan tinggi (high availability)." - -msgid "Or, try one of these tutorial steps:" -msgstr "Atau, cobalah salah satu langkah tutorial berikut:" - -msgid "Orchestration" -msgstr "Orchestration" - -msgid "" -"Other features, such as creating volume snapshots, are useful for backups:" -msgstr "Fitur lainnya, seperti membuat snapshot volume, berguna untuk backup:" - -msgid "" -"Other versions of this guide show you how to use the other SDKs and " -"languages to complete these tasks. If you are a developer for another " -"toolkit that you would like this guide to include, feel free to submit code " -"snippets. For more information, contact `OpenStack Documentation team " -"`_ members." -msgstr "" -"Versi lain dari panduan ini menunjukkan cara menggunakan SDK dan bahasa " -"lainnya untuk menyelesaikan tugas ini. Jika Anda adalah pengembang untuk " -"toolkit lain yang ingin disertakan dalam panduan ini, jangan ragu untuk " -"mengirimkan cuplikan kode. Untuk informasi lebih lanjut, hubungi anggota " -"`OpenStack Documentation team `_." - -msgid "" -"Otherwise, continue reading to learn how to work with, and move the Fractal " -"application database server to use, block storage." -msgstr "" -"Jika tidak, lanjutkan membaca untuk belajar bagaimana bekerja dengan, dan " -"memindahkan server database aplikasi Fractal untuk digunakan, blokir " -"penyimpanan." - -msgid "" -"Our code samples use `Java 8 `_." -msgstr "" -"Sampel kode kami digunakan `Java 8 `_." - -msgid "PHP" -msgstr "PHP" - -msgid "" -"PHP-OpenCloud supports the OpenStack Networking API, but this section has " -"not been completed." -msgstr "" -"PHP-OpenCloud mendukung OpenStack Networking API, namun bagian ini belum " -"selesai." - -msgid "" -"PHP-opencloud supports OpenStack Orchestration :D:D:D but this section is " -"not written yet." -msgstr "" -"PHP-opencloud mendukung OpenStack Orchestration :D:D:D tapi bagian ini belum " -"ditulis." - -msgid "Parameter" -msgstr "Parameter" - -msgid "" -"Perhaps you can `contribute `_?" -msgstr "" -"Mungkin kamu bisa `contribute `_?" - -msgid "Phoenix servers" -msgstr "Server Phoenix" - -msgid "" -"Pkgcloud supports OpenStack Orchestration :D:D:D but this section is `not " -"written yet `_" -msgstr "" -"Pkgcloud mendukung OpenStack Orchestration :D:D:D tapi bagian ini `not " -"written yet `_" - -msgid "" -"Pkgcloud supports the OpenStack Networking API, but this section has not " -"been completed." -msgstr "" -"Pkgcloud mendukung OpenStack Networking API, namun bagian ini belum selesai." - -msgid "" -"Place the above pom.xml into the root directory of your project. Then create " -"the nested subdirectory tree :code:`src` -> :code:`main` -> :code:`java`. " -"Place the Java code samples that you copy from this book into the folder " -"named \":code:`java`\"." -msgstr "" -"Tempatkan pom.xml di atas ke dalam direktori root proyek Anda. Kemudian buat " -"pohon subdirektori nested :code:`src` -> :code:`main` -> :code:`java`. " -"Tempatkan contoh kode Java yang Anda salin dari buku ini ke dalam folder " -"bernama \":code:`java`\"." - -msgid "Place the images in the :code:`fractals` container:" -msgstr "Tempatkan image di kontainer :code:`fractals`:" - -msgid "" -"Previously, you manually created the database, which is useful for a single " -"database that you rarely update. However, the OpenStack :code:`trove` " -"component provides Database as a Service (DBaaS)." -msgstr "" -"Sebelumnya, Anda secara manual membuat database, yang berguna untuk database " -"tunggal yang jarang Anda update. Namun, komponen OpenStack :code:`trove` " -"menyediakan Database sebagai Layanan (DBaaS)." - -msgid "" -"Prior to this section, the network layout for the Fractal application would " -"be similar to the following diagram:" -msgstr "" -"Sebelum bagian ini, tata letak jaringan untuk aplikasi Fraktal akan serupa " -"dengan diagram berikut:" - -msgid "Programmatic interfaces (APIs)" -msgstr "Programmatic interfaces (APIs)" - -msgid "Python" -msgstr "Python" - -msgid "Regions and geographic diversity" -msgstr "Kawasan dan keanekaragaman geografis" - -msgid "Remove the existing app" -msgstr "Hapus aplikasi yang ada" - -msgid "" -"Removing the egress rule created by OpenStack will cause your instance " -"networking to break." -msgstr "" -"Menghapus aturan egress yang dibuat oleh OpenStack akan menyebabkan jaringan " -"instance Anda terputus." - -msgid "" -"Replace :code:`IP_API_1` and :code:`IP_API_2` with the corresponding " -"floating IPs. Replace FRACTAL_UUID with the UUID of an existing fractal." -msgstr "" -"Ganti :code:`IP_API_1` dan :code:`IP_API_2` dengan IP mengambang yang " -"sesuai. Ganti FRACTAL_UUID dengan UUID dari fraktal yang ada." - -msgid "Replace :code:`IP_API_1` with the IP address of the API instance." -msgstr "Ganti :code:`IP_API_1` dengan alamat IP dari instance API." - -msgid "" -"Replace :code:`IP_API_1` with the IP address of the first API instance and " -"USERNAME with the appropriate user name." -msgstr "" -"Ganti :code:`IP_API_1` dengan alamat IP dari instance API pertama dan " -"USERNAME dengan nama pengguna yang sesuai." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance " -"and USERNAME to the appropriate user name." -msgstr "" -"Ganti :code:`IP_CONTROLLER` dengan alamat IP dari instance controller dan " -"USERNAME ke nama pengguna yang sesuai." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance " -"and USERNAME with the appropriate user name." -msgstr "" -"Ganti :code:`IP_CONTROLLER` dengan alamat IP dari instance controller dan " -"USERNAME dengan nama pengguna yang sesuai." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance." -msgstr "Ganti :code:`IP_CONTROLLER` dengan alamat IP dari instance controller." - -msgid "" -"Replace :code:`IP_DATABASE` with the IP address of the database instance and " -"USERNAME to the appropriate user name." -msgstr "" -"Ganti :code:`IP_DATABASE` dengan alamat IP dari instance database dan " -"USERNAME ke nama pengguna yang sesuai." - -msgid "" -"Replace :code:`IP_WORKER_1` with the IP address of the worker instance and " -"USERNAME to the appropriate user name." -msgstr "" -"Menggantikan :code:`IP_WORKER_1` Dengan alamat IP dari instance pekerja dan " -"USERNAME ke nama pengguna yang sesuai." - -msgid "" -"Replace :code:`IP_WORKER` with the IP address of the worker instance and " -"USERNAME with the appropriate user name." -msgstr "" -"Ganti :code:`IP_WORKER` dengan alamat IP dari instance pekerja dan USERNAME " -"dengan nama pengguna yang sesuai." - -msgid "Ruby" -msgstr "Ruby" - -msgid "" -"Run the :code:`ceilometer_statistics_query`: command to see the derived " -"statistics." -msgstr "" -"Jalankan perintah :code:`ceilometer_statistics_query`: untuk melihat " -"statistik turunan." - -msgid "" -"Run the :code:`nova list` command to confirm that the :code:`OS::Heat::" -"AutoScalingGroup` has created more instances:" -msgstr "" -"Jalankan perintah :code:`nova list` untuk memastikan bahwa :code:`OS::Heat::" -"AutoScalingGroup` telah menciptakan lebih banyak instance:" - -msgid "" -"Run the :code:`nova list` command to confirm that the :code:`OS::Heat::" -"AutoScalingGroup` removed the unneeded instances:" -msgstr "" -"Jalankan perintah :code:`nova list` untuk memastikan bahwa :code:`OS::Heat::" -"AutoScalingGroup` menghapus instance yang tidak dibutuhkan:" - -msgid "" -"Run the :code:`nova list` command. This template created three instances:" -msgstr "" -"Jalankan perintah :code:`nova list`. Template ini membuat tiga instance:" - -msgid "Run the script to start the deployment." -msgstr "Jalankan skrip untuk memulai pengerahan." - -msgid "" -"SDKs do not generally support the service yet, but you can use the 'trove' " -"command-line client to work with it instead." -msgstr "" -"SDK pada umumnya tidak mendukung layanan ini, namun Anda bisa menggunakan " -"'trove' command-line client untuk bekerja dengannya." - -msgid "Scalability" -msgstr "Skalabilitas" - -msgid "Scale available resources up and down." -msgstr "Skala sumber daya yang tersedia naik dan turun." - -msgid "Scale the API service" -msgstr "Skala layanan API" - -msgid "Scale the workers" -msgstr "Skala pekerja" - -msgid "Scaling out" -msgstr "Scaling out" - -msgid "Security" -msgstr "Keamanan" - -msgid "" -"Security groups are sets of network access rules that are applied to an " -"instance's networking. By default, only egress (outbound) traffic is " -"allowed. You must explicitly enable ingress (inbound) network access by " -"creating a security group rule." -msgstr "" -"Kelompok keamanan adalah kumpulan aturan akses jaringan yang diterapkan pada " -"jaringan instance. Secara default, hanya lalu lintas jalan keluar (outbound) " -"yang diperbolehkan. Anda harus secara eksplisit mengaktifkan akses jaringan " -"masuk (inbound) dengan membuat aturan kelompok keamanan." - -msgid "" -"Security is important when it comes to your instances; you can not have just " -"anyone accessing them. To enable logging into an instance, you must provide " -"the public key of an SSH key pair during instance creation. In section one, " -"you created and uploaded a key pair to OpenStack, and cloud-init installed " -"it for the user account." -msgstr "" -"Keamanan penting bila menyangkut instance Anda; Anda tidak bisa memiliki " -"siapa pun yang mengaksesnya. Untuk mengaktifkan masuk ke sebuah instance, " -"Anda harus menyediakan kunci publik dari pasangan kunci SSH selama pembuatan " -"instance. Pada bagian pertama, Anda membuat dan mengunggah pasangan kunci ke " -"OpenStack, dan cloud-init memasangnya untuk akun pengguna." - -msgid "" -"See `configure shade `_, to configure your cloud using a profile." -msgstr "" -"Lihat `configure shade `_, untuk mengkonfigurasi cloud Anda menggunakan profil." - -msgid "See the state of the alarms set up by the template:" -msgstr "Lihat keadaan alarm yang diatur oleh template:" - -msgid "" -"Set the image and size variables to appropriate values for your cloud. We " -"will use these variables in later sections." -msgstr "" -"Tetapkan variabel image dan ukuran ke nilai yang sesuai untuk awan Anda. " -"Kami akan menggunakan variabel-variabel ini di bagian selanjutnya." - -msgid "Shade" -msgstr "Shade" - -msgid "" -"Shade's create_object function has a \"use_slo\" parameter (that defaults to " -"true) which will break your object into smaller objects for upload and " -"rejoin them if needed." -msgstr "" -"Fungsi shade's create_object memiliki parameter \"use_slo\" (yang default " -"true) yang akan memecah objek Anda menjadi objek yang lebih kecil untuk " -"diunggah dan bergabung kembali dengannya jika diperlukan." - -msgid "" -"Similar to the UNIX programming model, an object, such as a document or an " -"image, is a \"bag of bytes\" that contains data. You use containers to group " -"objects. You can place many objects inside a container, and your account can " -"have many containers." -msgstr "" -"Mirip dengan model pemrograman UNIX, sebuah objek, seperti dokumen atau " -"image, adalah \"bag of bytes\" yang berisi data. Anda menggunakan kontainer " -"untuk mengelompokkan objek. Anda dapat menempatkan banyak benda di dalam " -"kontainer, dan akun Anda dapat memiliki banyak kontainer." - -msgid "" -"So what exactly was that request doing at the end of the previous section? " -"Let us look at it again. In this subsection, we are just explaining what you " -"have already done in the previous section; you do not need to run these " -"commands again." -msgstr "" -"Jadi apa sebenarnya permintaan itu di akhir bagian sebelumnya? Mari kita " -"lihat lagi. Dalam subbagian ini, kami hanya menjelaskan apa yang telah Anda " -"lakukan di bagian sebelumnya; Anda tidak perlu menjalankan perintah ini lagi." - -msgid "" -"So, for example, the file named :code:`GettingStarted.java` from the end of " -"this chapter would be located as follows:" -msgstr "" -"Jadi, misalnya, file yang bernama :code:`GettingStarted.java` dari akhir bab " -"ini akan ditempatkan sebagai berikut:" - -msgid "Specify a network during instance build" -msgstr "Tentukan jaringan selama pembangunan instance" - -msgid "" -"Specify an external gateway for your router to tell OpenStack which network " -"to use for Internet access." -msgstr "" -"Tentukan gateway eksternal untuk router Anda untuk memberitahu OpenStack " -"yang jaringannya akan digunakan untuk akses Internet." - -msgid "Specify the flavor ID that you would like to use." -msgstr "Tentukan ID flavor yang ingin Anda gunakan." - -msgid "" -"Spend some time playing with the stack and the Fractal app to see how it " -"works." -msgstr "" -"Luangkan waktu untuk bermain dengan stack dan aplikasi Fractal untuk melihat " -"cara kerjanya." - -msgid "Split the database and message queue" -msgstr "Memisahkan database dan message queue" - -msgid "Splitting services across multiple instances" -msgstr "Memisahkan layanan di beberapa instance" - -msgid "" -"Start by creating a security group for the all-in-one instance and adding " -"the appropriate rules, such as HTTP (TCP port 80) and SSH (TCP port 22):" -msgstr "" -"Mulailah dengan membuat grup keamanan untuk instance all-in-one dan " -"menambahkan aturan yang sesuai, seperti HTTP (port TCP 80) dan SSH (port TCP " -"22):" - -msgid "Start by looking at what is already in place." -msgstr "Mulailah dengan melihat apa yang sudah ada." - -msgid "" -"Stop the running MySQL database service and move the database files from :" -"file:`/var/lib/mysql` to the new volume, which is temporarily mounted at :" -"file:`/mnt/database`." -msgstr "" -"Hentikan layanan database MySQL yang berjalan dan pindahkan file database " -"dari :file:`/var/lib/mysql` ke volume baru, yang sementara dipasang di :" -"file:`/mnt/database`." - -msgid "" -"Swift metadata keys are prepended with \"x-object-meta-\" so when you get " -"the object with get_object(), in order to get the value of the metadata your " -"key will be \"x-object-meta-foo\"." -msgstr "" -"Swift metadata keys ditambahkan dengan \"x-object-meta-\" juga saat Anda " -"mendapatkan objek dengan get_object (), untuk mendapatkan nilai metadata, " -"key Anda akan menjadi \"x-object-meta-foo\"." - -msgid "" -"Sync the file systems and mount the block device that contains the database " -"files to :file:`/var/lib/mysql`." -msgstr "" -"Sinkronkan sistem file dan mount perangkat blok yang berisi file database " -"ke :file:`/var/lib/mysql`." - -msgid "" -"That brings us to where we ended up at the end of :doc:`/getting_started`. " -"But where do we go from here?" -msgstr "" -"Itu membawa kita ke tempat kita berakhir di akhir :doc:`/getting_started`. " -"Tapi kemana kita pergi dari sini?" - -msgid "" -"That example is simplistic, of course, but the flexibility of the resource " -"object enables the creation of templates that contain all the required cloud " -"infrastructure to run an application, such as load balancers, block storage " -"volumes, compute instances, networking topology, and security policies." -msgstr "" -"Contohnya sederhana, tentu saja, tapi fleksibilitas dari objek sumber daya " -"memungkinkan pembuatan template yang berisi semua infrastruktur awan yang " -"dibutuhkan untuk menjalankan aplikasi, seperti load balancer, block storage " -"volume, compute instance, networking topology, and security policy." - -msgid "" -"That, as it happens, is the new reality of programming. Applications and " -"systems used to be created on large, expensive servers, cared for by " -"operations staff dedicated to keeping them healthy. If something went wrong " -"with one of those servers, the staff's job was to do whatever it took to " -"make it right again and save the server and the application." -msgstr "" -"Itu, seperti yang terjadi, adalah realitas baru pemrograman. Aplikasi dan " -"sistem yang digunakan untuk dibuat di server besar dan mahal, dirawat oleh " -"staf operasi yang berdedikasi untuk menjaga kesehatan mereka. Jika ada yang " -"tidak beres dengan salah satu server tersebut, tugas staf adalah melakukan " -"apa pun untuk memperbaikinya lagi dan menyimpan server dan aplikasinya." - -msgid "" -"The :code:`OS::Heat::AutoScalingGroup` removes instances in creation order. " -"So the worker instance that was created first is the first instance to be " -"removed." -msgstr "" -"The :code:`OS::Heat::AutoScalingGroup` menghapus instance dalam urutan " -"pembuatan. Jadi instance pekerja yang dibuat pertama adalah instance pertama " -"yang harus dihapus." - -msgid "" -"The :doc:`/introduction` section describes how to build in a modular " -"fashion, create an API, and other aspects of the application architecture. " -"Now you will see why those strategies are so important. By creating a " -"modular application with decoupled services, you can identify components " -"that cause application performance bottlenecks and scale them out. Just as " -"importantly, you can also remove resources when they are no longer " -"necessary. It is very difficult to overstate the cost savings that this " -"feature can bring, as compared to traditional infrastructure." -msgstr "" -"Bagian :doc:`/introduction` menjelaskan bagaimana membangun secara modular, " -"membuat API, dan aspek arsitektur aplikasi lainnya. Sekarang Anda akan " -"melihat mengapa strategi tersebut sangat penting. Dengan membuat aplikasi " -"modular dengan layanan decoupled, Anda dapat mengidentifikasi komponen yang " -"menyebabkan kemacetan kinerja aplikasi dan memperkecilnya. Sama pentingnya, " -"Anda juga dapat menghapus sumber daya saat tidak diperlukan lagi. Sangat " -"sulit untuk melebih-lebihkan penghematan biaya yang bisa diperoleh fitur " -"ini, dibandingkan dengan infrastruktur tradisional." - -msgid "" -"The CPU utilization across workers increases as workers start to create the " -"fractals." -msgstr "" -"Pemanfaatan CPU di seluruh pekerja meningkat saat para pekerja mulai " -"menciptakan fractal." - -msgid "" -"The Fractals app currently uses the local file system on the instance to " -"store the images that it generates. For a number of reasons, this approach " -"is not scalable or durable." -msgstr "" -"Aplikasi Fractal saat ini menggunakan sistem file lokal pada instance untuk " -"menyimpan image yang dihasilkannya. Untuk sejumlah alasan, pendekatan ini " -"tidak terukur atau awet." - -msgid "" -"The Fractals application was designed with the principles of the previous " -"subsection in mind. You will note that in :doc:`getting_started`, we " -"deployed the application in an all-in-one style, on a single virtual " -"machine. This is not a good practice, but because the application uses micro-" -"services to decouple logical application functions, we can change this " -"easily." -msgstr "" -"Aplikasi Fractals dirancang dengan prinsip-prinsip dari subbagian " -"sebelumnya. Anda akan mencatat itu di :doc:`getting_started`, kami " -"menerapkan aplikasi dengan gaya all-in-one, pada satu mesin virtual. Ini " -"bukan praktik yang baik, tapi karena aplikasinya menggunakan layanan mikro " -"untuk memisahkan fungsi aplikasi logis, kita bisa mengubahnya dengan mudah." - -msgid "The Object Storage API is organized around objects and containers." -msgstr "Object Storage API diatur di sekitar objek dan kontainer." - -msgid "" -"The Object Storage service manages many of the tasks normally managed by the " -"application owner. The Object Storage service provides a scalable and " -"durable API that you can use for the fractals app, eliminating the need to " -"be aware of the low level details of how objects are stored and replicated, " -"and how to grow the storage pool. Object Storage handles replication for " -"you. It stores multiple copies of each object. You can use the Object " -"Storage API to return an object, on demand." -msgstr "" -"Layanan Object Storage mengelola banyak tugas yang biasanya dikelola oleh " -"pemilik aplikasi. Layanan Object Storage menyediakan API terukur dan tahan " -"lama yang dapat Anda gunakan untuk aplikasi fraktal, sehingga perlu " -"diperhatikan rincian tingkat rendah tentang bagaimana objek disimpan dan " -"direplikasi, dan bagaimana cara menumbuhkan storage pool. Object Storage " -"menangani replikasi untuk Anda. Ini menyimpan banyak salinan dari setiap " -"objek. Anda dapat menggunakan Object Storage API untuk mengembalikan objek, " -"berdasarkan permintaan." - -msgid "" -"The OpenStack Networking API provides support for creating loadbalancers, " -"which can be used to scale the Fractal app web service. In the following " -"example, we create two compute instances via the Compute API, then " -"instantiate a load balancer that will use a virtual IP (VIP) for accessing " -"the web service offered by the two compute nodes. The end result will be the " -"following network topology:" -msgstr "" -"OpenStack Networking API memberikan dukungan untuk membuat loadbalancer, " -"yang dapat digunakan untuk mengukur layanan web aplikasi Fraktal. Pada " -"contoh berikut, kita membuat dua instance komputasi melalui Compute API, " -"lalu instantiate penyeimbang beban yang akan menggunakan virtual IP (VIP) " -"untuk mengakses layanan web yang ditawarkan oleh dua node komputasi. Hasil " -"akhirnya adalah topologi jaringan berikut:" - -msgid "" -"The OpenStack Orchestration API uses the stacks, resources, and templates " -"constructs." -msgstr "" -" OpenStack Orchestration API menggunakan tumpukan, sumber daya, dan " -"konstruksi template." - -msgid "The OpenStack SDK does not currently support OpenStack Orchestration." -msgstr "OpenStack SDK saat ini tidak mendukung OpenStack Orchestration." - -msgid "" -"The Orchestration service is not deployed by default in every cloud. If " -"these commands do not work, it means the Orchestration API is not available; " -"ask your support team for assistance." -msgstr "" -"Layanan Orchestration tidak dikerahkan secara default di setiap awan. Jika " -"perintah ini tidak berhasil, berarti Orchestration API tidak tersedia; " -"mintalah bantuan tim pendukung Anda." - -msgid "" -"The Orchestration service provides a template-based way to describe a cloud " -"application, then coordinates running the needed OpenStack API calls to run " -"cloud applications. The templates enable you to create most OpenStack " -"resource types, such as instances, networking information, volumes, security " -"groups, and even users. It also provides more advanced functionality, such " -"as instance high availability, instance auto-scaling, and nested stacks." -msgstr "" -"Layanan Orchestration menyediakan cara berbasis template untuk " -"mendeskripsikan aplikasi cloud, lalu mengkoordinasikan menjalankan API " -"OpenStack yang dibutuhkan untuk menjalankan aplikasi cloud. Template " -"memungkinkan Anda membuat sebagian besar jenis sumber OpenStack, seperti " -"instance, informasi jaringan, volume, grup keamanan, dan bahkan pengguna. " -"Ini juga menyediakan fungsionalitas yang lebih maju, seperti ketersediaan " -"tinggi instance, instance auto-scaling, dan tumpukan bersarang." - -msgid "" -"The Telemetry service is not deployed by default in every cloud. If the " -"ceilometer commands do not work, this example does not work; ask your " -"support team for assistance." -msgstr "" -"Layanan Telemetry tidak digunakan secara default di setiap awan. Jika " -"perintah ceilometer tidak bekerja, contoh ini tidak bekerja; Mintalah " -"bantuan tim pendukung Anda." - -msgid "" -"The Telemetry service uses meters to measure a given aspect of a resources " -"usage. The meter that we are interested in is the :code:`cpu_util` meter." -msgstr "" -"Layanan Telemetry menggunakan meter untuk mengukur aspek tertentu dari " -"penggunaan sumber daya. Meteran yang kami minati adalah :code:`cpu_util` " -"meter." - -msgid "" -"The `RabbitMQ getting started tutorial `_ provides a great introduction to message queues." -msgstr "" -"The `RabbitMQ getting started tutorial `_ memberikan pengenalan yang bagus untuk pesan antrian." - -msgid "" -"The `generated_by` field shows the worker that created the fractal. Because " -"multiple worker instances share the work, fractals are generated more " -"quickly and users might not even notice when a worker fails." -msgstr "" -"Field `generated_by` menunjukkan pekerja yang menciptakan fraktal. Karena " -"beberapa instance pekerja berbagi pekerjaan, fraktal dihasilkan lebih cepat " -"dan pengguna mungkin tidak menyadarinya saat pekerja gagal." - -msgid "" -"The `hello_faafo `_ Hot template demonstrates how to create a " -"compute instance that builds and runs the Fractal application as an all-in-" -"one installation." -msgstr "" -"The `hello_faafo `_ Template panas (hot template) menunjukkan " -"cara membuat instance komputasi yang membangun dan menjalankan aplikasi " -"Fractal sebagai instalasi all-in-one." - -msgid "" -"The `outputs` property shows the URL through which you can access the " -"Fractal application. You can SSH into the instance." -msgstr "" -"Properti `outputs` menunjukkan URL tempat Anda dapat mengakses aplikasi " -"Fractal. Anda bisa SSH ke instance." - -msgid "The actual auth URL is:" -msgstr "URL auth sebenarnya adalah:" - -msgid "The alarms have the form:" -msgstr "Alarm memiliki bentuk:" - -msgid "" -"The application stores the generated fractal images directly in the database " -"used by the API service instance. Storing image files in a database is not " -"good practice. We are doing it here as an example only as an easy way to " -"enable multiple instances to have access to the data. For best practice, we " -"recommend storing objects in Object Storage, which is covered in :doc:" -"`durability`." -msgstr "" -"Aplikasi menyimpan image fraktal yang dihasilkan secara langsung di database " -"yang digunakan oleh instance layanan API. Penyimpanan file image dalam " -"database bukanlah praktik yang baik. Kami melakukannya di sini sebagai " -"contoh hanya sebagai cara mudah untuk mengaktifkan beberapa instance agar " -"memiliki akses ke data. Untuk praktik terbaik, kami merekomendasikan " -"menyimpan objek di Object Storage, yang tercakup dalam :doc:`durability`." - -msgid "" -"The auto-scaling stack sets up an API instance, a services instance, and an " -"auto-scaling group with a single worker instance. It also sets up ceilometer " -"alarms that add worker instances to the auto-scaling group when it is under " -"load, and removes instances when the group is idling. To do this, the alarms " -"post to URLs." -msgstr "" -"Stack penskalaan otomatis membentuk instance API, instance layanan, dan grup " -"skala otomatis dengan instance pekerja tunggal. Ini juga memasang alarm " -"ceilometer yang menambahkan instance pekerja ke grup skala otomatis saat " -"berada di bawah beban, dan menghapus instance saat grup sedang menganggur. " -"Untuk melakukan ini, pos alarm ke URL." - -msgid "" -"The client object accesses the Compute v2.0 service and type v2.1, so that " -"version is in this tutorial." -msgstr "" -"Objek klien mengakses layanan Compute v2.0 dan ketik v2.1, sehingga versinya " -"ada dalam tutorial ini." - -msgid "The connection URL for the database (not used here)." -msgstr "URL koneksi untuk database (tidak digunakan disini)." - -msgid "The endpoint URL of the API service." -msgstr "URL endpoint dari layanan API." - -msgid "" -"The example code uses the awesome `Requests library `_. Before you try to run the previous script, make " -"sure that it is installed on your system." -msgstr "" -"Kode contoh menggunakan yang mengagumkan `Requests library `_. Sebelum Anda mencoba menjalankan skrip " -"sebelumnya, pastikan itu terinstal di sistem Anda." - -msgid "" -"The example template depends on the ceilometer project, which is part of the " -"`Telemetry service `_." -msgstr "" -"Contoh template tergantung pada proyek ceilometer, yang merupakan bagian " -"dari `Telemetry service `_." - -msgid "" -"The first step is to start the controller instance. The instance has the API " -"service, the database, and the messaging service, as you can see from the " -"parameters passed to the installation script." -msgstr "" -"Langkah pertama adalah memulai instance controller. Instance memiliki " -"layanan API, database, dan layanan pesan, seperti yang dapat Anda lihat dari " -"parameter yang dikirimkan ke skrip instalasi." - -msgid "The flavor" -msgstr "Flavor" - -msgid "" -"The following file contains all of the code from this section of the " -"tutorial. This comprehensive code sample lets you view and run the code as a " -"single file." -msgstr "" -"File berikut berisi semua kode dari bagian tutorial ini. Sampel kode " -"komprehensif ini memungkinkan Anda melihat dan menjalankan kode sebagai satu " -"file." - -msgid "" -"The following file contains all of the code from this section of the " -"tutorial. This comprehensive code sample lets you view and run the code as a " -"single script." -msgstr "" -"File berikut berisi semua kode dari bagian tutorial ini. Sampel kode " -"komprehensif ini memungkinkan Anda melihat dan menjalankan kode sebagai satu " -"skrip." - -msgid "" -"The following instance creation example assumes that you have a single-" -"tenant network. If you receive the 'Exception: 400 Bad Request Multiple " -"possible networks found, use a Network ID to be more specific' error, you " -"have multiple-tenant networks. You must add a `networks` parameter to the " -"call that creates the server. See :doc:`/appendix` for details." -msgstr "" -"Contoh pembuatan instance berikut mengasumsikan bahwa Anda memiliki jaringan " -"single-tenant. Jika Anda menerima kesalahan'Exception: 400 Bad Request " -"Multiple possible networks found, use a Network ID to be more specific', " -"Anda memiliki beberapa jaringan multiple-tenant. Anda harus menambahkan " -"parameter `networks` ke panggilan yang membuat server. Lihat :doc:`/" -"appendix` untuk rinciannya." - -msgid "The following operations are destructive and result in data loss." -msgstr "Operasi berikut merusak dan mengakibatkan kehilangan data." - -msgid "" -"The fractal application we are building contains these types of network " -"traffic:" -msgstr "" -"Aplikasi fraktal yang kami bangun berisi jenis lalu lintas jaringan ini:" - -msgid "" -"The fractals are now available from any of the app-api hosts. To verify, " -"visit http://IP_API_1/fractal/FRACTAL_UUID and http://IP_API_2/fractal/" -"FRACTAL_UUID. You now have multiple redundant web services. If one fails, " -"you can use the others." -msgstr "" -"Fraktal sekarang tersedia dari host app-api manapun. Untuk memverifikasi, " -"kunjungi http://IP_API_1/fractal/FRACTAL_UUID dan http://IP_API_2/fractal/" -"FRACTAL_UUID. Anda sekarang memiliki banyak layanan web berlebihan. Jika " -"gagal, Anda bisa menggunakan yang lain." - -msgid "The magic revisited" -msgstr "Magic revisited" - -msgid "" -"The message queue can take a while to notice that worker instances have died." -msgstr "" -"Antrian pesan bisa memakan waktu lama untuk memperhatikan bahwa instance " -"pekerja telah meninggal." - -msgid "" -"The most common way for OpenStack clouds to allocate Internet rout-able IP " -"addresses to instances, however, is through the use of floating IPs. A " -"floating IP is an address that exists as an entity unto itself, and can be " -"associated to a specific instance network interface. When a floating IP " -"address is associated to an instance network interface, OpenStack re-directs " -"traffic bound for that address to the address of the instance's internal " -"network interface address. Your cloud provider will generally offer pools of " -"floating IPs for your use." -msgstr "" -"Cara yang paling umum untuk awan OpenStack untuk mengalokasikan alamat IP " -"Internet rout-able ke instance, bagaimanapun, adalah melalui penggunaan " -"floating IP. Floating IP adalah alamat yang ada sebagai entitas tersendiri, " -"dan dapat dikaitkan dengan antarmuka jaringan instance yang spesifik. Bila " -"alamat floating IP dikaitkan dengan antarmuka jaringan instance, OpenStack " -"re-directs traffic yang terikat alamat tersebut ke alamat alamat antarmuka " -"jaringan internal instance. Provider awan Anda umumnya akan menawarkan kolam " -"floating IP untuk Anda gunakan." - -msgid "The new instance appears." -msgstr "Instance baru muncul." - -msgid "" -"The next logical step is to upload an object. Find a photo of a goat online, " -"name it :code:`goat.jpg`, and upload it to your :code:`fractals` container:" -msgstr "" -"Langkah logis berikutnya adalah mengunggah sebuah objek. Temukan foto " -"kambing secara online, beri nama :code:`goat.jpg`, dan unggah ke kontainer " -"Anda :code:`fractals`:" - -msgid "" -"The outputs section of the stack contains two ceilometer command-line " -"queries:" -msgstr "Bagian output dari stack berisi dua ceilometer command-line queries:" - -msgid "The parameter :code:`Size` is in gigabytes." -msgstr "Parameter :code:`Size` ada di gigabyte." - -msgid "The parameter :code:`size` is in gigabytes." -msgstr "Parameter :code:`size` ada di gigabyte." - -msgid "The prefix is `metering.` For example, `metering.some_name`." -msgstr "Awalannya adalah `metering.` Misalnya, `metering.some_name`." - -msgid "" -"The previous section uses two virtual machines - one 'control' service and " -"one 'worker'. The speed at which your application can generate fractals " -"depends on the number of workers. With just one worker, you can produce only " -"one fractal at a time. Before long, you will need more resources." -msgstr "" -"Bagian sebelumnya menggunakan dua mesin virtual - satu layanan 'control' " -"dan satu 'worker'. Kecepatan di mana aplikasi Anda dapat menghasilkan " -"fraktal bergantung pada jumlah pekerja. Dengan hanya satu pekerja, Anda " -"hanya bisa menghasilkan satu fraktal sekaligus. Tidak lama lagi, Anda akan " -"membutuhkan lebih banyak sumber daya." - -msgid "" -"The rest of this tutorial will not reference the all-in-one instance you " -"created in section one. Take a moment to delete this instance." -msgstr "" -"Sisa tutorial ini tidak akan mereferensikan all-in-one instance yang Anda " -"buat di bagian pertama. Luangkan waktu untuk menghapus instance ini." - -msgid "The samples and the statistics are listed in opposite time order!" -msgstr "Sampel dan statistiknya tercantum dalam urutan waktu yang berlawanan!" - -msgid "The second application is an OpenStack application that enables you to:" -msgstr "Aplikasi kedua adalah aplikasi OpenStack yang memungkinkan Anda untuk:" - -msgid "The shade framework can select and assign a free floating IP quickly" -msgstr "" -"Shade framework (kerangka teduh) dapat memilih dan menetapkan floating IP " -"(IP apung) bebas dengan cepat" - -msgid "" -"The sheer number of requests means that some requests for fractals might not " -"make it to the message queue for processing. To ensure that you can cope " -"with demand, you must also scale out the API capability of the Fractals " -"application." -msgstr "" -"Jumlah permintaan sebenarnya berarti beberapa permintaan fraktal mungkin " -"tidak sampai ke antrian pesan untuk diproses. Untuk memastikan bahwa Anda " -"dapat mengatasi permintaan, Anda juga harus meningkatkan kemampuan API dari " -"aplikasi Fractals." - -msgid "The stack automatically creates a Nova instance, as follows:" -msgstr "" -"Stack tersebut secara otomatis menciptakan instance Nova, sebagai berikut:" - -msgid "" -"The stack reports an initial :code:`CREATE_IN_PROGRESS` status. When all " -"software is installed, the status changes to :code:`CREATE_COMPLETE`." -msgstr "" -"Stack tersebut melaporkan status :code:`CREATE_IN_PROGRESS` awal. Saat semua " -"perangkat lunak diinstal, status berubah menjadi :code:`CREATE_COMPLETE`." - -msgid "" -"The stack we will be building uses the firing of alarms to control the " -"addition or removal of worker instances." -msgstr "" -"Stack yang akan kita bangun menggunakan penyalaan alarm untuk mengendalikan " -"penambahan atau pemindahan instance pekerja." - -msgid "The transport URL of the messaging service." -msgstr "URL transport dari layanan pesan." - -msgid "The unique identifier (UUID) of the image" -msgstr "Unique identifier (UUID) dari image" - -msgid "The value of a meter is regularly sampled and saved with a timestamp." -msgstr "" -"Nilai meter secara teratur diambil sampelnya dan disimpan dengan timestamp." - -msgid "" -"The worker service consumes messages from the work queue and then processes " -"them to create the corresponding fractal image file." -msgstr "" -"Layanan pekerja mengkonsumsi pesan dari antrian kerja dan kemudian " -"memprosesnya untuk membuat file image fraktal yang sesuai." - -msgid "" -"The world is running out of IPv4 addresses. If you get the \"No more IP " -"addresses available on network\" error, contact your cloud administrator. " -"You may also want to ask about IPv6 :)" -msgstr "" -"Dunia kehabisan alamat IPv4. Jika Anda mengalami kesalahan \"No more IP " -"addresses available on network\", hubungi administrator awan Anda. Anda " -"mungkin juga ingin bertanya tentang IPv6 :)" - -msgid "Then attach it to the instance:" -msgstr "Kemudian pasang ke instance:" - -msgid "Then request an IP number be allocated from the pool." -msgstr "Kemudian meminta nomor IP dialokasikan dari kolam." - -msgid "Then, create a pair of large fractals:" -msgstr "Kemudian, buat sepasang fractal besar:" - -msgid "" -"There are also multiple storage back ends (to store the generated fractal " -"images) and a database component (to store the state of tasks), but we will " -"talk about those in :doc:`/durability` and :doc:`/block_storage` " -"respectively." -msgstr "" -"Ada juga beberapa storage back end (untuk menyimpan image fraktal yang " -"dihasilkan) dan komponen basis data (untuk menyimpan keadaan tugas), namun " -"kami akan membicarakan hal-hal tersebut di :doc:`/durability` dan :doc:`/" -"block_storage` masing-masing." - -msgid "" -"There are definite advantages to this architecture. It is easy to get a \"new" -"\" server, without any of the issues that inevitably arise when a server has " -"been up and running for months, or even years." -msgstr "" -"Ada keuntungan pasti arsitektur ini. Sangat mudah untuk mendapatkan server " -"\"new\", tanpa masalah yang pasti muncul saat server telah berjalan dan " -"berjalan selama berbulan-bulan, atau bahkan bertahun-tahun." - -msgid "" -"There are more commands available; find out more details about them with :" -"code:`faafo get --help`, :code:`faafo list --help`, and :code:`faafo delete " -"--help`." -msgstr "" -"Ada lebih banyak perintah yang tersedia; cari tahu lebih banyak tentang " -"mereka :code:`faafo get --help`, :code:`faafo list --help`, dan :code:`faafo " -"delete --help`." - -msgid "" -"These demonstrate how the Ceilometer alarms add and remove instances. To use " -"them:" -msgstr "" -"Ini menunjukkan bagaimana alarm Ceilometer menambahkan dan menghapus contoh. " -"Untuk menggunakannya:" - -msgid "These queries provide a view into the behavior of the stack." -msgstr "Query ini memberikan pandangan tentang perilaku stack." - -msgid "" -"These saved samples are aggregated to produce a statistic. The statistic " -"that we are interested in is **avg**: the average of the samples over a " -"given period." -msgstr "" -"Sampel yang disimpan ini dikumpulkan untuk menghasilkan statistik. Statistik " -"yang kami minati adalah **avg**: rata-rata sampel selama periode tertentu." - -msgid "" -"These services are client-facing, so unlike the workers they do not use a " -"message queue to distribute tasks. Instead, you must introduce some kind of " -"load balancing mechanism to share incoming requests between the different " -"API services." -msgstr "" -"Layanan ini bersifat klien, sangat tidak seperti para pekerja mereka tidak " -"menggunakan antrian pesan untuk mendistribusikan tugas. Sebagai gantinya, " -"Anda harus memperkenalkan semacam mekanisme load balancing untuk berbagi " -"permintaan yang masuk antara berbagai layanan API." - -msgid "" -"These tools vastly reduce the effort it takes to work with large numbers of " -"servers, and also improve the ability to recreate, update, move, and " -"distribute applications." -msgstr "" -"Alat ini sangat mengurangi upaya yang diperlukan untuk bekerja dengan " -"sejumlah besar server, dan juga meningkatkan kemampuan untuk membuat ulang " -"(recreate), memperbarui, memindahkan, dan mendistribusikan aplikasi." - -msgid "" -"This OpenStack Database service is not installed in many clouds right now, " -"but if your cloud supports it, it can make your life a lot easier when " -"working with databases." -msgstr "" -"Layanan OpenStack Database ini tidak terinstal di banyak awan saat ini, " -"namun jika awan Anda mendukungnya, ini bisa membuat hidup Anda jauh lebih " -"mudah saat bekerja dengan database." - -msgid "This adds a \"foo\" key to the metadata that has a value of \"bar\"." -msgstr "Ini menambahkan \"foo\" key ke metadata yang memiliki nilai \"bar\"." - -msgid "" -"This chapter explains the importance of durability and scalability for your " -"cloud-based applications. In most cases, really achieving these qualities " -"means automating tasks such as scaling and other operational tasks." -msgstr "" -"Bab ini menjelaskan pentingnya daya tahan dan skalabilitas untuk aplikasi " -"berbasis awan Anda. Dalam kebanyakan kasus, benar-benar mencapai kualitas " -"ini berarti mengotomatisasi tugas seperti penskalaan dan tugas operasional " -"lainnya." - -msgid "" -"This chapter introduces the Networking API. This will enable us to build " -"networking topologies that separate public traffic accessing the application " -"from traffic between the API and the worker components. We also introduce " -"load balancing for resilience, and create a secure back-end network for " -"communication between the database, web server, file storage, and worker " -"components." -msgstr "" -"Bab ini memperkenalkan Networking API. Ini akan memungkinkan kita untuk " -"membangun topologi jaringan yang memisahkan lalu lintas umum yang mengakses " -"aplikasi dari lalu lintas antara komponen API dan pekerja. Kami juga " -"memperkenalkan load balancing untuk ketahanan, dan menciptakan jaringan back-" -"end yang aman untuk komunikasi antara database, server web, penyimpanan " -"file, dan komponen pekerja." - -msgid "This code returns output like this:" -msgstr "Kode ini menghasilkan output seperti ini:" - -msgid "This code returns the floating IP address:" -msgstr "Kode ini mengembalikan floating IP address:" - -msgid "" -"This command returns a very long list of meters. Once a meter is created, it " -"is never thrown away!" -msgstr "" -"Perintah ini mengembalikan daftar meter yang sangat panjang. Sekali satu " -"meter dibuat, tidak pernah dibuang!" - -msgid "This document has not yet been completed for the .NET SDK." -msgstr "Dokumen ini belum selesai untuk .NET SDK." - -msgid "This document has not yet been completed for the fog SDK." -msgstr "Dokumen ini belum selesai untuk fog SDK." - -msgid "This document has not yet been completed for the php-opencloud SDK." -msgstr "Dokumen ini belum selesai untuk php-opencloud SDK." - -msgid "" -"This file contains all the code from this tutorial section. This class lets " -"you view and run the code." -msgstr "" -"File ini berisi semua kode dari bagian tutorial ini. Kelas ini memungkinkan " -"Anda melihat dan menjalankan kode." - -msgid "" -"This file contains all the code from this tutorial section. This " -"comprehensive code sample lets you view and run the code as a single script." -msgstr "" -"File ini berisi semua kode dari bagian tutorial ini. Sampel kode " -"komprehensif ini memungkinkan Anda melihat dan menjalankan kode sebagai satu " -"skrip." - -msgid "This gets an IP address that you can assign to your instance:" -msgstr "" -"Ini mendapatkan alamat IP yang dapat Anda tetapkan untuk instance Anda:" - -msgid "" -"This guide is for experienced software developers who want to deploy " -"applications to OpenStack clouds." -msgstr "" -"Panduan ini untuk pengembang perangkat lunak berpengalaman yang ingin " -"mengerahkan aplikasi ke awan OpenStack." - -msgid "" -"This is a `useful pattern `_ for many cloud applications that have long lists of requests coming " -"in and a pool of resources from which to service them. This also means that " -"a worker may crash and the tasks will be processed by other workers." -msgstr "" -"Ini adalah sebuah `useful pattern `_ untuk banyak aplikasi awan yang memiliki daftar panjang " -"permintaan masuk dan kumpulan sumber daya untuk melayani mereka. Ini juga " -"berarti bahwa seorang pekerja mungkin mogok dan tugas akan diproses oleh " -"pekerja lain." - -msgid "" -"This option also uses a bit stream to upload the file, iterating bit by bit " -"over the file and passing those bits to Object Storage as they come. " -"Compared to loading the entire file in memory and then sending it, this " -"method is more efficient, especially for larger files." -msgstr "" -"Opsi ini juga menggunakan sedikit aliran untuk meng-upload file, iterasi " -"sedikit demi sedikit di atas file dan melewati bit by bit tersebut ke Object " -"Storage saat mereka datang. Dibandingkan dengan memuat keseluruhan file " -"dalam memori dan kemudian mengirimkannya, metode ini lebih efisien, terutama " -"untuk file yang lebih besar." - -msgid "" -"This process was obviously a very manual one. Figuring out that we needed " -"more workers and then starting new ones required some effort. Ideally the " -"system would do this itself. If you build your application to detect these " -"situations, you can have it automatically request and remove resources, " -"which saves you the effort of doing this work yourself. Instead, the " -"OpenStack Orchestration service can monitor load and start instances, as " -"appropriate. To find out how to set that up, see :doc:`orchestration`." -msgstr "" -"Proses ini jelas sangat manual. Mencari tahu bahwa kami membutuhkan lebih " -"banyak pekerja dan kemudian memulai pekerjaan baru membutuhkan beberapa " -"usaha. Idealnya sistem akan melakukan ini sendiri. Jika Anda membangun " -"aplikasi Anda untuk mendeteksi situasi ini, Anda dapat memilikinya secara " -"otomatis meminta dan menghapus sumber daya, yang menghemat usaha melakukan " -"pekerjaan ini sendiri. Sebagai gantinya, layanan OpenStack Orchestration " -"dapat memantau beban dan menghidupkan instance, jika sesuai. Untuk " -"mengetahui cara mengaturnya, lihat :doc:`orchestration`." - -msgid "" -"This section assumes that your cloud provider has implemented the OpenStack " -"Networking API (neutron). Users of clouds which have implemented legacy " -"networking (nova-network) will have access to networking via the Compute " -"API. Log in to the Horizon dashboard and navigate to :guilabel:`Project-" -">Access & Security->API Access`. If you see a service endpoint for the " -"Network API, your cloud is most likely running the Networking API. If you " -"are still in doubt, ask your cloud provider for more information." -msgstr "" -"Bagian ini mengasumsikan bahwa penyedia awan Anda telah menerapkan OpenStack " -"Networking API (neutron). Pengguna awan yang telah menerapkan jaringan " -"legacy (lawas) (nova-network) akan memiliki akses ke jaringan melalui " -"Compute API. Masuk ke dashboard Horizon dan arahkan ke: guilabel: `Project-> " -"Access & Security-> API Access`. Jika Anda melihat titik akhir layanan untuk " -"API Jaringan, awan Anda kemungkinan besar menjalankan API Jaringan. Jika " -"Anda masih ragu, mintalah informasi tentang penyedia awan Anda." - -msgid "" -"This section continues to illustrate the separation of services onto " -"multiple instances and highlights some of the choices that we have made that " -"facilitate scalability in the application architecture." -msgstr "" -"Bagian ini terus menggambarkan pemisahan layanan ke beberapa instance dan " -"menyoroti beberapa pilihan yang telah kita buat yang memfasilitasi " -"skalabilitas dalam arsitektur aplikasi." - -msgid "This section explores options for expanding the sample application." -msgstr "Bagian ini membahas opsi untuk memperluas aplikasi sampel." - -msgid "This section has not yet been completed for the .NET SDK" -msgstr "Bagian ini belum selesai untuk .NET SDK" - -msgid "This section has not yet been completed for the .NET SDK." -msgstr "Bagian ini belum selesai untuk .NET SDK." - -msgid "This section has not yet been completed for the OpenStack SDK." -msgstr "Bagian ini belum selesai untuk OpenStack SDK." - -msgid "This section has not yet been completed for the PHP-OpenCloud SDK." -msgstr "Bagian ini belum selesai untuk PHP-OpenCloud SDK." - -msgid "This section has not yet been completed for the fog SDK." -msgstr "Bagian ini belum selesai untuk fog SDK." - -msgid "This section has not yet been completed for the pkgcloud SDK." -msgstr "Bagian ini belum selesai untuk pkgcloud SDK." - -msgid "" -"This section introduces block storage, also known as volume storage, which " -"provides access to persistent storage devices. You interact with block " -"storage by attaching volumes to running instances just as you might attach a " -"USB drive to a physical server. You can detach volumes from one instance and " -"reattach them to another instance and the data remains intact. The OpenStack " -"Block Storage (cinder) project implements block storage." -msgstr "" -"Bagian ini memperkenalkan penyimpanan blok, juga dikenal sebagai penyimpanan " -"volume, yang menyediakan akses ke perangkat penyimpanan persisten. Anda " -"berinteraksi dengan penyimpanan blok dengan menyematkan volume untuk " -"menjalankan instance seperti Anda mungkin memasang drive USB ke server " -"fisik. Anda dapat melepaskan volume dari satu instance dan memasangnya " -"kembali ke instance lain dan datanya tetap utuh. Proyek OpenStack Block " -"Storage (cinder) menerapkan penyimpanan blok." - -msgid "This section introduces object storage." -msgstr "Bagian ini memperkenalkan penyimpanan objek." - -msgid "" -"This section introduces some operational concepts and tasks to developers " -"who have not written cloud applications before." -msgstr "" -"Bagian ini memperkenalkan beberapa konsep dan tugas operasional kepada " -"pengembang yang belum pernah menulis aplikasi cloud sebelumnya." - -msgid "" -"This section introduces the `HOT templating language `_, and takes you through some " -"common OpenStack Orchestration calls." -msgstr "" -"Bagian ini memperkenalkan `HOT templating language `_, dan membawa Anda melalui " -"beberapa panggilan OpenStack Orchestration yang umum." - -msgid "" -"This section introduces the application architecture and explains how it was " -"designed to take advantage of cloud features in general and OpenStack in " -"particular. It also describes some commands in the previous section." -msgstr "" -"Bagian ini memperkenalkan arsitektur aplikasi dan menjelaskan bagaimana hal " -"itu dirancang untuk memanfaatkan fitur awan secara umum dan OpenStack pada " -"khususnya. Ini juga menjelaskan beberapa perintah di bagian sebelumnya." - -msgid "" -"This section is based on the Neutron LBaaS API version 1.0 https://docs." -"openstack.org/admin-guide/networking_adv-features.html#basic-load-balancer-" -"as-a-service-operations" -msgstr "" -"Bagian ini didasarkan pada Neutron LBaaS API version 1.0 https://docs." -"openstack.org/admin-guide/networking_adv-features.html#basic-load-balancer-" -"as-a-service-operations" - -msgid "This section is incomplete. Please help us finish it!" -msgstr "Bagian ini tidak lengkap. Tolong bantu kami menyelesaikannya" - -msgid "" -"This tutorial shows two applications. The first application is a simple " -"fractal generator that uses mathematical equations to generate beautiful " -"`fractal images `_. We show you this " -"application in its entirety so that you can compare it to a second, more " -"robust, application." -msgstr "" -"Tutorial ini menunjukkan dua aplikasi. Aplikasi pertama adalah generator " -"fraktal sederhana yang menggunakan persamaan matematis untuk menghasilkan " -"keindahan `fractal images `_. Kami " -"menunjukkan aplikasi ini secara keseluruhan sehingga Anda bisa " -"membandingkannya dengan aplikasi kedua yang lebih kuat." - -msgid "" -"Though you might have configured Object Storage to store images, the Fractal " -"application needs a database to track the location of, and parameters that " -"were used to create, images in Object Storage. This database server cannot " -"fail." -msgstr "" -"Meskipun Anda mungkin telah mengkonfigurasi Object Storage untuk menyimpan " -"image, aplikasi Fractal memerlukan database untuk melacak lokasi, dan " -"parameter yang digunakan untuk membuat, image di Object Storage. Server " -"database ini tidak bisa gagal." - -msgid "" -"To begin to store objects, we must first make a container. Call yours :code:" -"`fractals`:" -msgstr "" -"Untuk mulai menyimpan objek, pertama kita harus membuat kontainer. " -"Teleponmu :code:`fractals`:" - -msgid "" -"To better understand how the template works, use this guide to install the " -"'ceilometer' command-line client:" -msgstr "" -"Untuk lebih memahami bagaimana template bekerja, gunakan panduan ini untuk " -"menginstal 'ceilometer' command-line client:" - -msgid "" -"To configure shade using a profile, use your credentials above to specify " -"the cloud provider name, username, password, project name, and region name " -"in the file :file:`~/.config/openstack/clouds.yml`." -msgstr "" -"Untuk mengkonfigurasi shade (naungan) menggunakan profil, gunakan kredensial " -"Anda di atas untuk menentukan nama provider awan, nama pengguna, kata sandi, " -"nama proyek, dan nama wilayah dalam file :file:`~/.config/openstack/clouds." -"yml`." - -msgid "To create a floating IP address to use with your instance:" -msgstr "" -"Untuk membuat alamat IP mengambang untuk digunakan dengan instance Anda:" - -msgid "" -"To delete a container, you must first remove all objects from the container. " -"Otherwise, the delete operation fails:" -msgstr "" -"Untuk menghapus sebuah kontainer, pertama-tama Anda harus menghapus semua " -"objek dari kontainer. Jika tidak, operasi penghapusan akan gagal:" - -msgid "To detach and delete a volume:" -msgstr "Untuk melepaskan dan menghapus volume:" - -msgid "To determine whether a public IP address is assigned to your instance:" -msgstr "Untuk menentukan apakah alamat IP publik diberikan pada instance Anda:" - -msgid "To increase the overall capacity, add three workers:" -msgstr "Untuk meningkatkan kapasitas keseluruhan, tambahkan tiga pekerja:" - -msgid "" -"To install the 'trove' command-line client, see `Install the OpenStack " -"command-line clients `_." -msgstr "" -"Untuk menginstal 'trove' command-line client, lihat `Install the OpenStack " -"command-line clients `_." - -msgid "" -"To install the OpenStack .NET SDK, use the NeGet Package Manager that is " -"included with Visual Studio and Xamarin Studio. You simply add a package " -"named 'openstack.net' and the NeGet Package Manager automatically installs " -"the necessary dependencies." -msgstr "" -"Untuk menginstal OpenStack .NET SDK, gunakan NeGet Package Manager yang " -"disertakan dengan Visual Studio dan Xamarin Studio. Anda cukup menambahkan " -"sebuah paket bernama 'openstack.net' dan NeGet Package Manager secara " -"otomatis menginstal dependensi yang diperlukan." - -msgid "To interact with the cloud, you must also have" -msgstr "Untuk berinteraksi dengan awan, Anda juga harus memiliki" - -msgid "" -"To launch an instance, you choose a flavor and an image. The flavor " -"represents the size of the instance, including the number of CPUs and amount " -"of RAM and disk space. An image is a prepared OS installation from which you " -"clone your instance. When you boot instances in a public cloud, larger " -"flavors can be more expensive than smaller ones in terms of resources and " -"monetary cost." -msgstr "" -"Untuk meluncurkan sebuah instance, Anda memilih flavor dan image. Flavor " -"mewakili ukuran instance, termasuk jumlah CPU dan jumlah RAM dan ruang " -"disk. Image adalah instalasi OS yang disiapkan dari mana Anda mengkloning " -"instance Anda. Saat Anda melakukan booting di awan publik, flavor yang lebih " -"besar bisa lebih mahal daripada yang lebih kecil dari segi sumber daya dan " -"biaya moneter." - -msgid "" -"To learn about auto-scaling with the Orchestration API, read these articles:" -msgstr "" -"Untuk mempelajari tentang penskalaan otomatis dengan Orchestration API, baca " -"artikel ini:" - -msgid "" -"To learn about the template syntax for OpenStack Orchestration, how to " -"create basic templates, and their inputs and outputs, see `Heat " -"Orchestration Template (HOT) Guide `_." -msgstr "" -"Untuk mempelajari tentang sintaks template untuk OpenStack Orchestration, " -"bagaimana membuat template dasar, dan masukan dan keluarannya, lihat `Heat " -"Orchestration Template (HOT) Guide `_." - -msgid "" -"To list the images that are available in your cloud, run some API calls:" -msgstr "" -"Untuk daftar image yang tersedia di awan Anda, jalankan beberapa panggilan " -"API:" - -msgid "To recap:" -msgstr "Untuk rekap:" - -msgid "" -"To run your application, you must launch an instance. This instance serves " -"as a virtual machine." -msgstr "" -"Untuk menjalankan aplikasi Anda, Anda harus meluncurkan sebuah instance. " -"Contoh ini berfungsi sebagai mesin virtual." - -msgid "To see if the volume creation was successful, list all volumes:" -msgstr "" -"Untuk melihat apakah pembuatan volume berhasil, cantumkan semua volume:" - -msgid "" -"To see the application running, you must know where to look for it. By " -"default, your instance has outbound network access. To make your instance " -"reachable from the Internet, you need an IP address. By default in some " -"cases, your instance is provisioned with a publicly rout-able IP address. In " -"this case, you see an IP address listed under `public_ips` or `private_ips` " -"when you list the instances. If not, you must create and attach a floating " -"IP address to your instance." -msgstr "" -"Untuk melihat aplikasi berjalan, Anda harus tahu di mana mencarinya. Secara " -"default, instance Anda memiliki akses jaringan keluar. Untuk membuat " -"instance Anda dapat dijangkau dari Internet, Anda memerlukan alamat IP. " -"Secara default dalam beberapa kasus, instance Anda tersedia dengan alamat IP " -"yang dapat digunakan secara publik. Dalam kasus ini, Anda melihat alamat IP " -"yang tercantum di bawah `public_ips` atau` private_ips` saat Anda " -"mencantumkan instance. Jika tidak, Anda harus membuat dan menghubungkan " -"alamat IP mengambang ke instance Anda." - -msgid "To see whether a private IP address is assigned to your instance:" -msgstr "Untuk melihat apakah alamat IP private diberikan ke instance Anda:" - -msgid "To see which security groups apply to an instance, you can:" -msgstr "" -"Untuk melihat grup keamanan mana yang berlaku untuk sebuah instance, Anda " -"dapat:" - -msgid "" -"To set up environment variables for your cloud in an :file:`openrc.sh` file, " -"see `Set environment variables using the OpenStack RC file `_." -msgstr "" -"Untuk mengatur variabel lingkungan untuk awan Anda dalam file :file:`openrc." -"sh``, lihat `Set environment variables using the OpenStack RC file `_." - -msgid "" -"To set up the necessary variables for your cloud in an 'openrc' file, use " -"this guide:" -msgstr "" -"Untuk mengatur variabel yang diperlukan untuk awan Anda dalam file 'openrc', " -"gunakan panduan ini:" - -msgid "" -"To show the details of a specific fractal use the subcommand :code:`show` of " -"the Faafo CLI." -msgstr "" -"Untuk menunjukkan rincian fraktal spesifik gunakan subcommand :code:`show` " -"dari Faafo CLI." - -msgid "" -"To test what happens when the Fractals application is under load, you can:" -msgstr "" -"Untuk menguji apa yang terjadi saat aplikasi Fractals di bawah muatan, Anda " -"dapat:" - -msgid "" -"To try it out, add the following code to a Python script (or use an " -"interactive Python shell) by calling :code:`python -i`." -msgstr "" -"Untuk mencobanya, tambahkan kode berikut ke skrip Python (atau gunakan shell " -"Python interaktif) dengan memanggil :code:`python -i`." - -msgid "To try it out, make a 1GB volume called 'test'." -msgstr "Untuk mencobanya, buatlah volume 1GB yang disebut 'test'." - -msgid "" -"To try it, add the following code to a Python script (or use an interactive " -"Python shell) by calling :code:`python -i`." -msgstr "" -"Untuk mencobanya, tambahkan kode berikut ke skrip Python (atau gunakan shell " -"Python interaktif) dengan memanggil :code:`python -i`." - -msgid "" -"To try it, use an interactive Node.js shell by calling :code:`node` or add " -"the following code to a script." -msgstr "" -"Untuk mencobanya, gunakan shell Node.js interaktif dengan memanggil :code:" -"`node` atau tambahkan kode berikut ke skrip." - -msgid "" -"To use Maven to compile a downloaded sample, with the command prompt located " -"in the same directory as the :code:`pom.xml` file, enter:" -msgstr "" -"Untuk menggunakan Maven untuk mengkompilasi sampel yang telah didownload, " -"dengan command prompt berada di direktori yang sama dengan file :code:`pom." -"xml`, masukkan:" - -msgid "" -"To use Maven to run each downloaded sample, with the command prompt located " -"in the same directory as the :code:`pom.xml` file, enter:" -msgstr "" -"Untuk menggunakan Maven untuk menjalankan setiap sampel yang diunduh, dengan " -"command prompt yang terdapat di direktori yang sama dengan file :code:`pom." -"xml`, masukkan:" - -msgid "" -"To use a floating IP, you must first allocate an IP to your project, then " -"associate it to your instance's network interface." -msgstr "" -"Untuk menggunakan floating IP, Anda harus mengalokasikan IP ke proyek Anda " -"terlebih dulu, kemudian mengaitkannya ke antarmuka jaringan instance Anda." - -msgid "" -"To use the OpenStack .NET SDK, add the following code in the required " -"namespace section." -msgstr "" -"Untuk menggunakan OpenStack .NET SDK, tambahkan kode berikut di bagian " -"namespace yang dibutuhkan." - -msgid "To verify that ceilometer is installed, list the known meters:" -msgstr "" -"Untuk memverifikasi ceilometer yang terpasang, daftar meter yang diketahui:" - -msgid "URL" -msgstr "URL" - -msgid "" -"Use :code:`ex_list_floating_ip_pools()` and select the first floating IP " -"address pool. Allocate this pool to your project and use it to get a " -"floating IP address." -msgstr "" -"Gunakan :code:`ex_list_floating_ip_pools()` dan pilih kolam floating IP " -"address pertama. Alokasikan kolam ini ke proyek Anda dan gunakan untuk " -"mendapatkan floating IP address." - -msgid "" -"Use :code:`getFloatingIps` to check for unused addresses. Select the first " -"available address. Otherwise, use :code:`allocateNewFloatingIp` to allocate " -"a floating IP to your project from the default address pool." -msgstr "" -"Gunakan :code:`getFloatingIps` untuk memeriksa alamat yang tidak terpakai. " -"Pilih alamat pertama yang tersedia. Jika tidak, gunakan :code:" -"`allocateNewFloatingIp` untuk mengalokasikan floating IP ke proyek Anda dari " -"kolam alamat default." - -msgid "Use Block Storage for the Fractal database server" -msgstr "Gunakan Block Storage untuk server database Fractal" - -msgid "Use Object Storage instead of a database" -msgstr "Gunakan Object Storage bukan database" - -msgid "Use Object Storage to store fractals" -msgstr "Gunakan Object Storage untuk menyimpan fractal" - -msgid "Use Object and Block storage for file and database persistence." -msgstr "" -"Gunakan penyimpanan Object dan Block untuk file dan database persistence." - -msgid "Use Orchestration services to automatically adjust to the environment." -msgstr "" -"Gunakan layanan Orchestration untuk menyesuaikan diri secara otomatis dengan " -"lingkungan." - -msgid "" -"Use SSH with the existing SSH keypair to log in to the :code:`app-" -"controller` controller instance." -msgstr "" -"Gunakan SSH dengan keypair SSH yang ada untuk login ke instance controller :" -"code:`app-controller`:" - -msgid "" -"Use a for loop to call the :code:`faafo` command-line interface to request a " -"random set of fractals 500 times:" -msgstr "" -"Gunakan for loop until memanggil antarmuka command-line :code:`faafo` " -"untuk meminta kumpulan fraktal acak sebanyak 500 kali:" - -msgid "Use conf.d and etc.d." -msgstr "Menggunakan conf.d and etc.d." - -msgid "Use environment variables to set your cloud credentials" -msgstr "Gunakan variabel lingkungan untuk menetapkan kredensial awan Anda" - -msgid "" -"Use network service client to select the first floating IP address pool. " -"Allocate this pool to your project and use it to get a floating IP address." -msgstr "" -"Gunakan klien layanan jaringan untuk memilih kolam floating IP address " -"pertama. Alokasikan kolam ini ke proyek Anda dan gunakan untuk mendapatkan " -"floating IP address." - -msgid "Use the :code:`faafo UUID` command to examine some of the fractals." -msgstr "Gunakan perintah :code:`faafo UUID` untuk memeriksa beberapa fraktal." - -msgid "Use the :code:`faafo create` command to generate fractals." -msgstr "Gunakan perintah :code:`faafo create` untuk menghasilkan fraktal." - -msgid "" -"Use the :code:`faafo list` command to watch the progress of fractal " -"generation." -msgstr "" -"Gunakan perintah :code:`faafo list` untuk melihat perkembangan generasi " -"fraktal." - -msgid "" -"Use the `Health Endpoint Monitoring Pattern ` to implement functional checks within your " -"application that external tools can access through exposed endpoints at " -"regular intervals." -msgstr "" -"Gunakan `Health Endpoint Monitoring Pattern ` untuk menerapkan pemeriksaan fungsional dalam " -"aplikasi Anda sehingga alat eksternal dapat mengakses melalui endpoint yang " -"terpapar secara berkala." - -msgid "" -"Use the image, flavor, key pair, and userdata to create an instance. After " -"you request the instance, wait for it to build." -msgstr "" -"Gunakan image, flavor, key pair, dan userdata untuk membuat sebuah instance. " -"Setelah Anda meminta instance, tunggulah untuk membangunnya." - -msgid "Use the stack ID to get more information about the stack:" -msgstr "" -"Gunakan stack ID untuk mendapatkan informasi lebih lanjut tentang stack:" - -msgid "" -"Use this guide to install the 'openstack' command-line client: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"Gunakan panduan ini untuk menginstal klien command-line 'openstack': https://" -"docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"Use this guide to set up the necessary variables for your cloud in an " -"'openrc' file: https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" -msgstr "" -"Gunakan panduan ini untuk menyiapkan variabel yang diperlukan untuk awan " -"Anda di file 'openrc': https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" - -msgid "" -"Use your credentials above to specify the cloud provider name, username, " -"password, project_name and region_name in the file :file:`~/.config/" -"openstack/clouds.yml`." -msgstr "" -"Gunakan kredensial Anda di atas untuk menentukan nama penyedia awan, nama " -"pengguna, kata sandi, project_name dan region_name dalam file :file:`~/." -"config/openstack/clouds.yml`." - -msgid "Use your selected image and flavor to create an instance." -msgstr "Gunakan flavor dan image pilihan Anda untuk membuat sebuah instance." - -msgid "User data in openstacksdk must be encoded to Base64" -msgstr "Data pengguna di openstacksdk harus dikodekan ke Base64" - -msgid "User data in openstacksdk must be encoded to Base64." -msgstr "Data pengguna di openstacksdk harus dikodekan ke Base64." - -msgid "" -"Userdata. During instance creation, you can provide userdata to OpenStack to " -"configure instances after they boot. The cloud-init service applies the user " -"data to an instance. You must pre-install the cloud-init service on your " -"chosen image. We will go into more detail in :doc:`/introduction`." -msgstr "" -"Userdata (dara pengguna). Selama pembuatan instance, Anda dapat menyediakan " -"userdata ke OpenStack untuk mengonfigurasi instance setelah booting. Layanan " -"cloud-init menerapkan data pengguna ke sebuah instance. Anda harus melakukan " -"pra-instal layanan cloud-init pada image yang Anda pilih. Kami akan membahas " -"lebih rinci :doc:`/introduction`." - -msgid "Using Pacemaker to look at the API." -msgstr "Menggunakan Pacemaker untuk melihat API." - -msgid "Values" -msgstr "Values" - -msgid "Verify that the stack was successfully created:" -msgstr "Pastikan stack berhasil dibuat:" - -msgid "Verify that we have had an impact" -msgstr "Verifikasi bahwa kami memiliki dampak" - -msgid "Verify the nova instance was deleted when the stack was removed:" -msgstr "Verifikasi instance nova telah dihapus saat stack dihapus:" - -msgid "Wait for it to reach the :code:`CREATE_COMPLETE` status:" -msgstr "Tunggu sampai mencapai status :code:`CREATE_COMPLETE`:" - -msgid "" -"Watch :code:`top` on the worker instance. Right after calling :code:`faafo` " -"the :code:`faafo-worker` process should start consuming a lot of CPU cycles." -msgstr "" -"Perhatikan :code:`top` pada instance pekerja. Tepat setelah menelepon :code:" -"`faafo`, proses :code:`faafo-worker` harus mulai menghabiskan banyak " -"siklus CPU." - -msgid "" -"We are interested because the Telemetry service supports alarms: an alarm is " -"fired when our average statistic breaches a configured threshold. When the " -"alarm fires, an associated action is performed." -msgstr "" -"Kami tertarik karena layanan Telemetry mendukung alarm: alarm nyala saat " -"statistik rata-rata kami melanggar ambang batas yang dikonfigurasi. Saat " -"alarm menyala, tindakan yang terkait dilakukan." - -msgid "" -"We assume that you can already access an OpenStack cloud. You must have a " -"project, also known as a tenant, with a minimum quota of six instances. " -"Because the Fractals application runs in Ubuntu, Debian, Fedora-based, and " -"openSUSE-based distributions, you must create instances that use one of " -"these operating systems." -msgstr "" -"Kami berasumsi bahwa Anda sudah dapat mengakses awan OpenStack. Anda harus " -"memiliki sebuah proyek, juga dikenal sebagai tenant (penyewa), dengan kuota " -"minimal enam instance. Karena aplikasi Fractals berjalan di distribusi " -"berbasis Ubuntu, Debian, Fedora, dan openSUSE, Anda harus membuat instance " -"yang menggunakan salah satu dari sistem operasi ini." - -msgid "We cover networking in detail in :doc:`/networking`." -msgstr "Kami meliput networking secara rinci di :doc:`/networking`." - -msgid "" -"We explained image and flavor in :doc:`getting_started`, so in the following " -"sections, we will explain the other parameters in detail, including :code:" -"`ex_userdata` (cloud-init) and :code:`ex_keyname` (key pairs)." -msgstr "" -"Kami menjelaskan image and flavor di :doc: `getting_started`, jadi pada " -"bagian berikut, kami akan menjelaskan parameter lainnya secara rinci, " -"termasuk :code:`ex_userdata` (cloud-init) dan :code:`ex_keyname` (key pairs)." - -msgid "We have created a Maven POM file to help you get started." -msgstr "Kami telah membuat file POM Maven untuk membantu Anda memulai." - -msgid "" -"We have not quite figured out how to stop using a database, but the general " -"steps are:" -msgstr "" -"Kami belum tahu bagaimana cara menghentikan penggunaan database, tapi " -"langkah umumnya adalah:" - -msgid "" -"We have talked about separating functions into different micro-services, and " -"how that enables us to make use of the cloud architecture. Now let us see " -"that in action." -msgstr "" -"Kami telah berbicara tentang memisahkan fungsi menjadi layanan mikro yang " -"berbeda, dan bagaimana hal itu memungkinkan kami memanfaatkan arsitektur " -"awan. Sekarang mari kita lihat itu beraksi." - -msgid "What you need" -msgstr "Apa yang kau butuhkan" - -msgid "What you will learn" -msgstr "Apa yang akan kamu pelajari" - -msgid "" -"When an SSH public key is provided during instance creation, cloud-init " -"installs this key on a user account. (The user name varies between cloud " -"images.) See the `Obtaining Images `_ section of the image guide for guidance about which " -"user name you should use when SSHing. If you still have problems logging in, " -"ask your cloud provider to confirm the user name." -msgstr "" -"Bila kunci publik SSH diberikan selama pembuatan instance, awan init " -"memasang kunci ini di akun pengguna. (Nama pengguna bervariasi di antara " -"image awan.) Lihat `Obtaining Images `_ bagian dari panduan image untuk pedoman tentang nama " -"pengguna yang harus Anda gunakan saat SSHing. Jika Anda masih mengalami " -"masalah saat log in, mintalah provider awan untuk mengkonfirmasi nama " -"pengguna." - -msgid "" -"When the instance boots, the `ex_userdata` variable value instructs the " -"instance to deploy the Fractals application." -msgstr "" -"Ketika instance boot, nilai variabel `ex_userdata` menginstruksikan instance " -"untuk menerapkan aplikasi Fractals." - -msgid "" -"When you create an instance for the application, you want to give it a bit " -"more information than you supplied to the bare instance that you just " -"created and deleted. We will go into more detail in later sections, but for " -"now, simply create the following resources so that you can feed them to the " -"instance:" -msgstr "" -"Saat Anda membuat sebuah instance untuk aplikasi ini, Anda ingin memberikan " -"sedikit informasi lebih banyak daripada yang Anda berikan pada instance " -"kosong yang baru saja Anda buat dan hapus. Kami akan membahas lebih " -"terperinci di bagian selanjutnya, tapi untuk saat ini, cukup buat sumber " -"daya berikut sehingga Anda bisa memberi mereka instance:" - -msgid "" -"When you deal with pets, you name and care for them. If they get sick, you " -"nurse them back to health, which can be difficult and very time consuming. " -"When you deal with cattle, you attach a numbered tag to their ear. If they " -"get sick, you put them down and move on." -msgstr "" -"Bila Anda berurusan dengan hewan peliharaan, Anda menamai dan merawat " -"mereka. Jika mereka sakit, Anda merawat mereka kembali ke kesehatan, yang " -"bisa menyulitkan dan sangat menyita waktu. Saat Anda berurusan dengan " -"ternak, Anda memasang label bernomor di telinga mereka. Jika mereka sakit, " -"Anda menurunkannya dan melanjutkan perjalanan." - -msgid "" -"While this stack starts a single instance that builds and runs the Fractal " -"application as an all-in-one installation, you can make very complicated " -"templates that impact dozens of instances or that add and remove instances " -"on demand. Continue to the next section to learn more." -msgstr "" -"Sementara stack ini memulai satu instance yang membangun dan menjalankan " -"aplikasi Fractal sebagai instalasi all-in-one, Anda dapat membuat template " -"yang sangat rumit yang mempengaruhi lusinan instance atau menambahkan dan " -"menghapus instance sesuai permintaan. Lanjutkan ke bagian selanjutnya untuk " -"mempelajari lebih lanjut." - -msgid "Who should read this guide" -msgstr "Siapa yang harus membaca panduan ini?" - -msgid "" -"With multiple workers producing fractals as fast as they can, the system " -"must be able to receive the requests for fractals as quickly as possible. If " -"our application becomes popular, many thousands of users might connect to " -"our API to generate fractals." -msgstr "" -"Dengan beberapa pekerja yang memproduksi fraktal secepat mungkin, sistem " -"harus dapat menerima permintaan fraktal secepat mungkin. Jika aplikasi kita " -"menjadi populer, ribuan pengguna mungkin terhubung ke API untuk menghasilkan " -"fraktal." - -msgid "" -"With the OpenStack Networking API, the workflow for creating a network " -"topology that separates the public-facing Fractals app API from the worker " -"back end is as follows:" -msgstr "" -"Dengan OpenStack Networking API, workflow (jalur kerja) untuk membuat " -"topologi jaringan yang memisahkan API aplikasi Fractals yang dihadapi publik " -"(public-facing) dari worker back end adalah sebagai berikut:" - -msgid "" -"With the Orchestration API, the Fractal application can create an auto-" -"scaling group for all parts of the application, to dynamically provision " -"more compute resources during periods of heavy utilization, and also " -"terminate compute instances to scale down, as demand decreases." -msgstr "" -"Dengan Orchestration API, aplikasi Fractal dapat membuat grup skala otomatis " -"untuk semua bagian aplikasi, untuk secara dinamis menyediakan sumber daya " -"yang lebih banyak selama periode penggunaan yang berat, dan juga " -"menghentikan komputasi instance untuk diturunkan, karena permintaan menurun." - -msgid "" -"With the addition of the load balancer, the Fractal app's networking " -"topology now reflects the modular nature of the application itself." -msgstr "" -"Dengan penambahan penyeimbang beban, topologi jaringan aplikasi Fractal " -"sekarang mencerminkan sifat modular dari aplikasi itu sendiri." - -msgid "Work with stacks: Advanced" -msgstr "Bekerja dengan stacks: Tingkat lanjut" - -msgid "Work with stacks: Basics" -msgstr "Bekerja dengan stacks: Basics" - -msgid "Work with the CLI" -msgstr "Bekerja dengan CLI" - -msgid "Work with the OpenStack Database service" -msgstr "Bekerja dengan layanan OpenStack Database" - -msgid "" -"Wow! If you have made it through this section, you know more than the " -"authors of this guide know about working with OpenStack clouds." -msgstr "" -"Wow! Jika Anda berhasil melewati bagian ini, Anda tahu lebih banyak daripada " -"yang penulis panduan ini ketahui tentang bekerja dengan awan OpenStack." - -msgid "Writing your first OpenStack application" -msgstr "Menulis aplikasi OpenStack pertama Anda" - -msgid "" -"You also need a security group to permit access to the database server (for " -"MySQL, port 3306) from the network:" -msgstr "" -"Anda juga memerlukan grup keamanan untuk mengizinkan akses ke server " -"database (untuk MySQL, port 3306) dari jaringan:" - -msgid "" -"You are ready to create members for the load balancer pool, which reference " -"the floating IPs:" -msgstr "" -"Anda siap untuk membuat anggota untuk load balancer pool, yang merujuk pada " -"floating IP:" - -msgid "" -"You can aggregate samples and calculate statistics across all instances with " -"the `metering.some_name` metadata that has `some_value` by using a query of " -"the form:" -msgstr "" -"Anda dapat menggabungkan sampel dan menghitung statistik di semua instance " -"dengan metadata `metering.some_name` yang memiliki `some_value` dengan " -"menggunakan kueri formulir:" - -msgid "" -"You can also download the OpenStack RC file from the OpenStack Horizon " -"dashboard. Log in to the dashboard and click :guilabel:`Project->Access & " -"Security->API Access->Download OpenStack RC file`. If you use this method, " -"be aware that the \"auth URL\" does not include the path. For example, if " -"your :file:`openrc.sh` file shows:" -msgstr "" -"Anda juga bisa mendownload file RC OpenStack dari dashboard Horizon " -"OpenStack. Masuk ke dasbor dan klik :guilabel:`Project->Access & Security-" -">API Access->Download OpenStack RC file`. Jika Anda menggunakan metode ini, " -"perhatikan bahwa \"URL auth\" tidak termasuk jalurnya. Misalnya, jika file :" -"file:`openrc.sh` Anda menunjukkan:" - -msgid "You can also get information about available flavors:" -msgstr "Anda juga bisa mendapatkan informasi tentang flavor yang tersedia:" - -msgid "" -"You can also use the OpenStack API to create snapshots of running instances " -"and persistent volumes. For more information, see your SDK documentation." -msgstr "" -"Anda juga dapat menggunakan API OpenStack untuk membuat snapshot dari " -"instance yang berjalan dan volume yang ada. Untuk informasi lebih lanjut, " -"lihat dokumentasi SDK Anda." - -msgid "" -"You can complete advanced tasks such as uploading an object with metadata, " -"as shown in following example. For more information, see the documentation " -"for your SDK." -msgstr "" -"Anda dapat menyelesaikan tugas lanjutan seperti mengunggah objek dengan " -"metadata, seperti ditunjukkan pada contoh berikut. Untuk informasi lebih " -"lanjut, lihat dokumentasi untuk SDK Anda." - -msgid "" -"You can detach the volume and reattach it elsewhere, or use the following " -"steps to delete the volume." -msgstr "" -"Anda dapat melepaskan volume dan memasangnya kembali di tempat lain, atau " -"gunakan langkah-langkah berikut untuk menghapus volume." - -msgid "You can list available security groups with:" -msgstr "Anda dapat mencantumkan kelompok keamanan yang tersedia dengan:" - -msgid "You can then attach it to the instance:" -msgstr "Anda kemudian bisa lekatkan ke instance:" - -msgid "" -"You create stacks from templates, which contain resources. Resources are an " -"abstraction in the HOT (Heat Orchestration Template) template language, " -"which enables you to define different cloud resources by setting the :code:" -"`type` attribute." -msgstr "" -"Anda membuat tumpukan dari template, yang berisi sumber daya. Sumber daya " -"adalah abstraksi dalam bahasa template HOT (Heat Orchestration Template), " -"yang memungkinkan Anda menentukan sumber daya awan yang berbeda dengan " -"menetapkan atribut :kode: `type`." - -msgid "" -"You might have to run the :command:`openstack stack list` command a few " -"times before the stack creation is complete." -msgstr "" -"Anda mungkin harus menjalankan perintah :command:`openstack stack list` " -"beberapa kali sebelum pembuatan stack selesai." - -msgid "" -"You might want to use multiple clouds, such as a private cloud inside your " -"organization and a public cloud. This section attempts to do exactly that." -msgstr "" -"Anda mungkin ingin menggunakan beberapa awan, seperti awan pribadi di dalam " -"organisasi Anda dan awan publik. Bagian ini mencoba melakukan hal itu." - -msgid "You must pass in objects and not object names to the delete commands." -msgstr "Anda harus melewati objek dan bukan nama objek ke perintah hapus." - -msgid "" -"You need a server for the dedicated database. Use the image, flavor, and " -"keypair that you used in :doc:`/getting_started` to launch an :code:`app-" -"database` instance." -msgstr "" -"Anda memerlukan server untuk database dedicated. Gunakan image, flavor, dan " -"keypair yang Anda gunakan di :doc:`/getting_started` untuk meluncurkan " -"sebuah instance :code:`app-database`." - -msgid "You pass in these configuration settings as parameters:" -msgstr "Anda melewati pengaturan konfigurasi ini sebagai parameter:" - -msgid "You should be able to see them in the member list:" -msgstr "Anda harus bisa melihatnya di daftar anggota:" - -msgid "" -"You should be fairly confident about starting instances and distributing " -"services from an application among these instances." -msgstr "" -"Anda harus cukup percaya diri untuk memulai instance dan mendistribusikan " -"layanan dari aplikasi di antara instances ini." - -msgid "" -"You should now be able to see this container appear in a listing of all " -"containers in your account:" -msgstr "" -"Anda sekarang dapat melihat penampung ini muncul dalam daftar semua " -"kontainer di akun Anda:" - -msgid "" -"You should now be fairly confident working with Block Storage volumes. For " -"information about other calls, see the volume documentation for your SDK. " -"Or, try one of these tutorial steps:" -msgstr "" -"Anda sekarang harus cukup yakin bekerja dengan volume Block Storage. Untuk " -"informasi tentang panggilan lainnya, lihat dokumentasi volume untuk SDK " -"Anda. Atau, cobalah salah satu langkah tutorial berikut:" - -msgid "" -"You should now be fairly confident working with Object Storage. You can find " -"more information about the Object Storage SDK calls at:" -msgstr "" -"Anda sekarang harus cukup yakin bekerja dengan Object Storage. Anda dapat " -"menemukan lebih banyak informasi tentang Object Storage SDK di:" - -msgid "" -"You should now be fairly confident working with the Network API. To see " -"calls that we did not cover, see the volume documentation of your SDK, or " -"try one of these tutorial steps:" -msgstr "" -"Anda sekarang harus cukup yakin bekerja dengan Network API. Untuk melihat " -"panggilan yang tidak kami cover, lihat dokumentasi volume SDK Anda, atau " -"coba salah satu langkah tutorial berikut:" - -msgid "" -"You should now be fairly confident working with the Orchestration service. " -"To see the calls that we did not cover and more, see the volume " -"documentation of your SDK. Or, try one of these steps in the tutorial:" -msgstr "" -"Anda sekarang harus cukup yakin bekerja dengan layanan Orchestration. Untuk " -"melihat panggilan yang tidak kami tutup dan banyak lagi, lihat dokumentasi " -"volume SDK Anda. Atau, coba salah satu langkah berikut dalam tutorial:" - -msgid "" -"You should now have a basic understanding of the architecture of cloud-based " -"applications. In addition, you have had practice starting new instances, " -"automatically configuring them at boot, and even modularizing an application " -"so that you may use multiple instances to run it. These are the basic steps " -"for requesting and using compute resources in order to run your application " -"on an OpenStack cloud." -msgstr "" -"Anda sekarang harus memiliki pemahaman dasar tentang arsitektur aplikasi " -"berbasis cloud. Selain itu, Anda sudah berlatih memulai instance baru, " -"secara otomatis mengonfigurasikannya saat boot, dan bahkan memodulasi sebuah " -"aplikasi sehingga Anda dapat menggunakan beberapa instance untuk " -"menjalankannya. Ini adalah langkah dasar untuk meminta dan menggunakan " -"sumber daya untuk menjalankan aplikasi Anda di awan OpenStack." - -msgid "You should see output like this:" -msgstr "Anda harus melihat output seperti ini:" - -msgid "You should see output something like this:" -msgstr "Anda harus melihat output seperti ini:" - -msgid "You should see output something like:" -msgstr "Anda harus melihat output seperti:" - -msgid "You should see output such as:" -msgstr "Anda harus melihat output seperti:" - -msgid "" -"You will progressively ramp up to use up six instances, so make sure that " -"your cloud account has the appropriate quota." -msgstr "" -"Anda akan semakin banyak menggunakan sampai enam instance, jadi pastikan " -"akun awan Anda memiliki kuota yang sesuai." - -msgid "Your SDK might call an instance a 'node' or 'server'." -msgstr "SDK Anda mungkin memanggil instance 'node' atau 'server'." - -msgid "Your images and flavors will be different, of course." -msgstr "Flavor dan image Anda akan berbeda, tentu saja." - -msgid "Your ssh key name" -msgstr "Nama kunci ssh Anda" - -msgid "`Libcloud `_" -msgstr "`Libcloud `_" - -msgid "" -"`Micro-services `_ are an " -"important design pattern that helps achieve application modularity. " -"Separating logical application functions into independent services " -"simplifies maintenance and re-use. Decoupling components also makes it " -"easier to selectively scale individual components, as required. Further, " -"application modularity is a required feature of applications that scale out " -"well and are fault tolerant." -msgstr "" -"`Micro-services `_ adalah pola " -"desain penting yang membantu mencapai modularitas aplikasi. Memisahkan " -"fungsi aplikasi logis menjadi layanan independen menyederhanakan perawatan " -"dan penggunaan ulang. Komponen Decoupling juga mempermudah komponen skala " -"individu secara selektif, sesuai kebutuhan. Selanjutnya, modularitas " -"aplikasi adalah fitur aplikasi yang dibutuhkan yang dapat diukur dengan baik " -"dan fault tolerant." - -msgid "" -"`OpenStack Cloud SDK for Microsoft .NET 1.4.0.1 or later installed `_." -msgstr "" -"`OpenStack Cloud SDK for Microsoft .NET 1.4.0.1 or later installed `_." - -msgid "" -"`OpenStack Object Storage `_ (code-named swift) is open-source software that enables you to " -"create redundant, scalable data storage by using clusters of standardized " -"servers to store petabytes of accessible data. It is a long-term storage " -"system for large amounts of static data that you can retrieve, leverage, and " -"update. Unlike more traditional storage systems that you access through a " -"file system, you access Object Storage through an API." -msgstr "" -"`OpenStack Object Storage `_ (code-named swift) adalah perangkat lunak open-source yang " -"memungkinkan Anda membuat penyimpanan data yang berlebihan dan terukur " -"dengan menggunakan kumpulan server standar untuk menyimpan petabyte data " -"yang dapat diakses. Ini adalah sistem penyimpanan jangka panjang untuk " -"sejumlah besar data statis yang dapat Anda ambil, leverage, dan perbarui. " -"Tidak seperti sistem penyimpanan tradisional lainnya yang Anda akses melalui " -"sistem file, Anda mengakses Object Storage melalui API." - -msgid "" -"`Phoenix Servers `_, named " -"for the mythical bird that is consumed by fire and rises from the ashes to " -"live again, make it easy to start over with new instances." -msgstr "" -"`Phoenix Servers `_, " -"dinamakan untuk burung mitos yang dimakan oleh api dan bangkit dari abu " -"untuk hidup kembali, memudahkan untuk memulai kembali dengan kejadian baru." - -msgid "" -"`a recent version of gophercloud installed `_" -msgstr "" -"`a recent version of gophercloud installed `_" - -msgid "" -"`a recent version of php-opencloud installed `_." -msgstr "" -"`a recent version of php-opencloud installed `_." - -msgid "" -"`a recent version of shade installed `_." -msgstr "" -"`a recent version of shade installed `_." - -msgid "" -"`cloud-init `_ is a tool that " -"performs instance configuration tasks during the boot of a cloud instance, " -"and comes installed on most cloud images. :code:`ex_userdata`, which was " -"passed to :code:`create_node`, is the configuration data passed to cloud-" -"init." -msgstr "" -"`cloud-init `_ adalah alat " -"yang melakukan tugas konfigurasi instance saat boot instance awan, dan " -"dipasang pada sebagian besar image awan. :code:`ex_userdata`, yang " -"dilewatkan ke :code:`create_node`, adalah data konfigurasi yang dilewatkan " -"ke cloud-init." - -msgid "" -"`fog 1.19 or higher installed `_ and working with ruby gems 1.9." -msgstr "" -"`fog 1.19 or higher installed `_ and working with ruby gems 1.9." - -msgid "`fog `_" -msgstr "`fog `_" - -msgid "`gophercloud `_" -msgstr "`gophercloud `_" - -msgid "" -"`jClouds 1.8 or higher installed `_." -msgstr "" -"`jClouds 1.8 or higher installed `_." - -msgid "`jClouds `_" -msgstr "`jClouds `_" - -msgid "" -"`libcloud 0.15.1 or higher installed `_." -msgstr "" -"`libcloud 0.15.1 or higher installed `_." - -msgid "`php-opencloud `_" -msgstr "`php-opencloud `_" - -msgid "" -"`pkgcloud 1.2 or higher installed `_." -msgstr "" -"`pkgcloud 1.2 or higher installed `_." - -msgid "`pkgcloud `_" -msgstr "`pkgcloud `_" - -msgid "" -"a recent version of `OpenStackSDK `_ installed." -msgstr "" -"versi terbaru dari`OpenStackSDK `_ terinstal." - -msgid "amqp://guest:guest@localhost:5672/" -msgstr "amqp://guest:guest@localhost:5672/" - -msgid "auth URL" -msgstr "auth URL" - -msgid "cloud region" -msgstr "cloud region" - -msgid "conf.d, etc.d" -msgstr "conf.d, etc.d" - -msgid "" -"fog `does support OpenStack Orchestration `_." -msgstr "" -"fog `does support OpenStack Orchestration `_." - -msgid "" -"fog `supports `_ the OpenStack Networking API, but this section has not yet been " -"completed." -msgstr "" -"fog `supports `_ the OpenStack Networking API, namun bagian ini belum selesai." - -msgid "http://gophercloud.io/" -msgstr "http://gophercloud.io/" - -msgid "http://localhost/" -msgstr "http://localhost/" - -msgid "" -"http://php-opencloud.readthedocs.org/en/latest/getting-started-with-" -"openstack.html" -msgstr "" -"http://php-opencloud.readthedocs.org/en/latest/getting-started-with-" -"openstack.html" - -msgid "" -"https://docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"https://docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" -msgstr "" -"https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" - -msgid "https://docs.openstack.org/infra/shade/" -msgstr "https://docs.openstack.org/infra/shade/" - -msgid "https://docs.openstack.org/openstacksdk/latest/" -msgstr "https://docs.openstack.org/openstacksdk/latest/" - -msgid "" -"https://github.com/fog/fog-openstack/blob/master/docs/getting_started.md" -msgstr "" -"https://github.com/fog/fog-openstack/blob/master/docs/getting_started.md" - -msgid "" -"https://github.com/fog/fog/blob/master/lib/fog/openstack/docs/storage.md" -msgstr "" -"https://github.com/fog/fog/blob/master/lib/fog/openstack/docs/storage.md" - -msgid "" -"https://github.com/pkgcloud/pkgcloud/tree/master/docs/providers/openstack" -msgstr "" -"https://github.com/pkgcloud/pkgcloud/tree/master/docs/providers/openstack" - -msgid "https://jclouds.apache.org/guides/openstack/" -msgstr "https://jclouds.apache.org/guides/openstack/" - -msgid "" -"https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html" -msgstr "" -"https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html" - -msgid "https://libcloud.readthedocs.org/en/latest/storage/api.html" -msgstr "https://libcloud.readthedocs.org/en/latest/storage/api.html" - -msgid "" -"https://superuser.openstack.org/articles/simple-auto-scaling-environment-" -"with-heat" -msgstr "" -"https://superuser.openstack.org/articles/simple-auto-scaling-environment-" -"with-heat" - -msgid "" -"https://superuser.openstack.org/articles/understanding-openstack-heat-auto-" -"scaling" -msgstr "" -"https://superuser.openstack.org/articles/understanding-openstack-heat-auto-" -"scaling" - -msgid "https://www.nuget.org/packages/openstack.net" -msgstr "https://www.nuget.org/packages/openstack.net" - -msgid "internal worker traffic" -msgstr "lalu lintas pekerja internal" - -msgid "" -"jClouds supports the OpenStack Networking API, but section has not yet been " -"completed. Please see `this `_ in the meantime." -msgstr "" -"jCloud mendukung OpenStack Networking API, namun bagian ini belum selesai. " -"Silahkan lihat `this `_ " -"sementara itu." - -msgid "libcloud does not currently support OpenStack Orchestration." -msgstr "libcloud saat ini tidak mendukung OpenStack Orchestration." - -msgid "" -"libcloud support added 0.14: https://developer.rackspace.com/blog/libcloud-0-" -"dot-14-released/" -msgstr "" -"libcloud support added 0.14: https://developer.rackspace.com/blog/libcloud-0-" -"dot-14-released/" - -msgid "node.js" -msgstr "node.js" - -msgid "password" -msgstr "password" - -msgid "project ID or name (projects are also known as tenants)" -msgstr "ID atau nama proyek (proyek juga dikenal sebagai tenant/penyewa)" - -msgid "public-facing web traffic" -msgstr "lalu lintas web public-facing" - -msgid "sqlite:////tmp/sqlite.db" -msgstr "sqlite:////tmp/sqlite.db" - -msgid "the .NET SDK does not currently support OpenStack Orchestration." -msgstr "the .NET SDK saat ini tidak mendukung OpenStack Orchestration." - -msgid "user name" -msgstr "user name" diff --git a/firstapp/source/locale/tr_TR/LC_MESSAGES/firstapp.po b/firstapp/source/locale/tr_TR/LC_MESSAGES/firstapp.po deleted file mode 100644 index 4a9b232fe..000000000 --- a/firstapp/source/locale/tr_TR/LC_MESSAGES/firstapp.po +++ /dev/null @@ -1,4277 +0,0 @@ -# Mücahit Büyükyılmaz , 2015. #zanata -# OpenStack Infra , 2015. #zanata -# işbaran akçayır , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: OpenStack First Application 2013.2.1.dev4245\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-23 14:55+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-09-18 01:12+0000\n" -"Last-Translator: Copied by Zanata \n" -"Language: tr_TR\n" -"Plural-Forms: nplurals=2; plural=(n>1)\n" -"X-Generator: Zanata 4.3.3\n" -"Language-Team: Turkish (Turkey)\n" - -msgid "**GettingStarted.java:**" -msgstr "**GettingStarted.java:**" - -msgid "**Remove the stack**" -msgstr "**Yığını kaldır**" - -msgid "**Show information about the stack**" -msgstr "**Yığınla ilgili bilgi göster**" - -msgid "**Stack create**" -msgstr "**Yığın oluştur**" - -msgid "**pom.xml:**" -msgstr "**pom.xml:**" - -msgid ".NET Framework" -msgstr ".NET Çatısı" - -msgid ":code:`-d`" -msgstr ":code:`-d`" - -msgid ":code:`-e`" -msgstr ":code:`-e`" - -msgid ":code:`-i`" -msgstr ":code:`-i`" - -msgid ":code:`-m`" -msgstr ":code:`-m`" - -msgid ":code:`-r`" -msgstr ":code:`-r`" - -msgid "" -":code:`api` (enable and start the API service), :code:`worker` (enable and " -"start the worker service), and :code:`demo` (run the demo mode to request " -"random fractals)." -msgstr "" -":code:`api` (API servisini etkinleştir ve başlat), :code:`worker` (işçi " -"servisini etkinleştir ve başlat), ve :code:`demo` (Rasgele fraktallar " -"istemek için demo kipini çalıştır)." - -msgid "" -":code:`ceilometer_sample_query`: shows the samples used to build the " -"statistics." -msgstr "" -":code:`ceilometer_sample_query`: istatistikleri inşa etmek için kullanılan " -"örnekleri gösterir." - -msgid "" -":code:`ceilometer_statistics_query`: shows the statistics used to trigger " -"the alarms." -msgstr "" -":code:`ceilometer_statistics_query`: uyarıları tetiklemek için kullanılan " -"istatistikleri gösterir." - -msgid "" -":code:`detach_volume` and :code:`destroy_volume` take a volume object, not a " -"name." -msgstr "" -":code:`detach_volume` ve :code:`destroy_volume` birim nesnesi alır, isim " -"değil." - -msgid "" -":code:`ex_create_security_group_rule()` takes ranges of ports as input. This " -"is why ports 80 and 22 are passed twice." -msgstr "" -":code:`ex_create_security_group_rule()` bağlantı noktası aralıklarını girdi " -"olarak alır. Bu yüzden 80 ve 22 iki kere geçirilmiştir." - -msgid "" -":code:`messaging` (install RabbitMQ) and :code:`faafo` (install the Faafo " -"app)." -msgstr "" -":code:`messaging` (RabbitMQ kur) ve :code:`faafo` (Faafo uygulamasını kur)." - -msgid "" -":code:`scale__workers_up_url`: A post to this url will add worker instances." -msgstr "" -":code:`scale__workers_up_url`: Bu url'ye yapılan gönderi işçi sunucu " -"ekleyecektir." - -msgid "" -":code:`scale_workers_down_url`: A post to this url will remove worker " -"instances." -msgstr "" -":code:`scale_workers_down_url`: Bu url'ye yapılan gönderi işçi sunucuları " -"kaldıracaktır." - -msgid ":doc:`/advice`: Get advice about operations." -msgstr ":doc:`/advice`: İşlemler hakkında öneri alın." - -msgid "" -":doc:`/block_storage`: Migrate the database to block storage, or use the " -"database-as-a-service component." -msgstr "" -":doc:`/block_storage`: Veritabanını blok depolamaya göç ettirin, veya servis " -"olarak veritabanı bileşenini kullanın." - -msgid "" -":doc:`/craziness`: Learn some crazy things that you might not think to do ;)" -msgstr "" -":doc:`/craziness`: Yapmayı düşünmeyeceğiniz bazı çılgın şeyleri öğrenin ;)" - -msgid "" -":doc:`/durability`: Learn how to use Object Storage to make your application " -"durable." -msgstr "" -":doc:`/durability`: Uygulamanızı dayanıklı hale getirmek için Nesne " -"Depolamayı nasıl kullanacağınızı öğrenin." - -msgid "" -":doc:`/durability`: Learn how to use Object Storage to make your application " -"more durable." -msgstr "" -":doc:`/durability`: Uygulamanızı daha dayanıklı hale getirmek için Nesne " -"Depolamayı nasıl kullanacağınızı öğrenin." - -msgid ":doc:`/networking`: Learn about complex networking." -msgstr ":doc:`/networking`: Karmaşık ağları öğrenin." - -msgid ":doc:`/orchestration`: Automatically orchestrate your application." -msgstr ":doc:`/orchestration`: Uygulamanızı otomatik olarak düzenleyin." - -msgid ":doc:`/scaling_out`: Learn how to scale your application." -msgstr ":doc:`/scaling_out`: Uygulamanızı nasıl ölçekleyeceğinizi öğrenin." - -msgid "" -"A .NET-based library. Use it to write C++ or C# code for Microsoft " -"applications." -msgstr "" -".NET tabanlı bir kitaplık. Microsoft uygulamaları için C++ veya C# kodu " -"yazmak için kullanın." - -msgid "" -"A Java-based library that the Apache Foundation manages. Use it to work with " -"multiple cloud types." -msgstr "" -"Apache Vakfının yönettiği Java tabanlı bir kitaplık. Birden çok bulut " -"türüyle çalışmak için kullanın." - -msgid "A Node.js-based SDK. Use it work with multiple clouds." -msgstr "Node.js tabanlı bir SDK. Birden çok bulutla çalışmak için kullanın." - -msgid "" -"A PHP-based library. Use it to write PHP code that works with OpenStack " -"clouds." -msgstr "" -"PHP tabanlı bir kitaplık. OpenStack bulutlarıyla çalışan PHP kodu yazmak " -"için kullanın." - -msgid "" -"A Python-based library developed by OpenStack Infra team. Use it to operate " -"multiple OpenStack clouds." -msgstr "" -"OpenStack Infra takımı tarafından geliştirilen Python tabanlı bir kitaplık. " -"Birden çok OpenStack bulutlarını işletmek için kullanın." - -msgid "" -"A Python-based library that the Apache Foundation manages. Use it to work " -"with multiple cloud types." -msgstr "" -"Apache Vakfının yönettiği Python tabanlı kitaplık. Birden çok bulut türüyle " -"çalışmak için kullanın." - -msgid "A Ruby-based SDK. Use it to work with multiple clouds." -msgstr "Ruby tabanlı bir SDK. Birden çok bulutla çalışmak için kullanın." - -msgid "A floating IP helper function" -msgstr "Bir değişken IP yardımcı fonksiyonu" - -msgid "A general overview" -msgstr "Genel görünüm" - -msgid "" -"A go-based SDK. Use it to write Golang code that works with OpenStack clouds." -msgstr "" -"Go tabanlı bir SDK. OpenStack bulutlarıyla çalışan Golang kodu yazmak için " -"kullanın." - -msgid "" -"A key pair. To access your instance, you must import an SSH public key into " -"OpenStack to create a key pair. OpenStack installs this key pair on the new " -"instance. Typically, your public key is written to :code:`.ssh/id_rsa.pub`. " -"If you do not have an SSH public key file, follow `these instructions " -"`_ first. We will " -"cover these instructions in depth in :doc:`/introduction`." -msgstr "" -"Bir anahtar çifti. Sunucunuza erişmek için, OpenStack'e SSH açık anahtarını " -"aktararak anahtar çifti oluşturmalısınız. OpenStack bu anahtar çiftini yeni " -"sunucuya yükler. Genellikle açık anahtarınız :code:`.ssh/id_rsa.pub` " -"konumuna yazılır. SSH açık anahtarı dosyanız yoksa önce `şu yönergeleri " -"`_ takip edin. Bu " -"yönergeleri :doc:`/introduction` da daha derin işleyeceğiz." - -msgid "" -"A simple solution is to give half of your friends one address and half the " -"other, but that solution is not sustainable. Instead, you can use a `DNS " -"round robin `_ to do that " -"automatically. However, OpenStack networking can provide Load Balancing as a " -"Service, which :doc:`/networking` explains." -msgstr "" -"Basit bir çözüm arkadaşlarınızın yarısına bir adres, diğer yarısına başka " -"bir adres vermektir, ama bu çözüm devam ettirilebilir değildir. Bunun yerine " -"bunu otomatik olarak yapmak için `DNS round robin `_ kullanabilirsiniz. Ancak OpenStack ağı :doc:`/" -"networking` belgesinin açıkladığı şekilde Servis olarak Yük Dengeleme " -"sağlayabilir." - -msgid "" -"API load is a slightly different problem than the previous one regarding " -"capacity to work. We can simulate many requests to the API, as follows:" -msgstr "" -"API yükü daha önce bahsedilen çalışma kapasitesinden daha farklı bir " -"problemdir. API'lere şu şekilde birçok istek gönderme denemesi yapabiliriz:" - -msgid "API traffic" -msgstr "API trafiği" - -msgid "Access the application" -msgstr "Uygulamaya erişin" - -msgid "Add metadata to objects" -msgstr "Metaveri nesneleri ekleyin" - -msgid "Add the option Networks and send its id to attach the instance to:" -msgstr "Ağlar seçeneğini ekleyin ve kimliğini sunucuyu eklemek için gönderin:" - -msgid "" -"Add the parameter network and send its name or id to attach the instance to:" -msgstr "" -"Ağ parametresini ekleyin ve ismini veya kimliğini eklenecek sunucuya " -"gönderin:" - -msgid "" -"Adding this capacity enables you to deal with a higher number of requests " -"for fractals. As soon as these worker instances start, they begin checking " -"the message queue for requests, reducing the overall backlog like a new " -"register opening in the supermarket." -msgstr "" -"Bu kapasiteyi eklemek fraktallar için daha yüksek sayıda istekle başa " -"çıkabilmenizi sağlar. Bu işçi sunucular başladığı anda, istekler için ileti " -"kuyruğunu kontrol etmeye başlarlar, markette açılan yeni bir kasa gibi genel " -"birikmeyi azaltırlar." - -msgid "Advice for developers new to operations" -msgstr "İşlemlere yeni geliştiriciler için öneri" - -msgid "" -"After separating the Fractal worker nodes into their own networks, the next " -"logical step is to move the Fractal API service to a load balancer, so that " -"multiple API workers can handle requests. By using a load balancer, the API " -"service can be scaled out in a similar fashion to the worker nodes." -msgstr "" -"Fraktal işçi düğümlerini kendi ağlarına ayırdıktan sonra, sonraki mantıklı " -"adım Fraktal API servisini bir yük dengeleyiciye taşıyarak birden fazla API " -"işçisinin istekleri ele almasını sağlamaktır. Bir yük dengeleyici " -"kullanarak, API servisi işçi düğümleri gibi ölçeklenebilir." - -msgid "" -"After the instance is created, cloud-init downloads and runs a script " -"called :code:`install.sh`. This script installs the Fractals application. " -"Cloud-init can consume bash scripts and a number of different types of data. " -"You can even provide multiple types of data. You can find more information " -"about cloud-init in the `official documentation `_." -msgstr "" -"Sunucu oluşturulduktan sonra, cloud-init :code:`install.sh` adındaki bir " -"betiği indirir ve çalıştırır. Bu betik Fraktallar uygulamasını kurar. Cloud-" -"init bash betiklerini ve çeşitli farklı türde veriyi tüketebilir. Hatta " -"birden fazla türde veri de sağlayabilirsiniz. `Resmi belgelendirmede " -"`_ cloud-init'le ilgili daha " -"fazla bilgi bulabilirsiniz." - -msgid "Allocate floating ips and assign them to the web server nodes." -msgstr "Değişken ip'ler ayırın ve web sunucusu düğümlerine atayın." - -msgid "Allocate the floating IP address:" -msgstr "Değişken IP adresini ayırın:" - -msgid "" -"Allocating a floating IP address to an instance does not change the IP " -"address of the instance, it causes OpenStack to establish the network " -"translation rules to allow an *additional* IP address." -msgstr "" -"Bir değişken IP adresini sunucuya ayırmak sunucunun IP adresini değiştirmez, " -"OpenStack ağ dönüşüm kurallarını *ek* bir IP adresine izin verecek şekilde " -"kurmasına sebep olur." - -msgid "" -"An often-cited reason for designing applications by using cloud patterns is " -"the ability to **scale out**. That is: to add additional resources, as " -"required. Contrast this strategy to the previous one of increasing capacity " -"by scaling up the size of existing resources. To scale out, you must:" -msgstr "" -"Bulut kalıpları kullanarak uygulama tasarlamanın çoğu zaman gösterilen " -"sebeplerinden biri **dışa ölçeklemedir**. Bu kısaca gerektiğinde ek " -"kaynaklar ekleyebilmektir. Kapasite artırmak için mevcut kaynakların " -"boyutlarını artırma stratejisiyle karşılaştırın. Dışa ölçeklemek için:" - -msgid "And as before, the stack takes a few minutes to build!" -msgstr "Ve yine önceki gibi, yığın inşası birkaç dakika alır!" - -msgid "And confirm it is in place:" -msgstr "Ve yerinde olduğunu onaylayın:" - -msgid "" -"Another approach is to create a 'gold' image, which pre-installs your " -"application and its dependencies. A 'gold' image enables faster boot times " -"and more control over what is on the instance. However, if you use 'gold' " -"images, you must have a process in place to ensure that these images do not " -"fall behind on security updates." -msgstr "" -"Başka bir yaklaşım da uygulamanızı ve bağımlılıklarınızı önceden kuran bir " -"'altın' imaj oluşturmaktır. 'altın' imaj daha hızlı önyükleme süreleri ve " -"sunucu üzerinde ne olduğuyla ilgili daha iyi kontrol sağlar. Ancak 'altın' " -"imajlar kullanırsanız, bu imajların güvenlik güncellemelerinin gerisinde " -"kalmadığından emin olmak için bir sürece sahip olmalısınız." - -msgid "" -"Anyone with a programming background can easily read the code in this guide. " -"Although this guide focuses on a particular SDK, you can use other languages " -"and toolkits with the OpenStack cloud:" -msgstr "" -"Programlama geçmişine sahip herkes bu kılavuzdaki kodu kolaylıkla " -"okuyabilir. Bu kılavuz belirli bir SDK'ya odaklansa da, diğer dilleri ve " -"araç takımlarını OpenStack bulutuyla kullanabilirsiniz:" - -msgid "Appendix" -msgstr "Ek" - -msgid "Application deployment" -msgstr "Uygulama geliştirme" - -msgid "" -"Application developers and operators who use phoenix servers have access to " -"systems that are built from a known baseline, such as a specific operating " -"system version, and to tooling that automatically builds, installs, and " -"configures a system." -msgstr "" -"Phoenix sunucularını kullanan uygulama geliştiriciler ve işleticiler belirli " -"bir işletim sistemi sürümü, ve bir sistemi otomatik inşa eden, yükleyen ve " -"yapılandıran bir araca sahip bilinen bir tabandan inşa edilen sistemlere " -"erişirler." - -msgid "Architect your application to make use of additional resources." -msgstr "" -"Uygulamanızı ek kaynakların kullanımından faydalanacak şekilde " -"tasarlamalısınız." - -msgid "" -"Armed with a security group, image, and flavor size, you can add multiple " -"API services:" -msgstr "" -"Bir güvenlik grubu, imaj ve nitelik boyutuyla birden çok API servisi " -"ekleyebilirsiniz:" - -msgid "As before, pass in configuration settings as parameters." -msgstr "Önceki gibi, yapılandırma ayarlarını parametreler olarak verin." - -msgid "" -"As in traditional IT, cloud instances are accessed through IP addresses that " -"OpenStack assigns. How this is actually done depends on the networking setup " -"for your cloud. In some cases, you will simply get an Internet rout-able IP " -"address assigned directly to your instance." -msgstr "" -"Geleneksel IT'de olduğu gibi bulut sunucularına da OpenStack'in atadığı IP " -"adresleri üzerinden erişilir. Bunun nasıl yapılacağı bulutunuzun ağ " -"kurulumuna göre değişir. Bazı durumlarda, sunucunuza doğrudan atanmış " -"internet yönlendirilebilir bir IP adresi alırsınız." - -msgid "" -"As mentioned in :doc:`/introduction`, the generated fractal images are saved " -"on the local file system of the API service instances. Because you have " -"multiple API instances up and running, the fractal images are spread across " -"multiple API services, which causes a number of :code:`IOError: [Errno 2] No " -"such file or directory` exceptions when trying to download a fractal image " -"from an API service instance that does not have the fractal image on its " -"local file system." -msgstr "" -":doc:`/introduction` kısmında bahsedildiği gibi, üretilen fraktal imajları " -"API servisi sunucularının yerel dosya sistemlerinde kaydedilir. Çalışır " -"birden çok API sunucunuz olduğundan, fraktal imajlar birden çok API " -"servisleri arasında dağılmıştır, bu da yerel dosya sisteminde istenen " -"fraktal imajı barındırmayan API servisi sunucularından fraktal imajı " -"indirmeye çalışırken :code:`IOError: [Errno 2] Böyle bir dosya ya dizin yok` " -"istisnaları almanıza sebep olur." - -msgid "" -"As with classical infrastructure, failures of the underpinning cloud " -"infrastructure (hardware, networks, and software) are unavoidable. When you " -"design for the cloud, it is crucial that your application is designed for an " -"environment where failures can happen at any moment. This may sound like a " -"liability, but it is not; by designing your application with a high degree " -"of fault tolerance, you also make it resilient, and more adaptable, in the " -"face of change." -msgstr "" -"Klasik mimaride olduğu gibi, altta yatan bulut mimarisindeki (donanım, " -"ağlar, ve yazılım) arızalar kaçınılmazdır. Bulut için tasarım yaptığınızda, " -"uygulamanızın her an arızalarla karşılaşabilecek şekilde bu ortama göre " -"tasarlanması çok önemlidir. Bu kulağa bir yükümlülük gibi gelse de; " -"uygulamanızı yüksek derecede hata dayanıklılığına sahip şekilde tasarlamak " -"kendini çabuk toparlayan, değişikliklere daha kolay uyum sağlayan hale " -"getirecektir." - -msgid "" -"As you can see from the parameters passed to the installation script, you " -"define this instance as the worker instance. But, you also pass the address " -"of the API instance and the message queue so the worker can pick up " -"requests. The Fractals application installation script accepts several " -"parameters." -msgstr "" -"Kurulum betiğine geçirilen parametrelerden görebileceğiniz gibi, bu sunucuyu " -"işçi sunucu olarak tanımlarsınız. Bunun yanında API sunucusunun adresini ve " -"işçilerin istekleri alabilmesi için ileti kuyruğunun adresini verirsiniz. " -"Fraktallar uygulama kurulum betiği çeşitli parametreler alır." - -msgid "" -"As you change the topology of your applications, you must update or create " -"security groups. Here, you re-create the required security groups." -msgstr "" -"Uygulamalarınızın topolojilerini değiştirdikçe, güvenlik grupları " -"güncellemeli veya oluşturmalısınız. Burda gerekli güvenlik gruplarını tekrar " -"oluşturursunuz." - -msgid "Associate a floating IP for external connectivity" -msgstr "Harici bağlantı için bir değişken IP ilişkilendirin" - -msgid "" -"At the end of this section, you make some slight changes to the networking " -"topology by using the OpenStack Networking API to create the 10.0.1.0/24 " -"network to which the worker nodes attach. You use the 10.0.3.0/24 API " -"network to attach the Fractal API servers. Web server instances have their " -"own 10.0.2.0/24 network, which is accessible by fractal aficionados " -"worldwide, by allocating floating IPs from the public network." -msgstr "" -"Bu kısmın sonunda, OpenStack Ağ API'sini işçi düğümlerin eklendiği " -"10.0.1.0/24 ağını oluşturmak için için kullanarak ağ topolojisine ufak " -"değişiklikler yaparsınız. 10.0.3.0/24 API ağını Fraktal API sunucularını " -"eklemek için kullanırsınız. Web sunucularının kendi 10.0.2.0/24 ağları " -"vardır, bu ağ açık ağdan değişken IP adresleri ayrıldığından dünya çapında " -"fraktal meraklıları tarafından erişilebilirdir." - -msgid "Attach the floating IP address to the instance:" -msgstr "Değişken IP adresini sunucuya ekleyin:" - -msgid "Automation" -msgstr "Otomatikleştirme" - -msgid "" -"Back up the Fractals app images, which are currently stored inside the " -"database, on Object Storage." -msgstr "" -"Şu an veritabanında tutulan Fraktallar uygulama imajlarını Nesne Depolamaya " -"yedekleyin." - -msgid "Back up the Fractals from the database on the Object Storage" -msgstr "Fraktalları veritabanından Nesne Depolama üzerine yedekleyin" - -msgid "Backups" -msgstr "Yedekler" - -msgid "Basics" -msgstr "Temeller" - -msgid "" -"Because all service endpoints use the Identity Service for authentication " -"and authorization, place the following code in the 'void Main()' entry-point " -"function." -msgstr "" -"Tüm servis uç noktaları kimlik doğrulama ve yetkilendirme için Kimlik " -"Servisini kullandığından, aşağıdaki kodu 'void Main()' giriş fonksiyonuna " -"yerleştirin." - -msgid "" -"Because the SDKs do not fully support the OpenStack Networking API, this " -"section uses the command-line clients." -msgstr "" -"SDK'lar OpenStack Ağ API'sini tamamen desteklemediğinden, bu kısım komut " -"satırı istemcilerini kullanır." - -msgid "" -"Because the local file system is ephemeral storage, the fractal images are " -"lost along with the instance when the instance is terminated. Block-based " -"storage, which the :doc:`/block_storage` section discusses, avoids that " -"problem, but like local file systems, it requires administration to ensure " -"that it does not fill up, and immediate attention if disks fail." -msgstr "" -"Yerel dosya sistemi geçici depolama olduğundan, fraktal imajlar sunucu " -"sonlandırıldığından beraber kaybolurlar. :doc:`/block_storage` kısmında " -"tartışıldığı gibi blok tabanlı depolama bu problemi aşar, ama yerel dosya " -"sistemleri gibi dolmasını engellemek için bir yöneticiye ve diskler " -"arızalanırsa anında müdahaleye ihtiyaç duyarlar." - -msgid "" -"Because the tutorial reuses the :code:`conn` object, make sure that you " -"always have one handy." -msgstr "" -"Öğretici :code:`conn` nesnesini tekrar kullandığından, hep birini el altında " -"tuttuğunuzdan emin olun." - -msgid "Before proceeding, install the latest version of shade." -msgstr "Devam etmeden önce shade'in son sürümünü kurun." - -msgid "Before you continue, you must do one more thing." -msgstr "Devam etmeden önce bir şey daha yapmalısınız." - -msgid "" -"Before you run this class, confirm that you have configured it for your " -"cloud and the instance running the Fractals application." -msgstr "" -"Bu sınıfı çalıştırmadan önce bulutunuz ve Fraktal uygulamasını çalıştıran " -"sunucu için yapılandırdığınızdan emin olun." - -msgid "" -"Before you run this script, confirm that you have set your authentication " -"information, the flavor ID, and image ID." -msgstr "" -"Bu betiği çalıştırmadan önce, kimlik doğrulama bilgisini, nitelik ve imaj " -"kimliğini ayarladığınızdan emin olun." - -msgid "" -"Before you scale out your application services, like the API service or the " -"workers, you must add a central database and an :code:`app-services` " -"messaging instance. The database and messaging queue will be used to track " -"the state of fractals and to coordinate the communication between the " -"services." -msgstr "" -"API servisi veeya işçiler gibi uygulama servislerini dışa ölçeklemeden önce, " -"merkezi bir veritabanı ve bir :code:`app-services` ileti kuyruğu " -"eklemelisiniz. Veritabanı ve ileti kuyruğu fraktalların durumunu takip etmek " -"ve servisler arasında iletişimi düzenlemek için kullanılacaktır." - -msgid "Block Storage" -msgstr "Blok Depolama" - -msgid "Boot and configure an instance" -msgstr "Bir sunucu önyükleyin ve yapılandırın" - -msgid "Booting a worker" -msgstr "Bir işçinin önyüklenmesi" - -msgid "Bootstrap your network" -msgstr "Ağ önyüklemesi yapın" - -msgid "" -"By default, data in OpenStack instances is stored on 'ephemeral' disks. " -"These disks remain with the instance throughout its lifetime. When you " -"terminate the instance, that storage and all the data stored on it " -"disappears. Ephemeral storage is allocated to a single instance and cannot " -"be moved to another instance." -msgstr "" -"Öntanımlı olarak, OpenStack sunucularındaki veri 'geçici' disklerde tutulur. " -"Bu diskler sunucunun yaşam döngüsü boyunca sunucuyla kalır. Sunucuyu " -"sonlandırdığınızda, bu depolama ve üzerindeki veriler kaybolur. Geçici " -"depolama tek bir sunucu için ayrılır ve başka sunuculara taşınamaz." - -msgid "" -"CI/CD means that you always test your application and make frequent " -"deployments to production." -msgstr "" -"CI/CD her zaman uygulamanızı test etmeniz ve sık sık üretim ortamına dağıtım " -"yapmanız demektir." - -msgid "" -"Call the :code:`faafo` command-line interface to request the generation of " -"five large fractals." -msgstr "" -":code:`faafo` komut satırı arayüzünü çağırarak beş büyük fraktal üretimini " -"isteyin." - -msgid "" -"Change the API code, such as \"list fractals,\" to query Object Storage to " -"get the metadata." -msgstr "" -"API kodunu değiştirin, örneğin \"fraktalları listeleme\"yi metaveriyi almak " -"için Nesne Depolamayı sorgulayacak şekilde değiştirin." - -msgid "" -"Change the Fractal upload code to store metadata with the object in Object " -"Storage." -msgstr "" -"Fraktal yükleme kodunu değiştirerek metaveriyi nesneyle birlikte Nesne " -"Depolamada saklayacak şekilde değiştirin." - -msgid "" -"Check to see whether the API service process is running like expected. You " -"can find the logs for the API service in the directory :file:`/var/log/" -"supervisor/`." -msgstr "" -"API servis sürecinin beklenen şekilde çalışıp çalışmadığını kontrol edin. " -"API servisi için kayıtları :file:`/var/log/supervisor/` dizininde " -"bulabilirsiniz." - -msgid "" -"Choose an image and flavor for your instance. You need about 1GB RAM, 1 CPU, " -"and a 1GB disk. This example uses the Ubuntu image with a small flavor, " -"which is a safe choice. In subsequent tutorial sections in this guide, you " -"must change the image and flavor IDs to correspond to the image and flavor " -"that you choose." -msgstr "" -"Sunucunuz için bir imaj ve nitelik seçin. 1GB kadar RAM, 1 CPU ve 1GB diske " -"ihtiyacınız var. Bu örnek güvenli bir seçim olan, küçük nitelikte bir Ubuntu " -"imajını kullanır. Bu kılavuzdaki ilerleyen öğretici kısımlarda imaj ve " -"nitelik kimliklerini seçtiğiniz imaj ve niteliklere göre değiştirmeniz " -"gerekecek." - -msgid "Choose your OpenStack SDK" -msgstr "OpenStack SDK'nızı seçin" - -msgid "Cloud application architecture principles" -msgstr "Bulut uygulama mimarisi prensipleri" - -msgid "" -"Cloud applications often use many small instances rather than a few large " -"instances. Provided that an application is sufficiently modular, you can " -"easily distribute micro-services across as many instances as required. This " -"architecture enables an application to grow past the limit imposed by the " -"maximum size of an instance. It is like trying to move a large number of " -"people from one place to another; there is only so many people you can put " -"on the largest bus, but you can use an unlimited number of buses or small " -"cars, which provide just the capacity you need - and no more." -msgstr "" -"Bulut uygulamaları genellikle birkaç büyük sunucu yerine birçok küçük sunucu " -"kullanırlar. Bir uygulamanın yeterli miktarda modüler olması sağlanırsa, " -"kolaylıkla mikro servisleri istenilen sayıda sunucuya dağıtabilirsiniz. Bu " -"mimari bir uygulamanın sunucu sınırlarını aşabilecek noktaya büyüyebilmesini " -"sağlar. Bu çok sayıda insanı bir yerden bir yere taşımaya benzer; büyük bir " -"otobüse ancak belli miktarda insanı koyabilirsiniz, ama sınırsız sayıda " -"otobüs veya küçük arabalar kullanarak kapasiteyi ihtiyaç kadar ya da daha " -"fazla artırabilirsiniz." - -msgid "" -"Cloud applications typically share several design principles. These " -"principles influenced the design of the Fractals application." -msgstr "" -"Bulut uygulamaları genellikle birçok tasarım prensibini paylaşır. Bu " -"prensipler Fraktallar uygulamasının tasarımını etkilemiştir." - -msgid "" -"Cloud resources, such as running instances that you no longer use, can cost " -"money. To avoid unexpected expenses, destroy cloud resources." -msgstr "" -"Bulut kaynakları, örneğin artık kullanmadığınız çalışan sunucular, para " -"harcayabilir. İstenmeyen masraflardan kaçınmak için bulut kaynaklarını silin." - -msgid "Complete code sample" -msgstr "Tam kod örneği" - -msgid "Configuration management" -msgstr "Yapılandırma yönetimi" - -msgid "" -"Configuration management tools, such as Ansible, Chef, and Puppet, enable " -"you to describe exactly what to install and configure on an instance. Using " -"these descriptions, these tools implement the changes that are required to " -"get to the desired state." -msgstr "" -"Ansible, Chef ve Puppet gibi yapılandırma yönetim araçları bir sunucuda tam " -"olarak ne kurmak ve yapılandırmak istediğinizi tanımlamanızı sağlarlar. Bu " -"tanımları kullanarak, bu araçlar istenen duruma gelinmesi için gerekli " -"değişiklikleri uygularlar." - -msgid "Configure the Fractals app to use Object Storage" -msgstr "" -"Fraktallar uygulamasını Nesne Depolamayı kullanacak şekilde yapılandırın" - -msgid "Confirm that the stack created two alarms:" -msgstr "Yığının iki uyarı oluşturduğunu onaylayın:" - -msgid "Confirm that they were added:" -msgstr "Eklendiklerini onaylayın:" - -msgid "" -"Confirm that we have a public network by listing the networks our tenant has " -"access to. The public network does not have to be named public - it could be " -"'external', 'net04_ext' or something else - the important thing is it exists " -"and can be used to reach the Internet." -msgstr "" -"Kiracımızın erişimi olan ağları listeleyerek bir açık ağımız olduğunu " -"onaylayın. Açık ağ açık olarak adlandırılmamış olabilir- 'harici', " -"'net04_ext' veya başka bir şey olabilir- önemli olan mevcut olması ve " -"internet erişiminde kullanılabilir olmasıdır." - -msgid "Connect to the API endpoint:" -msgstr "API uç noktasına bağlanın:" - -msgid "Connecting to the Internet" -msgstr "İnternete bağlanmak" - -msgid "Contents" -msgstr "İçerikler" - -msgid "Create a network and subnet for the web server nodes." -msgstr "Web sunucu düğümleri için bir ağ ve alt ağ oluştur." - -msgid "" -"Create a network and subnet for the worker nodes. This is the private data " -"network." -msgstr "İşçi düğümler için bir ağ ve alt ağ oluşturun. Bu özel veri ağıdır." - -msgid "Create a router for the private data network." -msgstr "Özel veri ağı için bir yönlendirici oluşturun." - -msgid "" -"Create a volume object by using the unique identifier (UUID) for the volume. " -"Then, use the server object from the previous code snippet to attach the " -"volume to it at :code:`/dev/vdb`:" -msgstr "" -"Birimin benzersiz tanımlayıcısını (UUID) kullanarak bir birim nesnesi " -"oluşturun. Ardından, önceki kod parçasındaki sunucu nesnesini kullanarak " -"birimi :code:`/dev/vdb` konumuna ekleyin:" - -msgid "" -"Create and delete compute resources. These resources are virtual machine " -"instances where the Fractals application runs." -msgstr "" -"Hesaplama kaynaklarını oluşturun ve silin. Bu kaynaklar Fraktal uygulamanın " -"çalıştığı sanal makine sunucularıdır." - -msgid "Create more API service requests" -msgstr "Daha fazla API servis isteği oluşturun" - -msgid "Create more tasks" -msgstr "Daha fazla görev oluşturun" - -msgid "Create networks" -msgstr "Ağlar oluşturun" - -msgid "Create the instance." -msgstr "Sunucuyu oluşturun." - -msgid "" -"Currently, you cannot directly store generated images in OpenStack Object " -"Storage. Please revisit this section again in the future." -msgstr "" -"Şu an üretilen imajları doğrudan OpenStack Nesne Depolamaya kaydedemezsiniz. " -"Lütfen ilerde bu kısmı tekrar ziyaret edin." - -msgid "Customize networking for better performance and segregation." -msgstr "Daha iyi başarım ve ayrım için ağı özelleştirin." - -msgid "" -"Define a short function to locate unused or allocate floating IPs. This " -"saves a few lines of code and prevents you from reaching your floating IP " -"quota too quickly." -msgstr "" -"Kullanılmayanları bulmak için kısa bir fonksiyon tanımlayın veya değişken " -"IP'ler ayırın. Bu birkaç satır koddan kar etmenizi sağlar ve değişken IP " -"kotanızın çok çabuk dolmasını önler." - -msgid "Delete containers" -msgstr "Kapsayıcıları silin" - -msgid "Deploy the application to a new instance" -msgstr "Uygulamayı yeni bir sunucuya kurun" - -msgid "" -"Deploying application data and configuration to the instance can take some " -"time. Consider enjoying a cup of coffee while you wait. After the " -"application deploys, you can use your preferred browser to visit the awesome " -"graphic interface at the following link." -msgstr "" -"Uygulama verisinin ve yapılandırmanın sunucuya kurulumu biraz zaman " -"alabilir. Beklerken bir kahve keyfi yapmayı düşünebilirsiniz. Uygulama " -"kurulduktan sonra, tercih ettiğiniz tarayıcıyla aşağıdaki bağlantıdaki " -"muhteşem grafik arayüzü ziyaret edebilirsiniz." - -msgid "" -"Deploying applications in a cloud environment can be very different from " -"deploying them in a traditional IT environment. This guide teaches you how " -"to deploy applications on OpenStack and some best practices for cloud " -"application development." -msgstr "" -"Uygulamaları bulut ortamında kurmak geleneksel IT ortamında kurmaktan " -"oldukça farklıdır. Bu kılavuz uygulamaları OpenStack'de nasıl kuracağınızı " -"ve bulut uygulama geliştirme için bazı en iyi uygulamaları öğretir." - -msgid "Description" -msgstr "Açıklama" - -msgid "Destroy an instance" -msgstr "Bir sunucuyu silin" - -msgid "" -"Do not worry if these concepts are not yet completely clear. In :doc:`/" -"introduction`, we explore these concepts in more detail." -msgstr "" -"Bu kavramlar henüz tam oturmadıysa endişe etmeyin. :doc:`/introduction` " -"kısmında bu kavramları daha ayrıntılı işleyeceğiz." - -msgid "Enable/start something" -msgstr "Bir şeyleri etkinleştir/başlat" - -msgid "" -"Ensure you have an :file:`openrc.sh` file, source it, and validate that your " -"trove client works:" -msgstr "" -"Bir :file:`openrc.sh` dosyanız olduğundan emin olun, onu kaynak edin ve " -"trove istemcinizin çalıştığını onaylayın:" - -msgid "" -"Ensure you have an openrc.sh file, source it, and then check that your " -"openstack client works: ::" -msgstr "" -"Bir openrc.sh dosyanız olduğundan emin olun, onu kaynak edin ve openstack " -"istemcinizin çalıştığını kontrol edin: ::" - -msgid "" -"Even with a key in place, however, you must have the appropriate security " -"group rules in place to access your instance." -msgstr "" -"Bir anahtar olsa da, sunucunuza erişmek için uygun güvenlik grubu " -"kurallarına sahip olmalısınız." - -msgid "Example" -msgstr "Örnek" - -msgid "Explore and apply advanced OpenStack cloud features." -msgstr "Gelişmiş OpenStack bulut özelliklerini keşfedin ve uygulayın." - -msgid "Extra features" -msgstr "Ek özellikler" - -msgid "Extra security groups" -msgstr "Ek güvelik grupları" - -msgid "Extras" -msgstr "Ekler" - -msgid "Fail fast" -msgstr "Hızlıca başarısız" - -msgid "Fault tolerance" -msgstr "Arızaya dayanıklılık" - -msgid "Fault tolerance is essential to the cloud-based application." -msgstr "Arızaya dayanıklılık bulut tabanlı uygulama için şarttır." - -msgid "Final result" -msgstr "Sonuç" - -msgid "Finally, clean up by deleting the test object:" -msgstr "Son olarak deneme nesnesini silerek temizlik yapın:" - -msgid "" -"Finally, start the stopped MySQL database service and validate that " -"everything works as expected." -msgstr "" -"Son olarak, durdurulan MySQL veritabanı servisini başlatın ve herşeyin " -"beklenen şekilde çalıştığını doğrulayın." - -msgid "First check for an unused floating IP." -msgstr "Önce kullanılmamış bir değişken IP için kontrol edin." - -msgid "" -"First provide the appropriate identity, credentials and authorization URL " -"for your project. Then get an instance of the Nova API interface." -msgstr "" -"Önce projeniz için uygun kimliği, kimlik bilgilerini ve yetkilendirme " -"URL'sini sağlayın. Ardından Nova API arayüzü örneğini alın." - -msgid "First, learn how to connect to the Object Storage endpoint:" -msgstr "Önce, Nesne Depolama uç noktasına nasıl bağlanacağınızı öğrenin:" - -msgid "" -"First, tell the connection to get a specified image by using the ID of the " -"image that you picked in the previous section:" -msgstr "" -"Önce, bağlantıya önceki kısımda seçtiğiniz imajın kimliğini kullanarak " -"belirtilen imajı almasını söyleyin:" - -msgid "Flavors and images" -msgstr "Nitelikler ve imajlar" - -msgid "" -"For a list of available SDKs, see `Software Development Kits `_." -msgstr "" -"Kullanılabilir SDK listesi için, `Yazılım Geliştirme Araçlarına `_ göz atın." - -msgid "" -"For efficiency, most Object Storage installations treat large objects, :code:" -"`> 5GB`, differently than smaller objects." -msgstr "" -"Etkinlik için, çoğu Nesne Depolama kurulumları büyük nesnelere, örneğin :" -"code:`>5GB` küçük nesnelerden farklı davranırlar." - -msgid "" -"For example, you might use the Orchestration API to create two compute " -"instances by creating a stack and by passing a template to the Orchestration " -"API. That template contains two resources with the :code:`type` attribute " -"set to :code:`OS::Nova::Server`." -msgstr "" -"Örneğin bir yığın oluşturarak ve Orkestrasyon API'sine bir şablon geçirerek " -"Orkestrasyon API'sini kullanarak iki hesaplama sunucusu oluşturabilirsiniz. " -"Bu şablon :code:`type` özniteliği :code:`OS::Nova::Server` olarak ayarlanmış " -"iki kaynak içerir." - -msgid "For example:" -msgstr "Örneğin:" - -msgid "" -"For information about supported features and how to work with an existing " -"database service installation, see `Database as a Service in OpenStack " -"`_." -msgstr "" -"Desteklenen özellikler ve mevcut bir veritabanı servisi kurulumuyla nasıl " -"çalışacağınız hakkında bilgi için, `OpenStack'de Servis olarak Veritabanı " -"`_ kısmına bakınız." - -msgid "" -"For information about these and other calls, see `libcloud documentation " -"`_." -msgstr "" -"Bu ve diğer çağrılar hakkında bilgi için, `libcloud belgelendirmesine " -"`_ göz atın." - -msgid "" -"For more information about hybrid clouds, see the `Hybrid Cloud chapter " -"`_ in the Architecture " -"Design Guide." -msgstr "" -"Melez bulutlarla ilgili daha fazla bilgi için, Mimari Tasarım Kılavuzundaki " -"`Melez Bulut bölümüne `_ " -"göz atın." - -msgid "" -"For more information about multi-site clouds, see the `Multi-Site chapter " -"`_ in the " -"Architecture Design Guide." -msgstr "" -"Çoklu konum bulutlarıyla ilgili daha fazla bilgi için, Mimari Tasarım " -"Kılavuzundaki `Çoklu Konum bölümüne `_ göz atın." - -msgid "" -"For performance reasons, it makes sense to have a network for each tier, so " -"that traffic from one tier does not \"crowd out\" other types of traffic and " -"cause the application to fail. In addition, having separate networks makes " -"controlling access to parts of the application easier to manage, improving " -"the overall security of the application." -msgstr "" -"Başarım sebepleriyle, her aşama için bir ağa sahip olmak mantıklıdır, " -"böylecek bir aşamadaki trafik diğer türde trafiklerde \"kalabalık\" yaparak " -"uygulamanın başarısız olmasına sebep olmaz. Ek olarak farklı ağlara sahip " -"olmak uygulamanın parçalarına erişimi kontrol etmeyi yönetmesi kolay hale " -"getirir, uygulamanın genel güvenliğini artırır." - -msgid "" -"For this example, we take a floating IP pool from the 'public' network, " -"which is your external network." -msgstr "" -"Bu örnek için, harici ağınız olan 'public' ağından bir değişken IP havuzu " -"alıyoruz." - -msgid "Fractals application architecture" -msgstr "Fraktallar uygulama mimarisi" - -msgid "" -"From here, go to :doc:`/scaling_out` to learn how to further scale your " -"application. Or, try one of these steps in the tutorial:" -msgstr "" -"Burdan :doc:`/scaling_out` kısmına giderek uygulamanızı nasıl " -"ölçekleyeceğinizi öğrenin. Veya öğreticideki şu adımlardan birini deneyin:" - -msgid "Generate load" -msgstr "Yük üretin" - -msgid "Get more information about the stack:" -msgstr "Yığınla ilgili daha fazla bilgi al:" - -msgid "Getting started" -msgstr "Başlangıç" - -msgid "Go" -msgstr "Go" - -msgid "Go ahead and create two instances." -msgstr "Devam edin ve iki sunucu oluşturun." - -msgid "" -"Go ahead and delete the existing instances and security groups that you " -"created in previous sections. Remember, when instances in the cloud are no " -"longer working, remove them and re-create something new." -msgstr "" -"Önceki kısımlarda oluşturduğunuz mevcut sunucuları ve güvenlik gruplarını " -"silin. Unutmayın, buluttaki sunucular çalışmayı bıraktıklarında onları " -"kaldırmalı ve yeni bir şeyi tekrar oluşturmalısınız." - -msgid "" -"Go ahead and test the fault tolerance. Start deleting workers and API " -"instances. As long as you have one of each, your application is fine. " -"However, be aware of one weak point. The database contains the fractals and " -"fractal metadata. If you lose that instance, the application stops. Future " -"sections will explain how to address this weak point." -msgstr "" -"Şimdi devam edip hata dayanıklılığını deneyin. İşçileri ve API sunucularını " -"silmeye başlayın. İkisinden de birer tane olduğu sürece, uygulamanız " -"çalışır. Ancak bir zayıf noktayı unutmayın. Veritabanı fraktalları ve " -"fraktal metaverisini içerir. Bu sunucuyu kaybederseniz, uygulama durur. " -"İleri kısımlar bu zayıf noktayı nasıl ele alabileceğinizi açıklar." - -msgid "" -"Go to :doc:`/durability` to learn how to use Object Storage to solve this " -"problem in an elegant way. Or, you can proceed to one of these sections:" -msgstr "" -"Bu sorunu Nesne Depolamayı kullanarak zarif bir şekilde nasıl çözeceğinizi " -"öğrenmek için :doc:`/durability` kısmına gidin. Veya şu kısımlardan birine " -"devam edin:" - -msgid "Going crazy" -msgstr "Çılgınlaşmak" - -msgid "HOT templating language" -msgstr "HOT şablon dili" - -msgid "High availability" -msgstr "Yüksek kullanılırlık" - -msgid "" -"How do you deploy your application? For example, do you pull the latest code " -"from a source control repository? Do you make packaged releases that update " -"infrequently? Do you perform haphazard tests in a development environment " -"and deploy only after major changes?" -msgstr "" -"Uygulamanızı nasıl kuruyorsunuz? Örneğin son kodu kaynak kontrol deposundan " -"mı çekiyorsunuz? Paketli dağıtımlar yaparak arada bir güncelliyor musunuz? " -"Geliştirme ortamında gelişigüzel denemeler yaparak yalnızca büyük " -"değişikliklerden sonra mı dağıtıyorsunuz?" - -msgid "How the Fractals application interacts with OpenStack" -msgstr "Fraktallar uygulamasının OpenStack ile nasıl etkileşimde bulunacağı" - -msgid "How you interact with OpenStack" -msgstr "OpenStack ile nasıl etkileşimde bulunduğunuz" - -msgid "If a key pair of the given name is not found then one is generated." -msgstr "Verilen isimde bir anahtar çifti bulunmazsa bir tane üretilir." - -msgid "" -"If an application is meant to automatically scale up and down to meet " -"demand, it is not feasible have any manual steps in the process of deploying " -"any component of the application. Automation also decreases the time to " -"recovery for your application in the event of component failures, increasing " -"fault tolerance and resilience." -msgstr "" -"Bir uygulama talebi karşılamak için otomatik olarak yukarı aşağı " -"ölçeklenebilir olacaksa, uygulamanın herhangi bir bileşenini kurmada elle " -"yapılması gereken çok fazla işin olması uygulanabilir değildir. " -"Otomatikleştirme ayrıca bileşen arızalarında kurtarma sürelerini azaltır, " -"hata dayanıklılığını ve esnekliği artırır." - -msgid "" -"If either alarm reports the :code:`insufficient data` state, the default " -"sampling period of the stack is probably too low for your cloud; ask your " -"support team for assistance. You can set the period through the :code:" -"`period` parameter of the stack to match your clouds requirements." -msgstr "" -"Herhangi bir uyarı :code:`yetersiz veri` durumu bildirirse, yığının " -"öntanımlı örnekleme aralığı muhtemelen bulutunuz için çok düşüktür; destek " -"ekibinize yardım için başvurun. Aralığı bulutunuzun gereksinimleriyle " -"eşleşmesi için :code:`period` parametresi aracılığıyla ayarlayabilirsiniz." - -msgid "" -"If one application instance is compromised, all instances with the same " -"image and configuration will likely suffer the same vulnerability. The " -"safest path is to use configuration management to rebuild all instances." -msgstr "" -"Bir uygulama sunucusu ele geçirilmişse, aynı imaj ve yapılandırmaya sahip " -"tüm sunucuların aynı saldırıyla karşılaşması muhtemeldir. En güvenli yol " -"yapılandırma yönetimiyle tüm sunucuları yeniden inşa etmektir." - -msgid "" -"If one is assigned, users can use this address to access the instance on " -"some OpenStack clouds." -msgstr "" -"Eğer atanmışsa, kullanıcılar bazı OpenStack bulutlarında sunucuya erişmek " -"için bu adresi kullanabilirler." - -msgid "If one is assigned, users can use this address to access the instance." -msgstr "" -"Eğer atanmışsa, kullanıcılar sunucuya erişmek için bu adresi kullanabilirler." - -msgid "" -"If the image that you want is not available in your cloud, you can usually " -"upload one depending on the policy settings of your cloud. For information " -"about how to upload images, see `obtaining images `_." -msgstr "" -"İstediğiniz imaj bulutunuzda değilse, genellikle bulutunuzun ilke ayarlarına " -"göre bir tane yükleyebilirsiniz. İmaj yüklemeyle ilgili bilgi için `imajları " -"elde etmeye `_ " -"göz atın." - -msgid "" -"If you are an advanced user, think about how you might remove the database " -"from the architecture and replace it with Object Storage metadata, and then " -"contribute these steps to :doc:`craziness`." -msgstr "" -"Gelişmiş bir kullanıcı isenize, veritabanını mimariden ayırarak Nesne " -"Depolama metaverisi ile nasıl değiştirebileceğinizi düşünün ve bu adımları :" -"doc:`craziness` belgesine yazın." - -msgid "" -"If you are familiar with OpenStack but have not created a cloud application " -"in general or an OpenStack application in particular, this section teaches " -"you how to program with OpenStack components." -msgstr "" -"OpenStack'e aşina iseniz ama bir bulut uygulaması veya OpenStack uygulaması " -"oluşturmadıysanız, bu kısım OpenStack bileşenleriyle nasıl programlama " -"yapacağınızı öğretir." - -msgid "" -"If you check the load on the :code:`app-controller` API service instance, " -"you see that the instance is not doing well. On your single CPU flavor " -"instance, a load average greater than 1 means that the server is at capacity." -msgstr "" -":code:`app-controller` API servis sunucusundaki yükü kontrol ederseniz, " -"sunucunun pek iyi çalışmadığını görürsünüz. Tek işlemcili niteliğe sahip " -"sunucunuzda, 1'den büyük bir ortalama yük sunucunun kapasitesinde çalıştığı " -"anlamına gelir." - -msgid "" -"If you check the load on the worker, you can see that the instance is not " -"doing well. On the single CPU flavor instance, a load average greater than 1 " -"means that the server is at capacity." -msgstr "" -"İşçi üzerindeki yükü kontrol ederseniz, sunucunun pek iyi gitmediğini " -"görebilirsiniz. Tek CPU nitelikli sunucuda, 1'den büyük bir yük ortalaması " -"sunucunun kapasitesinde olduğu anlamına gelir." - -msgid "" -"If you deploy your application on a regular basis, you can resolve outages " -"and make security updates without manual intervention. If an outage occurs, " -"you can provision more resources in another region. If you must patch " -"security holes, you can provision additional compute nodes that are built " -"with the updated software. Then, you can terminate vulnerable nodes and " -"automatically fail-over traffic to the new instances." -msgstr "" -"Düzenli olarak uygulamanızı kuruyorsanız, elle araya girmeden kesintileri " -"çözebilir ve güvenlik güncellemelerini yapabilirsiniz. Bir kesinti olursa, " -"başka bir bölgeden daha fazla kaynak hazırlayabilirsiniz. Güvenlik yamaları " -"yapmanız gerekirse, güncel yazılıma sahip şekilde inşa edilmiş ek hesaplama " -"düğümleri hazırlayabilirsiniz. Ardından saldırıya açık düğümleri sonlandırır " -"ve trafiği yeni sunuculara otomatik olarak aktarırsınız." - -msgid "" -"If you do not have a working application, follow the steps in :doc:" -"`introduction` to create one." -msgstr "" -"Çalışan bir uygulamanız yoksa, bir tane oluşturmak için :doc:`introduction` " -"kısmındaki adımları takip edin." - -msgid "" -"If you do not know Maven then the `Maven home site `_ is a good place to learn more." -msgstr "" -"Maven bilmiyorsanız daha fazlasını öğrenmek için `Maven sitesi `_ iyi bir yerdir." - -msgid "" -"If you do not use floating IP addresses, substitute another IP address, as " -"appropriate." -msgstr "" -"Değişken IP adresleri kullanmazsanız, uygun şekilde başka bir IP adresiyle " -"değiştirin." - -msgid "" -"If you had a load balancer, you could distribute this load between the two " -"different API services. You have several options. The :doc:`networking` " -"section shows you one option." -msgstr "" -"Bir yük dengeleyiciniz vardıysa, bu yükü iki farklı API servisi arasında " -"dağıtabilirdiniz. Birçok seçeneğiniz vardır. :doc:`networking` kısmı " -"seçeneklerden birini gösterir." - -msgid "" -"If you have no free floating IPs that have been allocated for your project, " -"first select a network which offer allocation of floating IPs. In this " -"example we use network which is called :code:`public`." -msgstr "" -"Projeniz için ayrılmış hiç boş değişken IP'niz yoksa, önce değişken IP'lerin " -"ayrılmasını sunan bir ağ seçin. Bu örnekte :code:`public` olarak " -"adlandırılan ağı kullanıyoruz." - -msgid "" -"If you have no free floating IPs that have been previously allocated for " -"your project, first select a floating IP pool offered by your provider. In " -"this example, we have selected the first one and assume that it has " -"available IP addresses." -msgstr "" -"Önceden projenize ayrılmış boşta değişken IP'leriniz yoksa, önce " -"sağlayıcınız tarafından sunulan bir değişken IP havuzu seçin. Bu örnekte " -"ilkini seçtik ve kullanılabilir IP adresleri olduğunu varsaydık." - -msgid "" -"If you have no free floating IPs that have been previously allocated for " -"your project, then select a floating IP pool offered by your provider. In " -"this example, we have selected the first one and assume that it has " -"available IP addresses." -msgstr "" -"Önceden projenize ayrılmış boşta değişken IP'leriniz yoksa, önce " -"sağlayıcınız tarafından sunulan bir değişken IP havuzu seçin. Bu örnekte " -"ilkini seçtik ve kullanılabilir IP adresleri olduğunu varsaydık." - -msgid "If you list existing instances:" -msgstr "Mevcut sunucuları listelerseniz:" - -msgid "If you list the instances again, the instance disappears." -msgstr "Sunucuları tekrar listelerseniz, sunucu kaybolacaktır." - -msgid "" -"If you receive the :code:`libcloud.common.types.InvalidCredsError: 'Invalid " -"credentials with the provider'` exception when you run one of these API " -"calls, double-check your credentials." -msgstr "" -"Bu API çağrılarından birini çalıştırırken :code:`libcloud.common.types." -"InvalidCredsError: 'Sağlayıcıyla geçersiz kimlik bilgileri'` istisnasını " -"alırsanız, kimlik bilgilerinizi tekrar kontrol edin." - -msgid "" -"If you receive the exception :code:`openstack.exceptions.HttpException: " -"HttpException: 401 Client Error: Unauthorized,` while trying to run one of " -"the following API calls please double-check your credentials." -msgstr "" -"Aşağıdaki API çağrılarından birini çalıştırmaya çalışırken :code:`openstack." -"exceptions.HttpException: HttpException: 401 İstemci Hatası: " -"Yetkilendirilmemiş,` istisnasını alırsanız lütfen kimlik bilgilerinizi " -"tekrar kontrol edin." - -msgid "" -"If you see an IOError, you may need to change ``~/.ssh/`` to ``/home/" -"{USERNAME}/.ssh/``, using an absolute path." -msgstr "" -"Bir IOError görürseniz, ``~/.ssh/`` konumunu ``/home/{USERNAME}/.ssh/`` " -"şeklinde mutlak yolla değiştirmeniz gerekebilir." - -msgid "" -"If you think about how you traditionally make what you store durable, you " -"quickly conclude that keeping multiple copies of your objects on separate " -"systems is a good way strategy. However, keeping track of those multiple " -"copies is difficult, and building that into an app requires complicated " -"logic." -msgstr "" -"Geleneksel olarak kaydettiğiniz bir şeyi nasıl dayanılı yaptığınızı " -"düşünürseniz, nesnelerinizin çoklu kopyalarını farklı sistemlerde tutmanın " -"iyi bir strateji olduğu sonucuna varabilirsiniz. Ancak, bu çoklu kopyaları " -"takip etmek zordur, ve bunu bir uygulamada inşa etmek karmaşık bir mantık " -"gerektirir." - -msgid "" -"If you work with large objects, use the :code:`RegionScopedBlobStoreContext` " -"class family instead of the ones used so far." -msgstr "" -"Büyük nesnelerle çalışıyorsanız, şimdiye kadarkiler yerine :code:" -"`RegionScopedBlobStoreContext` sınıf ailesini kullanın." - -msgid "" -"If you work with large objects, use the :code:`ex_multipart_upload_object` " -"call instead of the simpler :code:`upload_object` call. The call splits the " -"large object into chunks and creates a manifest so that the chunks can be " -"recombined on download. Change the :code:`chunk_size` parameter, in bytes, " -"to a value that your cloud can accept." -msgstr "" -"Büyük nesnelerle çalışıyorsanız, daha basit olan :code:`upload_object` " -"çağrısı yerine :code:`ex_multipart_upload_object` çağrısını kullanın. Çağrı " -"büyük nesneyi parçalara böler ve bir bildiri oluşturarak indirme zamanında " -"parçaların tekrar birleştirilebilmesini sağlar. :code.`chunk_size` " -"parametresini bulutunuzun kabul edeceği bir değere bayt olarak ayarlayın." - -msgid "" -"If your provider does not support regions, try a blank string ('') for the " -"`region_name`." -msgstr "" -"Sağlayıcınız bölgeleri desteklemiyorsa, `region_name` için boş bir karakter " -"dizisi ('') deneyin." - -msgid "" -"In a new Terminal window, SSH into the 'api' API instance. Use the key pair " -"name that you passed in as a parameter." -msgstr "" -"Yeni bir Terminal penceresinde, 'api' API sunucusuna SSH çekin. Parametre " -"olarak verdiğiniz anahtar çifti ismini kullanın." - -msgid "" -"In addition to configuring backups, review your policies about what you back " -"up and how long to retain each backed up item." -msgstr "" -"Yapılandırma yedeklerine ek olarak, neleri yedeklediğinizle ve yedeklenen " -"her ögeyi ne kadar tutacağınızla ilgili ilkelerinizi gözden geçirin." - -msgid "" -"In addition to this kind of monitoring, you should consider availability " -"monitoring. Although your application might not care about a failed worker, " -"it should care about a failed database server." -msgstr "" -"Bu tür izlemeye ek olarak, kullanılırlık izlemesini de düşünmelisiniz. " -"Uygulamanız başarısız olan bir işçiyle ilgilenmiyor olsa bile, başarısız bir " -"veritabanı sunucusunu göz önüne almalıdır." - -msgid "" -"In cloud programming, it is very different. Rather than large, expensive " -"servers, you have virtual machines that are disposable; if something goes " -"wrong, you shut the server down and spin up a new one. There is still " -"operations staff, but rather than nursing individual servers back to health, " -"their job is to monitor the health of the overall system." -msgstr "" -"Bulut programlamada, çok daha farklıdır. Büyük, pahalı sunucular yerine, " -"atılabilir sanal sunucularınız vardır; bir şeyler ters giderse, sunucuyu " -"kapatır ve yeni bir tanesini açarsınız. Yine işletici çalışanlar olur, ama " -"tek tek sunucuları kurtarmaya çalışmak yerine, işleri genel sistem sağlığını " -"izlemektir." - -msgid "" -"In cloud programming, there is a well-known analogy known as \"cattle vs pets" -"\". If you have not heard it before, it goes like this:" -msgstr "" -"Bulut programlamada \"sığırlara karşı evcil hayvanlar\" olarak bilinen bir " -"benzeşim vardır. Daha önce duymadıysanız şu şekilde bir şey:" - -msgid "" -"In earlier sections, the Fractal application used an installation script " -"into which the metadata API passed parameters to bootstrap the cluster. " -"`Etcd `_ is \"a distributed, consistent key-" -"value store for shared configuration and service discovery\" that you can " -"use to store configurations. You can write updated versions of the Fractal " -"worker component to connect to Etcd or use `Confd `_ to poll for changes from Etcd and write changes to " -"a configuration file on the local file system, which the Fractal worker can " -"use for configuration." -msgstr "" -"Önceki kısımlarda, Fraktal uygulama metaveri API'sinin kümeyi önyüklemek " -"için parametreler geçirdiği bir kurulum betiği kullandı. `Etcd `_ yapılandırmaları saklayabileceğiniz \"paylaşımlı " -"yapılandırma ve servis keşfi için dağıtık, tutarlı anahtar-değer deposudur" -"\". Fraktal işçi bileşeninin güncel sürümlerini yazarak Etcd'ye bağlanmasını " -"veya `Confd `_ kullanarak " -"değişiklikleri Etcd'den çekmesini ve yerel dosya sistemindeki bir dosyaya " -"yazmasını sağlayabilirisiniz." - -msgid "" -"In openstacksdk parameter :code:`ex_userdata` is called :code:`user_data` " -"and parameter :code:`ex_keyname` is called :code:`key_name`." -msgstr "" -"Openstacksdk'da :code:`ex_userdata` parametresi :code:`user_data` olarak, :" -"code:`ex_keyname` ise :code:`key_name` olarak adlandırılır." - -msgid "" -"In previous chapters, all nodes that comprise the fractal application were " -"attached to the same network." -msgstr "" -"Önceki bölümlerde, fraktal uygulamayı oluşturan tüm düğümler aynı ağa " -"bağlıydı." - -msgid "" -"In previous sections, you used your SDK to programmatically interact with " -"OpenStack. In this section, you use the 'heat' command-line client to access " -"the Orchestration API directly through template files." -msgstr "" -"Önceki kısımlarda, programlı şekilde OpenStack ile etkileşmek için SDK'nızı " -"kullandınız. Bu kısımda Orkestrasyon API'sine doğrudan şablon dosyaları " -"aracılığıyla erişmek için 'heat' komut satırı istemcisini kullanırsınız." - -msgid "" -"In the Terminal window where you run ceilometer, run :code:" -"`ceilometer_sample_query` to see the samples." -msgstr "" -"Örnekleri görmek için, terminal penceresinde ceilometer'i çalıştırdığınız " -"yerde :code:`ceilometer_sample_query` çalıştırın." - -msgid "" -"In the following example, set :code:`pub_key_file` to the location of your " -"public SSH key file." -msgstr "" -"Aşağıdaki örnekte, :code:`pub_key_file`'yi açık SSH anahtarı dosyanızın " -"konumuna ayarlayın." - -msgid "In the outputs section of the stack, you can run these web API calls:" -msgstr "Yığının çıktılar kısmında, şu web API çağrılarını çalıştırabilirsiniz:" - -msgid "" -"In the previous steps, you split out several services and expanded capacity. " -"To see the new features of the Fractals application, SSH to one of the app " -"instances and create a few fractals." -msgstr "" -"Önceki adımlarda, çeşitli servisleri ayırdınız ve kapasiteyi genişlettiniz. " -"Fraktal uygulamasının yeni özelliklerini görmek için, uygulama " -"sunucularından birine SSH çekin ve yeni fraktallar oluşturun." - -msgid "" -"In theory, you could use a simple script to monitor the load on your workers " -"and API services and trigger the creation of instances, which you already " -"know how to do. Congratulations! You are ready to create scalable cloud " -"applications." -msgstr "" -"Teorik olarak, basit bir betik kullanarak işçileriniz ve API servisleriniz " -"üzerindeki yükü izleyerek sunucuların oluşturulmasını tetikleyebilirdiniz, " -"ki bunu yapmayı zaten biliyorsunuz. Tebrikler! Ölçeklenebilir bulut " -"uygulamaları oluşturmaya hazırsınız." - -msgid "" -"In this case, we are presenting a shell script as the `userdata `_. " -"When :code:`create_node` creates the instance, :code:`cloud-init` executes " -"the shell script in the :code:`userdata` variable." -msgstr "" -"Bu durumda, `userdata `_ olarak bir kabuk betiğini sunuyoruz. :code:" -"`create_node` sunucuyu oluşturduğunda, :code:`cloud-init` :code:`userdata` " -"değişkenindeki kabuk betiğini çalıştırır." - -msgid "" -"In this network layout, we assume that the OpenStack cloud in which you have " -"been building your application has a public network and tenant router that " -"was previously created by your cloud provider or by yourself, following the " -"instructions in the appendix." -msgstr "" -"Bu ağ düzeninde, uygulamanızı içinde inşa ettiğiniz OpenStack bulutunun " -"ekteki yönergeleri takip edecek şekilde bulut sağlayıcınız veya sizin " -"tarafınızdan daha önceden oluşturulan bir açık ağı ve kiracı yönlendiricisi " -"bulunduğunu varsayıyoruz." - -msgid "" -"In this template, the alarms use metadata that is attached to each worker " -"instance. The metadata is in the :code:`metering.stack=stack_id` format." -msgstr "" -"Bu şablonda, uyarılar her bir işçi sunucuya eklenmiş metaveriyi kullanır. " -"Metaveri :code:`metering.stack=stack_id` biçimindedir." - -msgid "" -"In this tutorial, we have downloaded the latest version of our application " -"from source and installed it on a standard image. Our magic installation " -"script also updates the standard image to have the latest dependencies that " -"you need to run the application." -msgstr "" -"Bu öğreticide uygulamamızın son sürümünü kaynaktan indirdik ve standart bir " -"imaj üzerine yükledik. Sihirli kurulum betiğimiz ayrıca standart imajı " -"uygulamanın çalışması için gerekli en son bağımlılıkları içerecek şekilde " -"günceller." - -msgid "" -"In this tutorial, you interact with your OpenStack cloud through the SDK " -"that you chose in \"Choose your OpenStack SDK.\" This guide assumes that you " -"know how to run code snippets in your language of choice." -msgstr "" -"Bu öğreticide, OpenStack bulutunuzla \"OpenStack SDK'nızı seçin\" kısmında " -"seçtiğiniz SDK aracılığıyla etkileşirsiniz. Bu kılavuz seçtiğiniz dilde kod " -"parçaları çalıştırmayı bildiğinizi varsayar." - -msgid "" -"In traditional data centers, network segments are dedicated to specific " -"types of network traffic." -msgstr "" -"Geleneksel veri merkezlerinde, ağ dilimleri belirli türde ağ trafiği için " -"adanmıştır." - -msgid "In your SSH session, confirm that no fractals were generated:" -msgstr "SSH oturumunuzda, fraktalların üretildiğini onaylayın:" - -msgid "" -"Initially, the focus is on scaling the workers because they consume the most " -"resources." -msgstr "" -"İlk olarak, en çok kaynağı tükettiklerinden ölçekleme odağı işçiler " -"üzerinedir." - -msgid "Install a service" -msgstr "Bir servis kur" - -msgid "" -"Install the 'heat' command-line client by following this guide: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"Şu kılavuzu kullanarak 'heat' komut satırı istemcisini kurun: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"Internet connectivity from your cloud instance is required to download the " -"application." -msgstr "" -"Uygulamayı indirmek için bulut sunucunuzdan internet bağlantısı gereklidir." - -msgid "Introduction to Floating IPs" -msgstr "Değişken IP'lere giriş" - -msgid "Introduction to cloud-init" -msgstr "Cloud-init'e giriş" - -msgid "Introduction to key pairs" -msgstr "Anahtar çiftlerine giriş" - -msgid "Introduction to security groups" -msgstr "Güvenlik gruplarına giriş" - -msgid "Introduction to tenant networking" -msgstr "Kiracı ağlara giriş" - -msgid "Introduction to the fractals application architecture" -msgstr "Fraktallar uygulama mimarisine giriş" - -msgid "" -"It is easy to split out services into multiple instances. We will create a " -"controller instance called :code:`app-controller`, which hosts the API, " -"database, and messaging services. We will also create a worker instance " -"called :code:`app-worker-1`, which just generates fractals." -msgstr "" -"Servisleri birden çok sunucuya ayırmak kolaydır. API, veritabanı ve ileti " -"servislerini sunan :code:`app-controller` isimli bir kontrol düğümü " -"oluşturacağız. Ayrıca yalnızca fraktalları üreten bir :code:`app-worker-1` " -"işçi sunucusu oluşturacağız." - -msgid "It is not possible to restore deleted objects. Be careful." -msgstr "Silinen nesneleri geri yükleme imkansızdır. Dikkatli olun." - -msgid "Java" -msgstr "Java" - -msgid "" -"Jclouds does not currently support OpenStack Orchestration. See this `bug " -"report `_." -msgstr "" -"Jclouds henüz OpenStack Orkestrasyon'u desteklemiyor. Şu `hata raporuna " -"`_ göz atın." - -msgid "" -"Just as you back up information on a non-cloud server, you must back up non-" -"reproducible information, such as information on a database server, file " -"server, or in application log files. Just because something is 'in the " -"cloud' does not mean that the underlying hardware or systems cannot fail." -msgstr "" -"Bulut dışı bir sunucuya bilgi yedeklerken, tekrar üretilemez bilgileri " -"yedeklemelisiniz, örneğin veritabanı sunucusundaki bilgi, dosya sunucusu, " -"veya uygulama kayıt dosyaları. Bir şeyin `bulutta` olması altta yatan " -"donanım veya sistemin arızalanamayacağı anlamına gelmez." - -msgid "Language" -msgstr "Dil" - -msgid "" -"Large file uploads that use the :code:`openstack-swift` provider are " -"supported in only jclouds V2, currently in beta. Also, the default chunk " -"size is 64 Mb. Consider changing this as homework." -msgstr "" -":code:`openstack-swift` sağlayıcısını kullanan büyük dosya yüklemeleri " -"yalnızca şu an beta olan jclouds V2'de desteklenir. Ayrıca öntanımlı parça " -"boyutu 64 Mb'dir. Bunu değiştirmek ev ödeviniz olsun." - -msgid "Large objects" -msgstr "Büyük nesneler" - -msgid "" -"Later on, you will use a Block Storage volume to provide persistent storage " -"for the database server for the Fractal application. But first, learn how to " -"create and attach a Block Storage device." -msgstr "" -"İlerde Fraktal uygulama için veritabanı sunucusu için kalıcı depolama " -"sağlamak için Blok Deoplama birimi kullanacaksınız. Ama önce bir Blok " -"Depolama aygıtı oluşturmayı ve eklemeyi öğrenin." - -msgid "Launch an instance" -msgstr "Sunucu Başlat" - -msgid "Launch the stack with auto-scaling workers:" -msgstr "Yığını otomatik ölçeklenen işçilerle başlatın:" - -msgid "" -"Leave your shell open to use it for another instance deployment in this " -"section." -msgstr "" -"Bu kısımda başka bir sunucu kurulumunda kullanmak için kabuğunuzu açık tutun." - -msgid "" -"Libcloud 0.16 and 0.17 are afflicted with a bug that means authentication to " -"a swift endpoint can fail with `a Python exception `_. If you encounter this, you can upgrade your " -"libcloud version, or apply a simple `2-line patch `_." -msgstr "" -"Libcloud 0.16 ve 0.17 bir swift uç noktasına kimlik doğrulamanın bir `Python " -"istisnasıyla `_ " -"sonlandığı bir hataya sahiptir. Bununla karşılaşırsanız, libcloud sürümünüzü " -"güncelleyin, veya basit `2 satırlık bir yamayı `_ uygulayın." - -msgid "Libcloud does not support the OpenStack Networking API." -msgstr "Libcloud OpenStack Ağ API'sini desteklemez." - -msgid "" -"Libcloud uses a different connector for Object Storage to all other " -"OpenStack services, so a conn object from previous sections will not work " -"here and we have to create a new one named :code:`swift`." -msgstr "" -"Libcloud Nesne Depolama iin tüm OpenStack servislerine farklı bağlantı " -"kullanır, yani önceki kısımlardan bir conn nesnesi burada çalışmayacaktır, :" -"code:`swift` isimli yeni bir tane oluşturmalıyız." - -msgid "" -"Like many cloud applications, the Fractals application has a `RESTful API " -"`_. You can " -"connect to it directly and generate fractals, or you can integrate it as a " -"component of a larger application. Any time a standard interface such as an " -"API is available, automated testing becomes much more feasible, increasing " -"software quality." -msgstr "" -"Birçok bulut uygulaması gibi, Fraktallar uygulaması da `RESTful API'ye " -"`_ sahiptir. " -"Doğrudan bağlanıp fraktallar oluşturabilirsiniz veya daha büyük bir " -"uygulamanın bileşeni olarak tümleştirebilirsiniz. API gibi standart bir " -"arayüz kullanılabilir olduğunda, otomatik olarak deneme çok daha kolaylaşır, " -"yazılım kalitesi artar." - -msgid "" -"List all available floating IPs for this project and select the first free " -"one. Allocate a new floating IP if none is available." -msgstr "" -"Bu proje için kullanılabilir tüm değişken IP'leri listeleyin ve boş olan " -"ilkini seçin. Kullanılabilir yoksa yeni bir değişken IP ayırın." - -msgid "" -"List objects in your :code:`fractals` container to see if the upload was " -"successful. Then, download the file to verify that the md5sum is the same:" -msgstr "" -":code:`fraktallar` kapsayıcınızdaki nesneleri listeleyerek yüklemenin " -"başarılı olduğunu onaylayın. Ardından md5sum değerinin aynı olduğundan emin " -"olmak için dosyayı indirin:" - -msgid "Load balancing" -msgstr "Yük dengeleme" - -msgid "Load the API: Create a lot of API service requests" -msgstr "API'ye yüklenin: Birçok API servis isteği oluşturun" - -msgid "" -"Load the worker: Create a lot of tasks to max out the CPU of existing worker " -"instances" -msgstr "" -"İşçiye yüklenin: Mevcut işçi sunucuların CPU kullanımını tavana taşımak için " -"bir sürü görev oluşturun" - -msgid "Log in to the server to run the following steps." -msgstr "Aşağıdaki adımları çalıştırmak için sunucuya giriş yapın." - -msgid "" -"Login to the worker instance, :code:`app-worker-1`, with SSH, using the " -"previous added SSH key pair \"demokey\". Start by getting the IP address of " -"the worker:" -msgstr "" -"Daha önce eklenen \"demokey\" SSH anahtar çiftini kullanarak SSH ile :code:" -"`app-worker-1` işçi sunucusuna giriş yapın. İşçinin IP adresini alarak " -"başlayın:" - -msgid "Login with SSH and use the Fractal app" -msgstr "SSH ile giriş yapın ve Fraktal uygulamasını kullanın" - -msgid "Look at which ports are available:" -msgstr "Hangi bağlantı noktalarının kullanılabilir olduklarına bakın:" - -msgid "" -"Make cloud-related architecture decisions such as turning functions into " -"micro-services and modularizing them." -msgstr "" -"Fonksiyonları mikro servislere döndürme ve modüler hale getirme gibi bulutla " -"ilgili mimari kararları alın." - -msgid "Make it durable" -msgstr "Dayanıklı hale getirin" - -msgid "Make it possible to add new resources to your application." -msgstr "Uygulamanıza yeni kaynaklar eklemeyi mümkün kılmalısınız." - -msgid "" -"Many of the network concepts that are discussed in this section are already " -"present in the diagram above. A tenant router provides routing and external " -"access for the worker nodes, and floating IP addresses are associated with " -"each node in the Fractal application cluster to facilitate external access." -msgstr "" -"Bu kısımda tartışılan birçok ağ kavramı yukarıdaki çizimde zaten mevcuttur. " -"Bir kiracı yönlendiricisi işçi düğümler için yönlendirme ve harici erişim " -"sağlar, ve değişken IP adresleri Fraktal uygulama kümesindeki her bir düğüm " -"ile ilişkilendirilerek harici erişimi gerçekleştirir." - -msgid "" -"Maven will download and install any dependencies required for compilation, " -"then execute the Java compiler. All files in the :code:`java` subdirectory " -"will be compiled." -msgstr "" -"Maven derleme için gerekli tüm bağımlılıkları indirir ve kurar, ardından " -"Java derleyicisini çalıştırır. :code:`java` alt dizinindeki tüm dosyalar " -"derleneceketir." - -msgid "" -"Maven will download and install any further dependencies required and then " -"run the chosen class." -msgstr "" -"Maven gerekli diğer bağımlılıkları da indirir ve kurar ardından seçilen " -"sınıfı çalıştırır." - -msgid "" -"Message queues are used to facilitate communication between the Fractal " -"application services. The Fractal application uses a `work queue `_ (or task queue) to " -"distribute tasks to the worker services." -msgstr "" -"İleti kuyrukları Fraktal uygulama servisleri arasındaki iletişimi " -"kolaylaştırmak için kullanılır. Fraktal uygulaması görevleri işçi servislere " -"dağıtmak için bir `iş kuyruğu `_ (veya görev kuyruğu) kullanır." - -msgid "" -"Message queues work in a way similar to a queue (or a line, for those of us " -"on the other side of the ocean) in a bank being served by multiple clerks. " -"The message queue in our application provides a feed of work requests that " -"can be taken one-at-a-time by worker services, whether there is a single " -"worker service or hundreds of them." -msgstr "" -"İleti kuyrukları birçok yazmanın çalıştığı bir banka kuyruğuyla (veya " -"okyanusun diğer tarafında olan bizler için sırasıyla) aynı şekilde çalışır. " -"Uygulamamızdaki ileti kuyruğu işçi servislerce her seferde bir tane " -"alınabilen iş isteği beslemesi sağlar, bir tane işçi olsa da yüzlerce işçi " -"olsa da bir şey değişmez." - -msgid "Modularity and micro-services" -msgstr "Modülerlik ve mikro servisler" - -msgid "Monitoring" -msgstr "İzleme" - -msgid "" -"Monitoring is essential for 'scalable' cloud applications. You must know how " -"many requests are coming in and the impact that these requests have on " -"various services. You must have enough information to determine whether to " -"start another worker or API service as you did in :doc:`/scaling_out`." -msgstr "" -"'Ölçeklenebilir' bulut uygulamaları için izleme esastır. Kaç tane isteğin " -"geldiğini ve bu isteklerin çeşitli servisler üstünde nasıl etki edeceğini " -"bilmek zorundasınız. :doc:`/scaling_out` kısmında yaptığınız gibi başka bir " -"işçi veya API servisi başlatıp başlatmamak için karar vermek için yeterli " -"bilgiye sahip olmalısınız." - -msgid "" -"Most cloud providers make a public network accessible to you. We will attach " -"a router to this public network to grant Internet access to our instances. " -"After also attaching this router to our internal networks, we will allocate " -"floating IPs from the public network for instances which need to be accessed " -"from the Internet." -msgstr "" -"Çoğu bulut sağlayıcı size erişebileceğiniz bir açık ağ yapar. Bu açık ağa " -"bir yönlendirici ekleyerek sunucularımıza internet erişimi sağlayacağız. Bu " -"yönlendiriciyi iç ağlarımıza da ekledikten sonra internet erişimine ihtiyaç " -"duyan sunucularımız için açık ağdan değişken IP'ler ayıracağız." - -msgid "" -"Most cloud providers provision all network objects that are required to boot " -"an instance. To determine whether these objects were created for you, access " -"the Network Topology section of the OpenStack dashboard." -msgstr "" -"Çoğu bulut sağlayıcı bir sunucunun önyüklenmesi için gerekli tüm ağ " -"nesnelerini hazırlar. Bu nesnelerin oluşturulup oluşturulmadığını belirlemek " -"için OpenStack kontrol panosundaki Ağ Topolojisi kısmına erişin." - -msgid "" -"Most instances require access to the Internet. The instances in your " -"Fractals app are no exception! Add routers to pass traffic between the " -"various networks that you use." -msgstr "" -"Çoğu sunucu internete erişim gerektirir. Fraktallar uygulamanızdaki " -"sunucular da buna dahildir! Kullandığınız çeşitli ağlar arasında trafik " -"geçişi için yönlendiriciler ekleyin." - -msgid "Multiple clouds" -msgstr "Çoklu bulutlar" - -msgid "Name" -msgstr "Ad" - -msgid "" -"Network access. By default, OpenStack filters all traffic. You must create a " -"security group and apply it to your instance. The security group allows HTTP " -"and SSH access. We will go into more detail in :doc:`/introduction`." -msgstr "" -"Ağ erişimi. Öntanımlı olarak, OpenStack tüm trafiği süzer. Bir güvenlik " -"grubu oluşturmalı ve bunu sunucunuza uygulamalısınız. Güvenlik grubu HTTP ve " -"SSH erişimine izin verir. :doc:`/introduction` da ayrıntıya gireceğiz." - -msgid "Networking" -msgstr "Ağ" - -msgid "Networking segmentation" -msgstr "Ağ dilimlendirme" - -msgid "Neutron LbaaS API" -msgstr "Neutron LbaaS API'si" - -msgid "Next steps" -msgstr "Sonraki adımlar" - -msgid "" -"Next, back up all existing fractals from the database to the swift " -"container. A simple loop takes care of that:" -msgstr "" -"Ardından, mevcut tüm fraktalları veritabanından swift kapsayıcısına " -"yedekleyin. Bunu yapmak için basit bir döngü yeterlidir:" - -msgid "Next, create a network and subnet for the API servers." -msgstr "Ardından, API sunucuları için bir ağ ve alt ağ oluşturun." - -msgid "Next, create a network and subnet for the workers." -msgstr "Ardından işçiler için bir ağ ve alt ağ oluşturun." - -msgid "" -"Next, create additional floating IPs. Specify the fixed IP addresses they " -"should point to and the ports that they should use:" -msgstr "" -"Ardından, ek değişken IP'ler oluşturun. Göstermeleri gereken sabit IP " -"adreslerini ve kullanmaları gereken bağlantı noktalarını belirtin:" - -msgid "Next, start a second instance, which will be the worker instance:" -msgstr "Ardından işçi sunucusu olacak ikinci bir sunucuyu başlatın:" - -msgid "Next, tell the script which flavor you want to use:" -msgstr "Ardından betiğe kullanmak istediğiniz niteliği söyleyin:" - -msgid "" -"Note that the worker instance is part of an :code:`OS::Heat::" -"AutoScalingGroup`." -msgstr "" -"İşçi sunucunun bir :code:`OS::Heat::AutoScalingGroup` parçası olduğuna " -"dikkat edin." - -msgid "" -"Note that this time, when you create a security group, you include a rule " -"that applies to only instances that are part of the worker group." -msgstr "" -"Bu sefer bir güvenlik grubu oluştururken yalnızca işçi grubunun parçası olan " -"sunuculara uygulanan bir kural dahil ettiğinize dikkat edin." - -msgid "" -"Note that we will be showing the commands in a more idiomatic Java way: as " -"methods on a class." -msgstr "" -"Komutları Java ifade tarzına uygun yolla gösterdiğimize dikkat edin; bir " -"sınıf üzerindeki yöntemler olarak." - -msgid "" -"Notice that you have added this instance to the worker_group, so it can " -"access the controller." -msgstr "" -"Kontrolcüye erişebilmesi için bu sunucuyu işçi grubuna eklediğinize dikkat " -"edin." - -msgid "" -"Now call the Fractal application's command line interface (:code:`faafo`) to " -"request a few new fractals. The following command requests a few fractals " -"with random parameters:" -msgstr "" -"Şimdi Fraktal uygulamasının komut satırı arayüzünü (:code:`faafo`) " -"kullanarak birkaç yeni fraktal isteyin. Aşağıdaki komut rasgele " -"parametrelerle birkaç fraktal ister:" - -msgid "" -"Now create a virtual IP that will be used to direct traffic between the " -"various members of the pool:" -msgstr "" -"Şimdi havuzun çeşitli üyeleri arasında trafik yönlendirmek için kullanılacak " -"bir sanal IP oluşturun:" - -msgid "" -"Now if you make a request for a new fractal, you connect to the controller " -"instance, :code:`app-controller`, but the work will actually be performed by " -"a separate worker instance - :code:`app-worker-1`." -msgstr "" -"Şimdi bir fraktal isteğinde bulunursanız, :code:`app-controller` kontrol " -"sunucusuna bağlanırsınız, ama asıl iş ayrı bir :code:`app-worker-1` işçi " -"sunucusunda yapılacaktır." - -msgid "" -"Now log into the controller instance, :code:`app-controller`, also with SSH, " -"using the previously added SSH key pair \"demokey\"." -msgstr "" -"Şimdi daha önceden eklenmiş \"demokey\" SSH anahtar çiftini kullanarak :code:" -"`app-controller` kontrol sunucusuna giriş yapın." - -msgid "Now prepare the empty block device." -msgstr "Şimdi boş blok aygıtı hazırlayın." - -msgid "" -"Now request an address from this network to be allocated to your project." -msgstr "Şimdi bu ağdan projenize ayırmak üzere bir adres isteyin." - -msgid "" -"Now request that an address from this pool be allocated to your project." -msgstr "Şimdi bu havuzdan bir adresin projenize ayrılmasını isteyin." - -msgid "" -"Now that you have an unused floating IP address allocated to your project, " -"attach it to an instance." -msgstr "" -"Artık projenize ayrılmış kullanılmayan bir değişken IP adresi olduğuna göre, " -"sunucuya ekleyebilirsiniz." - -msgid "" -"Now that you have got the networks created, go ahead and create two Floating " -"IPs, for web servers. Ensure that you replace 'public' with the name of the " -"public/external network offered by your cloud provider." -msgstr "" -"Artık ağları oluşturduğunuza göre, devam edin ve web sunucuları için iki " -"değişken IP oluşturun. 'public' kısmını bulut sağlayıcınız tarafından " -"sağlanan açık/harici ağ ismiyle değiştirdiğinizden emin olun." - -msgid "" -"Now that you have prepared the networking infrastructure, you can go ahead " -"and boot an instance on it. Ensure you use appropriate flavor and image " -"values for your cloud - see :doc:`getting_started` if you have not already." -msgstr "" -"Artık ağ altyapısını hazırladığınıza göre, devam edip üzerinde bir sunucu " -"önyükleyebilirsiniz. Bulutunuz için uygun nitelik ve imaj değerlerini " -"kullandığınızdan emin olun - hazır değilseniz bkz :doc:`getting_started`." - -msgid "" -"Now that you know how to create and delete instances, you can deploy the " -"sample application. The instance that you create for the application is " -"similar to the first instance that you created, but this time, we introduce " -"a few extra concepts." -msgstr "" -"Artık sunucuları nasıl oluşturup sileceğinizi bildiğinize göre, aynı " -"uygulamayı kurabilirsiniz. Uygulama için oluşturduğunuz sunucu " -"oluşturduğunuz ilk sunucuya benzerdir ama bu sefer bir kaç ek kavramı " -"devreye sokacağız." - -msgid "Now you can SSH into the instance:" -msgstr "Şimdi sunucuya SSH yapabilirsiniz:" - -msgid "Now, attach your router to the worker, API, and web server subnets." -msgstr "Şimdi yönlendiricinizi işçi, API ve web sunucu alt ağlarına ekleyin." - -msgid "" -"Now, create a health monitor that will ensure that members of the load " -"balancer pool are active and able to respond to requests. If a member in the " -"pool dies or is unresponsive, the member is removed from the pool so that " -"client requests are routed to another active member." -msgstr "" -"Şimdi yük dengeleme havuzu üyelerinin etkin ve isteklere cevap verebilir " -"durumda olduklarından emin olmak için sağlık izleyici oluşturun. Havuzun bir " -"üyesi ölürse veya cevap vermemeye başlarsa, üye havuzdan çıkarılarak istemci " -"isteklerinin etkin üyelere yönlendirilmesi sağlanır." - -msgid "Now, create a network and subnet for the web servers." -msgstr "Şimdi, web sunucuları için bir ağ ve alt ağ oluşturun." - -msgid "Now, look at the big picture." -msgstr "Şimdi büyük resme bakın." - -msgid "Now, no more objects are available in the :code:`fractals` container." -msgstr "Artık :code:`fraktallar` kapsayıcısında kullanılabilir nesne yoktur." - -msgid "" -"Now, wait until all the fractals are generated and the instances have idled " -"for some time." -msgstr "" -"Şimdi tüm fraktalların üretilmesini ve sunucuların bir süre boşta kalmasını " -"bekleyin." - -msgid "Now, you can boot and configure the instance." -msgstr "Artık sunucuyu önyükleyip yapılandırabilirsiniz." - -msgid "Now, you can launch the instance." -msgstr "Şimdi sunucuyu başlatabilirsiniz." - -msgid "Obtain the following information from your cloud provider:" -msgstr "Aşağıdaki bilgiyi bulut sağlayıcınızdan alın:" - -msgid "" -"Of course there is also a web interface which offers a more human friendly " -"way of accessing the API to view the created fractal images, and a simple " -"command line interface." -msgstr "" -"Tabi oluşturulan fraktal imajları görüntülemek için API'ye erişmek için daha " -"insan canlısı bir web arayüzü de bulunur, bir de basit komut satırı arayüzü " -"vardır." - -msgid "" -"Of course, creating a monitoring system for a single application might not " -"make sense. To learn how to use the OpenStack Orchestration monitoring and " -"auto-scaling capabilities to automate these steps, see :doc:`orchestration`." -msgstr "" -"Tabi ki tek bir uygulama için izleme sistemi oluşturmak mantıklı " -"gelmeyebilir. OpenStack Orkestrasyon izlemeyi ve bu adımları " -"otomatikleştirmek için otomatik ölçeklendirmeyi nasıl kullanacağınızı " -"öğrenmek için, bkz :doc:`orchestration`." - -msgid "" -"Of course, having access to additional resources is only part of the game " -"plan; while you can manually add or delete resources, you get more value and " -"more responsiveness if the application automatically requests additional " -"resources when it needs them." -msgstr "" -"Tabi ki ek kaynaklara erişime sahip olmak oyun planının yalnızca parçasıdır; " -"elle kaynak ekleyip silebilseniz de, uygulama otomatik olarak ihtiyaç " -"duyduğunda ek kaynaklar isterse bu daha değerlidir ve yanıt vermeyi artırır." - -msgid "" -"Once you have configured permissions, you must know where to access the " -"application." -msgstr "" -"İzinleri yapılandırdıktan sonra, uygulamaya nerden erişeceğinizi " -"bilmelisiniz." - -msgid "Once you have created a rule or group, you can also delete it:" -msgstr "Bir kural veya grup oluşturduktan sonra, silebilirsiniz de:" - -msgid "" -"Once you have logged in, check to see whether the worker service process is " -"running as expected. You can find the logs of the worker service in the " -"directory :code:`/var/log/supervisor/`." -msgstr "" -"Giriş yaptıktan sonra işçi servis sürecinin beklendiği şekilde çalışıp " -"çalışmadığını kontrol edin. İşçi servisi kayıtlarını :code:`/var/log/" -"supervisor/` dizini altında bulabilirsiniz." - -msgid "" -"One of the latest trends in scalable cloud application deployment is " -"`continuous integration `_ and `continuous deployment `_ (CI/CD)." -msgstr "" -"Ölçeklenebilir bulut uygulama kurulumlarında son eğilim `sürekli tümleştirme " -"`_ ve `sürekli kurulum " -"`_ (CI/CD)." - -msgid "" -"Open :code:`top` to monitor the CPU usage of the :code:`faafo-worker` " -"process." -msgstr "" -":code:`top` uygulamasını açıp :code:`faafo-worker` sürecinin CPU kullanımını " -"izleyin." - -msgid "" -"OpenStack Object Storage automatically replicates each object at least twice " -"before returning 'write success' to your API call. A good strategy is to " -"keep three copies of objects, by default, at all times, replicating them " -"across the system in case of hardware failure, maintenance, network outage, " -"or another kind of breakage. This strategy is very convenient for app " -"creation. You can just dump objects into object storage and not worry about " -"the additional work that it takes to keep them safe." -msgstr "" -"OpenStack Nesne Depolama API çağrınıza 'yazma başarılı' döndürmeden önce her " -"nesneyi otomatik olarak en az iki kere yedekler. Donanım arızası, bakım, ağ " -"kesintisi veya başka bir şeylerin kırılması durumuna karşı sistemde tüm " -"nesnelerin öntanımlı olarak her zaman üç kopyasını tutmak iyi bir " -"stratejidir. Bu strateji uygulama oluşturmada çok kolaylık sağlar. Nesneleri " -"direk nesne depolamaya atar ve güvenli tutmak için gerekli olan ek iş yükünü " -"düşünmezsiniz." - -msgid "OpenStack SDK" -msgstr "OpenStack SDK" - -msgid "OpenStack SDK for Microsoft .NET" -msgstr "Microsoft .NET için OpenStack SDK" - -msgid "OpenStack SDKs" -msgstr "OpenStack SDK'ları" - -msgid "" -"OpenStack provides a couple of tools that make it easy to back up data. If " -"your provider runs OpenStack Object Storage, you can use its API calls and " -"CLI tools to work with archive files." -msgstr "" -"OpenStack veri yedeklemeyi kolaylaştıran bir takım araç sağlar. Sağlayıcınız " -"OpenStack Nesne Depolama çalıştırıyorsa, API çağrılarını ve CLI araçlarını " -"kullanarak arşiv dosyalarıyla çalışabilirsiniz." - -msgid "" -"OpenStack supports 'regions', which are geographically-separated " -"installations that are connected to a single service catalog. This section " -"explains how to expand the Fractal application to use multiple regions for " -"high availability." -msgstr "" -"OpenStack tek bir servis kataloğuna bağlı olana coğrafik olarak ayrılmış " -"kurulumlar olan 'bölgeler'i destekler. Bu kısım yüksek kullanılırlık için " -"Fraktal uygulamasını nasıl birden fazla bölgeye genişleterek kullanacağınızı " -"anlatır." - -msgid "Or, try one of these tutorial steps:" -msgstr "Veya şu öğretici adımlarından birini deneyin:" - -msgid "Orchestration" -msgstr "Orkestrasyon" - -msgid "" -"Other features, such as creating volume snapshots, are useful for backups:" -msgstr "" -"Birim anlık görüntüleri almak gibi diğer özellikler yedekler için faydalıdır:" - -msgid "" -"Other versions of this guide show you how to use the other SDKs and " -"languages to complete these tasks. If you are a developer for another " -"toolkit that you would like this guide to include, feel free to submit code " -"snippets. For more information, contact `OpenStack Documentation team " -"`_ members." -msgstr "" -"Bu kılavuzun diğer sürümleri diğer SDK'ları ve dilleri kullanarak bu " -"görevleri nasıl gerçekleştireceğinizi gösterir. Bu kılavuzda dahil " -"edilmesini istediğiniz başka bir aracın geliştiricisi iseniz kod parçaları " -"göndermeye çekinmeyin. Daha fazla bilgi için, `OpenStack Belgelendirme " -"takımı `_ üyeleriyle iletişime " -"geçin." - -msgid "" -"Otherwise, continue reading to learn how to work with, and move the Fractal " -"application database server to use, block storage." -msgstr "" -"Aksi halde, Fraktal uygulama veritabanı sunucusunu blok depolama kullanacak " -"şekilde nasıl taşıyacağınızı ve nasıl çalışacağınızı öğrenmek için okumaya " -"devam edin." - -msgid "" -"Our code samples use `Java 8 `_." -msgstr "" -"Kod örneklerimiz `Java 8 `_ kullanır." - -msgid "PHP" -msgstr "PHP" - -msgid "" -"PHP-OpenCloud supports the OpenStack Networking API, but this section has " -"not been completed." -msgstr "" -"PHP-OpenCloud OpenStack Ağ API'sini destekler ama bu kısım henüz " -"tamamlanmadı." - -msgid "" -"PHP-opencloud supports OpenStack Orchestration :D:D:D but this section is " -"not written yet." -msgstr "" -"PHP-opencloud OpenStack Orkestrasyon'u destekliyor :D:D:D ama bu kısım henüz " -"yazılmadı." - -msgid "Parameter" -msgstr "Parametre" - -msgid "Phoenix servers" -msgstr "Phoenix sunucuları" - -msgid "" -"Pkgcloud supports OpenStack Orchestration :D:D:D but this section is `not " -"written yet `_" -msgstr "" -"Pkgcloud OpenStack Orkestrasyon'u destekliyor :D:D:D ama bu kısım `henüz " -"yazılmadı `_" - -msgid "" -"Pkgcloud supports the OpenStack Networking API, but this section has not " -"been completed." -msgstr "" -"Pkgcloud OpenStack Ağ API'sini destekler ama bu kısım henüz tamamlanmadı." - -msgid "" -"Place the above pom.xml into the root directory of your project. Then create " -"the nested subdirectory tree :code:`src` -> :code:`main` -> :code:`java`. " -"Place the Java code samples that you copy from this book into the folder " -"named \":code:`java`\"." -msgstr "" -"Yukarıdaki pom.xml dosyasını projenizin kök dizinine yerleştirin. Ardından :" -"code:`src` -> :code:`main` -> :code:`java` iç içe dizinlerini oluşturun. Bu " -"kitaptan kopyaladığınız Java kod örneklerini \":code:`java`\" isimli dizine " -"koyun." - -msgid "Place the images in the :code:`fractals` container:" -msgstr "İmajları :code:`fraktallar` kapsayıcısına koyun:" - -msgid "" -"Previously, you manually created the database, which is useful for a single " -"database that you rarely update. However, the OpenStack :code:`trove` " -"component provides Database as a Service (DBaaS)." -msgstr "" -"Daha önce, veritabanını elle oluşturdunuz, bu nadiren güncellenen tek " -"veritabanları için kullanışlıdır. Ancak OpenStack :code:`trove` bileşeni " -"Servis olarak Veritabanı (DBaaS) sağlar." - -msgid "" -"Prior to this section, the network layout for the Fractal application would " -"be similar to the following diagram:" -msgstr "" -"Bu kısım öncesinde, Fraktal uygulama için ağ düzeni şu çizime benzer olurdu:" - -msgid "Programmatic interfaces (APIs)" -msgstr "Programlama arayüzleri (API'ler)" - -msgid "Python" -msgstr "Python" - -msgid "Regions and geographic diversity" -msgstr "Bölgeler ve coğrafi çeşitlilik" - -msgid "Remove the existing app" -msgstr "Mevcut uygulamayı kaldırın" - -msgid "" -"Removing the egress rule created by OpenStack will cause your instance " -"networking to break." -msgstr "" -"OpenStack tarafından oluşturulan Egress kuralı kaldırmak sunucu ağınızın " -"bozulmasına yol açar." - -msgid "" -"Replace :code:`IP_API_1` and :code:`IP_API_2` with the corresponding " -"floating IPs. Replace FRACTAL_UUID with the UUID of an existing fractal." -msgstr "" -":code:`IP_API_1` ve :code:`IP_API_2` değerlerini ilişkili değişken IP'lerle " -"değiştirin. FRACTAL_UUID anahtarını mevcut bir fraktalın UUID değeriyle " -"değiştirin." - -msgid "Replace :code:`IP_API_1` with the IP address of the API instance." -msgstr ":code:`IP_API_1` anahtarını API sunucusunun IP adresiyle değiştirin." - -msgid "" -"Replace :code:`IP_API_1` with the IP address of the first API instance and " -"USERNAME with the appropriate user name." -msgstr "" -":code:`IP_API_1` anahtarını ilk API sunucunun IP adresiyle ve USERNAME " -"anahtarını uygun kullanıcı adıyla değiştirin." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance " -"and USERNAME to the appropriate user name." -msgstr "" -":code:`IP_CONTROLLER` anahtarını kontrol sunucusunun adresiyle ve USERNAME " -"değerini uygun kullanıcı adıyla değiştirin." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance " -"and USERNAME with the appropriate user name." -msgstr "" -":code:`IP_CONTROLLER` anahtarını kontrol sunucusunun IP adresiyle ve " -"USERNAME anahtarını uygun kullanıcı adıyla değiştirin." - -msgid "" -"Replace :code:`IP_CONTROLLER` with the IP address of the controller instance." -msgstr "" -":code:`IP_CONTROLLER` anahtarını kontrol sunucusunun IP adresiyle değiştirin." - -msgid "" -"Replace :code:`IP_DATABASE` with the IP address of the database instance and " -"USERNAME to the appropriate user name." -msgstr "" -":code:`IP_DATABASE` anahtarını veritabanı sunucusunun IP adresiyle ve " -"USERNAME değerini uygun kullanıcı adıyla değiştirin." - -msgid "" -"Replace :code:`IP_WORKER_1` with the IP address of the worker instance and " -"USERNAME to the appropriate user name." -msgstr "" -":code:`IP_WORKER_1` anahtarını işçi sunucunun IP adresi ile ve USERNAME " -"anahtarını uygun kullanıcı adı ile değiştirin." - -msgid "" -"Replace :code:`IP_WORKER` with the IP address of the worker instance and " -"USERNAME with the appropriate user name." -msgstr "" -":code:`IP_WORKER` anahtarını işçi sunucunun IP adresiyle ve USERNAME " -"anahtarını uygun kullanıcı adıyla değiştirin." - -msgid "Ruby" -msgstr "Ruby" - -msgid "" -"Run the :code:`ceilometer_statistics_query`: command to see the derived " -"statistics." -msgstr "" -":code:`ceilometer_statistics_query`: komutunu çalıştırarak gelen " -"istatistiklere göz atın." - -msgid "" -"Run the :code:`nova list` command to confirm that the :code:`OS::Heat::" -"AutoScalingGroup` has created more instances:" -msgstr "" -":code:`nova list` komutunu çalıştırarak :code:`OS::Heat::" -"AutoScalingGroup`'un daha fazla sunucu oluşturduğunuz onaylayın:" - -msgid "" -"Run the :code:`nova list` command to confirm that the :code:`OS::Heat::" -"AutoScalingGroup` removed the unneeded instances:" -msgstr "" -":code:`nova list` komutunu çalıştırarak :code:`OS::Heat::" -"AutoScalingGroup`'un gereksiz sunucuları kaldırdığını onaylayın:" - -msgid "" -"Run the :code:`nova list` command. This template created three instances:" -msgstr ":code:`nova list` komutunu çalıştırın. Bu şablon üç sunucu oluşturdu:" - -msgid "Run the script to start the deployment." -msgstr "Kurulumu başlatmak için betiği çalıştırın." - -msgid "" -"SDKs do not generally support the service yet, but you can use the 'trove' " -"command-line client to work with it instead." -msgstr "" -"SDK'lar henüz servisi genel olarak desteklemez, ama 'trove' komut satırı " -"istemcisini kullanarak çalışabilirsiniz." - -msgid "Scalability" -msgstr "Ölçeklenebilirlik" - -msgid "Scale available resources up and down." -msgstr "Uygun kaynakları yukarı aşağı ölçekleyin." - -msgid "Scale the API service" -msgstr "API servisini ölçekleyin" - -msgid "Scale the workers" -msgstr "İşçileri ölçekleyin" - -msgid "Scaling out" -msgstr "Dışa ölçekleme" - -msgid "Security" -msgstr "Güvenlik" - -msgid "" -"Security groups are sets of network access rules that are applied to an " -"instance's networking. By default, only egress (outbound) traffic is " -"allowed. You must explicitly enable ingress (inbound) network access by " -"creating a security group rule." -msgstr "" -"Güvenlik grupları bir sunucunun ağına uygulanan ağ erişim kuralları " -"kümesidir. Öntanımlı olarak egress (dışarı yönde) trafiğe izin verilir. Bir " -"güvenlik grubu kuralı oluşturarak özellikle ingress (içe doğru) ağ erişimine " -"izin vermeniz gerekir." - -msgid "" -"Security is important when it comes to your instances; you can not have just " -"anyone accessing them. To enable logging into an instance, you must provide " -"the public key of an SSH key pair during instance creation. In section one, " -"you created and uploaded a key pair to OpenStack, and cloud-init installed " -"it for the user account." -msgstr "" -"Konu sunucularınız olduğunda güvenlik önemlidir; herhangi birinin " -"erişebilmesini istemezsiniz. Sunucuya girişi etkinleştirmek için, sunucu " -"oluşturma sırasında bir SSH anahtar çiftinin açık anahtarını sağlamalısınız. " -"Birinci kısımda OpenStack'e bir anahtar oluşturup yüklediniz, ve cloud-init " -"kullanıcı hesabı için bunu yükledi." - -msgid "See the state of the alarms set up by the template:" -msgstr "Şablon tarafından ayarlanan uyarı durumlarına göz atın:" - -msgid "" -"Set the image and size variables to appropriate values for your cloud. We " -"will use these variables in later sections." -msgstr "" -"İmaj ve boyut değişkenlerini bulutunuz için uygun değerlere ayarlayın. Bu " -"değişkenleri ilerleyen kısımlarda kullanacağız." - -msgid "Shade" -msgstr "Shade" - -msgid "" -"Shade's create_object function has a \"use_slo\" parameter (that defaults to " -"true) which will break your object into smaller objects for upload and " -"rejoin them if needed." -msgstr "" -"Shade'in create_object fonksiyonu nesnenizi yüklerken ve gerektiğinde tekrar " -"birleştirirken kullanılmak üzere küçük parçalara bölen (öntanımlı değeri " -"doğru olan) bir \"use_slo\" parametresine sahiptir." - -msgid "" -"Similar to the UNIX programming model, an object, such as a document or an " -"image, is a \"bag of bytes\" that contains data. You use containers to group " -"objects. You can place many objects inside a container, and your account can " -"have many containers." -msgstr "" -"UNIX programlama modeline benzer şekilde, bir nesne, örneğin bir belge veya " -"imaj, veri içeren bir \"baytlar çantasıdır\". Kapsayıcıları kullanarak " -"nesneleri gruplarsınız. Bir kapsayıcıya birçok nesne koyabilirsiniz, ve " -"hesabınız birçok kapsayıcıya sahip olabilir." - -msgid "" -"So what exactly was that request doing at the end of the previous section? " -"Let us look at it again. In this subsection, we are just explaining what you " -"have already done in the previous section; you do not need to run these " -"commands again." -msgstr "" -"Öyleyes önceki kısmın sonundaki istek tam olarak ne yapıyordu? Tekrar bir " -"bakalım. Bu alt kısımda önceki kısımda zaten yaptığınız şeyleri " -"açıklayacağız; bu komutları tekrar çalıştırmanıza gerek yok." - -msgid "" -"So, for example, the file named :code:`GettingStarted.java` from the end of " -"this chapter would be located as follows:" -msgstr "" -"Örneğin bu bölümün sonundaki :code:`GettingStarted.java` dosyasını şu " -"şekilde konulmalı:" - -msgid "Specify a network during instance build" -msgstr "Sunucu inşası sırasında bir ağ belirtin" - -msgid "" -"Specify an external gateway for your router to tell OpenStack which network " -"to use for Internet access." -msgstr "" -"Yönlendiriciniz için bir harici geçit belirterek OpenStack'e internet " -"erişimi için hangi ağı kullanacağını söyleyin." - -msgid "Specify the flavor ID that you would like to use." -msgstr "Kullanmak istediğiniz nitelik kimliğini belirtin." - -msgid "" -"Spend some time playing with the stack and the Fractal app to see how it " -"works." -msgstr "" -"Yığınla ve Fraktal uygulamasıyla oynayarak biraz daha zaman geçirin ve nasıl " -"çalıştığını görün." - -msgid "Split the database and message queue" -msgstr "Veritabanı ve ileti kuyruğunu ayırın" - -msgid "Splitting services across multiple instances" -msgstr "Servisleri birden çok sunucuya ayırmak" - -msgid "" -"Start by creating a security group for the all-in-one instance and adding " -"the appropriate rules, such as HTTP (TCP port 80) and SSH (TCP port 22):" -msgstr "" -"Herşeyi içeren sunucunuz için bir güvenlik grubu oluşturarak ve uygun " -"kuralları ekleyerek, örneğin HTTP (TCP bağlantı noktası 80) ve SSH (TCP " -"bağlantı noktası 22) başlayın:" - -msgid "Start by looking at what is already in place." -msgstr "Zaten yerinde olan şeylere bakarak başlayın." - -msgid "" -"Stop the running MySQL database service and move the database files from :" -"file:`/var/lib/mysql` to the new volume, which is temporarily mounted at :" -"file:`/mnt/database`." -msgstr "" -"Çalışan MySQL veritabanı servisini durdurun ve veritabanı dosyalarını :file:" -"`/var/lib/mysql` konumundan geçici olarak :file:`/mnt/database` konumuna " -"bağlanmış olan yeni birime taşıyın." - -msgid "" -"Swift metadata keys are prepended with \"x-object-meta-\" so when you get " -"the object with get_object(), in order to get the value of the metadata your " -"key will be \"x-object-meta-foo\"." -msgstr "" -"Swift metaveri anahtarlarının önüne bir \"x-object-meta-\" değeri gelir " -"böylece get_object() ile nesneyi aldığınızda metaveri değerini alabilmeniz " -"için anahtar \"x-object-meta-foo\" olur." - -msgid "" -"Sync the file systems and mount the block device that contains the database " -"files to :file:`/var/lib/mysql`." -msgstr "" -"Dosya sistemlerini eşzamanlayın ve veritabanı dosyalarını içeren blok " -"aygıtı :file:`/var/lib/mysql` konumuna bağlayın." - -msgid "" -"That brings us to where we ended up at the end of :doc:`/getting_started`. " -"But where do we go from here?" -msgstr "" -"Bu da bizi :doc:`/getting_started` kısmında kaldığımız noktaya getirir. Peki " -"burdan nereye gideceğiz?" - -msgid "" -"That example is simplistic, of course, but the flexibility of the resource " -"object enables the creation of templates that contain all the required cloud " -"infrastructure to run an application, such as load balancers, block storage " -"volumes, compute instances, networking topology, and security policies." -msgstr "" -"Bu örnek tabi ki basittir, ama kaynak nesnesinin esnekliği yük " -"dengeleyiciler, blok depolama birimleri, hesaplama sunucuları, ağ " -"topolojileri ve güvenlik ilkeleri gibi bir uygulamayı çalıştırmak için " -"gerekli tüm bulut altyapısının oluşturulmasını sağlar." - -msgid "" -"That, as it happens, is the new reality of programming. Applications and " -"systems used to be created on large, expensive servers, cared for by " -"operations staff dedicated to keeping them healthy. If something went wrong " -"with one of those servers, the staff's job was to do whatever it took to " -"make it right again and save the server and the application." -msgstr "" -"Bu da programlamanın yeni gerçekliği haline geldi diyebiliriz. Uygulamalar " -"ve sistemler büyük pahalı sunucular üzerinde, sağlıklarını izlemek için " -"adanmış işletici çalışanlarca bakılacak şekilde oluşturulurdu. Bu " -"sunuculardan birine bir şey olursa, çalışanların işi uygulamayı ve sunucuyu " -"kurtarmak için ellerinden geleni yapmaktı." - -msgid "" -"The :code:`OS::Heat::AutoScalingGroup` removes instances in creation order. " -"So the worker instance that was created first is the first instance to be " -"removed." -msgstr "" -":code:`OS::Heat::AutoScalingGroup` sunucuları oluşturulma sırasına göre " -"kaldırır. Yani ilk önce oluşturulan işçi sunucu kaldırılacak ilk sunucudur." - -msgid "" -"The :doc:`/introduction` section describes how to build in a modular " -"fashion, create an API, and other aspects of the application architecture. " -"Now you will see why those strategies are so important. By creating a " -"modular application with decoupled services, you can identify components " -"that cause application performance bottlenecks and scale them out. Just as " -"importantly, you can also remove resources when they are no longer " -"necessary. It is very difficult to overstate the cost savings that this " -"feature can bring, as compared to traditional infrastructure." -msgstr "" -":doc:`/introduction` kısmı modüler şekilde nasıl inşa edileceğini, bir API " -"oluşturulacağını ve uygulama mimarisinin diğer yönlerini tanımlar. Şimdi bu " -"stratejilerin neden bu kadar önemli olduğunu göreceksiniz. Birbirinden " -"bağımsız servislerle modüler uygulama oluşturarak uygulama başarım " -"darboğazlarına sebep olan bileşenleri tanımlayabilir ve bunları " -"ölçekleyebilirsiniz. Aynı önem seviyesinde, artık ihtiyaç duyulmadığında " -"kaynakları kaldırabilirsiniz. Bu özelliğin geleneksel altyapıya göre masrafı " -"ne kadar azaltacağını abartmak mümkün değildir." - -msgid "" -"The CPU utilization across workers increases as workers start to create the " -"fractals." -msgstr "" -"İşçi sunucular arasındaki CPU kullanımı işçiler yeni fraktallar oluşturmaya " -"başladıkça artacaktır." - -msgid "" -"The Fractals app currently uses the local file system on the instance to " -"store the images that it generates. For a number of reasons, this approach " -"is not scalable or durable." -msgstr "" -"Fraktal uygulaması şu an ürettiği imajları depolamak için yerel dosya " -"sistemini kullanır. Birden fazla sebepten, bu yaklaşım ne ölçeklenebilirdir " -"ne de dayanıklı." - -msgid "" -"The Fractals application was designed with the principles of the previous " -"subsection in mind. You will note that in :doc:`getting_started`, we " -"deployed the application in an all-in-one style, on a single virtual " -"machine. This is not a good practice, but because the application uses micro-" -"services to decouple logical application functions, we can change this " -"easily." -msgstr "" -"Fraktallar uygulaması önceki alt kısım göz önüne alınarak tasarlanmıştır. " -"Bunu :doc:`getting_started` kısmında değerlendireceğiz, uygulamayı hepsi bir " -"arada biçiminde kurduk, tek bir sanal makine üzerine. Bu iyi bir yaklaşım " -"değildir, fakat uygumala mantıksal uygulama fonksiyonlarını ayırmak için " -"mikro servisleri kullandığından, bunu kolaylıkla değiştirebiliriz." - -msgid "The Object Storage API is organized around objects and containers." -msgstr "" -"Nesne Depolama API'si nesneler ve kapsayıcılar etrafında düzenlenmiştir." - -msgid "" -"The Object Storage service manages many of the tasks normally managed by the " -"application owner. The Object Storage service provides a scalable and " -"durable API that you can use for the fractals app, eliminating the need to " -"be aware of the low level details of how objects are stored and replicated, " -"and how to grow the storage pool. Object Storage handles replication for " -"you. It stores multiple copies of each object. You can use the Object " -"Storage API to return an object, on demand." -msgstr "" -"Nesne Depolama servisi normalde uygulama sahibi tarafından yönetilen birçok " -"görevi yönetir. Nesne Depolama servisi fraktal uygulaması için " -"kullanabileceğiniz ölçeklenebilir ve dayanıklı bir API sunar, nesnelerin " -"nasıl depolandığı ya da yedeklendiği, depolama havuzunun nasıl büyütüleceği " -"gibi düşük seviye ayrıntıları bilmeniz gerekliliğini ortadan kaldırır. Nesne " -"Depolama sizin için yedeklemeyi halleder. Her nesnenin birden fazla " -"kopyasını deoplar. İstediğiniz anda Nesne Depolama API'sini kullanarak bir " -"nesne döndürebilirsiniz." - -msgid "" -"The OpenStack Networking API provides support for creating loadbalancers, " -"which can be used to scale the Fractal app web service. In the following " -"example, we create two compute instances via the Compute API, then " -"instantiate a load balancer that will use a virtual IP (VIP) for accessing " -"the web service offered by the two compute nodes. The end result will be the " -"following network topology:" -msgstr "" -"OpenStack Ağ API'si Fraktal uygulama web servisini ölçeklemekte " -"kullanılabilecek yük dengeleyiciler oluşturmayı destekler. Aşağıdaki " -"örnekte, Hesaplama API'si ile iki hesaplama sunucusu oluştururuz, ardından " -"iki hesaplama sunucusu tarafından verilen web servisine erişmek için bir " -"sanal IP (VIP) kullanacak yük dengeleyiciyi ilklendiririz. Sonuçta şu ağ " -"topolojisi elde edilir:" - -msgid "" -"The OpenStack Orchestration API uses the stacks, resources, and templates " -"constructs." -msgstr "" -"OpenStack Orkestrasyon API'si yığınları, kaynakları ve şablon yapılarını " -"kullanır." - -msgid "The OpenStack SDK does not currently support OpenStack Orchestration." -msgstr "OpenStack SDK henüz OpenStack Orkestrasyon'u desteklemiyor." - -msgid "" -"The Orchestration service is not deployed by default in every cloud. If " -"these commands do not work, it means the Orchestration API is not available; " -"ask your support team for assistance." -msgstr "" -"Orkestrasyon servisi her bulutta öntanımlı olarak kurulmaz. Bu komutlar " -"çalışmazsa Orkestrasyon API'si kullanılabilir değil demektir; destek " -"ekibinizden yardım isteyebilirsiniz." - -msgid "" -"The Orchestration service provides a template-based way to describe a cloud " -"application, then coordinates running the needed OpenStack API calls to run " -"cloud applications. The templates enable you to create most OpenStack " -"resource types, such as instances, networking information, volumes, security " -"groups, and even users. It also provides more advanced functionality, such " -"as instance high availability, instance auto-scaling, and nested stacks." -msgstr "" -"Orkestrasyon servisi bir bulut uygulamasını tanımlamak için şablon tabanlı " -"bir yol sağlar, ardından bulut uygulamalarını çalıştırmak için ihtiyaç " -"duyulan OpenStack API çağrılarının çalıştırılmasını düzenler. Şablonlar " -"sunucular, ağ bilgisi, birimler, güvenlik grupları hatta kullanıcılar gibi " -"çoğu OpenStack kaynak türlerini oluşturmanızı sağlarlar. Ayrıca sunucu " -"yüksek kullanılırlığı, sunucu otomatik ölçekleme, iç içe yığınlar gibi daha " -"gelişmiş işlevselliği de sağlar." - -msgid "" -"The Telemetry service is not deployed by default in every cloud. If the " -"ceilometer commands do not work, this example does not work; ask your " -"support team for assistance." -msgstr "" -"Telemetri servisi her bulutta öntanımlı olarak kurulu değildir. Ceilometer " -"komutları çalışmazsa, bu örnek çalışmaz; destek takımınızdan yardım " -"isteyebilirsiniz." - -msgid "" -"The Telemetry service uses meters to measure a given aspect of a resources " -"usage. The meter that we are interested in is the :code:`cpu_util` meter." -msgstr "" -"Telemetri servisi bir kaynağın kullanım oranını ölçmek için ölçüler " -"kullanır. Bizim ilgilendiğimiz ölçü :code:`cpu_util` ölçüsüdür." - -msgid "" -"The `RabbitMQ getting started tutorial `_ provides a great introduction to message queues." -msgstr "" -"`RabbitMQ ile başlama öğreticisi `_ ileti kuyruklarına çok güzel bir giriş sağlar." - -msgid "" -"The `generated_by` field shows the worker that created the fractal. Because " -"multiple worker instances share the work, fractals are generated more " -"quickly and users might not even notice when a worker fails." -msgstr "" -"`generated_by` alanı fraktalı üreten işçiyi gösterir. Birden çok işçi sunucu " -"işi paylaştığından, fraktallar daha hızlı üretilir ve bir işçi başarısız " -"olduğunda kullanıcı bunu anlamayabilir bile." - -msgid "" -"The `outputs` property shows the URL through which you can access the " -"Fractal application. You can SSH into the instance." -msgstr "" -"`Outputs` özelliği Fraktal uygulamasına erişebileceğiniz URL'yi gösterir. " -"Sunucuya SSH çekebilirsiniz." - -msgid "The actual auth URL is:" -msgstr "Asıl yetkilendirme URL'si:" - -msgid "The alarms have the form:" -msgstr "Uyarılar şu biçime sahiptir:" - -msgid "" -"The application stores the generated fractal images directly in the database " -"used by the API service instance. Storing image files in a database is not " -"good practice. We are doing it here as an example only as an easy way to " -"enable multiple instances to have access to the data. For best practice, we " -"recommend storing objects in Object Storage, which is covered in :doc:" -"`durability`." -msgstr "" -"Uygulama üretilen fraktal imajlarını doğrudan API servisi sunucusu " -"tarafından kullanılan veritabanında saklar. İmaj dosyalarını bir " -"veritabanında tutmak iyi fikir değildir. Burda yalnızca birden çok sunucunun " -"veriye kolay erişimi olması için örnek olarak kullandık. En iyisi nesneleri :" -"doc:`durability` kısmında kapsandığı gibi Nesne Depolamada tutmaktır." - -msgid "" -"The auto-scaling stack sets up an API instance, a services instance, and an " -"auto-scaling group with a single worker instance. It also sets up ceilometer " -"alarms that add worker instances to the auto-scaling group when it is under " -"load, and removes instances when the group is idling. To do this, the alarms " -"post to URLs." -msgstr "" -"Otomatik ölçeklenen yığın bir API sunucusu, bir servisler sunucusu, ve tek " -"bir işçiye sahip bir otomatik ölçekleme grubu ayarlar. Ayrıca yük altında " -"olduğunda otomatik ölçekleme grubuna işçi sunucular ekleyen ve grup " -"boştayken sunucuları kaldıran ceilometer uyarıları ayarlar. Bunu yapmak için " -"uyarılar URL'lere istek yapar." - -msgid "" -"The client object accesses the Compute v2.0 service and type v2.1, so that " -"version is in this tutorial." -msgstr "" -"İstemci nesnesi Hesaplama v2.0 servisi ve tür v2.1'e erişir, bu yüzden " -"öğreticide bu sürüm kullanılmıştır." - -msgid "The connection URL for the database (not used here)." -msgstr "Veritabanı için bağlantı URL'si (burada kullanılmadı)." - -msgid "The endpoint URL of the API service." -msgstr "API servisinin uç nokta URL'si." - -msgid "" -"The example code uses the awesome `Requests library `_. Before you try to run the previous script, make " -"sure that it is installed on your system." -msgstr "" -"Örnek kod harika `Requests kitaplığını `_ kullanır. Önceki betiği çalıştırmaya çalışmadan önce sisteminize " -"kurulu olduğundan emin olun." - -msgid "" -"The example template depends on the ceilometer project, which is part of the " -"`Telemetry service `_." -msgstr "" -"Örnek şablon `Telemetri servisinin `_ parçası olan ceilometer projesine bağımlıdır." - -msgid "" -"The first step is to start the controller instance. The instance has the API " -"service, the database, and the messaging service, as you can see from the " -"parameters passed to the installation script." -msgstr "" -"İlk adım kontrol sunucusunu başlatmaktır. Kurulum betiğine geçirilen " -"parametrelerden görebileceğiniz gibi sunucunun API servisi, veritabanı ve " -"ileti servisi bulunur." - -msgid "The flavor" -msgstr "Nitelik" - -msgid "" -"The following file contains all of the code from this section of the " -"tutorial. This comprehensive code sample lets you view and run the code as a " -"single file." -msgstr "" -"Aşağıdaki dosya öğreticinin bu kısmındaki tüm kodu içerir. Bu kapsamlı kod " -"örneği kodu tek bir dosya olarak görüntülemenizi ve çalıştırmanızı sağlar." - -msgid "" -"The following file contains all of the code from this section of the " -"tutorial. This comprehensive code sample lets you view and run the code as a " -"single script." -msgstr "" -"Aşağıdaki dosya öğreticinin bu kısmındaki tüm kodu içerir. Bu kapsayıcı kod " -"örneği kodu tek bir betik olarak görüntüleme ve çalıştırma şansı verir." - -msgid "" -"The following instance creation example assumes that you have a single-" -"tenant network. If you receive the 'Exception: 400 Bad Request Multiple " -"possible networks found, use a Network ID to be more specific' error, you " -"have multiple-tenant networks. You must add a `networks` parameter to the " -"call that creates the server. See :doc:`/appendix` for details." -msgstr "" -"Aşağıdaki sunucu oluşturma örneği tek kiracılı bir ağa sahip olduğunuzu " -"varsayar. 'İstisna: 400 Kötü İstek Birden fazla muhtemel ağ bulundu, daha " -"belirleyici olmak için bir Ağ Kimliği kullanın' hatası alırsanız birden " -"fazla kiracılı ağınız var demektir. Sunucuyu oluşturan çağrıya bir " -"`networks` parametresi eklemeniz gerekir. Ayrıntılar için bkz :doc:`/" -"appendix`." - -msgid "The following operations are destructive and result in data loss." -msgstr "Aşağıdaki işlemler yıkıcıdır ve veri kaybına yol açarlar." - -msgid "" -"The fractal application we are building contains these types of network " -"traffic:" -msgstr "İnşa ettiğimiz fraktal uygulaması bu türlerde ağ trafiği içerir:" - -msgid "" -"The fractals are now available from any of the app-api hosts. To verify, " -"visit http://IP_API_1/fractal/FRACTAL_UUID and http://IP_API_2/fractal/" -"FRACTAL_UUID. You now have multiple redundant web services. If one fails, " -"you can use the others." -msgstr "" -"Fraktallar artık app-api sunucularının herhangi birinden kullanılabilirler. " -"Bunu doğrulamak için, http://IP_API_1/fractal/FRACTAL_UUID ve http://" -"IP_API_2/fractal/FRACTAL_UUID adreslerini ziyaret edin. Artık birden fazla " -"yedekli web servisiniz var. Biri başarısız olursa diğerlerini " -"kullanabilirsiniz." - -msgid "The magic revisited" -msgstr "Sihire yeniden ziyaret" - -msgid "" -"The message queue can take a while to notice that worker instances have died." -msgstr "" -"İleti kuyruğunun işçi sunucuların öldüğünü görmesi biraz daha zaman alabilir." - -msgid "" -"The most common way for OpenStack clouds to allocate Internet rout-able IP " -"addresses to instances, however, is through the use of floating IPs. A " -"floating IP is an address that exists as an entity unto itself, and can be " -"associated to a specific instance network interface. When a floating IP " -"address is associated to an instance network interface, OpenStack re-directs " -"traffic bound for that address to the address of the instance's internal " -"network interface address. Your cloud provider will generally offer pools of " -"floating IPs for your use." -msgstr "" -"Ancak OpenStack bulutlarının internet yönlendirilebilir IP adreslerini " -"sunuculara ayırmalarının en yaygın yolu değişken IP'lerin kullanımı iledir. " -"Değişken IP kendi kendine var olan bir adrestir ve belirli sunucu ağ " -"arayüzüyle ilişkilendirilebilir. Bir değişken IP adresi bir sunucu ağ " -"arayüzüyle ilişkilendirildiğinde, OpenStack bu adrese bağlı trafiği " -"sunucunun dahili ağ arayüz adresine yeniden yönlendirir. Bulut sağlayıcınız " -"genellikle kullanımınız için değişken IP adresi havuzları sunacaktır." - -msgid "The new instance appears." -msgstr "Yeni sunucu belirir." - -msgid "" -"The next logical step is to upload an object. Find a photo of a goat online, " -"name it :code:`goat.jpg`, and upload it to your :code:`fractals` container:" -msgstr "" -"Sonraki mantıksal adım bir nesne yüklemektir. İnternette bir keçi resmi " -"bulun, ismini :code:`goat.jpg` yapın ve :code:`fraktallar` kapsayıcınıza " -"yükleyin:" - -msgid "" -"The outputs section of the stack contains two ceilometer command-line " -"queries:" -msgstr "Yığının çıktılar kısmı iki ceilometer komut satırı sorgusu içerir:" - -msgid "The parameter :code:`Size` is in gigabytes." -msgstr ":code:`Size` parametresi gigabayt türündendir." - -msgid "The parameter :code:`size` is in gigabytes." -msgstr ":code:`size` parametresi gigabayt türündendir." - -msgid "The prefix is `metering.` For example, `metering.some_name`." -msgstr "Önek `metering`'dir. Örneğin, `metering.bir_isim`." - -msgid "" -"The previous section uses two virtual machines - one 'control' service and " -"one 'worker'. The speed at which your application can generate fractals " -"depends on the number of workers. With just one worker, you can produce only " -"one fractal at a time. Before long, you will need more resources." -msgstr "" -"Önceki kısım iki sanal makine kullanır - biri 'kontrol' servisi biri de " -"'işçi' servisidir. Uygulamanızın fraktalları üretme hızı işçi sayısına göre " -"değişir. Tek bir işçiyle bir seferde bir fraktal üretebilirsiniz. Fazla " -"geçmeden daha fazla kaynağa ihtiyacınız olacak." - -msgid "" -"The rest of this tutorial will not reference the all-in-one instance you " -"created in section one. Take a moment to delete this instance." -msgstr "" -"Bu kılavuzun geri kalanı bu kısımda oluşturduğunuz herşeyi içeren sunucuya " -"başvurmayacak. Bu sunucuyu hızlıca silin." - -msgid "The samples and the statistics are listed in opposite time order!" -msgstr "Örnekler ve istatistikler ters zaman sırasına göre listelenir!" - -msgid "The second application is an OpenStack application that enables you to:" -msgstr "" -"İkinci uygulama şunları yapmanızı sağlayacak bir OpenStack uygulamasıdır:" - -msgid "The shade framework can select and assign a free floating IP quickly" -msgstr "Shade çatısı çabukça boş bir değişken IP seçip atayabilir" - -msgid "" -"The sheer number of requests means that some requests for fractals might not " -"make it to the message queue for processing. To ensure that you can cope " -"with demand, you must also scale out the API capability of the Fractals " -"application." -msgstr "" -"İsteklerin tam sayısı demek fraktallar için bazı isteklerin işleme için " -"ileti kuyruğuna varamayabileceği anlamına gelir. İstekle baş " -"edebileceğinizden emin olmak için ayrıca Fraktal uygulamasının API " -"kapasitesini de ölçeklemelisiniz." - -msgid "The stack automatically creates a Nova instance, as follows:" -msgstr "Yığın şu şekilde otomatik olarak Nova sunucusunu oluşturur:" - -msgid "" -"The stack reports an initial :code:`CREATE_IN_PROGRESS` status. When all " -"software is installed, the status changes to :code:`CREATE_COMPLETE`." -msgstr "" -"Yığın önce bir :code:`CREATE_IN_PROGRESS` durumu bildirir. Tüm yazılım " -"kurulduktan sonra, durum :code:`CREATE_COMPLETE` olarak değişir." - -msgid "" -"The stack we will be building uses the firing of alarms to control the " -"addition or removal of worker instances." -msgstr "" -"İnşa ediyor olacağımız yığın işçi sunucuların eklenmesi ve kaldırılmasını " -"kontrol etmek için uyarıların tetiklenmesini kullanır." - -msgid "The transport URL of the messaging service." -msgstr "İleti servisinin aktarım URL'si." - -msgid "The unique identifier (UUID) of the image" -msgstr "İmajın benzersiz tanımlayıcısı (UUID)" - -msgid "The value of a meter is regularly sampled and saved with a timestamp." -msgstr "" -"Bir ölçünün değeri düzenli olarak örneklenir ve bir zaman damgasıyla " -"kaydedilir." - -msgid "" -"The worker service consumes messages from the work queue and then processes " -"them to create the corresponding fractal image file." -msgstr "" -"İşçi servisi iş kuyruğundan iletileri tüketir ve ilgili fraktal imaj " -"dosyasını oluşturmak için bunları işler." - -msgid "" -"The world is running out of IPv4 addresses. If you get the \"No more IP " -"addresses available on network\" error, contact your cloud administrator. " -"You may also want to ask about IPv6 :)" -msgstr "" -"Dünyada IPv4 adresi kalmamak üzere. Eğer \"Ağda kullanılabilir başka IP " -"adresi yok\" hatası alırsanız, bulut yöneticinizle iletişime geçin. IPv6 ile " -"ilgili konuşmak da isteyebilirsiniz :)" - -msgid "Then attach it to the instance:" -msgstr "Ardından sunucuya ekleyin:" - -msgid "Then request an IP number be allocated from the pool." -msgstr "Ardından ayırmak için havuzdan bir IP numarası isteyin." - -msgid "Then, create a pair of large fractals:" -msgstr "Ardından, büyük bir fraktal çifti oluşturun:" - -msgid "" -"There are also multiple storage back ends (to store the generated fractal " -"images) and a database component (to store the state of tasks), but we will " -"talk about those in :doc:`/durability` and :doc:`/block_storage` " -"respectively." -msgstr "" -"Ayrıca birden fazla depolama arka ucu (üretilen fraktal imajları saklamak " -"için) ve bir veritabanı bileşeni (görevlerin durumunu saklamak için) " -"bulunur, ama bunlardan sırasıyla :doc:`/durability` ve :`/block_storage` " -"kısımlarında söz edeceğiz." - -msgid "" -"There are definite advantages to this architecture. It is easy to get a \"new" -"\" server, without any of the issues that inevitably arise when a server has " -"been up and running for months, or even years." -msgstr "" -"Bu mimarinin belirli avantajları bulunur. Bir sunucunun aylarca hatta " -"yıllarca çalıştığında bir gün karşısına çıkacak sunucular olmadan \"yeni\" " -"bir sunucu almak kolaydır." - -msgid "" -"There are more commands available; find out more details about them with :" -"code:`faafo get --help`, :code:`faafo list --help`, and :code:`faafo delete " -"--help`." -msgstr "" -"Kullanılabilir daha fazla komut bulunur; :code:`faafo get --help`, :code:" -"`faafo list --help`, ve :code:`faafo delete --help` ile ayrıntılarını " -"keşfedin." - -msgid "" -"These demonstrate how the Ceilometer alarms add and remove instances. To use " -"them:" -msgstr "" -"Bunlar Ceilometer uyarılarının nasıl sunucu eklediğini ve kaldırdığını " -"gösterir. Kullanmak için:" - -msgid "These queries provide a view into the behavior of the stack." -msgstr "Bu sorgular yığının davranışına bir görüş sağlar." - -msgid "" -"These saved samples are aggregated to produce a statistic. The statistic " -"that we are interested in is **avg**: the average of the samples over a " -"given period." -msgstr "" -"Bu kaydedilen örnekler istatistik üretmek üzere toplanır. Bizim " -"ilgilendiğimiz istatistik **avg**'dir: verilen bir zaman aralığındaki " -"örneklerin ortalaması." - -msgid "" -"These services are client-facing, so unlike the workers they do not use a " -"message queue to distribute tasks. Instead, you must introduce some kind of " -"load balancing mechanism to share incoming requests between the different " -"API services." -msgstr "" -"Bu servisler istemciye bakarlar, yani işçilerden farklı olarak görevleri " -"dağıtmak için bir ileti kuyruğu kullanmazlar. Bunun yerine gelen istekleri " -"farklı API servisleri arasında paylaştırmak için bir çeşit yük dengeleme " -"sağlamalısınız." - -msgid "" -"These tools vastly reduce the effort it takes to work with large numbers of " -"servers, and also improve the ability to recreate, update, move, and " -"distribute applications." -msgstr "" -"Bu araçlar çok fazla sunucuda çalışırken gösterilmesi gereken emeği büyük " -"ölçüde azaltır, ayrıca uygulamaları tekrar oluşturma, güncelleme, taşıma ve " -"dağıtma yeteneğini artırır." - -msgid "" -"This OpenStack Database service is not installed in many clouds right now, " -"but if your cloud supports it, it can make your life a lot easier when " -"working with databases." -msgstr "" -"Bu OpenStack Kontrol panosu servisi şu an pek fazla bulutta kurulu değil, " -"ama bulutunuz destekliyorsa, veritabanlarıyla çalışırken hayatınızı epey " -"kolaylaştıracaktır." - -msgid "This adds a \"foo\" key to the metadata that has a value of \"bar\"." -msgstr "Bu \"bar\" değerine sahip bir \"foo\" anahtarını metaveriye ekler." - -msgid "" -"This chapter explains the importance of durability and scalability for your " -"cloud-based applications. In most cases, really achieving these qualities " -"means automating tasks such as scaling and other operational tasks." -msgstr "" -"Bu bölüm bulut tabanlı uygulamalarınız için dayanıklılık ve " -"ölçeklenebilirliğin önemini açıklar. Çoğu durumda bu kaliteleri gerçekten " -"elde etmek ölçekleme ve diğer işlevsel görevleri otomatikleştirmek demektir." - -msgid "" -"This chapter introduces the Networking API. This will enable us to build " -"networking topologies that separate public traffic accessing the application " -"from traffic between the API and the worker components. We also introduce " -"load balancing for resilience, and create a secure back-end network for " -"communication between the database, web server, file storage, and worker " -"components." -msgstr "" -"Bu bölüm Ağ API'sine giriş yapar. Bu bize uygulamaya erişen dışarı açık " -"trafikle API ve işçi bileşenler arasındaki trafiği ayıracak ağ topolojileri " -"inşa etmemizi sağlayacak. Ayrıca dayanıklılık için yük dengelemeye giriş " -"yapacağız ve veritabanı, web sunucu, dosya sunucu ve işçi bileşenler " -"arasında iletişim için güvenli bir arka uç ağı oluşturacağız." - -msgid "This code returns output like this:" -msgstr "Bu kod şu şekilde çıktı verir:" - -msgid "This code returns the floating IP address:" -msgstr "Bu kod değişken IP adresini döndürür:" - -msgid "" -"This command returns a very long list of meters. Once a meter is created, it " -"is never thrown away!" -msgstr "" -"Bu komut uzun bir ölçü listesi döndürür. Bir ölçü oluşturulduğunda, asla " -"fırlatılıp atılmaz!" - -msgid "This document has not yet been completed for the .NET SDK." -msgstr "Bu belge henüz .NET SDK için tamamlanmadı." - -msgid "This document has not yet been completed for the fog SDK." -msgstr "Bu belge henüz fog SDK için tamamlanmadı." - -msgid "This document has not yet been completed for the php-opencloud SDK." -msgstr "Bu belge php-opencloud SDK için henüz tamamlanmadı." - -msgid "" -"This file contains all the code from this tutorial section. This class lets " -"you view and run the code." -msgstr "" -"Bu dosya bu öğretici kısmındaki tüm kodu içerir. Bu sınıf kodu " -"görüntülemenizi ve çalıştırmanızı sağlar." - -msgid "" -"This file contains all the code from this tutorial section. This " -"comprehensive code sample lets you view and run the code as a single script." -msgstr "" -"Bu dosya bu öğretici kısmındaki tüm kodu içerir. Bu kapsamlı kod örneği kodu " -"tek bir betik olarak görüntülemenizi ve çalıştırmanızı sağlar." - -msgid "This gets an IP address that you can assign to your instance:" -msgstr "Bu sunucunuza atayabileceğiniz bir IP adresi alır:" - -msgid "" -"This guide is for experienced software developers who want to deploy " -"applications to OpenStack clouds." -msgstr "" -"Bu kılavuz OpenStack bulutlarında uygulama kurmak isteyen deneyimli yazılım " -"geliştiricileri içindir." - -msgid "" -"This is a `useful pattern `_ for many cloud applications that have long lists of requests coming " -"in and a pool of resources from which to service them. This also means that " -"a worker may crash and the tasks will be processed by other workers." -msgstr "" -"Gelen uzun istek listelerine ve bir kaynak havuzuna sahip çoğu bulut " -"uygulamalarında bu `kullanışlı bir kalıptır `_. Bu ayrıca bir işçi bozulduğunda görevlerin " -"diğer işçilerce işleneceği anlamına gelir." - -msgid "" -"This option also uses a bit stream to upload the file, iterating bit by bit " -"over the file and passing those bits to Object Storage as they come. " -"Compared to loading the entire file in memory and then sending it, this " -"method is more efficient, especially for larger files." -msgstr "" -"Bu seçenek de bit akışı kullanarak dosya yükler, dosya üzerinde bit bit " -"ilerleyerek ve bu bitleri geldikçe Nesne Depolamaya geçirerek. Tüm dosyayı " -"belleğe yükleyip ardından göndermeyle karşılaştırdığınızda bu yöntem daha " -"etkindir, özellikle daha büyük dosyalar için." - -msgid "" -"This process was obviously a very manual one. Figuring out that we needed " -"more workers and then starting new ones required some effort. Ideally the " -"system would do this itself. If you build your application to detect these " -"situations, you can have it automatically request and remove resources, " -"which saves you the effort of doing this work yourself. Instead, the " -"OpenStack Orchestration service can monitor load and start instances, as " -"appropriate. To find out how to set that up, see :doc:`orchestration`." -msgstr "" -"Bu süreç bariz şekilde elle yapılıyordu. Daha fazla işçiye ihtiyacımız " -"olduğunu anlamak ve yenilerini başlatmak biraz uğraştırdı. İdeal olarak " -"sistem bunu kendi yapar. Uygulamanızı bu gibi durumları algılayacak şekilde " -"inşa ederseniz, otomatik olarak kaynakları istemesini ve kaldırmasını " -"sağlayabilirsiniz, bu da bu işi kendi başınıza yaptığınızda çıkan iş yükünü " -"yok eder. Bunun yerine, OpenStack Orkestrasyon servisi yükü izleyerek uygun " -"şekilde sunucuları başlatabilir. Bunun nasıl ayarlanacağını bulmak için, " -"bkz :doc:`orchestration`." - -msgid "" -"This section assumes that your cloud provider has implemented the OpenStack " -"Networking API (neutron). Users of clouds which have implemented legacy " -"networking (nova-network) will have access to networking via the Compute " -"API. Log in to the Horizon dashboard and navigate to :guilabel:`Project-" -">Access & Security->API Access`. If you see a service endpoint for the " -"Network API, your cloud is most likely running the Networking API. If you " -"are still in doubt, ask your cloud provider for more information." -msgstr "" -"Bu kısım bulut sağlayıcınızın OpenStack Ağ API'sini (neutron) uyguladığını " -"varsayar. Geleneksel ağı (nova-network) uygulayan bulutların kullanıcıları " -"ağa Hesaplama API'si aracılığıyla erişebileceklerdir. Horizon kontrol " -"panosuna giriş yapın ve :guilabel:`Proje->Erişim & Güvenlik->API Erişimi`ne " -"gidin. Ağ API'si için bir servis uç noktası görürseniz bulutunuz muhtemelen " -"Ağ API'sini çalıştırıyordur. Hala şüpheliyseniz daha fazla bilgi için bulut " -"sağlayıcınızla görüşün." - -msgid "" -"This section continues to illustrate the separation of services onto " -"multiple instances and highlights some of the choices that we have made that " -"facilitate scalability in the application architecture." -msgstr "" -"Bu kısım servislerin birden çok sunucuya ayrımını açıklamaya devam eder ve " -"uygulama mimarisinde ölçeklemeyi kolaylaştıran bazı seçimlerimizi vurgular." - -msgid "This section explores options for expanding the sample application." -msgstr "Bu kısım örnek uygulamayı genişletmek için seçenekleri araştırır." - -msgid "This section has not yet been completed for the .NET SDK" -msgstr "Bu kısım .NET SDK için henüz tamamlanmadı" - -msgid "This section has not yet been completed for the .NET SDK." -msgstr "Bu kısım .NET SDK için henüz tamamlanmadı." - -msgid "This section has not yet been completed for the OpenStack SDK." -msgstr "Bu kısım OpenStack SDK için henüz tamamlanmadı." - -msgid "This section has not yet been completed for the PHP-OpenCloud SDK." -msgstr "Bu kısım PHP-OpenCloud SDK için henüz tamamlanmadı." - -msgid "This section has not yet been completed for the fog SDK." -msgstr "Bu kısım fog SDK için henüz tamamlanmadı." - -msgid "This section has not yet been completed for the pkgcloud SDK." -msgstr "Bu kısım pkgcloud SDK için henüz tamamlanmadı." - -msgid "" -"This section introduces block storage, also known as volume storage, which " -"provides access to persistent storage devices. You interact with block " -"storage by attaching volumes to running instances just as you might attach a " -"USB drive to a physical server. You can detach volumes from one instance and " -"reattach them to another instance and the data remains intact. The OpenStack " -"Block Storage (cinder) project implements block storage." -msgstr "" -"Bu kısım kalıcı depolama aygıtlarına erişim sağlayan, birim depolama olarak " -"da bilinen blok depolamayı tanıtır. Blok depolamayla çalışan sunuculara " -"birimler ekleyerek tıpkı fiziksel bir sunucuya USB aygıt takıyor gibi " -"etkileşirsiniz. Bir sunucudan birimleri ayırabilir ve başka bir sunucuya " -"veriyi koruyacak şekilde tekrar ekleyebilirsiniz. OpenStack Blok Depolama " -"(cinder) projesi blok depolamayı uygular." - -msgid "This section introduces object storage." -msgstr "Bu kısım nesne deoplamayı tanıtır." - -msgid "" -"This section introduces some operational concepts and tasks to developers " -"who have not written cloud applications before." -msgstr "" -"Bu kısım daha önce bulut uygulamaları yazmamış geliştiriciler için bazı " -"işlemsel kavramlar ve görevlere giriş yapar." - -msgid "" -"This section introduces the application architecture and explains how it was " -"designed to take advantage of cloud features in general and OpenStack in " -"particular. It also describes some commands in the previous section." -msgstr "" -"Bu kısım uygulama mimarisini tanıtır ve genel olarak bulut özelliklerinden " -"ve özel olarak OpenStack'den faydalanmak için nasıl tasarlandığını açıklar. " -"Ayrıca önceki kısımdaki bazı komutları tanımlar." - -msgid "" -"This section is based on the Neutron LBaaS API version 1.0 https://docs." -"openstack.org/admin-guide/networking_adv-features.html#basic-load-balancer-" -"as-a-service-operations" -msgstr "" -"Bu kısım Neutron LBaaS API sürüm 1.0 tabanlıdır https://docs.openstack.org/" -"admin-guide/networking_adv-features.html#basic-load-balancer-as-a-service-" -"operations" - -msgid "This section is incomplete. Please help us finish it!" -msgstr "Bu kısım bitirilmemiş. Lütfen bitirmemizde yardımcı olun!" - -msgid "" -"This tutorial shows two applications. The first application is a simple " -"fractal generator that uses mathematical equations to generate beautiful " -"`fractal images `_. We show you this " -"application in its entirety so that you can compare it to a second, more " -"robust, application." -msgstr "" -"Bu öğretici iki uygulama gösterir. İlk uygulama matematiksel eşitlikler " -"kullanarak güzel `fraktal imajlar `_ " -"üreten bir fraktal üreticidir. Göstereceğimiz ikinci, daha sağlam " -"uygulamayla karşılaştırabilmeniz için bu uygulamayı tamamıyla gösteriyoruz." - -msgid "" -"Though you might have configured Object Storage to store images, the Fractal " -"application needs a database to track the location of, and parameters that " -"were used to create, images in Object Storage. This database server cannot " -"fail." -msgstr "" -"İmajları depolamak için Nesne Depolama yapılandırmış olsanız da, Fraktal " -"uygulaması Nesne Depolamada imaj oluşturmak için kullanılan parametreleri ve " -"konumlarını takip etmek için bir veritabanına ihtiyaç duyar. Bu veritabanı " -"sunucusu başarısız olmamalıdır." - -msgid "" -"To begin to store objects, we must first make a container. Call yours :code:" -"`fractals`:" -msgstr "" -"Nesneleri depolamaya başlamak için, önce bir kapsayıcı yapmalıyız. :code:" -"`fraktallar` ismini verebilirsiniz:" - -msgid "" -"To better understand how the template works, use this guide to install the " -"'ceilometer' command-line client:" -msgstr "" -"Şablonun nasıl çalıştığını daha iyi anlamak için, 'ceilometer' komut satırı " -"istemcisini kurmak için bu kılavuzu kullanın:" - -msgid "" -"To configure shade using a profile, use your credentials above to specify " -"the cloud provider name, username, password, project name, and region name " -"in the file :file:`~/.config/openstack/clouds.yml`." -msgstr "" -"Shade'i bir profil kullanarak yapılandırmak için, :file:`~/.config/openstack/" -"clouds.yml` dosyasında bulut sağlayıcı ismi, kullanıcı adı, parola, proje " -"ismi ve bölge ismini belirtmek için kimlik bilgilerinizi kullanın." - -msgid "To create a floating IP address to use with your instance:" -msgstr "Sunucunuzla kullanmak üzere bir değişken IP adresi oluşturmak için:" - -msgid "" -"To delete a container, you must first remove all objects from the container. " -"Otherwise, the delete operation fails:" -msgstr "" -"Bir kapsayıcıyı silmek için önce kapsayıcıdan tüm nesneleri çıkarmalısınız. " -"Aksi halde silme işlemi başarısız olur:" - -msgid "To detach and delete a volume:" -msgstr "Bir birimi ayırmak ve silmek için:" - -msgid "To determine whether a public IP address is assigned to your instance:" -msgstr "Sunucunuza bir açık IP adresinin atanıp atanmadığını anlamak için:" - -msgid "To increase the overall capacity, add three workers:" -msgstr "Genel kapasiteyi artırmak için, üç işçi ekleyin:" - -msgid "" -"To install the 'trove' command-line client, see `Install the OpenStack " -"command-line clients `_." -msgstr "" -"'trove' komut satırı istemcisini kurmak için, `OpenStack komut satırı " -"istemcilerinin kurulumuna `_ göz " -"atın." - -msgid "" -"To install the OpenStack .NET SDK, use the NeGet Package Manager that is " -"included with Visual Studio and Xamarin Studio. You simply add a package " -"named 'openstack.net' and the NeGet Package Manager automatically installs " -"the necessary dependencies." -msgstr "" -"OpenStack .NET SDK'yı kurmak için Visual Studio ve Xamarin Studio ile " -"birlikte gelen NeGet Paket Yöneticisini kullanın. Basitçe 'openstack.net' " -"isimli bir paket eklersiniz ve NeGet Paket Yönetici gerekli bağımlılıkları " -"otomatik olarak kurar." - -msgid "To interact with the cloud, you must also have" -msgstr "Bulutla iletişime geçmek için ayrıca şunlara sahip olmalısınız" - -msgid "" -"To launch an instance, you choose a flavor and an image. The flavor " -"represents the size of the instance, including the number of CPUs and amount " -"of RAM and disk space. An image is a prepared OS installation from which you " -"clone your instance. When you boot instances in a public cloud, larger " -"flavors can be more expensive than smaller ones in terms of resources and " -"monetary cost." -msgstr "" -"Bir sunucu başlatmak için, bir nitelik ve imaj seçersiniz. Nitelik " -"sunucunuzun boyutunu, CPU sayısı ve RAM ve disk boyutu da dahil olarak " -"temsil eder. İmaj sunucunuzu kopyaladığınız hazır bir işletim sistemi " -"kurulumudur. Açık bir bulutta sunucularınız önyüklediğinizde, büyük " -"nitelikler kaynakça ve maddi olarak küçük olanlardan daha pahalı olabilir." - -msgid "" -"To learn about auto-scaling with the Orchestration API, read these articles:" -msgstr "" -"Orkestrasyon API'si ile otomatik ölçeklendirme hakkında daha fazlasını " -"öğrenmek için şu makaleleri okuyun:" - -msgid "" -"To list the images that are available in your cloud, run some API calls:" -msgstr "" -"Bulutunuzda kullanılabilir imajları listelemek için, bazı API çağrıları " -"çalıştırın:" - -msgid "To recap:" -msgstr "Tekrar etmek için:" - -msgid "" -"To run your application, you must launch an instance. This instance serves " -"as a virtual machine." -msgstr "" -"Uygulamanızı çalıştırmak için bir sunucu başlatmalısınız. Sunucu bir sanal " -"makine olarak servis verir." - -msgid "To see if the volume creation was successful, list all volumes:" -msgstr "" -"Birim oluşturmanın başarılı olup olmadığını görmek için tüm birimleri " -"listeleyin:" - -msgid "" -"To see the application running, you must know where to look for it. By " -"default, your instance has outbound network access. To make your instance " -"reachable from the Internet, you need an IP address. By default in some " -"cases, your instance is provisioned with a publicly rout-able IP address. In " -"this case, you see an IP address listed under `public_ips` or `private_ips` " -"when you list the instances. If not, you must create and attach a floating " -"IP address to your instance." -msgstr "" -"Uygulamayı çalışır görmek için, nereye bakacağınızı bilmeniz gerekir. " -"Öntanımlı olarak sunucunuzun dışarı ağ erişimi bulunur. Sunucunuzu " -"internetten erişilebilir yapmak için bir IP adresine ihtiyacınız vardır. " -"Bazı durumlarda öntanımlı olarak sunucunuz açıkça yönlendirilebilir bir IP " -"adresiyle hazırlanır. Bu durumda sunucuları listelediğinizde `public_ips` " -"veya `private_ips` altında listelenen bir IP adresi görürsünüz. Görmezseniz " -"sunucunuz için bir değişken IP adresi oluşturmalı ve atamalısınız." - -msgid "To see whether a private IP address is assigned to your instance:" -msgstr "Sunucunuza özel bir IP adresinin atanıp atanmadığını görmek için:" - -msgid "To see which security groups apply to an instance, you can:" -msgstr "Bir sunucuya hangi güvenlik gruplarının uygulandığını görmek için:" - -msgid "" -"To set up environment variables for your cloud in an :file:`openrc.sh` file, " -"see `Set environment variables using the OpenStack RC file `_." -msgstr "" -"Bulutunuz için bir :file:`openrc.sh` dosyasında çevre değişkenleri ayarlamak " -"için, `OpenStack RC dosyası kullanarak çevre değişkeni ayarlamak `_ kısmına göz atın." - -msgid "" -"To set up the necessary variables for your cloud in an 'openrc' file, use " -"this guide:" -msgstr "" -"Bulutunuz için gerekli değişkenleri bir 'openrc' dosyasında ayarlamak için, " -"bu kılavuzu kullanın:" - -msgid "" -"To show the details of a specific fractal use the subcommand :code:`show` of " -"the Faafo CLI." -msgstr "" -"Belirli bir fraktalın ayrıntılarını göstermek için Faafo CLI'nin :code:" -"`show` alt komutunu kullanın." - -msgid "" -"To test what happens when the Fractals application is under load, you can:" -msgstr "" -"Fraktal uygulaması yük altındayken neler olacağını denemek için şunu " -"yapabilirsiniz:" - -msgid "" -"To try it out, add the following code to a Python script (or use an " -"interactive Python shell) by calling :code:`python -i`." -msgstr "" -"Denemek için aşağıdaki kodu :code:`python -i` çağırarak bir Python betiğine " -"ekleyin (veya etkileşimli Python kabuğu kullanın)." - -msgid "To try it out, make a 1GB volume called 'test'." -msgstr "Denemek için, 'test' isimli 1GB bir birim yapın." - -msgid "" -"To try it, add the following code to a Python script (or use an interactive " -"Python shell) by calling :code:`python -i`." -msgstr "" -"Denemek için, :code:`python -i`çağırarak aşağıdaki kodu bir Python betiğine " -"ekleyin (veya etkileşimli Python kabuğunu kullanın)." - -msgid "" -"To try it, use an interactive Node.js shell by calling :code:`node` or add " -"the following code to a script." -msgstr "" -"Denemek için, :code:`node` çağırarak etkileşimli Node.js kabuğu kullanın " -"veya aşağıdaki kodu bir betiğe ekleyin." - -msgid "" -"To use Maven to compile a downloaded sample, with the command prompt located " -"in the same directory as the :code:`pom.xml` file, enter:" -msgstr "" -"İndirilen bir örneği derlemek için Maven kullanmak için, :code:`pom.xml` " -"dosyasının bulunduğu dizinle aynı yerdeki komut satırına şunu girin:" - -msgid "" -"To use Maven to run each downloaded sample, with the command prompt located " -"in the same directory as the :code:`pom.xml` file, enter:" -msgstr "" -"İndirilen her bir örneği Maven kullanarak çalıştırmak için komut satırı :" -"code:`pom.xml` dosyasının olduğu dizinde olacak şekilde, şunu girin:" - -msgid "" -"To use a floating IP, you must first allocate an IP to your project, then " -"associate it to your instance's network interface." -msgstr "" -"Bir değişken IP kullanmak için, önce projenize bir IP ayırmalısınız, " -"ardından bunu sunucunuzun ağ arayüzüyle ilişkilendirmelisiniz." - -msgid "" -"To use the OpenStack .NET SDK, add the following code in the required " -"namespace section." -msgstr "" -"OpenStack .NET SDK'yı kullanmak için, aşağıdaki kodu gerekli isim uzayı " -"kısmına ekleyin." - -msgid "To verify that ceilometer is installed, list the known meters:" -msgstr "" -"Ceilometer'in kurulu olduğunu onaylamak için bilinen ölçüleri listeleyin:" - -msgid "URL" -msgstr "URL" - -msgid "" -"Use :code:`ex_list_floating_ip_pools()` and select the first floating IP " -"address pool. Allocate this pool to your project and use it to get a " -"floating IP address." -msgstr "" -":code:`ex_list_floating_ip_pools()` kullanın ve ilk değişken IP adresi " -"havuzunu seçin. Bu havuzu projenize ayırın ve bir değişken IP adresi almak " -"için kullanın." - -msgid "" -"Use :code:`getFloatingIps` to check for unused addresses. Select the first " -"available address. Otherwise, use :code:`allocateNewFloatingIp` to allocate " -"a floating IP to your project from the default address pool." -msgstr "" -"Kullanılmayan adresleri kontrol etmek için :code:`getFloatingIps` kullanın. " -"Kullanılabilir ilk adresi seçin. Aksi halde, öntanımlı adres havuzundan " -"projenize bir değişken IP ayırmak için :code:`allocateNewFloatingIp` " -"kullanın." - -msgid "Use Block Storage for the Fractal database server" -msgstr "Fraktal veritabanı sunucusu için Blok Depolama kullanın" - -msgid "Use Object Storage instead of a database" -msgstr "Veritabanı yerine Nesne Depolama kullanın" - -msgid "Use Object Storage to store fractals" -msgstr "Fraktalları depolamak için Nesne Depolamayı kullanın" - -msgid "Use Object and Block storage for file and database persistence." -msgstr "Dosya ve veritabanı kalıcılığı için Nesne ve Blok depolamayı kullanın." - -msgid "Use Orchestration services to automatically adjust to the environment." -msgstr "" -"Ortama otomatik olarak ayarlanmak için Orkestrasyon servislerini kullanın." - -msgid "" -"Use SSH with the existing SSH keypair to log in to the :code:`app-" -"controller` controller instance." -msgstr "" -"Mevcut SSH anahtar çiftiyle :code:`app-controller` kontrol sunucusuna giriş " -"için SSH kullanın." - -msgid "" -"Use a for loop to call the :code:`faafo` command-line interface to request a " -"random set of fractals 500 times:" -msgstr "" -"500 kere rasgele fraktal kümesi isteği göndermek için komut satırı " -"arayüzünden bir döngü kullanarak :code:`faafo` çalıştırın:" - -msgid "Use conf.d and etc.d." -msgstr "conf.d ve etc.d kullanın." - -msgid "Use environment variables to set your cloud credentials" -msgstr "Bulut kimlik bilgilerinizi ayarlamak için ortam değişkenleri kullanın" - -msgid "" -"Use network service client to select the first floating IP address pool. " -"Allocate this pool to your project and use it to get a floating IP address." -msgstr "" -"İlk değişken IP adresi havuzunu seçmek için ağ servis istemcisini kullanın. " -"Bu havuzu projenize ayırın ve bir değişken IP adresi almak için kullanın." - -msgid "Use the :code:`faafo UUID` command to examine some of the fractals." -msgstr "" -"Fraktalların bazılarını incelemek için :code:`faafo UUID` komutunu kullanın." - -msgid "Use the :code:`faafo create` command to generate fractals." -msgstr "Fraktallar üretmek için :code:`faafo create` komutunu kullanın." - -msgid "" -"Use the :code:`faafo list` command to watch the progress of fractal " -"generation." -msgstr "" -"Fraktal üretim sürecini izlemek için :code:`faafo list` komutunu kullanın." - -msgid "" -"Use the `Health Endpoint Monitoring Pattern ` to implement functional checks within your " -"application that external tools can access through exposed endpoints at " -"regular intervals." -msgstr "" -"Uygulamanızda harici araçların dışa çık uç noktalardan belirli aralıklarla " -"erişebileceği işlev kontrolleri uygulamak için `Sağlık Uç Nokta İzleme " -"Örüntüsünü ` " -"kullanın." - -msgid "" -"Use the image, flavor, key pair, and userdata to create an instance. After " -"you request the instance, wait for it to build." -msgstr "" -"Sunucuyu oluşturmak için imajı, niteliği, anahtar çiftini ve kullanıcı " -"verisini kullanın. Sunucu isteği yaptıktan sonra inşa edilmesini bekleyin." - -msgid "Use the stack ID to get more information about the stack:" -msgstr "Yığınla ilgili daha fazla bilgi almak için yığın kimliğini kullanın:" - -msgid "" -"Use this guide to install the 'openstack' command-line client: https://docs." -"openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"'Openstack' komut satırı istemcisini kurmak için bu kılavuzu kullanın: " -"https://docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"Use this guide to set up the necessary variables for your cloud in an " -"'openrc' file: https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" -msgstr "" -"Bulutunuz için gerekli değişkenleri bir 'openrc' dosyasında ayarlamak için " -"bu kılavuzu kullanın: https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" - -msgid "" -"Use your credentials above to specify the cloud provider name, username, " -"password, project_name and region_name in the file :file:`~/.config/" -"openstack/clouds.yml`." -msgstr "" -"Bulut sağlayıcı ismini, kullanıcı ismini, parolayı, proje ismini ve bölge " -"ismini :file:`~/.config/openstack/clouds.yml` dosyasında belirtmek için " -"yukardaki kimlik bilgilerinizi kullanın." - -msgid "Use your selected image and flavor to create an instance." -msgstr "Sunucu oluşturmak için seçtiğiniz imajı ve niteliği kullanın." - -msgid "User data in openstacksdk must be encoded to Base64" -msgstr "Openstacksdk'daki kullanıcı verisi Base64 kodlanmalıdır" - -msgid "User data in openstacksdk must be encoded to Base64." -msgstr "Openstacksdk'daki kullanıcı verisi Base64 kodlanmış olmalıdır." - -msgid "" -"Userdata. During instance creation, you can provide userdata to OpenStack to " -"configure instances after they boot. The cloud-init service applies the user " -"data to an instance. You must pre-install the cloud-init service on your " -"chosen image. We will go into more detail in :doc:`/introduction`." -msgstr "" -"Kullanıcıverisi. Sunucu oluşturma anında, OpenStack'in sunucular " -"önyüklendikten sonra yapılandırabilmesi için kullanıcı verisi " -"sağlayabilirsiniz. Cloud-init servisi kullanıcı verisini sunucuya uygular. " -"Seçtiğiniz imaja cloud-init servisini önceden yüklemelisiniz. :doc:`/" -"introduction` kısmında daha ayrıntıya gireceğiz." - -msgid "Using Pacemaker to look at the API." -msgstr "API'ye bakmak için Pacemaker kullanmak." - -msgid "Values" -msgstr "Değerler" - -msgid "Verify that the stack was successfully created:" -msgstr "Yığının başarıyla oluşturulduğunu onaylayın:" - -msgid "Verify that we have had an impact" -msgstr "Bir etkimiz olduğunu onaylayın" - -msgid "Verify the nova instance was deleted when the stack was removed:" -msgstr "Yığın kaldırıldığında nova sunucusunun silindiğini onaylayın:" - -msgid "Wait for it to reach the :code:`CREATE_COMPLETE` status:" -msgstr ":code:`CREATE_COMPLETE` durumuna ulaşmasını bekleyin:" - -msgid "" -"Watch :code:`top` on the worker instance. Right after calling :code:`faafo` " -"the :code:`faafo-worker` process should start consuming a lot of CPU cycles." -msgstr "" -"İşçi sunucuda :code:`top` çıktısını izleyin. :code.`faafo` çağrılır " -"çağrılmaz :code:`faafo-worker` süreci epey CPU tüketiyor olmalı." - -msgid "" -"We are interested because the Telemetry service supports alarms: an alarm is " -"fired when our average statistic breaches a configured threshold. When the " -"alarm fires, an associated action is performed." -msgstr "" -"İlgileniyoruz çünkü Telemetri servisi uyarıları destekliyor: bir uyarı " -"ortalama istatistiğimiz yapılandırılan bir eşiği geçtiğinde tetiklenir. " -"Uyarı tetiklendiğinde ilişkili bir eylem gerçekleştirilir." - -msgid "" -"We assume that you can already access an OpenStack cloud. You must have a " -"project, also known as a tenant, with a minimum quota of six instances. " -"Because the Fractals application runs in Ubuntu, Debian, Fedora-based, and " -"openSUSE-based distributions, you must create instances that use one of " -"these operating systems." -msgstr "" -"Zaten bir OpenStack bulutuna erişiminiz olduğunu varsayıyoruz. En az altı " -"sunucu kotasına sahip, kiracı olarak da bilinen, bir projeye sahip " -"olmalısınız. Fraktallar uygulaması Ubuntu, Debian, Fedora-tabanlı, ve " -"openSUSE tabanlı dağıtımlarda çalıştığından, bu işletim sistemlerinden " -"birini kullanan sunucular oluşturmalısınız." - -msgid "We cover networking in detail in :doc:`/networking`." -msgstr ":doc:`/networking` kısmında ağın ayrıntılarını kapsıyoruz." - -msgid "" -"We explained image and flavor in :doc:`getting_started`, so in the following " -"sections, we will explain the other parameters in detail, including :code:" -"`ex_userdata` (cloud-init) and :code:`ex_keyname` (key pairs)." -msgstr "" -"İmaj ve niteliği :doc:`getting_started` kısmında açıkladık, ilerleyen " -"kısımlarda, :code:`ex_userdata` (cloud-init) ve :code:`ex_keyname` (anahtar " -"çiftleri) dahil diğer parametreleri daha ayrıntılı olarak açıklayacağız." - -msgid "We have created a Maven POM file to help you get started." -msgstr "Başlamanıza yardımcı olmak için Maven POM dosyası hazırladık." - -msgid "" -"We have not quite figured out how to stop using a database, but the general " -"steps are:" -msgstr "" -"Bir veritabanı kullanmayı nasıl bırakacağımızı tam olarak belirleyemedik, " -"ama genel adımlar şunlar:" - -msgid "" -"We have talked about separating functions into different micro-services, and " -"how that enables us to make use of the cloud architecture. Now let us see " -"that in action." -msgstr "" -"Fonksiyonları farklı mikro servislere ayırmayı, ve bunun bizi bulut " -"mimarisini kullanmakta nasıl etkin yaptığını konuştuk. Şimdi bunu eyleme " -"dökelim." - -msgid "What you need" -msgstr "İhtiyacınız olan" - -msgid "What you will learn" -msgstr "Öğrenecekleriniz" - -msgid "" -"When an SSH public key is provided during instance creation, cloud-init " -"installs this key on a user account. (The user name varies between cloud " -"images.) See the `Obtaining Images `_ section of the image guide for guidance about which " -"user name you should use when SSHing. If you still have problems logging in, " -"ask your cloud provider to confirm the user name." -msgstr "" -"Sunucu oluşturma sırasında bir SSH açık anahtarı sağlandığında, cloud-init " -"bu anahtarı kullanıcı hesabına yükler. (Kullanıcı adı bulut imajlarına göre " -"değişiklik gösterir.) SSH çekerken hangi kullanıcı adını kullanacağınızla " -"ilgili yön gösterme için imaj kılavuzundaki `İmajları almak `_ kısmına göz atın. Yine de " -"girişte sorun yaşıyorsanız, bulut sağlayıcınıza kullanıcı adınızı kontrol " -"ettirin." - -msgid "" -"When the instance boots, the `ex_userdata` variable value instructs the " -"instance to deploy the Fractals application." -msgstr "" -"Sunucu önyüklendiğinde, `ex_userdata` değişken değeri sunucuya Fraktal " -"uygulamasını kurmasını söyler." - -msgid "" -"When you create an instance for the application, you want to give it a bit " -"more information than you supplied to the bare instance that you just " -"created and deleted. We will go into more detail in later sections, but for " -"now, simply create the following resources so that you can feed them to the " -"instance:" -msgstr "" -"Uygulama için bir sunucu oluşturduğunuzda, az önce oluşturduğunuz ve " -"sildiğiniz boş sunucudan biraz daha fazla bilgi vermek istersiniz. İlerleyen " -"kısımlarda daha fazla ayrıntıya gireceğiz, ama şimdilik sunucuyu beslemek " -"için sadece basitçe aşağıdaki kaynakları oluşturun:" - -msgid "" -"When you deal with pets, you name and care for them. If they get sick, you " -"nurse them back to health, which can be difficult and very time consuming. " -"When you deal with cattle, you attach a numbered tag to their ear. If they " -"get sick, you put them down and move on." -msgstr "" -"Evcil hayvanlarla ilgilendiğinizde, onları isimlendirir ve iyi bakarsınız. " -"Hastalanırlarsa, iyileşene kadar bakıcılık yaparsınız ki bu oldukça zor ve " -"zaman alıcı bir iş olabilir. Sığırlarla uğraşırken kulaklarına bir numara " -"etiketi takarsınız. Hastalanırlarsa bir kenara ayırır hayatınıza devam " -"edersiniz." - -msgid "" -"While this stack starts a single instance that builds and runs the Fractal " -"application as an all-in-one installation, you can make very complicated " -"templates that impact dozens of instances or that add and remove instances " -"on demand. Continue to the next section to learn more." -msgstr "" -"Bu yığın tek bir sunucu başlatsa ve Fraktal uygulamasını hepsi bir arada bir " -"kurulum olarak çalıştırsa da, düzinelerce sunucuyu etkileyen veya isteğe " -"göre sunucu ekleyip çıkaran daha karmaşık şablonlar yapabilirsiniz. Daha " -"fazlasını öğrenmek için sonraki kısma devam edin." - -msgid "Who should read this guide" -msgstr "Bu kılavuzu okuması gerekenler" - -msgid "" -"With multiple workers producing fractals as fast as they can, the system " -"must be able to receive the requests for fractals as quickly as possible. If " -"our application becomes popular, many thousands of users might connect to " -"our API to generate fractals." -msgstr "" -"Ellerinde geldiğince fraktal üreten birden çok işçiyle, sistem fraktallar " -"için istekleri olabildiğince çabuk alabiliyor olmalıdır. Uygulamamız " -"popülerleşirse, binlerce kullanıcı fraktal üretmek için API'mize " -"bağlanabilir." - -msgid "" -"With the OpenStack Networking API, the workflow for creating a network " -"topology that separates the public-facing Fractals app API from the worker " -"back end is as follows:" -msgstr "" -"OpenStack Ağ API'si ile, dışarıya dönük Fraktal uygulama API'sini işçi arka " -"uçtan ayıran bir ağ topolojisi oluşturmak için olan iş akışı şu şekildedir:" - -msgid "" -"With the Orchestration API, the Fractal application can create an auto-" -"scaling group for all parts of the application, to dynamically provision " -"more compute resources during periods of heavy utilization, and also " -"terminate compute instances to scale down, as demand decreases." -msgstr "" -"Orkestrasyon API'si ile, Fraktal uygulaması yük yoğunluğunun olduğu " -"aralıklarda dinamik olarak daha fazla hesaplama kaynağı hazırlamak için " -"uygulamanın tüm kısımları için otomatik ölçekleme grubu oluşturabilir, ve " -"yük azaldıkça ölçeği küçültmek için hesaplama sunucularını sonlandırabilir." - -msgid "" -"With the addition of the load balancer, the Fractal app's networking " -"topology now reflects the modular nature of the application itself." -msgstr "" -"Yük dengeleyicinin eklenmesiyle Fraktal uygulamasının ağ topolojisi artık " -"uygulamanın modüler doğasını yansıtır durumda." - -msgid "Work with stacks: Advanced" -msgstr "Yığınlarla çalışın: Gelişmiş" - -msgid "Work with stacks: Basics" -msgstr "Yığınlarla çalışın: Temeller" - -msgid "Work with the CLI" -msgstr "CLI ile çalışmak" - -msgid "Work with the OpenStack Database service" -msgstr "OpenStack Veritabanı servisi ile çalışın" - -msgid "" -"Wow! If you have made it through this section, you know more than the " -"authors of this guide know about working with OpenStack clouds." -msgstr "" -"Wow! Bu kısmı geçtiyseniz, OpenStack bulutlarıyla çalışmakla ilgili bu " -"kılavuzun yazarlarından daha çok şey biliyorsunuz." - -msgid "Writing your first OpenStack application" -msgstr "İlk OpenStack uygulamanızı yazmak" - -msgid "" -"You also need a security group to permit access to the database server (for " -"MySQL, port 3306) from the network:" -msgstr "" -"Ağdan veritabanı sunucusuna erişim izni için (MySQL için, bağlantı noktası " -"3306) bir de güvenlik grubuna ihtiyacınız var:" - -msgid "" -"You are ready to create members for the load balancer pool, which reference " -"the floating IPs:" -msgstr "" -"Değişken IP'leri gösteren, yük dengeleme bağlantı noktası için üyeler " -"oluşturmak için hazırsınız:" - -msgid "" -"You can aggregate samples and calculate statistics across all instances with " -"the `metering.some_name` metadata that has `some_value` by using a query of " -"the form:" -msgstr "" -"Örnekleri toplayabilir ve tüm sunucular arasındaki istatistikleri şu şekilde " -"bir sorgu kullanarak `some_value` değerine sahip `metering.some_name` " -"metaverisi ile hesaplayabilirsiniz:" - -msgid "" -"You can also download the OpenStack RC file from the OpenStack Horizon " -"dashboard. Log in to the dashboard and click :guilabel:`Project->Access & " -"Security->API Access->Download OpenStack RC file`. If you use this method, " -"be aware that the \"auth URL\" does not include the path. For example, if " -"your :file:`openrc.sh` file shows:" -msgstr "" -"Ayrıca OpenStack RC dosyasını OpenStack Horizon kontrol panosundan " -"indirebilirsiniz. Kontrol panosuna giriş yapın ve :guilabel:`Proje->Erişim & " -"Güvenlik->API Erişimi->OpenStack RC dosyasını indire` tıklayın. Bu yöntemi " -"kullanırsanız \"yetkilendirme URL\"'sinin yolda bulunmadığını unutmayın. " -"Örneğin :file:`openrc.sh` dosyanız şöyle gösteriyorsa:" - -msgid "You can also get information about available flavors:" -msgstr "Ayrıca kullanılabilir niteliklerle ilgili bilgi alabilirsiniz:" - -msgid "" -"You can also use the OpenStack API to create snapshots of running instances " -"and persistent volumes. For more information, see your SDK documentation." -msgstr "" -"OpenStack API'yi kullanarak çalışan sunucuların ya da kalıcı birimlerin " -"anlık görüntülerini de oluşturabilirsiniz. Daha fazla bilgi için SDK " -"belgelendirmenize göz atın." - -msgid "" -"You can complete advanced tasks such as uploading an object with metadata, " -"as shown in following example. For more information, see the documentation " -"for your SDK." -msgstr "" -"Aşağıdaki örnekte gösterildiği gibi metaveriyle birlikte bir nesne yükleme " -"gibi karmaşık görevleri tamamlayabilirsiniz. Daha fazla bilgi için SDK'nız " -"için belgelendirmeye göz atın." - -msgid "" -"You can detach the volume and reattach it elsewhere, or use the following " -"steps to delete the volume." -msgstr "" -"Birimi ayırabilir ve başka bir yere ekleyebilirsiniz, veya birimi silmek " -"için şu adımları kullanabilirsiniz." - -msgid "You can list available security groups with:" -msgstr "Kullanılabilir güvenlik gruplarını şu şekilde listeleyebilirsiniz:" - -msgid "You can then attach it to the instance:" -msgstr "Ardından sunucuya ekleyebilirsiniz:" - -msgid "" -"You create stacks from templates, which contain resources. Resources are an " -"abstraction in the HOT (Heat Orchestration Template) template language, " -"which enables you to define different cloud resources by setting the :code:" -"`type` attribute." -msgstr "" -"Yığınları kaynaklar içeren şablonlardan oluşturursunuz. Kaynaklar HOT (Heat " -"Orkestrasyon Şablonu) şablon dilinde soyutlamalardır, ve :code:`type` " -"özniteliğini ayarlayarak farklı bulut kaynakları tanımlamanızı sağlarlar." - -msgid "" -"You might have to run the :command:`openstack stack list` command a few " -"times before the stack creation is complete." -msgstr "" -"Yığın oluşturma tamamlanmadan önce :command:`openstack stack list` komutunu " -"bir kaç kere çalıştırmanız gerekebilir." - -msgid "" -"You might want to use multiple clouds, such as a private cloud inside your " -"organization and a public cloud. This section attempts to do exactly that." -msgstr "" -"Birden fazla bulut kullanmak isteyebilirsiniz, örneğin kurum içinde özel bir " -"bulut ve açık ayrı bir bulut. Bu kısım tam olarak bunu yapmaya çalışır." - -msgid "You must pass in objects and not object names to the delete commands." -msgstr "Silme komutlarına nesne isimlerini değil nesneleri vermelisiniz." - -msgid "" -"You need a server for the dedicated database. Use the image, flavor, and " -"keypair that you used in :doc:`/getting_started` to launch an :code:`app-" -"database` instance." -msgstr "" -"Adanmış veritabanı için bir sunucuya ihtiyacınız var. :doc:`/" -"getting_started` belgesinde kullandığınız imajı, niteliği ve anahtar çiftini " -"kullanarak bir :code:`app-database` sunucusu başlatın." - -msgid "You pass in these configuration settings as parameters:" -msgstr "Şu yapılandırma ayalarını parametreler olarak geçirirsiniz:" - -msgid "You should be able to see them in the member list:" -msgstr "Üye listesinde görüyor olmalısınız:" - -msgid "" -"You should be fairly confident about starting instances and distributing " -"services from an application among these instances." -msgstr "" -"Sunucular başlatma ve bu sunucular arasındaki bir uygulamadan servisleri " -"dağıtma konusunda kendinize güveniyor olmalısınız." - -msgid "" -"You should now be able to see this container appear in a listing of all " -"containers in your account:" -msgstr "" -"Artık bu kapsayıcıyı hesabınızdaki kapsayıcıların listesinde görebiliyor " -"olmalısınız:" - -msgid "" -"You should now be fairly confident working with Block Storage volumes. For " -"information about other calls, see the volume documentation for your SDK. " -"Or, try one of these tutorial steps:" -msgstr "" -"Artık Blok Depolama birimleriyle yeterli özgüvenle çalışabiliyor " -"olmalısınız. Diğer çağrılarla ilgili bilgi için, SDK'nız için birim " -"belgelendirmesine göz atın. Veya şu öğretici adımlardan birini deneyin:" - -msgid "" -"You should now be fairly confident working with Object Storage. You can find " -"more information about the Object Storage SDK calls at:" -msgstr "" -"Artık Nesne Depolamayla çalışırken kendinizden emin olmalısınız. Nesne " -"Depolama SDK çağrılarıyla ilgili daha fazla bilgi için:" - -msgid "" -"You should now be fairly confident working with the Network API. To see " -"calls that we did not cover, see the volume documentation of your SDK, or " -"try one of these tutorial steps:" -msgstr "" -"Artık Ağ API'si ile çalışırken kendinizden emin olmalısınız. Kapsamadığımız " -"çağrıları görmek için SDK'nızın birim belgelendirmesine göz atın veya şu " -"öğretici adımlardan birini deneyin:" - -msgid "" -"You should now be fairly confident working with the Orchestration service. " -"To see the calls that we did not cover and more, see the volume " -"documentation of your SDK. Or, try one of these steps in the tutorial:" -msgstr "" -"Artık Orkestrasyon servisiyle oldukça rahat şekilde çalışabiliyor " -"olmalısınız. Burda kapsamadığımız çağrıları ve daha fazlasını görmek için " -"SDK'nızın birim belgelendirmesine göz atın. Veya öğreticideki şu adımlardan " -"birini deneyin:" - -msgid "" -"You should now have a basic understanding of the architecture of cloud-based " -"applications. In addition, you have had practice starting new instances, " -"automatically configuring them at boot, and even modularizing an application " -"so that you may use multiple instances to run it. These are the basic steps " -"for requesting and using compute resources in order to run your application " -"on an OpenStack cloud." -msgstr "" -"Artık bulut tabanlı uygulamaların mimarisiyle ilgili temel şeyleri anlamış " -"olmalısınız. Ek olarak yeni sunucular başlatmak, önyüklemede otomatik olarak " -"yapılandırma ve hatta çalıştırmak için birden çok sunucu kullanabilmek için " -"uygulamayı modülerleştirmeyle ilgili pratik de yaptınız. Bunlar uygulamanızı " -"OpenStack bulutunda çalıştırabilmeniz için hesaplama kaynaklarını isteme ve " -"kullanmanın temel adımlarıdır." - -msgid "You should see output like this:" -msgstr "Şuna benzer çıktı görmelisiniz:" - -msgid "You should see output something like this:" -msgstr "Şuna benzer bir çıktı görmelisiniz:" - -msgid "You should see output something like:" -msgstr "Şuna benzer bir çıktı görmelisiniz:" - -msgid "You should see output such as:" -msgstr "Şuna benzer bir çıktı görmelisiniz:" - -msgid "" -"You will progressively ramp up to use up six instances, so make sure that " -"your cloud account has the appropriate quota." -msgstr "" -"Yavaş yavaş altı sunucu kullanmaya geçeceksiniz, bu yüzden bulut hesabınızın " -"bu kadar kotası olduğundan emin olun." - -msgid "Your SDK might call an instance a 'node' or 'server'." -msgstr "SDK'nız sunucuya 'düğüm' ya da 'makine' diyebilir." - -msgid "Your images and flavors will be different, of course." -msgstr "Tabi imaj ve nitelikleriniz farklı olacaktır." - -msgid "Your ssh key name" -msgstr "Ssh anahtar adınız" - -msgid "`Libcloud `_" -msgstr "`Libcloud `_" - -msgid "" -"`Micro-services `_ are an " -"important design pattern that helps achieve application modularity. " -"Separating logical application functions into independent services " -"simplifies maintenance and re-use. Decoupling components also makes it " -"easier to selectively scale individual components, as required. Further, " -"application modularity is a required feature of applications that scale out " -"well and are fault tolerant." -msgstr "" -"`Mikro servisler `_ uygulama " -"modülerliğini elde etmede yardımcı olan önemli tasarım kalıplarıdır. " -"Mantıksal uygulamaları bağımsız servislere ayırmak bakımı ve tekrar " -"kullanımı basitleştirir. Bileşimleri koparma bağımsız bileşenleri gerektiği " -"gibi ayrı ayrı ölçeklendirmeyi kolaylaştırır. Dahası iyi ölçeklenir ve " -"hataya dayanıklı uygulamalar için uygulama modülerliği gerekli bir " -"özelliktir." - -msgid "" -"`OpenStack Cloud SDK for Microsoft .NET 1.4.0.1 or later installed `_." -msgstr "" -"`Microsoft .NET 1.4.0.1 ve üstü için kurulu OpenStack Bulut SDK'sı `_." - -msgid "" -"`OpenStack Object Storage `_ (code-named swift) is open-source software that enables you to " -"create redundant, scalable data storage by using clusters of standardized " -"servers to store petabytes of accessible data. It is a long-term storage " -"system for large amounts of static data that you can retrieve, leverage, and " -"update. Unlike more traditional storage systems that you access through a " -"file system, you access Object Storage through an API." -msgstr "" -"`OpenStack Nesne Depolama `_ (kod adı swift) petabaytlarca erişlebilir veriyi depolamak için " -"standart sunucuların kümesini kullanarak yedekli, ölçeklenebilir veri deposu " -"oluşturmanızı sağlayan açık kaynak bir yazılımdır. Büyük miktarlarda statik " -"veriyi alabileceğiniz, kullanabileceğiniz ve güncelleyebileceğiniz uzun " -"dönem depolama sistemidir. Bir dosya sistemi üzerinden eriştiğiniz daha " -"geleneksel depolama sistemlerinin aksine Nesne Depolamaya API üzerinden " -"erişirsiniz." - -msgid "" -"`Phoenix Servers `_, named " -"for the mythical bird that is consumed by fire and rises from the ashes to " -"live again, make it easy to start over with new instances." -msgstr "" -"Ateş tarafından tüketilen ve küllerinden yeniden doğan efsanevi kuşun " -"ardından isimlendirilen `Phoenix Sunucuları `_ yeni sunucularla tekrar başlamayı kolaylaştırır." - -msgid "" -"`a recent version of gophercloud installed `_" -msgstr "" -"`gophercloud'un yeni bir sürümü kurulmuş `_" - -msgid "" -"`a recent version of php-opencloud installed `_." -msgstr "" -"`php-opencloud'un yeni bir sürümü kurulmuş `_." - -msgid "" -"`cloud-init `_ is a tool that " -"performs instance configuration tasks during the boot of a cloud instance, " -"and comes installed on most cloud images. :code:`ex_userdata`, which was " -"passed to :code:`create_node`, is the configuration data passed to cloud-" -"init." -msgstr "" -"`cloud-init `_ bir bulut " -"sunucusunun önyüklenmesi sırasındaki sunucu yapılandırma görevlerini " -"gerçekleştiren bir araçtır, ve çoğu bulut imajında kurulu olarak gelir. :" -"code:`create_node`'a verilen :code:`ex_userdata` cloud-init'e geçirilen " -"yapılandırma verisidir." - -msgid "" -"`fog 1.19 or higher installed `_ and working with ruby gems 1.9." -msgstr "" -"`fog 1.19 veya daha yenisi kurulu `_ ve ruby gems 1.9 ile çalışır durumda." - -msgid "`fog `_" -msgstr "`fog `_" - -msgid "`gophercloud `_" -msgstr "`gophercloud `_" - -msgid "" -"`jClouds 1.8 or higher installed `_." -msgstr "" -"`jClouds 1.8 veya daha yenisi kurulmuş `_." - -msgid "`jClouds `_" -msgstr "`jClouds `_" - -msgid "" -"`libcloud 0.15.1 or higher installed `_." -msgstr "" -"`libcloud 0.15.1 veya daha yenisi kurulmuş `_." - -msgid "`php-opencloud `_" -msgstr "`php-opencloud `_" - -msgid "" -"`pkgcloud 1.2 or higher installed `_." -msgstr "" -"`pkgcloud 1.2 veya daha yenisi kurulmuş `_." - -msgid "`pkgcloud `_" -msgstr "`pkgcloud `_" - -msgid "amqp://guest:guest@localhost:5672/" -msgstr "amqp://guest:guest@localhost:5672/" - -msgid "auth URL" -msgstr "yetkilendirme URL'si" - -msgid "cloud region" -msgstr "bulut bölgesi" - -msgid "conf.d, etc.d" -msgstr "conf.d, etc.d" - -msgid "" -"fog `does support OpenStack Orchestration `_." -msgstr "" -"fog `OpenStack Orkestrasyon'u desteklemiyor `_." - -msgid "" -"fog `supports `_ the OpenStack Networking API, but this section has not yet been " -"completed." -msgstr "" -"fog OpenStack Ağ API'sini `destekler `_ ama bu kısım henüz tamamlanmadı." - -msgid "http://gophercloud.io/" -msgstr "http://gophercloud.io/" - -msgid "http://localhost/" -msgstr "http://localhost/" - -msgid "" -"http://php-opencloud.readthedocs.org/en/latest/getting-started-with-" -"openstack.html" -msgstr "" -"http://php-opencloud.readthedocs.org/en/latest/getting-started-with-" -"openstack.html" - -msgid "" -"https://docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" -msgstr "" -"https://docs.openstack.org/cli-reference/common/" -"cli_install_openstack_command_line_clients.html#install-the-clients" - -msgid "" -"https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" -msgstr "" -"https://docs.openstack.org/cli-reference/common/" -"cli_set_environment_variables_using_openstack_rc.html" - -msgid "https://docs.openstack.org/infra/shade/" -msgstr "https://docs.openstack.org/infra/shade/" - -msgid "" -"https://github.com/fog/fog-openstack/blob/master/docs/getting_started.md" -msgstr "" -"https://github.com/fog/fog-openstack/blob/master/docs/getting_started.md" - -msgid "" -"https://github.com/fog/fog/blob/master/lib/fog/openstack/docs/storage.md" -msgstr "" -"https://github.com/fog/fog/blob/master/lib/fog/openstack/docs/storage.md" - -msgid "" -"https://github.com/pkgcloud/pkgcloud/tree/master/docs/providers/openstack" -msgstr "" -"https://github.com/pkgcloud/pkgcloud/tree/master/docs/providers/openstack" - -msgid "https://jclouds.apache.org/guides/openstack/" -msgstr "https://jclouds.apache.org/guides/openstack/" - -msgid "" -"https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html" -msgstr "" -"https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html" - -msgid "https://libcloud.readthedocs.org/en/latest/storage/api.html" -msgstr "https://libcloud.readthedocs.org/en/latest/storage/api.html" - -msgid "https://www.nuget.org/packages/openstack.net" -msgstr "https://www.nuget.org/packages/openstack.net" - -msgid "internal worker traffic" -msgstr "dahili işçi trafiği" - -msgid "" -"jClouds supports the OpenStack Networking API, but section has not yet been " -"completed. Please see `this `_ in the meantime." -msgstr "" -"jClouds OpenStack Ağ API'sini destekler, ama bu kısım henüz tamamlanmadı. Bu " -"sırada lütfen `buraya `_ göz " -"atın." - -msgid "libcloud does not currently support OpenStack Orchestration." -msgstr "libcloud henüz OpenStack Orkestrasyon'u desteklemiyor." - -msgid "" -"libcloud support added 0.14: https://developer.rackspace.com/blog/libcloud-0-" -"dot-14-released/" -msgstr "" -"libcloud desteği eklendi 0.14: https://developer.rackspace.com/blog/" -"libcloud-0-dot-14-released/" - -msgid "node.js" -msgstr "node.js" - -msgid "password" -msgstr "parola" - -msgid "project ID or name (projects are also known as tenants)" -msgstr "proje kimliği veya ismi (projeler kiracılar olarak da bilinir)" - -msgid "public-facing web traffic" -msgstr "dışarı dönük web trafiği" - -msgid "sqlite:////tmp/sqlite.db" -msgstr "sqlite:////tmp/sqlite.db" - -msgid "the .NET SDK does not currently support OpenStack Orchestration." -msgstr ".NET SDK henüz OpenStack Orkestrasyon'u desteklemiyor." - -msgid "user name" -msgstr "kullanıcı adı" diff --git a/firstapp/source/networking.rst b/firstapp/source/networking.rst deleted file mode 100644 index 474fb9af5..000000000 --- a/firstapp/source/networking.rst +++ /dev/null @@ -1,912 +0,0 @@ -========== -Networking -========== - -.. todo:: Latter part of the chapter (LBaaS) needs to use Fractals app - entities for the examples. - -In previous chapters, all nodes that comprise the fractal application were -attached to the same network. - -This chapter introduces the Networking API. This will enable us to build -networking topologies that separate public traffic accessing the application -from traffic between the API and the worker components. We also introduce -load balancing for resilience, and create a secure back-end network for -communication between the database, web server, file storage, and worker -components. - -.. warning:: This section assumes that your cloud provider has implemented the - OpenStack Networking API (neutron). Users of clouds which have - implemented legacy networking (nova-network) will have access to - networking via the Compute API. Log in to the Horizon dashboard - and navigate to :guilabel:`Project->Access & Security->API Access`. - If you see a service endpoint for the Network API, your cloud - is most likely running the Networking API. If you are still in - doubt, ask your cloud provider for more information. - -.. only:: dotnet - - .. warning:: This section has not yet been completed for the .NET SDK - -.. only:: fog - - .. warning:: fog `supports - `_ - the OpenStack Networking API, but this section has - not yet been completed. - -.. only:: jclouds - - .. warning:: jClouds supports the OpenStack Networking API, but - section has not yet been completed. Please see `this - `_ in - the meantime. - -.. only:: libcloud - - .. warning:: Libcloud does not support the OpenStack Networking API. - -.. only:: pkgcloud - - .. warning:: Pkgcloud supports the OpenStack Networking API, but - this section has not been completed. - -.. only:: openstacksdk - - .. warning:: This section has not yet been completed for the OpenStack SDK. - -.. only:: phpopencloud - - .. warning:: PHP-OpenCloud supports the OpenStack Networking API, - but this section has not been completed. - -Work with the CLI -~~~~~~~~~~~~~~~~~ - -Because the SDKs do not fully support the OpenStack Networking API, this -section uses the command-line clients. - -Use this guide to install the 'openstack' command-line client: -https://docs.openstack.org/cli-reference/common/cli_install_openstack_command_line_clients.html#install-the-clients - -Use this guide to set up the necessary variables for your cloud in an -'openrc' file: -https://docs.openstack.org/cli-reference/common/cli_set_environment_variables_using_openstack_rc.html - -Ensure you have an openrc.sh file, source it, and then check that your -openstack client works: :: - - $ cat openrc.sh - export OS_USERNAME=your_auth_username - export OS_PASSWORD=your_auth_password - export OS_TENANT_NAME=your_project_name - export OS_AUTH_URL=http://controller:5000/v2.0 - export OS_REGION_NAME=your_region_name - - $ source openrc.sh - - $ openstack --version - 3.3.0 - -Networking segmentation -~~~~~~~~~~~~~~~~~~~~~~~ - -In traditional data centers, network segments are dedicated to -specific types of network traffic. - -The fractal application we are building contains these types of -network traffic: - -* public-facing web traffic -* API traffic -* internal worker traffic - -For performance reasons, it makes sense to have a network for each -tier, so that traffic from one tier does not "crowd out" other types -of traffic and cause the application to fail. In addition, having -separate networks makes controlling access to parts of the application -easier to manage, improving the overall security of the application. - -Prior to this section, the network layout for the Fractal application -would be similar to the following diagram: - -.. nwdiag:: - - nwdiag { - - network public { - address = "203.0.113.0/24" - tenant_router [ address = "203.0.113.20" ]; - } - - network tenant_network { - address = "10.0.0.0/24" - tenant_router [ address = "10.0.0.1" ]; - api [ address = "203.0.113.20, 10.0.0.3" ]; - webserver1 [ address = "203.0.113.21, 10.0.0.4" ]; - webserver2 [ address = "203.0.113.22, 10.0.0.5" ]; - worker1 [ address = "203.0.113.23, 10.0.0.6" ]; - worker2 [ address = "203.0.113.24, 10.0.0.7" ]; - } - } - -In this network layout, we assume that the OpenStack cloud in which -you have been building your application has a public network and tenant router -that was previously created by your cloud provider or by yourself, following -the instructions in the appendix. - -Many of the network concepts that are discussed in this section are -already present in the diagram above. A tenant router provides routing -and external access for the worker nodes, and floating IP addresses -are associated with each node in the Fractal application cluster to -facilitate external access. - -At the end of this section, you make some slight changes to the -networking topology by using the OpenStack Networking API to create -the 10.0.1.0/24 network to which the worker nodes attach. You use the -10.0.3.0/24 API network to attach the Fractal API servers. Web server -instances have their own 10.0.2.0/24 network, which is accessible by -fractal aficionados worldwide, by allocating floating IPs from the -public network. - -.. nwdiag:: - - nwdiag { - - network public { - address = "203.0.113.0/24" - tenant_router [ address = "203.0.113.60"]; - } - - network webserver_network{ - address = "10.0.2.0/24" - tenant_router [ address = "10.0.2.1"]; - webserver1 [ address = "203.0.113.21, 10.0.2.3"]; - webserver2 [ address = "203.0.113.22, 10.0.2.4"]; - } - network api_network { - address = "10.0.3.0/24" - tenant_router [ address = "10.0.3.1" ]; - api1 [ address = "10.0.3.3" ]; - api2 [ address = "10.0.3.4" ]; - } - - network worker_network { - address = "10.0.1.0/24" - tenant_router [ address = "10.0.1.1" ]; - worker1 [ address = "10.0.1.5" ]; - worker2 [ address = "10.0.1.6" ]; - } - } - -Introduction to tenant networking -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -With the OpenStack Networking API, the workflow for creating a network -topology that separates the public-facing Fractals app API from the -worker back end is as follows: - -* Create a network and subnet for the web server nodes. - -* Create a network and subnet for the worker nodes. This is the private data network. - -* Create a router for the private data network. - -* Allocate floating ips and assign them to the web server nodes. - -Create networks -~~~~~~~~~~~~~~~ - -Most cloud providers make a public network accessible to you. We will -attach a router to this public network to grant Internet access to our -instances. After also attaching this router to our internal networks, -we will allocate floating IPs from the public network for instances -which need to be accessed from the Internet. - -Confirm that we have a public network by listing the -networks our tenant has access to. The public network does not have to -be named public - it could be 'external', 'net04_ext' or something -else - the important thing is it exists and can be used to reach the -Internet. - -:: - - $ openstack network list - +--------------------------------------+------------------+--------------------------------------------------+ - | ID | Name | Subnets | - +--------------------------------------+------------------+--------------------------------------------------+ - | 27e6fa33-fd39-475e-b048-6ac924972a03 | public | b12293c9-a1f4-49e3-952f-136a5dd24980 | - +--------------------------------------+------------------+--------------------------------------------------+ - -Next, create a network and subnet for the workers. - -:: - - $ openstack network create worker_network - +---------------------------+--------------------------------------+ - | Field | Value | - +---------------------------+--------------------------------------+ - | admin_state_up | UP | - | availability_zone_hints | | - | availability_zones | | - | created_at | 2016-11-06T22:28:45Z | - | description | | - | headers | | - | id | 4d25ff64-eec3-4ab6-9029-f6d4b5a3e127 | - | ipv4_address_scope | None | - | ipv6_address_scope | None | - | mtu | 1450 | - | name | worker_network | - | port_security_enabled | True | - | project_id | a59a543373bc4b12b74f07355ad1cabe | - | provider:network_type | vxlan | - | provider:physical_network | None | - | provider:segmentation_id | 54 | - | revision_number | 3 | - | router:external | Internal | - | shared | False | - | status | ACTIVE | - | subnets | | - | tags | [] | - | updated_at | 2016-11-06T22:28:45Z | - +---------------------------+--------------------------------------+ - - - $ openstack subnet create worker_subnet --network worker_network --subnet-range 10.0.1.0/24 - +-------------------+--------------------------------------+ - | Field | Value | - +-------------------+--------------------------------------+ - | allocation_pools | 10.0.1.2-10.0.1.254 | - | cidr | 10.0.1.0/24 | - | created_at | 2016-11-06T22:34:47Z | - | description | | - | dns_nameservers | | - | enable_dhcp | True | - | gateway_ip | 10.0.1.1 | - | headers | | - | host_routes | | - | id | 383309b3-184d-4060-a151-a73dcb0606db | - | ip_version | 4 | - | ipv6_address_mode | None | - | ipv6_ra_mode | None | - | name | worker_subnet | - | network_id | 4d25ff64-eec3-4ab6-9029-f6d4b5a3e127 | - | project_id | a59a543373bc4b12b74f07355ad1cabe | - | revision_number | 2 | - | service_types | | - | subnetpool_id | None | - | updated_at | 2016-11-06T22:34:47Z | - +-------------------+--------------------------------------+ - - -Now, create a network and subnet for the web servers. - -:: - - $ openstack network create webserver_network - +---------------------------+--------------------------------------+ - | Field | Value | - +---------------------------+--------------------------------------+ - | admin_state_up | UP | - | availability_zone_hints | | - | availability_zones | | - | created_at | 2016-11-06T22:36:19Z | - | description | | - | headers | | - | id | 2410c262-6c27-4e99-8c31-045b60499a01 | - | ipv4_address_scope | None | - | ipv6_address_scope | None | - | mtu | 1450 | - | name | webserver_network | - | port_security_enabled | True | - | project_id | a59a543373bc4b12b74f07355ad1cabe | - | provider:network_type | vxlan | - | provider:physical_network | None | - | provider:segmentation_id | 96 | - | revision_number | 3 | - | router:external | Internal | - | shared | False | - | status | ACTIVE | - | subnets | | - | tags | [] | - | updated_at | 2016-11-06T22:36:19Z | - +---------------------------+--------------------------------------+ - - $ openstack subnet create webserver_subnet --network webserver_network --subnet-range 10.0.2.0/24 - +-------------------+--------------------------------------+ - | Field | Value | - +-------------------+--------------------------------------+ - | allocation_pools | 10.0.2.2-10.0.2.254 | - | cidr | 10.0.2.0/24 | - | created_at | 2016-11-06T22:37:47Z | - | description | | - | dns_nameservers | | - | enable_dhcp | True | - | gateway_ip | 10.0.2.1 | - | headers | | - | host_routes | | - | id | 5878afa5-8f1d-4de5-8018-530044a49934 | - | ip_version | 4 | - | ipv6_address_mode | None | - | ipv6_ra_mode | None | - | name | webserver_subnet | - | network_id | 2410c262-6c27-4e99-8c31-045b60499a01 | - | project_id | a59a543373bc4b12b74f07355ad1cabe | - | revision_number | 2 | - | service_types | | - | subnetpool_id | None | - | updated_at | 2016-11-06T22:37:47Z | - +-------------------+--------------------------------------+ - - -Next, create a network and subnet for the API servers. - -:: - - $ openstack network create api_network - +---------------------------+--------------------------------------+ - | Field | Value | - +---------------------------+--------------------------------------+ - | admin_state_up | UP | - | availability_zone_hints | | - | availability_zones | | - | created_at | 2016-11-06T22:38:51Z | - | description | | - | headers | | - | id | 8657f3a3-6e7d-40a1-a979-1a8c54d5e434 | - | ipv4_address_scope | None | - | ipv6_address_scope | None | - | mtu | 1450 | - | name | api_network | - | port_security_enabled | True | - | project_id | a59a543373bc4b12b74f07355ad1cabe | - | provider:network_type | vxlan | - | provider:physical_network | None | - | provider:segmentation_id | 64 | - | revision_number | 3 | - | router:external | Internal | - | shared | False | - | status | ACTIVE | - | subnets | | - | tags | [] | - | updated_at | 2016-11-06T22:38:51Z | - +---------------------------+--------------------------------------+ - - $ openstack subnet create api_subnet --network api_network --subnet-range 10.0.3.0/24 - +-------------------+--------------------------------------+ - | Field | Value | - +-------------------+--------------------------------------+ - | allocation_pools | 10.0.3.2-10.0.3.254 | - | cidr | 10.0.3.0/24 | - | created_at | 2016-11-06T22:40:15Z | - | description | | - | dns_nameservers | | - | enable_dhcp | True | - | gateway_ip | 10.0.3.1 | - | headers | | - | host_routes | | - | id | 614e7801-eb35-45c6-8e49-da5bdc9161f5 | - | ip_version | 4 | - | ipv6_address_mode | None | - | ipv6_ra_mode | None | - | name | api_subnet | - | network_id | 8657f3a3-6e7d-40a1-a979-1a8c54d5e434 | - | project_id | a59a543373bc4b12b74f07355ad1cabe | - | revision_number | 2 | - | service_types | | - | subnetpool_id | None | - | updated_at | 2016-11-06T22:40:15Z | - +-------------------+--------------------------------------+ - - -Now that you have got the networks created, go ahead and create two -Floating IPs, for web servers. Ensure that you replace 'public' with -the name of the public/external network offered by your cloud provider. - -:: - - $ openstack floating ip create public - +---------------------+--------------------------------------+ - | Field | Value | - +---------------------+--------------------------------------+ - | created_at | 2016-11-06T22:47:30Z | - | description | | - | fixed_ip_address | None | - | floating_ip_address | 172.24.4.2 | - | floating_network_id | 27e6fa33-fd39-475e-b048-6ac924972a03 | - | headers | | - | id | 820385df-36a7-415d-955c-6ff662fdb796 | - | port_id | None | - | project_id | a59a543373bc4b12b74f07355ad1cabe | - | revision_number | 1 | - | router_id | None | - | status | DOWN | - | updated_at | 2016-11-06T22:47:30Z | - +---------------------+--------------------------------------+ - - - $ openstack floating ip create public - +---------------------+--------------------------------------+ - | Field | Value | - +---------------------+--------------------------------------+ - | created_at | 2016-11-06T22:48:45Z | - | description | | - | fixed_ip_address | None | - | floating_ip_address | 172.24.4.12 | - | floating_network_id | 27e6fa33-fd39-475e-b048-6ac924972a03 | - | headers | | - | id | 3d9f1591-a31e-4684-8346-f4bb33a176b0 | - | port_id | None | - | project_id | a59a543373bc4b12b74f07355ad1cabe | - | revision_number | 1 | - | router_id | None | - | status | DOWN | - | updated_at | 2016-11-06T22:48:45Z | - +---------------------+--------------------------------------+ - - -.. note:: The world is running out of IPv4 addresses. If you get the - "No more IP addresses available on network" error, - contact your cloud administrator. You may also want to ask - about IPv6 :) - - -Connecting to the Internet -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Most instances require access to the Internet. The instances in your -Fractals app are no exception! Add routers to pass traffic between the -various networks that you use. - -:: - - $ openstack router create project_router - +-------------------------+--------------------------------------+ - | Field | Value | - +-------------------------+--------------------------------------+ - | admin_state_up | UP | - | availability_zone_hints | | - | availability_zones | | - | created_at | 2016-11-06T22:49:59Z | - | description | | - | distributed | False | - | external_gateway_info | null | - | flavor_id | None | - | ha | False | - | headers | | - | id | e11eba23-961c-43d7-8da0-561abdad880c | - | name | project_router | - | project_id | a59a543373bc4b12b74f07355ad1cabe | - | revision_number | 2 | - | routes | | - | status | ACTIVE | - | updated_at | 2016-11-06T22:49:59Z | - +-------------------------+--------------------------------------+ - - -Specify an external gateway for your router to tell OpenStack which -network to use for Internet access. - -:: - - $ openstack router set project_router --external-gateway public - Set gateway for router project_router - - $ openstack router show project_router - +-------------------------+-------------------------------------------------------------------------+ - | Field | Value | - +-------------------------+-------------------------------------------------------------------------+ - | admin_state_up | UP | - | availability_zone_hints | | - | availability_zones | nova | - | created_at | 2016-11-06T22:49:59Z | - | description | | - | distributed | False | - | external_gateway_info | {"network_id": "27e6fa33-fd39-475e-b048-6ac924972a03", "enable_snat": | - | | true, "external_fixed_ips": [{"subnet_id": | - | | "d02006a5-3d10-41f1-a349-6024af41cda0", "ip_address": "172.24.4.13"}, | - | | {"subnet_id": "b12293c9-a1f4-49e3-952f-136a5dd24980", "ip_address": | - | | "2001:db8::9"}]} | - | flavor_id | None | - | ha | False | - | id | e11eba23-961c-43d7-8da0-561abdad880c | - | name | project_router | - | project_id | a59a543373bc4b12b74f07355ad1cabe | - | revision_number | 5 | - | routes | | - | status | ACTIVE | - | updated_at | 2016-11-06T22:53:04Z | - +-------------------------+-------------------------------------------------------------------------+ - -Now, attach your router to the worker, API, and web server subnets. - -:: - - $ openstack router add subnet project_router worker_subnet - - $ openstack router add subnet project_router api_subnet - - $ openstack router add subnet project_router webserver_subnet - -Booting a worker ----------------- - -Now that you have prepared the networking infrastructure, you can go -ahead and boot an instance on it. Ensure you use appropriate flavor -and image values for your cloud - see :doc:`getting_started` if you have not -already. - -.. todo:: Show how to create an instance in libcloud using the network - we just created. - libcloud does not yet support this. - -:: - - $ nova boot --flavor m1.tiny --image cirros-0.3.3-x86_64-disk --nic net-id=953224c6-c510-45c5-8a29-37deffd3d78e worker1 - +--------------------------------------+-----------------------------------------------------------------+ - | Property | Value | - +--------------------------------------+-----------------------------------------------------------------+ - | OS-DCF:diskConfig | MANUAL | - | OS-EXT-AZ:availability_zone | nova | - | OS-EXT-STS:power_state | 0 | - | OS-EXT-STS:task_state | scheduling | - | OS-EXT-STS:vm_state | building | - | OS-SRV-USG:launched_at | - | - | OS-SRV-USG:terminated_at | - | - | accessIPv4 | | - | accessIPv6 | | - | adminPass | 9vU8KSY4oDht | - | config_drive | | - | created | 2015-03-30T05:26:04Z | - | flavor | m1.tiny (1) | - | hostId | | - | id | 9e188a47-a246-463e-b445-027d6e2966e0 | - | image | cirros-0.3.3-x86_64-disk (ad605ff9-4593-4048-900b-846d6401c193) | - | key_name | - | - | metadata | {} | - | name | worker1 | - | os-extended-volumes:volumes_attached | [] | - | progress | 0 | - | security_groups | default | - | status | BUILD | - | tenant_id | f77bf3369741408e89d8f6fe090d29d2 | - | updated | 2015-03-30T05:26:04Z | - | user_id | a61292a5691d4c6c831b7a8f07921261 | - +--------------------------------------+-----------------------------------------------------------------+ - -Load balancing -~~~~~~~~~~~~~~ - -After separating the Fractal worker nodes into their own networks, the -next logical step is to move the Fractal API service to a load -balancer, so that multiple API workers can handle requests. By using a -load balancer, the API service can be scaled out in a similar fashion -to the worker nodes. - -Neutron LbaaS API ------------------ - -.. note:: This section is based on the Neutron LBaaS API version 1.0 - https://docs.openstack.org/admin-guide/networking_adv-features.html#basic-load-balancer-as-a-service-operations - -.. todo:: libcloud support added 0.14: - https://developer.rackspace.com/blog/libcloud-0-dot-14-released/ - - this section needs rewriting to use the libcloud API - -The OpenStack Networking API provides support for creating -loadbalancers, which can be used to scale the Fractal app web service. -In the following example, we create two compute instances via the -Compute API, then instantiate a load balancer that will use a virtual -IP (VIP) for accessing the web service offered by the two compute -nodes. The end result will be the following network topology: - -.. nwdiag:: - - nwdiag { - - network public { - address = "203.0.113.0/24" - tenant_router [ address = "203.0.113.60" ]; - loadbalancer [ address = "203.0.113.63" ]; - } - - network webserver_network { - address = "10.0.2.0/24" - tenant_router [ address = "10.0.2.1"]; - webserver1 [ address = "203.0.113.21, 10.0.2.3"]; - webserver2 [ address = "203.0.113.22, 10.0.2.4"]; - } - } - -libcloud support added 0.14: -https://developer.rackspace.com/blog/libcloud-0-dot-14-released/ - -Start by looking at what is already in place. - -:: - - $ openstack network list - +--------------------------------------+-------------------+---------------------------------------+ - | ID | Name | Subnets | - +--------------------------------------+-------------------+---------------------------------------+ - | 2410c262-6c27-4e99-8c31-045b60499a01 | webserver_network | 5878afa5-8f1d-4de5-8018-530044a49934 | - | 27e6fa33-fd39-475e-b048-6ac924972a03 | public | b12293c9-a1f4-49e3-952f-136a5dd24980, | - | | | d02006a5-3d10-41f1-a349-6024af41cda0 | - +--------------------------------------+-------------------+---------------------------------------+ - -Go ahead and create two instances. - -:: - - $ nova boot --flavor 1 --image 53ff0943-99ba-42d2-a10d-f66656372f87 --min-count 2 test - +--------------------------------------+-----------------------------------------------------------------+ - | Property | Value | - +--------------------------------------+-----------------------------------------------------------------+ - | OS-DCF:diskConfig | MANUAL | - | OS-EXT-AZ:availability_zone | nova | - | OS-EXT-STS:power_state | 0 | - | OS-EXT-STS:task_state | scheduling | - | OS-EXT-STS:vm_state | building | - | OS-SRV-USG:launched_at | - | - | OS-SRV-USG:terminated_at | - | - | accessIPv4 | | - | accessIPv6 | | - | adminPass | z84zWFCcpppH | - | config_drive | | - | created | 2015-04-02T02:45:09Z | - | flavor | m1.tiny (1) | - | hostId | | - | id | 8d579f4a-116d-46b9-8db3-aa55b76f76d8 | - | image | cirros-0.3.3-x86_64-disk (53ff0943-99ba-42d2-a10d-f66656372f87) | - | key_name | - | - | metadata | {} | - | name | test-1 | - | os-extended-volumes:volumes_attached | [] | - | progress | 0 | - | security_groups | default | - | status | BUILD | - | tenant_id | 0cb06b70ef67424b8add447415449722 | - | updated | 2015-04-02T02:45:09Z | - | user_id | d95381d331034e049727e2413efde39f | - +--------------------------------------+-----------------------------------------------------------------+ - -Confirm that they were added: - -:: - - $ nova list - +--------------------------------------+--------+--------+------------+-------------+------------------+ - | ID | Name | Status | Task State | Power State | Networks | - +--------------------------------------+--------+--------+------------+-------------+------------------+ - | 8d579f4a-116d-46b9-8db3-aa55b76f76d8 | test-1 | ACTIVE | - | Running | private=10.0.2.4 | - | 8fadf892-b6e9-44f4-b132-47c6762ffa2c | test-2 | ACTIVE | - | Running | private=10.0.2.3 | - +--------------------------------------+--------+--------+------------+-------------+------------------+ - -Look at which ports are available: - -:: - - $ openstack port list - +--------------------------------------+------+-------------------+--------------------------------------------+ - | ID | Name | MAC Address | Fixed IP Addresses | - +--------------------------------------+------+-------------------+--------------------------------------------+ - | 11b38c90-f55e-41a7-b68b-0d434d66bfa2 | | fa:16:3e:21:95:a1 | ip_address='10.0.0.1', subnet_id='e7f75523 | - | | | | -ae4b-4611-85a3-07efa2e1ba0f' | - | 523331cf-5636-4298-a14c-f545bb32abcf | | fa:16:3e:f8:a1:81 | ip_address='10.0.0.2', subnet_id='e7f75523 | - | | | | -ae4b-4611-85a3-07efa2e1ba0f' | - | | | | ip_address='2001:db8:8000:0:f816:3eff:fef8 | - | | | | :a181', subnet_id='f8628fd8-8d61-43e2-9dc8 | - | | | | -a03d25443b7d' | - | cbba0f37-c1a0-4fc8-8722-68e42de7df16 | | fa:16:3e:39:a6:18 | ip_address='2001:db8:8000::1', subnet_id=' | - | | | | f8628fd8-8d61-43e2-9dc8-a03d25443b7d' | - +--------------------------------------+------+-------------------+--------------------------------------------+ - - - -Next, create additional floating IPs. Specify the fixed IP addresses -they should point to and the ports that they should use: - -:: - - $ openstack floating ip create public --fixed-ip-address 10.0.0.2 --port 523331cf-5636-4298-a14c-f545bb32abcf - +---------------------+--------------------------------------+ - | Field | Value | - +---------------------+--------------------------------------+ - | created_at | 2016-11-06T23:23:29Z | - | description | | - | fixed_ip_address | 10.0.0.2 | - | floating_ip_address | 172.24.4.2 | - | floating_network_id | 27e6fa33-fd39-475e-b048-6ac924972a03 | - | headers | | - | id | 0ed15644-4290-4adf-91d4-5713eea895e5 | - | port_id | 523331cf-5636-4298-a14c-f545bb32abcf | - | project_id | 3d2db0593c8045a392fd18385b401b5b | - | revision_number | 1 | - | router_id | 309d1402-a373-4022-9ab8-6824aad1a415 | - | status | DOWN | - | updated_at | 2016-11-06T23:23:29Z | - +---------------------+--------------------------------------+ - - $ openstack floating ip create public --fixed-ip-address 10.0.2.4 --port 462c92c6-941c-48ab-8cca-3c7a7308f580 - +---------------------+--------------------------------------+ - | Field | Value | - +---------------------+--------------------------------------+ - | created_at | 2016-11-06T23:25:26Z | - | description | | - | fixed_ip_address | 10.0.0.1 | - | floating_ip_address | 172.24.4.8 | - | floating_network_id | 27e6fa33-fd39-475e-b048-6ac924972a03 | - | headers | | - | id | 68082405-82f2-4072-b5c3-7047df527a8a | - | port_id | 11b38c90-f55e-41a7-b68b-0d434d66bfa2 | - | project_id | 3d2db0593c8045a392fd18385b401b5b | - | revision_number | 1 | - | router_id | 309d1402-a373-4022-9ab8-6824aad1a415 | - | status | DOWN | - | updated_at | 2016-11-06T23:25:26Z | - +---------------------+--------------------------------------+ - - -You are ready to create members for the load balancer pool, which -reference the floating IPs: - -:: - - $ neutron lb-member-create --address 203.0.113.21 --protocol-port 80 mypool - Created a new member: - +--------------------+--------------------------------------+ - | Field | Value | - +--------------------+--------------------------------------+ - | address | 203.0.113.21 | - | admin_state_up | True | - | id | 679966a9-f719-4df0-86cf-3a24d0433b38 | - | pool_id | 600496f0-196c-431c-ae35-a0af9bb01d32 | - | protocol_port | 80 | - | status | PENDING_CREATE | - | status_description | | - | tenant_id | 0cb06b70ef67424b8add447415449722 | - | weight | 1 | - +--------------------+--------------------------------------+ - - $ neutron lb-member-create --address 203.0.113.22 --protocol-port 80 mypool - Created a new member: - +--------------------+--------------------------------------+ - | Field | Value | - +--------------------+--------------------------------------+ - | address | 203.0.113.22 | - | admin_state_up | True | - | id | f3ba0605-4926-4498-b86d-51002892e93a | - | pool_id | 600496f0-196c-431c-ae35-a0af9bb01d32 | - | protocol_port | 80 | - | status | PENDING_CREATE | - | status_description | | - | tenant_id | 0cb06b70ef67424b8add447415449722 | - | weight | 1 | - +--------------------+--------------------------------------+ - -You should be able to see them in the member list: - -:: - - $ neutron lb-member-list - +--------------------------------------+--------------+---------------+--------+----------------+--------+ - | id | address | protocol_port | weight | admin_state_up | status | - +--------------------------------------+--------------+---------------+--------+----------------+--------+ - | 679966a9-f719-4df0-86cf-3a24d0433b38 | 203.0.113.21 | 80 | 1 | True | ACTIVE | - | f3ba0605-4926-4498-b86d-51002892e93a | 203.0.113.22 | 80 | 1 | True | ACTIVE | - +--------------------------------------+--------------+---------------+--------+----------------+--------+ - -Now, create a health monitor that will ensure that members of the -load balancer pool are active and able to respond to requests. If a -member in the pool dies or is unresponsive, the member is removed from -the pool so that client requests are routed to another active member. - -:: - - $ neutron lb-healthmonitor-create --delay 3 --type HTTP --max-retries 3 --timeout 3 - Created a new health_monitor: - +----------------+--------------------------------------+ - | Field | Value | - +----------------+--------------------------------------+ - | admin_state_up | True | - | delay | 3 | - | expected_codes | 200 | - | http_method | GET | - | id | 663345e6-2853-43b2-9ccb-a623d5912345 | - | max_retries | 3 | - | pools | | - | tenant_id | 0cb06b70ef67424b8add447415449722 | - | timeout | 3 | - | type | HTTP | - | url_path | / | - +----------------+--------------------------------------+ - $ neutron lb-healthmonitor-associate 663345e6-2853-43b2-9ccb-a623d5912345 mypool - Associated health monitor 663345e6-2853-43b2-9ccb-a623d5912345 - -Now create a virtual IP that will be used to direct traffic between -the various members of the pool: - -:: - - $ neutron lb-vip-create --name myvip --protocol-port 80 --protocol HTTP --subnet-id 47fd3ff1-ead6-4d23-9ce6-2e66a3dae425 mypool - Created a new vip: - +---------------------+--------------------------------------+ - | Field | Value | - +---------------------+--------------------------------------+ - | address | 203.0.113.63 | - | admin_state_up | True | - | connection_limit | -1 | - | description | | - | id | f0bcb66e-5eeb-447b-985e-faeb67540c2f | - | name | myvip | - | pool_id | 600496f0-196c-431c-ae35-a0af9bb01d32 | - | port_id | bc732f81-2640-4622-b624-993a5ae185c5 | - | protocol | HTTP | - | protocol_port | 80 | - | session_persistence | | - | status | PENDING_CREATE | - | status_description | | - | subnet_id | 47fd3ff1-ead6-4d23-9ce6-2e66a3dae425 | - | tenant_id | 0cb06b70ef67424b8add447415449722 | - +---------------------+--------------------------------------+ - -And confirm it is in place: - -:: - - $ neutron lb-vip-list - +--------------------------------------+-------+--------------+----------+----------------+--------+ - | id | name | address | protocol | admin_state_up | status | - +--------------------------------------+-------+--------------+----------+----------------+--------+ - | f0bcb66e-5eeb-447b-985e-faeb67540c2f | myvip | 203.0.113.63 | HTTP | True | ACTIVE | - +--------------------------------------+-------+--------------+----------+----------------+--------+ - -Now, look at the big picture. - -Final result -~~~~~~~~~~~~ - -With the addition of the load balancer, the Fractal app's networking -topology now reflects the modular nature of the application itself. - - -.. nwdiag:: - - nwdiag { - - network public { - address = "203.0.113.0/24" - tenant_router [ address = "203.0.113.60"]; - loadbalancer [ address = "203.0.113.63" ]; - } - - network webserver_network{ - address = "10.0.2.0/24" - tenant_router [ address = "10.0.2.1"]; - webserver1 [ address = "203.0.113.21, 10.0.2.3"]; - webserver2 [ address = "203.0.113.22, 10.0.2.4"]; - } - network api_network { - address = "10.0.3.0/24" - tenant_router [ address = "10.0.3.1" ]; - api1 [ address = "10.0.3.3" ]; - api2 [ address = "10.0.3.4" ]; - } - - network worker_network { - address = "10.0.1.0/24" - tenant_router [ address = "10.0.1.1" ]; - worker1 [ address = "10.0.1.5" ]; - worker2 [ address = "10.0.1.6" ]; - } - } - - -Next steps -~~~~~~~~~~ - -You should now be fairly confident working with the Network API. To -see calls that we did not cover, see the volume documentation of your -SDK, or try one of these tutorial steps: - -* :doc:`/advice`: Get advice about operations. -* :doc:`/craziness`: Learn some crazy things that you might not think to do ;) diff --git a/firstapp/source/orchestration.rst b/firstapp/source/orchestration.rst deleted file mode 100644 index 73b377e88..000000000 --- a/firstapp/source/orchestration.rst +++ /dev/null @@ -1,501 +0,0 @@ -============= -Orchestration -============= - -This chapter explains the importance of durability and scalability for -your cloud-based applications. In most cases, really achieving these -qualities means automating tasks such as scaling and other operational -tasks. - -The Orchestration service provides a template-based way to describe a -cloud application, then coordinates running the needed OpenStack API -calls to run cloud applications. The templates enable you to create -most OpenStack resource types, such as instances, networking -information, volumes, security groups, and even users. It also provides -more advanced functionality, such as instance high availability, -instance auto-scaling, and nested stacks. - -The OpenStack Orchestration API uses the stacks, resources, and templates -constructs. - -You create stacks from templates, which contain resources. Resources are an -abstraction in the HOT (Heat Orchestration Template) template language, which -enables you to define different cloud resources by setting the :code:`type` -attribute. - -For example, you might use the Orchestration API to create two compute -instances by creating a stack and by passing a template to the Orchestration -API. That template contains two resources with the :code:`type` attribute set -to :code:`OS::Nova::Server`. - -That example is simplistic, of course, but the flexibility of the resource -object enables the creation of templates that contain all the required cloud -infrastructure to run an application, such as load balancers, block storage -volumes, compute instances, networking topology, and security policies. - -.. note:: The Orchestration service is not deployed by default in every cloud. - If these commands do not work, it means the Orchestration API is not - available; ask your support team for assistance. - -This section introduces the -`HOT templating language `_, -and takes you through some common OpenStack Orchestration calls. - -In previous sections, you used your SDK to programmatically interact with -OpenStack. In this section, you use the 'heat' command-line client to access -the Orchestration API directly through template files. - -Install the 'heat' command-line client by following this guide: -https://docs.openstack.org/cli-reference/common/cli_install_openstack_command_line_clients.html#install-the-clients - -Use this guide to set up the necessary variables for your cloud in an -'openrc' file: -https://docs.openstack.org/cli-reference/common/cli_set_environment_variables_using_openstack_rc.html - -.. only:: dotnet - - .. warning:: the .NET SDK does not currently support OpenStack Orchestration. - -.. only:: fog - - .. note:: fog `does support OpenStack Orchestration - `_. - -.. only:: jclouds - - .. warning:: Jclouds does not currently support OpenStack Orchestration. - See this `bug report `_. - -.. only:: libcloud - - .. warning:: libcloud does not currently support OpenStack Orchestration. - -.. only:: pkgcloud - - .. note:: Pkgcloud supports OpenStack Orchestration :D:D:D but this section - is `not written yet `_ - -.. only:: openstacksdk - - .. warning:: The OpenStack SDK does not currently support OpenStack Orchestration. - -.. only:: phpopencloud - - .. note:: PHP-opencloud supports OpenStack Orchestration :D:D:D but this section is not written yet. - -HOT templating language ------------------------ - -To learn about the template syntax for OpenStack Orchestration, how to -create basic templates, and their inputs and outputs, see -`Heat Orchestration Template (HOT) Guide `_. - -Work with stacks: Basics ------------------------- - -**Stack create** - -The -`hello_faafo `_ Hot template demonstrates -how to create a compute instance that builds and runs the Fractal application -as an all-in-one installation. - -You pass in these configuration settings as parameters: - -- The flavor -- Your ssh key name -- The unique identifier (UUID) of the image - -.. code-block:: console - - $ wget https://opendev.org/openstack/api-site/raw/firstapp/samples/heat/hello_faafo.yaml - $ openstack stack create -t hello_faafo.yaml \ - --parameter flavor=m1.small\;key_name=test\;image_id=5bbe4073-90c0-4ec9-833c-092459cc4539 hello_faafo - +---------------------+-----------------------------------------------------------------------+ - | Field | Value | - +---------------------+-----------------------------------------------------------------------+ - | id | 0db2c026-fb9a-4849-b51d-b1df244096cd | - | stack_name | hello_faafo | - | description | A template to bring up the faafo application as an all in one install | - | | | - | creation_time | 2015-04-01T03:20:25 | - | updated_time | None | - | stack_status | CREATE_IN_PROGRESS | - | stack_status_reason | | - +---------------------+-----------------------------------------------------------------------+ - -The stack automatically creates a Nova instance, as follows: - -.. code-block:: console - - $ nova list - +--------------------------------------+---------------------------------+--------+------------+-------------+------------------+ - | ID | Name | Status | Task State | Power State | Networks | - +--------------------------------------+---------------------------------+--------+------------+-------------+------------------+ - | 9bdf0e2f-415e-43a0-90ea-63a5faf86cf9 | hello_faafo-server-dwmwhzfxgoor | ACTIVE | - | Running | private=10.0.0.3 | - +--------------------------------------+---------------------------------+--------+------------+-------------+------------------+ - -Verify that the stack was successfully created: - -.. code-block:: console - - $ openstack stack list - +--------------------------------------+-------------+-----------------+---------------------+--------------+ - | ID | Stack Name | Stack Status | Creation Time | Updated Time | - +--------------------------------------+-------------+-----------------+---------------------+--------------+ - | 0db2c026-fb9a-4849-b51d-b1df244096cd | hello_faafo | CREATE_COMPLETE | 2015-04-01T03:20:25 | None | - +--------------------------------------+-------------+-----------------+---------------------+--------------+ - -The stack reports an initial :code:`CREATE_IN_PROGRESS` status. When all -software is installed, the status changes to :code:`CREATE_COMPLETE`. - -You might have to run the :command:`openstack stack list` command a few -times before the stack creation is complete. - -**Show information about the stack** - -Get more information about the stack: - -.. code-block:: console - - $ openstack stack show hello_faafo - -The `outputs` property shows the URL through which you can access the Fractal -application. You can SSH into the instance. - -**Remove the stack** - -.. code-block:: console - - $ openstack stack delete hello_faafo - Are you sure you want to delete this stack(s) [y/N]? - -Verify the nova instance was deleted when the stack was removed: - -.. code-block:: console - - $ nova list - +----+------+--------+------------+-------------+----------+ - | ID | Name | Status | Task State | Power State | Networks | - +----+------+--------+------------+-------------+----------+ - +----+------+--------+------------+-------------+----------+ - -While this stack starts a single instance that builds and runs the Fractal -application as an all-in-one installation, you can make very complicated -templates that impact dozens of instances or that add and remove instances on -demand. Continue to the next section to learn more. - -Work with stacks: Advanced - -With the Orchestration API, the Fractal application can create an auto-scaling -group for all parts of the application, to dynamically provision more compute -resources during periods of heavy utilization, and also terminate compute -instances to scale down, as demand decreases. - -To learn about auto-scaling with the Orchestration API, read these articles: - -* https://superuser.openstack.org/articles/simple-auto-scaling-environment-with-heat -* https://superuser.openstack.org/articles/understanding-openstack-heat-auto-scaling - -Initially, the focus is on scaling the workers because they consume the most -resources. - -The example template depends on the ceilometer project, which is part of the -`Telemetry service `_. - -.. note:: The Telemetry service is not deployed by default in every cloud. - If the ceilometer commands do not work, this example does not work; - ask your support team for assistance. - -To better understand how the template works, use this guide to install the -'ceilometer' command-line client: - -* https://docs.openstack.org/cli-reference/common/cli_install_openstack_command_line_clients.html#install-the-clients - -To set up the necessary variables for your cloud in an 'openrc' file, use this -guide: - -* https://docs.openstack.org/cli-reference/common/cli_set_environment_variables_using_openstack_rc.html - -The Telemetry service uses meters to measure a given aspect of a resources -usage. The meter that we are interested in is the :code:`cpu_util` meter. - -The value of a meter is regularly sampled and saved with a timestamp. - -These saved samples are aggregated to produce a statistic. The statistic that -we are interested in is **avg**: the average of the samples over a given period. - -We are interested because the Telemetry service supports alarms: an alarm is -fired when our average statistic breaches a configured threshold. When the -alarm fires, an associated action is performed. - -The stack we will be building uses the firing of alarms to control the -addition or removal of worker instances. - -To verify that ceilometer is installed, list the known meters: - -.. code-block:: console - - $ ceilometer meter-list - -This command returns a very long list of meters. Once a meter is created, it -is never thrown away! - -Launch the stack with auto-scaling workers: - -.. code-block:: console - - $ wget https://opendev.org/openstack/api-site/raw/firstapp/samples/heat/faafo_autoscaling_workers.yaml - $ openstack stack create -t faafo_autoscaling_workers.yaml \ - --parameters flavor=m1.small\;key_name=test\;image_id=5bbe4073-90c0-4ec9-833c-092459cc4539 \ - faafo_autoscaling_workers - +---------------------+-----------------------------------------------------------------------+ - | Field | Value | - +---------------------+-----------------------------------------------------------------------+ - | id | 0db2c026-fb9a-4849-b51d-b1df244096cd | - | stack_name | faafo_autoscaling_workers | - | description | A template to bring up the faafo application as an all in one install | - | | | - | creation_time | 2015-11-17T05:12:06 | - | updated_time | None | - | stack_status | CREATE_IN_PROGRESS | - | stack_status_reason | | - +---------------------+-----------------------------------------------------------------------+ - - -As before, pass in configuration settings as parameters. - -And as before, the stack takes a few minutes to build! - -Wait for it to reach the :code:`CREATE_COMPLETE` status: - -.. code-block:: console - - $ openstack stack list - +--------------------------------------+---------------------------+-----------------+---------------------+--------------+ - | ID | Stack Name | Stack Status | Creation Time | Updated Time | - +--------------------------------------+---------------------------+-----------------+---------------------+--------------+ - | 0db2c026-fb9a-4849-b51d-b1df244096cd | faafo_autoscaling_workers | CREATE_COMPLETE | 2015-11-17T05:12:06 | None | - +--------------------------------------+---------------------------+-----------------+---------------------+--------------+ - -Run the :code:`nova list` command. This template created three instances: - -.. code-block:: console - - $ nova list - +--------------------------------------+----------+--------+------------+-------------+----------------------+ - | ID | Name | Status | Task State | Power State | Networks | - +--------------------------------------+----------+--------+------------+-------------+----------------------+ - | 0de89b0a-5bfd-497b-bfa2-c13f6ef7a67e | api | ACTIVE | - | Running | public=115.146.89.75 | - | a6b9b334-e8ba-4c56-ab53-cacfc6f3ad43 | services | ACTIVE | - | Running | public=115.146.89.74 | - | 10122bfb-881b-4122-9955-7e801dfc5a22 | worker | ACTIVE | - | Running | public=115.146.89.80 | - +--------------------------------------+----------+--------+------------+-------------+----------------------+ - -Note that the worker instance is part of an :code:`OS::Heat::AutoScalingGroup`. - -Confirm that the stack created two alarms: - -.. code-block:: console - - $ ceilometer alarm-list - +--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+ - | Alarm ID | Name | State | Severity | Enabled | Continuous | Alarm condition | Time constraints | - +--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+ - | 2bc8433f-9f8a-4c2c-be88-d841d9de1506 | testFaafo-cpu_alarm_low-torkcwquons4 | ok | low | True | True | cpu_util < 15.0 during 1 x 60s | None | - | 7755cc9a-26f3-4e2b-a9af-a285ec8524da | testFaafo-cpu_alarm_high-qqtbvk36l6nq | ok | low | True | True | cpu_util > 90.0 during 1 x 60s | None | - +--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+ - -.. note:: If either alarm reports the :code:`insufficient data` state, the - default sampling period of the stack is probably too low for your - cloud; ask your support team for assistance. You can set the - period through the :code:`period` parameter of the stack to match your - clouds requirements. - -Use the stack ID to get more information about the stack: - -.. code-block:: console - - $ openstack stack show 0db2c026-fb9a-4849-b51d-b1df244096cd - -The outputs section of the stack contains two ceilometer command-line queries: - -* :code:`ceilometer_sample_query`: shows the samples used to build the statistics. -* :code:`ceilometer_statistics_query`: shows the statistics used to trigger the alarms. - -These queries provide a view into the behavior of the stack. - -In a new Terminal window, SSH into the 'api' API instance. Use the key pair -name that you passed in as a parameter. - -.. code-block:: console - - $ ssh -i ~/.ssh/test USERNAME@IP_API - - -In your SSH session, confirm that no fractals were generated: - -.. code-block:: console - - $ faafo list - 201-11-18 11:07:20.464 8079 INFO faafo.client [-] listing all fractals - +------+------------+----------+ - | UUID | Dimensions | Filesize | - +------+------------+----------+ - +------+------------+----------+ - -Then, create a pair of large fractals: - -.. code-block:: console - - $ faafo create --height 9999 --width 9999 --tasks 2 - -In the Terminal window where you run ceilometer, run -:code:`ceilometer_sample_query` to see the samples. - -.. code-block:: console - - $ ceilometer sample-list -m cpu_util -q metadata.user_metadata.stack=0db2c026-fb9a-4849-b51d-b1df244096cd - +--------------------------------------+----------+-------+----------------+------+---------------------+ - | Resource ID | Name | Type | Volume | Unit | Timestamp | - +--------------------------------------+----------+-------+----------------+------+---------------------+ - | 10122bfb-881b-4122-9955-7e801dfc5a22 | cpu_util | gauge | 100.847457627 | % | 2015-11-18T00:15:50 | - | 10122bfb-881b-4122-9955-7e801dfc5a22 | cpu_util | gauge | 82.4754098361 | % | 2015-11-18T00:14:51 | - | 10122bfb-881b-4122-9955-7e801dfc5a22 | cpu_util | gauge | 0.45 | % | 2015-11-18T00:13:50 | - | 10122bfb-881b-4122-9955-7e801dfc5a22 | cpu_util | gauge | 0.466666666667 | % | 2015-11-18T00:12:50 | - +--------------------------------------+----------+-------+----------------+------+---------------------+ - -The CPU utilization across workers increases as workers start to create the fractals. - -Run the :code:`ceilometer_statistics_query`: command to see the derived statistics. - -.. code-block:: console - - $ ceilometer statistics -m cpu_util -q metadata.user_metadata.stack=0db2c026-fb9a-4849-b51d-b1df244096cd -p 60 -a avg - +--------+---------------------+---------------------+----------------+----------+---------------------+---------------------+ - | Period | Period Start | Period End | Avg | Duration | Duration Start | Duration End | - +--------+---------------------+---------------------+----------------+----------+---------------------+---------------------+ - | 60 | 2015-11-18T00:12:45 | 2015-11-18T00:13:45 | 0.466666666667 | 0.0 | 2015-11-18T00:12:50 | 2015-11-18T00:12:50 | - | 60 | 2015-11-18T00:13:45 | 2015-11-18T00:14:45 | 0.45 | 0.0 | 2015-11-18T00:13:50 | 2015-11-18T00:13:50 | - | 60 | 2015-11-18T00:14:45 | 2015-11-18T00:15:45 | 82.4754098361 | 0.0 | 2015-11-18T00:14:51 | 2015-11-18T00:14:51 | - | 60 | 2015-11-18T00:15:45 | 2015-11-18T00:16:45 | 100.847457627 | 0.0 | 2015-11-18T00:15:50 | 2015-11-18T00:15:50 | - +--------+---------------------+---------------------+----------------+----------+---------------------+---------------------+ - -.. note:: The samples and the statistics are listed in opposite time order! - -See the state of the alarms set up by the template: - -.. code-block:: console - - $ ceilometer alarm-list - +--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+ - | Alarm ID | Name | State | Severity | Enabled | Continuous | Alarm condition | Time constraints | - +--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+ - | 56c3022e-f23c-49ad-bf59-16a6875f3bdf | testFaafo-cpu_alarm_low-miw5tmomewot | ok | low | True | True | cpu_util < 15.0 during 1 x 60s | None | - | 70ff7b00-d56d-4a43-bbb2-e18952ae6605 | testFaafo-cpu_alarm_high-ffhsmylfzx43 | alarm | low | True | True | cpu_util > 90.0 during 1 x 60s | None | - +--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+ - -Run the :code:`nova list` command to confirm that the -:code:`OS::Heat::AutoScalingGroup` has created more instances: - -.. code-block:: console - - $ nova list - +--------------------------------------+----------+--------+------------+-------------+----------------------+ - | ID | Name | Status | Task State | Power State | Networks | - +--------------------------------------+----------+--------+------------+-------------+----------------------+ - | 0de89b0a-5bfd-497b-bfa2-c13f6ef7a67e | api | ACTIVE | - | Running | public=115.146.89.96 | - | a6b9b334-e8ba-4c56-ab53-cacfc6f3ad43 | services | ACTIVE | - | Running | public=115.146.89.95 | - | 10122bfb-881b-4122-9955-7e801dfc5a22 | worker | ACTIVE | - | Running | public=115.146.89.97 | - | 31e7c020-c37c-4311-816b-be8afcaef8fa | worker | ACTIVE | - | Running | public=115.146.89.99 | - | 3fff2489-488c-4458-99f1-0cc50363ae33 | worker | ACTIVE | - | Running | public=115.146.89.98 | - +--------------------------------------+----------+--------+------------+-------------+----------------------+ - -Now, wait until all the fractals are generated and the instances have idled -for some time. - -Run the :code:`nova list` command to confirm that the -:code:`OS::Heat::AutoScalingGroup` removed the unneeded instances: - -.. code-block:: console - - $ nova list - +--------------------------------------+----------+--------+------------+-------------+----------------------+ - | ID | Name | Status | Task State | Power State | Networks | - +--------------------------------------+----------+--------+------------+-------------+----------------------+ - | 0de89b0a-5bfd-497b-bfa2-c13f6ef7a67e | api | ACTIVE | - | Running | public=115.146.89.96 | - | a6b9b334-e8ba-4c56-ab53-cacfc6f3ad43 | services | ACTIVE | - | Running | public=115.146.89.95 | - | 3fff2489-488c-4458-99f1-0cc50363ae33 | worker | ACTIVE | - | Running | public=115.146.89.98 | - +--------------------------------------+----------+--------+------------+-------------+----------------------+ - -.. note:: The :code:`OS::Heat::AutoScalingGroup` removes instances in creation order. - So the worker instance that was created first is the first instance - to be removed. - -In the outputs section of the stack, you can run these web API calls: - -* :code:`scale__workers_up_url`: A post to this url will add worker instances. -* :code:`scale_workers_down_url`: A post to this url will remove worker instances. - -These demonstrate how the Ceilometer alarms add and remove instances. -To use them: - -.. code-block:: console - - $ curl -X POST "Put the very long url from the template outputs section between these quotes" - -To recap: - -The auto-scaling stack sets up an API instance, a services instance, and an -auto-scaling group with a single worker instance. It also sets up ceilometer -alarms that add worker instances to the auto-scaling group when it is under -load, and removes instances when the group is idling. To do this, the alarms -post to URLs. - -In this template, the alarms use metadata that is attached to each worker -instance. The metadata is in the :code:`metering.stack=stack_id` format. - -The prefix is `metering.` For example, `metering.some_name`. - -.. code-block:: console - - $ nova show - ... - | metadata | {"metering.some_name": "some_value"} | - ... - -You can aggregate samples and calculate statistics across all instances with -the `metering.some_name` metadata that has `some_value` by using a query of -the form: - -.. code-block:: console - - -q metadata.user_metadata.some_name=some_value - -For example: - -.. code-block:: console - - $ ceilometer sample-list -m cpu_util -q metadata.user_metadata.some_name=some_value - $ ceilometer statistics -m cpu_util -q metadata.user_metadata.some_name=some_value -p 6 - -The alarms have the form: - -.. code-block:: console - - matching_metadata: {'metadata.user_metadata.stack': {get_param: "OS::stack_id"}} - -Spend some time playing with the stack and the Fractal app to see how it works. - -.. note:: The message queue can take a while to notice that worker instances have died. - -Next steps ----------- - -You should now be fairly confident working with the Orchestration -service. To see the calls that we did not cover and more, see the -volume documentation of your SDK. Or, try one of these steps in the -tutorial: - -* :doc:`/networking`: Learn about complex networking. -* :doc:`/advice`: Get advice about operations. -* :doc:`/craziness`: Learn some crazy things that you might not think to do ;) diff --git a/firstapp/source/scaling_out.rst b/firstapp/source/scaling_out.rst deleted file mode 100644 index abfd2d329..000000000 --- a/firstapp/source/scaling_out.rst +++ /dev/null @@ -1,536 +0,0 @@ -=========== -Scaling out -=========== - -.. todo:: For later versions of this guide: implement a service within - the fractals app that simply returns the CPU load on the - local server. Then add to this section a simple loop that - checks to see if any servers are overloaded and adds a new - one if they are. (Or do this through SSH and w) - -An often-cited reason for designing applications by using cloud -patterns is the ability to **scale out**. That is: to add additional -resources, as required. Contrast this strategy to the previous one of -increasing capacity by scaling up the size of existing resources. To -scale out, you must: - -* Architect your application to make use of additional resources. -* Make it possible to add new resources to your application. - -.. todo:: nickchase needs to restate the second point - -The :doc:`/introduction` section describes how to build in a modular -fashion, create an API, and other aspects of the application -architecture. Now you will see why those strategies are so important. -By creating a modular application with decoupled services, you can -identify components that cause application performance bottlenecks and -scale them out. Just as importantly, you can also remove resources -when they are no longer necessary. It is very difficult to overstate -the cost savings that this feature can bring, as compared to -traditional infrastructure. - -Of course, having access to additional resources is only part of the -game plan; while you can manually add or delete resources, you get -more value and more responsiveness if the application automatically -requests additional resources when it needs them. - -This section continues to illustrate the separation of services onto -multiple instances and highlights some of the choices that we have -made that facilitate scalability in the application architecture. - -You will progressively ramp up to use up six instances, so make sure that your -cloud account has the appropriate quota. - -The previous section uses two virtual machines - one 'control' service -and one 'worker'. The speed at which your application can generate -fractals depends on the number of workers. With just one worker, you -can produce only one fractal at a time. Before long, you will need more -resources. - -.. note:: If you do not have a working application, follow the steps in - :doc:`introduction` to create one. - -.. todo:: Ensure we have the controller_ip even if this is a new - python session. - -Generate load -~~~~~~~~~~~~~ - -To test what happens when the Fractals application is under load, you -can: - -* Load the worker: Create a lot of tasks to max out the CPU of existing - worker instances -* Load the API: Create a lot of API service requests - -Create more tasks ------------------ - -Use SSH with the existing SSH keypair to log in to the -:code:`app-controller` controller instance. - -.. code-block:: console - - $ ssh -i ~/.ssh/id_rsa USERNAME@IP_CONTROLLER - -.. note:: Replace :code:`IP_CONTROLLER` with the IP address of the - controller instance and USERNAME with the appropriate - user name. - -Call the :code:`faafo` command-line interface to request the -generation of five large fractals. - -.. code-block:: console - - $ faafo create --height 9999 --width 9999 --tasks 5 - -If you check the load on the worker, you can see that the instance is -not doing well. On the single CPU flavor instance, a load average -greater than 1 means that the server is at capacity. - -.. code-block:: console - - $ ssh -i ~/.ssh/id_rsa USERNAME@IP_WORKER uptime - 10:37:39 up 1:44, 2 users, load average: 1.24, 1.40, 1.36 - -.. note:: Replace :code:`IP_WORKER` with the IP address of the worker - instance and USERNAME with the appropriate user name. - - -Create more API service requests --------------------------------- - -API load is a slightly different problem than the previous one regarding -capacity to work. We can simulate many requests to the API, as follows: - -Use SSH with the existing SSH keypair to log in to the -:code:`app-controller` controller instance. - -.. code-block:: console - - $ ssh -i ~/.ssh/id_rsa USERNAME@IP_CONTROLLER - -.. note:: Replace :code:`IP_CONTROLLER` with the IP address of the - controller instance and USERNAME with the appropriate - user name. - -Use a for loop to call the :code:`faafo` command-line interface to -request a random set of fractals 500 times: - -.. code-block:: console - - $ for i in $(seq 1 500); do faafo --endpoint-url http://IP_CONTROLLER create & done - -.. note:: Replace :code:`IP_CONTROLLER` with the IP address of the - controller instance. - -If you check the load on the :code:`app-controller` API service -instance, you see that the instance is not doing well. On your single -CPU flavor instance, a load average greater than 1 means that the server is -at capacity. - -.. code-block:: console - - $ uptime - 10:37:39 up 1:44, 2 users, load average: 1.24, 1.40, 1.36 - -The sheer number of requests means that some requests for fractals -might not make it to the message queue for processing. To ensure that -you can cope with demand, you must also scale out the API capability -of the Fractals application. - -Scaling out -~~~~~~~~~~~ - -Remove the existing app ------------------------ - -Go ahead and delete the existing instances and security groups that -you created in previous sections. Remember, when instances in the -cloud are no longer working, remove them and re-create something new. - -.. only:: shade - - .. literalinclude:: ../samples/shade/scaling_out.py - :language: python - :start-after: step-1 - :end-before: step-2 - -.. only:: fog - - .. literalinclude:: ../samples/fog/scaling_out.rb - :language: ruby - :start-after: step-1 - :end-before: step-2 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/scaling_out.py - :start-after: step-1 - :end-before: step-2 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/ScalingOut.java - :language: java - :start-after: step-1 - :end-before: step-2 - - -Extra security groups ---------------------- - -As you change the topology of your applications, you must update or -create security groups. Here, you re-create the required security -groups. - -.. only:: shade - - .. literalinclude:: ../samples/shade/scaling_out.py - :language: python - :start-after: step-2 - :end-before: step-3 - -.. only:: fog - - .. literalinclude:: ../samples/fog/scaling_out.rb - :language: ruby - :start-after: step-2 - :end-before: step-3 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/scaling_out.py - :start-after: step-2 - :end-before: step-3 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/ScalingOut.java - :language: java - :start-after: step-2 - :end-before: step-3 - -A floating IP helper function ------------------------------ - -Define a short function to locate unused or allocate floating IPs. -This saves a few lines of code and prevents you from reaching your -floating IP quota too quickly. - -.. only:: shade - - .. literalinclude:: ../samples/shade/scaling_out.py - :language: python - :start-after: step-3 - :end-before: step-4 - -.. only:: fog - - .. literalinclude:: ../samples/fog/scaling_out.rb - :language: ruby - :start-after: step-3 - :end-before: step-4 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/scaling_out.py - :start-after: step-3 - :end-before: step-4 - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/ScalingOut.java - :language: java - :start-after: step-3 - :end-before: step-4 - -Split the database and message queue ------------------------------------- - -Before you scale out your application services, like the API service or the -workers, you must add a central database and an :code:`app-services` messaging -instance. The database and messaging queue will be used to track the state of -fractals and to coordinate the communication between the services. - -.. only:: shade - - .. literalinclude:: ../samples/shade/scaling_out.py - :language: python - :start-after: step-4 - :end-before: step-5 - -.. only:: fog - - .. literalinclude:: ../samples/fog/scaling_out.rb - :language: ruby - :start-after: step-4 - :end-before: step-5 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/scaling_out.py - :start-after: step-4 - :end-before: step-5 - - .. only:: jclouds - - .. literalinclude:: ../samples/jclouds/ScalingOut.java - :language: java - :start-after: step-4 - :end-before: step-5 - -Scale the API service ---------------------- - -With multiple workers producing fractals as fast as they can, the -system must be able to receive the requests for fractals as quickly as -possible. If our application becomes popular, many thousands of users -might connect to our API to generate fractals. - -Armed with a security group, image, and flavor size, you can add -multiple API services: - -.. only:: shade - - .. literalinclude:: ../samples/shade/scaling_out.py - :language: python - :start-after: step-5 - :end-before: step-6 - -.. only:: fog - - .. literalinclude:: ../samples/fog/scaling_out.rb - :language: ruby - :start-after: step-5 - :end-before: step-6 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/scaling_out.py - :start-after: step-5 - :end-before: step-6 - - .. only:: jclouds - - .. literalinclude:: ../samples/jclouds/ScalingOut.java - :language: java - :start-after: step-5 - :end-before: step-6 - -These services are client-facing, so unlike the workers they do not -use a message queue to distribute tasks. Instead, you must introduce -some kind of load balancing mechanism to share incoming requests -between the different API services. - -A simple solution is to give half of your friends one address and half -the other, but that solution is not sustainable. Instead, you can use -a `DNS round robin `_ -to do that automatically. However, OpenStack networking can provide -Load Balancing as a Service, which :doc:`/networking` explains. - -.. todo:: Add a note that we demonstrate this by using the first API - instance for the workers and the second API instance for the - load simulation. - - -Scale the workers ------------------ - -To increase the overall capacity, add three workers: - -.. only:: shade - - .. literalinclude:: ../samples/shade/scaling_out.py - :language: python - :start-after: step-6 - -.. only:: fog - - .. literalinclude:: ../samples/fog/scaling_out.rb - :language: ruby - :start-after: step-6 - :end-before: step-7 - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/scaling_out.py - :start-after: step-6 - :end-before: step-7 - - .. only:: jclouds - - .. literalinclude:: ../samples/jclouds/ScalingOut.java - :language: java - :start-after: step-6 - :end-before: step-7 - -Adding this capacity enables you to deal with a higher number of -requests for fractals. As soon as these worker instances start, they -begin checking the message queue for requests, reducing the overall -backlog like a new register opening in the supermarket. - -This process was obviously a very manual one. Figuring out that we -needed more workers and then starting new ones required some effort. -Ideally the system would do this itself. If you build your application -to detect these situations, you can have it automatically request and -remove resources, which saves you the effort of doing this work -yourself. Instead, the OpenStack Orchestration service can monitor -load and start instances, as appropriate. To find out how to set that -up, see :doc:`orchestration`. - -Verify that we have had an impact -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In the previous steps, you split out several services and expanded -capacity. To see the new features of the Fractals application, SSH to -one of the app instances and create a few fractals. - -.. code-block:: console - - $ ssh -i ~/.ssh/id_rsa USERNAME@IP_API_1 - -.. note:: Replace :code:`IP_API_1` with the IP address of the first - API instance and USERNAME with the appropriate user name. - -Use the :code:`faafo create` command to generate fractals. - -Use the :code:`faafo list` command to watch the progress of fractal -generation. - -Use the :code:`faafo UUID` command to examine some of the fractals. - -The `generated_by` field shows the worker that created the fractal. -Because multiple worker instances share the work, fractals are -generated more quickly and users might not even notice when a worker -fails. - -.. code-block:: console - - root@app-api-1:# faafo list - +--------------------------------------+------------------+-------------+ - | UUID | Dimensions | Filesize | - +--------------------------------------+------------------+-------------+ - | 410bca6e-baa7-4d82-9ec0-78e409db7ade | 295 x 738 pixels | 26283 bytes | - | 66054419-f721-492f-8964-a5c9291d0524 | 904 x 860 pixels | 78666 bytes | - | d123e9c1-3934-4ffd-8b09-0032ca2b6564 | 952 x 382 pixels | 34239 bytes | - | f51af10a-084d-4314-876a-6d0b9ea9e735 | 877 x 708 pixels | 93679 bytes | - +--------------------------------------+------------------+-------------+ - - root@app-api-1:# faafo show d123e9c1-3934-4ffd-8b09-0032ca2b6564 - +--------------+------------------------------------------------------------------+ - | Parameter | Value | - +--------------+------------------------------------------------------------------+ - | uuid | d123e9c1-3934-4ffd-8b09-0032ca2b6564 | - | duration | 1.671410 seconds | - | dimensions | 952 x 382 pixels | - | iterations | 168 | - | xa | -2.61217 | - | xb | 3.98459 | - | ya | -1.89725 | - | yb | 2.36849 | - | size | 34239 bytes | - | checksum | d2025a9cf60faca1aada854d4cac900041c6fa762460f86ab39f42ccfe305ffe | - | generated_by | app-worker-2 | - +--------------+------------------------------------------------------------------+ - root@app-api-1:# faafo show 66054419-f721-492f-8964-a5c9291d0524 - +--------------+------------------------------------------------------------------+ - | Parameter | Value | - +--------------+------------------------------------------------------------------+ - | uuid | 66054419-f721-492f-8964-a5c9291d0524 | - | duration | 5.293870 seconds | - | dimensions | 904 x 860 pixels | - | iterations | 348 | - | xa | -2.74108 | - | xb | 1.85912 | - | ya | -2.36827 | - | yb | 2.7832 | - | size | 78666 bytes | - | checksum | 1f313aaa36b0f616b5c91bdf5a9dc54f81ff32488ce3999f87a39a3b23cf1b14 | - | generated_by | app-worker-1 | - +--------------+------------------------------------------------------------------+ - -The fractals are now available from any of the app-api hosts. To -verify, visit http://IP_API_1/fractal/FRACTAL_UUID and -http://IP_API_2/fractal/FRACTAL_UUID. You now have multiple redundant -web services. If one fails, you can use the others. - -.. note:: Replace :code:`IP_API_1` and :code:`IP_API_2` with the - corresponding floating IPs. Replace FRACTAL_UUID with the UUID - of an existing fractal. - -Go ahead and test the fault tolerance. Start deleting workers and API -instances. As long as you have one of each, your application is fine. -However, be aware of one weak point. The database contains the -fractals and fractal metadata. If you lose that instance, the -application stops. Future sections will explain how to address this -weak point. - -If you had a load balancer, you could distribute this load between the -two different API services. You have several options. The -:doc:`networking` section shows you one option. - -In theory, you could use a simple script to monitor the load on your -workers and API services and trigger the creation of instances, which -you already know how to do. Congratulations! You are ready to create -scalable cloud applications. - -Of course, creating a monitoring system for a single application might -not make sense. To learn how to use the OpenStack Orchestration -monitoring and auto-scaling capabilities to automate these steps, see -:doc:`orchestration`. - -Next steps -~~~~~~~~~~ - -You should be fairly confident about starting instances and -distributing services from an application among these instances. - -As mentioned in :doc:`/introduction`, the generated fractal images are -saved on the local file system of the API service instances. Because -you have multiple API instances up and running, the fractal images are -spread across multiple API services, which causes a number of -:code:`IOError: [Errno 2] No such file or directory` exceptions when -trying to download a fractal image from an API service instance that -does not have the fractal image on its local file system. - -Go to :doc:`/durability` to learn how to use Object Storage to solve -this problem in an elegant way. Or, you can proceed to one of these -sections: - -* :doc:`/block_storage`: Migrate the database to block storage, or use - the database-as-a-service component. -* :doc:`/orchestration`: Automatically orchestrate your application. -* :doc:`/networking`: Learn about complex networking. -* :doc:`/advice`: Get advice about operations. -* :doc:`/craziness`: Learn some crazy things that you might not think to do ;) - -Complete code sample -~~~~~~~~~~~~~~~~~~~~ - -This file contains all the code from this tutorial section. This -comprehensive code sample lets you view and run the code as a single -script. - -Before you run this script, confirm that you have set your -authentication information, the flavor ID, and image ID. - -.. only:: fog - - .. literalinclude:: ../samples/fog/scaling_out.rb - :language: ruby - -.. only:: shade - - .. literalinclude:: ../samples/shade/scaling_out.py - :language: python - -.. only:: libcloud - - .. literalinclude:: ../samples/libcloud/scaling_out.py - :language: python - -.. only:: jclouds - - .. literalinclude:: ../samples/jclouds/ScalingOut.java - :language: java diff --git a/tools/build-all-rst.sh b/tools/build-all-rst.sh index b06ad3a2d..887398c3e 100755 --- a/tools/build-all-rst.sh +++ b/tools/build-all-rst.sh @@ -2,5 +2,4 @@ mkdir -p publish-docs -tools/build-firstapp-rst.sh tools/build-api-quick-start.sh diff --git a/tools/build-firstapp-rst.sh b/tools/build-firstapp-rst.sh deleted file mode 100755 index 116743ef3..000000000 --- a/tools/build-firstapp-rst.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -e - -mkdir -p publish-docs - -# Publish documents to api-ref for developer.openstack.org -for tag in libcloud shade; do - tools/build-rst.sh firstapp \ - --tag ${tag} --target "firstapp-${tag}" -done - -# Draft documents -for tag in dotnet fog openstacksdk pkgcloud jclouds gophercloud; do - tools/build-rst.sh firstapp \ - --tag ${tag} --target "draft/firstapp-${tag}" -done diff --git a/tox.ini b/tox.ini index 7ca32075c..7301db852 100644 --- a/tox.ini +++ b/tox.ini @@ -19,7 +19,6 @@ commands = {posargs} [testenv:linters] commands = - doc8 firstapp doc8 api-quick-start [testenv:checkbuild] @@ -34,8 +33,6 @@ commands = # Prepare documents (without www) so that they can get published on # developer.openstack.org with just copying publish-docs/api-ref over. commands = - # Build and copy RST Guides - {toxinidir}/tools/build-firstapp-rst.sh # Build and copy API Quick Start {toxinidir}/tools/build-api-quick-start.sh # Build website index @@ -74,33 +71,6 @@ commands = {toxinidir}/tools/generatepot-rst.sh api-site 0 {posargs} commands = {toxinidir}/tools/build-all-rst.sh -[testenv:firstapp-libcloud] -commands = sphinx-build -E -W -t libcloud firstapp/source firstapp/build-libcloud/html - -[testenv:firstapp-jclouds] -commands = sphinx-build -E -W -t jclouds firstapp/source firstapp/build-jclouds/html - -[testenv:firstapp-fog] -commands = sphinx-build -E -W -t fog firstapp/source firstapp/build-fog/html - -[testenv:firstapp-dotnet] -commands = sphinx-build -E -W -t dotnet firstapp/source firstapp/build-dotnet/html - -[testenv:firstapp-pkgcloud] -commands = sphinx-build -E -W -t pkgcloud firstapp/source firstapp/build-pkgcloud/html - -[testenv:firstapp-openstacksdk] -commands = sphinx-build -E -W -t openstacksdk firstapp/source firstapp/build-openstacksdk/html - -[testenv:firstapp-todos] -commands = sphinx-build -E -W -t libcloud firstapp/source firstapp/build/html - -[testenv:firstapp-shade] -commands = sphinx-build -E -W -t shade firstapp/source firstapp/build-shade/html - -[testenv:firstapp-gophercloud] -commands = sphinx-build -E -W -t gophercloud firstapp/source firstapp/build-gophercloud/html - [testenv:api-quick-start] commands = {toxinidir}/tools/build-api-quick-start.sh @@ -108,7 +78,7 @@ commands = [doc8] # Settings for doc8: # Ignore target directories -ignore-path = firstapp/build*,common/ +ignore-path = common/ # File extensions to use extensions = .rst,.txt # Ignore lines longer than 79 chars diff --git a/www/index.html b/www/index.html index b12558033..19f95c836 100644 --- a/www/index.html +++ b/www/index.html @@ -15,7 +15,6 @@


Development Environments - Writing your First App Reference Architectures View SDKs View APIs @@ -54,33 +53,6 @@
  • PackStack A simple Puppet driven installation of OpenStack
  • -
    -

    Writing Your First OpenStack Application

    -

    - Want to quickly learn how to manipulate OpenStack using the OpenStack SDKs? -

    -

    OpenStack FirstApp

    - -

    Reference Architectures

    diff --git a/www/templates/sdk_list.tmpl b/www/templates/sdk_list.tmpl index 3c643ab99..c0287984b 100644 --- a/www/templates/sdk_list.tmpl +++ b/www/templates/sdk_list.tmpl @@ -102,11 +102,6 @@ Docs and resources

    - - Getting started - -
    -
    Usage @@ -416,11 +411,6 @@ Docs and resources
    - - Getting started - -
    -
    OpenStack Compute Driver Documentation