diff --git a/.github/workflows/pr-elasticsearch-tests.yml b/.github/workflows/pr-elasticsearch-tests.yml
new file mode 100644
index 0000000..ac59f6d
--- /dev/null
+++ b/.github/workflows/pr-elasticsearch-tests.yml
@@ -0,0 +1,75 @@
+name: Elasticsearch Tests
+
+on:
+ pull_request:
+
+jobs:
+ leia-tests:
+ runs-on: ${{ matrix.os }}
+ env:
+ TERM: xterm
+ strategy:
+ matrix:
+ leia-tests:
+ - examples/elasticsearch-6.5
+ - examples/elasticsearch-6.8
+ - examples/elasticsearch-7.2
+ # - examples/elasticsearch-7.5
+ # - examples/elasticsearch-7.7
+ # - examples/elasticsearch-7.9
+ # - examples/elasticsearch-7.10
+ lando-versions:
+ - edge
+ os:
+ - ubuntu-20.04
+ node-version:
+ - '14'
+
+ steps:
+ # Install deps and cache
+ - name: Checkout code
+ uses: actions/checkout@v2
+ - name: Install node ${{ matrix.node-version }}
+ uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: yarn
+ - name: Install Yarn dependencies
+ run: yarn install --prefer-offline --frozen-lockfile
+
+ # This block should eventually become use lando/actions-hyperdrive@v2
+ - name: Verify Docker dependencies
+ run: |
+ docker --version | grep "20.10."
+ docker-compose --version | grep "1.29."
+ - name: Grab latest edge Lando CLI
+ run: |
+ sudo curl -fsSL -o /usr/local/bin/lando "https://files.lando.dev/cli/lando-linux-x64-${{ matrix.lando-versions }}"
+ sudo chmod +x /usr/local/bin/lando
+ - name: Move in lando config appropriate for testing
+ run: |
+ mkdir -p ~/.lando/cache
+ cp -f actions-lando-config.yml ~/.lando/config.yml
+ echo false > ~/.lando/cache/report_errors
+ lando --clear
+ - name: Verify Lando works and we are dogfooding this plugin for tests
+ run: |
+ lando version
+ lando config --path plugins | grep platformsh | grep /home/runner/work/platformsh/platformsh || echo "::error:: Not dogfooding this plugin correctly! "
+ cd ${{ matrix.leia-tests }}
+ lando config --path plugins | grep platformsh | grep dir | grep /home/runner/work/platformsh/platformsh || echo "::error:: Not dogfooding this plugin correctly! "
+
+ # This block should eventually become use lando/actions-leia@v2
+ # @NOTE? Do we want a way for our leia-action to configure apparmor since
+ # this might break a whole bunch of tests? or is this literally just a thing
+ # for the platform.sh mysql/mariadb container?
+ - name: Configure apparmor
+ run: |
+ set -x
+ sudo apt-get remove mysql-server --purge
+ sudo apt-get install apparmor-profiles
+ sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
+ - name: Run leia tests
+ shell: bash
+ run: yarn leia "./${{ matrix.leia-tests }}/README.md" -c 'Destroy tests' --stdin --shell bash
+
diff --git a/examples/elasticsearch-6.5/.editorconfig b/examples/elasticsearch-6.5/.editorconfig
new file mode 100644
index 0000000..9371936
--- /dev/null
+++ b/examples/elasticsearch-6.5/.editorconfig
@@ -0,0 +1,20 @@
+# Drupal editor configuration normalization
+# @see http://editorconfig.org/
+
+# This is the top-most .editorconfig file; do not search in parent directories.
+root = true
+
+# All files.
+[*]
+end_of_line = LF
+indent_style = space
+indent_size = 4
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[composer.{json,lock}]
+indent_size = 4
+
+[.platform.app.yaml]
+indent_size = 4
diff --git a/examples/elasticsearch-6.5/.gitignore b/examples/elasticsearch-6.5/.gitignore
new file mode 100644
index 0000000..84200aa
--- /dev/null
+++ b/examples/elasticsearch-6.5/.gitignore
@@ -0,0 +1,11 @@
+vendor
+files
+data
+private
+.platform/local
+
+*.sql
+*.tar.gz
+*.tar
+
+.DS_Store
diff --git a/examples/elasticsearch-6.5/.lando.yml b/examples/elasticsearch-6.5/.lando.yml
new file mode 100644
index 0000000..4819862
--- /dev/null
+++ b/examples/elasticsearch-6.5/.lando.yml
@@ -0,0 +1,10 @@
+name: lando-platformsh-elasticsearch-6.5
+recipe: platformsh
+config:
+ id: DISCONNECTED
+
+
+# This is important because it lets lando know to test against the plugin in this repo
+# DO NOT REMOVE THIS!
+plugins:
+ "@lando/platformsh": ./../../
diff --git a/examples/elasticsearch-6.5/.platform.app.yaml b/examples/elasticsearch-6.5/.platform.app.yaml
new file mode 100644
index 0000000..fadc456
--- /dev/null
+++ b/examples/elasticsearch-6.5/.platform.app.yaml
@@ -0,0 +1,12 @@
+name: app
+type: "php:7.3"
+build:
+ flavor: composer
+web:
+ locations:
+ "/":
+ root: "."
+ passthru: "/index.php"
+relationships:
+ elasticsearch: "searchelastic:elasticsearch"
+ elasticsearch-plugin: "searchelastic-plugin:elasticsearch"
diff --git a/examples/elasticsearch-6.5/.platform/routes.yaml b/examples/elasticsearch-6.5/.platform/routes.yaml
new file mode 100644
index 0000000..b588ae0
--- /dev/null
+++ b/examples/elasticsearch-6.5/.platform/routes.yaml
@@ -0,0 +1,8 @@
+# The routes of the project.
+#
+# Each route describes how an incoming URL is going
+# to be processed by Platform.sh.
+
+"https://{default}/":
+ type: upstream
+ upstream: "app:http"
diff --git a/examples/elasticsearch-6.5/.platform/services.yaml b/examples/elasticsearch-6.5/.platform/services.yaml
new file mode 100644
index 0000000..5e356e1
--- /dev/null
+++ b/examples/elasticsearch-6.5/.platform/services.yaml
@@ -0,0 +1,7 @@
+searchelastic:
+ type: elasticsearch:6.5
+searchelastic-plugin:
+ type: elasticsearch:6.5
+ configuration:
+ plugins:
+ - mapper-size
diff --git a/examples/elasticsearch-6.5/README.md b/examples/elasticsearch-6.5/README.md
new file mode 100644
index 0000000..0a51f96
--- /dev/null
+++ b/examples/elasticsearch-6.5/README.md
@@ -0,0 +1,74 @@
+Platform.sh elasticsearch 6.5 Example
+=================================
+
+This example exists to test this plugin's implementation of Platform.sh's `elasticsearch:6.5` service.
+
+* [`elasticsearch:6.5`](https://docs.platform.sh/configuration/services/elasticsearch.html)
+
+Start up tests
+--------------
+
+Run the following commands to get up and running with this example.
+
+```bash
+# Should poweroff
+lando poweroff
+
+# Should start up successfully
+lando start
+```
+
+Verification commands
+---------------------
+
+Run the following commands to validate things are rolling as they should.
+
+```bash
+# Should have the expected platformsh containers and images
+docker ps --filter label=com.docker.compose.project=landoplatformshelasticsearch65 | grep docker.registry.platform.sh/php-7.3 | grep landoplatformshelasticsearch65_app_1
+docker ps --filter label=com.docker.compose.project=landoplatformshelasticsearch65 | grep docker.registry.platform.sh/elasticsearch-6.5 | grep landoplatformshelasticsearch65_searchelastic_1
+
+# Should be running all application containers as web
+lando ssh -s app -c "id" | grep web
+
+# Should have the platform cli in all application containers
+lando ssh -s app -c "platform -V"
+
+# Should be running the correct php version
+lando ssh -s app -c "php --version" | grep 7.3.
+
+# Should be running all elasticsearch containers as elasticsearch
+lando ssh -s searchelastic -c "id" | grep elasticsearch
+
+# Should be running the correct elasticsearch versions
+lando ssh -s searchelastic -c "curl -XGET 'http://localhost:9200'" | grep 6.5
+
+# Should be able to connect to elasticsearch from the application containers
+lando ssh -s app -c "curl localhost/esearch.php" | grep "Barbara Liskov"
+
+# Should be running the correct elasticsearch versions (plugin service)
+lando ssh -s searchelastic-plugin -c "curl -XGET 'http://localhost:9200'" | grep 6.5
+
+# Should be able to enable the _size field for mapper-size plugin
+lando ssh -s searchelastic-plugin -c "curl -X PUT 'localhost:9200/my_index?pretty' -H 'Content-Type:application/json' -d'{\"mappings\": {\"_doc\": {\"_size\": {\"enabled\": true}}}}'"
+
+# Should be able to add a doc to the ES index
+lando ssh -s searchelastic-plugin -c "curl -X PUT 'localhost:9200/my-index/_doc/1?pretty' -H 'Content-Type: application/json' -d'{\"text\": \"This is a document\"}'"
+
+# Should see _size field when querying ES index.
+lando ssh -s searchelastic-plugin -c "curl -X GET 'localhost:9200/my_index/_search?pretty' -H 'Content-Type: application/json' -d '{ \"query\": { \"range\": { \"_size\": { \"gt\": 10 } } }, \"aggs\": { \"sizes\": { \"terms\": { \"field\": \"_size\", \"size\": 10 } } }, \"sort\": [ { \"_size\": { \"order\": \"desc\" } } ], \"script_fields\": { \"size\": { \"script\": \"doc[\\u0027_size\\u0027]\" } }}'" | grep sizes
+
+```
+
+Destroy tests
+-------------
+
+Run the following commands to trash this app like nothing ever happened.
+
+```bash
+# Should be able to destroy our app
+lando destroy -y
+
+# Should poweroff
+lando poweroff
+```
diff --git a/examples/elasticsearch-6.5/composer.json b/examples/elasticsearch-6.5/composer.json
new file mode 100644
index 0000000..cf20530
--- /dev/null
+++ b/examples/elasticsearch-6.5/composer.json
@@ -0,0 +1,16 @@
+{
+ "name": "lando/platformsh-elasticsearch-6.5",
+ "description": "A basic application to test Lando's implementation of platformsh's elasticsearch 6.5 service.",
+ "license": "MIT",
+ "type" : "project",
+ "require": {
+ "php": ">7.2",
+ "platformsh/config-reader": "~2.0",
+ "elasticsearch/elasticsearch": "~6.5.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "App\\": "src/"
+ }
+ }
+}
diff --git a/examples/elasticsearch-6.5/composer.lock b/examples/elasticsearch-6.5/composer.lock
new file mode 100644
index 0000000..fe43232
--- /dev/null
+++ b/examples/elasticsearch-6.5/composer.lock
@@ -0,0 +1,316 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "11516b95c0b5b9282f5aee43f1ddba76",
+ "packages": [
+ {
+ "name": "elasticsearch/elasticsearch",
+ "version": "v6.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/elastic/elasticsearch-php.git",
+ "reference": "0c93d0e5b852634159d9f349b1848acde845400b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/0c93d0e5b852634159d9f349b1848acde845400b",
+ "reference": "0c93d0e5b852634159d9f349b1848acde845400b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": ">=1.3.7",
+ "guzzlehttp/ringphp": "~1.0",
+ "php": "^7.0",
+ "psr/log": "~1.0"
+ },
+ "require-dev": {
+ "cpliakas/git-wrapper": "~1.0",
+ "doctrine/inflector": "^1.1",
+ "mockery/mockery": "^1.2",
+ "phpstan/phpstan-shim": "^0.9 || ^0.11",
+ "phpunit/phpunit": "^5.7 || ^6.5",
+ "squizlabs/php_codesniffer": "^3.4",
+ "symfony/finder": "^2.8",
+ "symfony/yaml": "^2.8"
+ },
+ "suggest": {
+ "ext-curl": "*",
+ "monolog/monolog": "Allows for client-level logging and tracing"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Elasticsearch\\": "src/Elasticsearch/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Zachary Tong"
+ },
+ {
+ "name": "Enrico Zimuel"
+ }
+ ],
+ "description": "PHP Client for Elasticsearch",
+ "keywords": [
+ "client",
+ "elasticsearch",
+ "search"
+ ],
+ "time": "2019-07-19T13:34:35+00:00"
+ },
+ {
+ "name": "guzzlehttp/ringphp",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/RingPHP.git",
+ "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/5e2a174052995663dd68e6b5ad838afd47dd615b",
+ "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/streams": "~3.0",
+ "php": ">=5.4.0",
+ "react/promise": "~2.0"
+ },
+ "require-dev": {
+ "ext-curl": "*",
+ "phpunit/phpunit": "~4.0"
+ },
+ "suggest": {
+ "ext-curl": "Guzzle will use specific adapters if cURL is present"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Ring\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.",
+ "abandoned": true,
+ "time": "2018-07-31T13:22:33+00:00"
+ },
+ {
+ "name": "guzzlehttp/streams",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/streams.git",
+ "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+ "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Stream\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "Provides a simple abstraction over streams of data",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": [
+ "Guzzle",
+ "stream"
+ ],
+ "abandoned": true,
+ "time": "2014-10-12T19:18:40+00:00"
+ },
+ {
+ "name": "platformsh/config-reader",
+ "version": "2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/platformsh/config-reader-php.git",
+ "reference": "5511abfdb673ccfcf0eac9eaf65204f73edd90fd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/platformsh/config-reader-php/zipball/5511abfdb673ccfcf0eac9eaf65204f73edd90fd",
+ "reference": "5511abfdb673ccfcf0eac9eaf65204f73edd90fd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Platformsh\\ConfigReader\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Larry Garfield",
+ "email": "larry@platform.sh"
+ }
+ ],
+ "description": "Small helper to access Platform.sh environment variables",
+ "time": "2020-12-10T20:50:12+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "time": "2021-05-03T11:20:27+00:00"
+ },
+ {
+ "name": "react/promise",
+ "version": "v2.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise.git",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Promise\\": "src/"
+ },
+ "files": [
+ "src/functions_include.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com"
+ }
+ ],
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "time": "2020-05-12T15:16:56+00:00"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">7.2"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "1.1.0"
+}
diff --git a/examples/elasticsearch-6.5/esearch.php b/examples/elasticsearch-6.5/esearch.php
new file mode 100644
index 0000000..b3f869c
--- /dev/null
+++ b/examples/elasticsearch-6.5/esearch.php
@@ -0,0 +1,98 @@
+credentials('elasticsearch');
+
+try {
+ // The Elasticsearch library lets you connect to multiple hosts.
+ // On Platform.sh Standard there is only a single host so just
+ // register that.
+ $hosts = [
+ [
+ 'scheme' => $credentials['scheme'],
+ 'host' => $credentials['host'],
+ 'port' => $credentials['port'],
+ ]
+ ];
+
+ // Create an Elasticsearch client object.
+ $builder = ClientBuilder::create();
+ $builder->setHosts($hosts);
+ $client = $builder->build();
+
+ $index = 'my_index';
+ $type = 'People';
+
+ // Index a few document.
+ $params = [
+ 'index' => $index,
+ 'type' => $type,
+ ];
+
+ $names = ['Ada Lovelace', 'Alonzo Church', 'Barbara Liskov'];
+
+ foreach ($names as $name) {
+ $params['body']['name'] = $name;
+ $client->index($params);
+ }
+
+ // Force just-added items to be indexed.
+ $client->indices()->refresh(array('index' => $index));
+
+
+ // Search for documents.
+ $result = $client->search([
+ 'index' => $index,
+ 'type' => $type,
+ 'body' => [
+ 'query' => [
+ 'match' => [
+ 'name' => 'Barbara Liskov',
+ ],
+ ],
+ ],
+ ]);
+
+ if (isset($result['hits']['hits'])) {
+ print <<
+
+| ID | Name |
+
+
+TABLE;
+ foreach ($result['hits']['hits'] as $record) {
+ printf("| %s | %s |
\n", $record['_id'], $record['_source']['name']);
+ }
+ print "\n
\n";
+ }
+
+ // Delete documents.
+ $params = [
+ 'index' => $index,
+ 'type' => $type,
+ ];
+
+ $ids = array_map(function($row) {
+ return $row['_id'];
+ }, $result['hits']['hits']);
+
+ foreach ($ids as $id) {
+ $params['id'] = $id;
+ $client->delete($params);
+ }
+
+} catch (Exception $e) {
+ print $e->getMessage();
+}
diff --git a/examples/elasticsearch-6.5/index.php b/examples/elasticsearch-6.5/index.php
new file mode 100644
index 0000000..f157f05
--- /dev/null
+++ b/examples/elasticsearch-6.5/index.php
@@ -0,0 +1 @@
+HELLO!
diff --git a/examples/elasticsearch-6.8/.editorconfig b/examples/elasticsearch-6.8/.editorconfig
new file mode 100644
index 0000000..9371936
--- /dev/null
+++ b/examples/elasticsearch-6.8/.editorconfig
@@ -0,0 +1,20 @@
+# Drupal editor configuration normalization
+# @see http://editorconfig.org/
+
+# This is the top-most .editorconfig file; do not search in parent directories.
+root = true
+
+# All files.
+[*]
+end_of_line = LF
+indent_style = space
+indent_size = 4
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[composer.{json,lock}]
+indent_size = 4
+
+[.platform.app.yaml]
+indent_size = 4
diff --git a/examples/elasticsearch-6.8/.gitignore b/examples/elasticsearch-6.8/.gitignore
new file mode 100644
index 0000000..84200aa
--- /dev/null
+++ b/examples/elasticsearch-6.8/.gitignore
@@ -0,0 +1,11 @@
+vendor
+files
+data
+private
+.platform/local
+
+*.sql
+*.tar.gz
+*.tar
+
+.DS_Store
diff --git a/examples/elasticsearch-6.8/.lando.yml b/examples/elasticsearch-6.8/.lando.yml
new file mode 100644
index 0000000..52a6cef
--- /dev/null
+++ b/examples/elasticsearch-6.8/.lando.yml
@@ -0,0 +1,10 @@
+name: lando-platformsh-elasticsearch-6.8
+recipe: platformsh
+config:
+ id: DISCONNECTED
+
+
+# This is important because it lets lando know to test against the plugin in this repo
+# DO NOT REMOVE THIS!
+plugins:
+ "@lando/platformsh": ./../../
diff --git a/examples/elasticsearch-6.8/.platform.app.yaml b/examples/elasticsearch-6.8/.platform.app.yaml
new file mode 100644
index 0000000..fadc456
--- /dev/null
+++ b/examples/elasticsearch-6.8/.platform.app.yaml
@@ -0,0 +1,12 @@
+name: app
+type: "php:7.3"
+build:
+ flavor: composer
+web:
+ locations:
+ "/":
+ root: "."
+ passthru: "/index.php"
+relationships:
+ elasticsearch: "searchelastic:elasticsearch"
+ elasticsearch-plugin: "searchelastic-plugin:elasticsearch"
diff --git a/examples/elasticsearch-6.8/.platform/routes.yaml b/examples/elasticsearch-6.8/.platform/routes.yaml
new file mode 100644
index 0000000..b588ae0
--- /dev/null
+++ b/examples/elasticsearch-6.8/.platform/routes.yaml
@@ -0,0 +1,8 @@
+# The routes of the project.
+#
+# Each route describes how an incoming URL is going
+# to be processed by Platform.sh.
+
+"https://{default}/":
+ type: upstream
+ upstream: "app:http"
diff --git a/examples/elasticsearch-6.8/.platform/services.yaml b/examples/elasticsearch-6.8/.platform/services.yaml
new file mode 100644
index 0000000..e723064
--- /dev/null
+++ b/examples/elasticsearch-6.8/.platform/services.yaml
@@ -0,0 +1,7 @@
+searchelastic:
+ type: elasticsearch:6.8
+searchelastic-plugin:
+ type: elasticsearch:6.8
+ configuration:
+ plugins:
+ - mapper-size
diff --git a/examples/elasticsearch-6.8/README.md b/examples/elasticsearch-6.8/README.md
new file mode 100644
index 0000000..55c711a
--- /dev/null
+++ b/examples/elasticsearch-6.8/README.md
@@ -0,0 +1,74 @@
+Platform.sh elasticsearch 6.8 Example
+=================================
+
+This example exists to test this plugin's implementation of Platform.sh's `elasticsearch:6.8` service.
+
+* [`elasticsearch:6.8`](https://docs.platform.sh/configuration/services/elasticsearch.html)
+
+Start up tests
+--------------
+
+Run the following commands to get up and running with this example.
+
+```bash
+# Should poweroff
+lando poweroff
+
+# Should start up successfully
+lando start
+```
+
+Verification commands
+---------------------
+
+Run the following commands to validate things are rolling as they should.
+
+```bash
+# Should have the expected platformsh containers and images
+docker ps --filter label=com.docker.compose.project=landoplatformshelasticsearch68 | grep docker.registry.platform.sh/php-7.3 | grep landoplatformshelasticsearch68_app_1
+docker ps --filter label=com.docker.compose.project=landoplatformshelasticsearch68 | grep docker.registry.platform.sh/elasticsearch-6.8 | grep landoplatformshelasticsearch68_searchelastic_1
+
+# Should be running all application containers as web
+lando ssh -s app -c "id" | grep web
+
+# Should have the platform cli in all application containers
+lando ssh -s app -c "platform -V"
+
+# Should be running the correct php version
+lando ssh -s app -c "php --version" | grep 7.3.
+
+# Should be running all elasticsearch containers as elasticsearch
+lando ssh -s searchelastic -c "id" | grep elasticsearch
+
+# Should be running the correct elasticsearch versions
+lando ssh -s searchelastic -c "curl -XGET 'http://localhost:9200'" | grep 6.8
+
+# Should be able to connect to elasticsearch from the application containers
+lando ssh -s app -c "curl localhost/esearch.php" | grep "Barbara Liskov"
+
+# Should be running the correct elasticsearch versions (plugin service)
+lando ssh -s searchelastic-plugin -c "curl -XGET 'http://localhost:9200'" | grep 6.8
+
+# Should be able to enable the _size field for mapper-size plugin
+lando ssh -s searchelastic-plugin -c "curl -X PUT 'localhost:9200/my_index?pretty' -H 'Content-Type:application/json' -d'{\"mappings\": {\"_doc\": {\"_size\": {\"enabled\": true}}}}'"
+
+# Should be able to add a doc to the ES index
+lando ssh -s searchelastic-plugin -c "curl -X PUT 'localhost:9200/my-index/_doc/1?pretty' -H 'Content-Type: application/json' -d'{\"text\": \"This is a document\"}'"
+
+# Should see _size field when querying ES index.
+lando ssh -s searchelastic-plugin -c "curl -X GET 'localhost:9200/my_index/_search?pretty' -H 'Content-Type: application/json' -d '{ \"query\": { \"range\": { \"_size\": { \"gt\": 10 } } }, \"aggs\": { \"sizes\": { \"terms\": { \"field\": \"_size\", \"size\": 10 } } }, \"sort\": [ { \"_size\": { \"order\": \"desc\" } } ], \"script_fields\": { \"size\": { \"script\": \"doc[\\u0027_size\\u0027]\" } }}'" | grep sizes
+
+```
+
+Destroy tests
+-------------
+
+Run the following commands to trash this app like nothing ever happened.
+
+```bash
+# Should be able to destroy our app
+lando destroy -y
+
+# Should poweroff
+lando poweroff
+```
diff --git a/examples/elasticsearch-6.8/composer.json b/examples/elasticsearch-6.8/composer.json
new file mode 100644
index 0000000..2cd22ed
--- /dev/null
+++ b/examples/elasticsearch-6.8/composer.json
@@ -0,0 +1,16 @@
+{
+ "name": "lando/platformsh-elasticsearch-6.8",
+ "description": "A basic application to test Lando's implementation of platformsh's elasticsearch 6.8 service.",
+ "license": "MIT",
+ "type" : "project",
+ "require": {
+ "php": ">7.2",
+ "platformsh/config-reader": "~2.0",
+ "elasticsearch/elasticsearch": "~6.8.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "App\\": "src/"
+ }
+ }
+}
diff --git a/examples/elasticsearch-6.8/composer.lock b/examples/elasticsearch-6.8/composer.lock
new file mode 100644
index 0000000..7bc1cde
--- /dev/null
+++ b/examples/elasticsearch-6.8/composer.lock
@@ -0,0 +1,317 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "88a68a3a82ce70027ff10f76a8540532",
+ "packages": [
+ {
+ "name": "elasticsearch/elasticsearch",
+ "version": "v6.8.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/elastic/elasticsearch-php.git",
+ "reference": "619c78266999c6e431df9ca0f844e8f656ac145b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/619c78266999c6e431df9ca0f844e8f656ac145b",
+ "reference": "619c78266999c6e431df9ca0f844e8f656ac145b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": ">=1.3.7",
+ "ezimuel/ringphp": "^1.1.2",
+ "php": "^7.3 || ^8.0",
+ "psr/log": "~1.0"
+ },
+ "require-dev": {
+ "doctrine/inflector": "^1.3",
+ "mockery/mockery": "^1.2",
+ "phpstan/phpstan": "^0.12",
+ "phpunit/phpunit": "^9.3",
+ "squizlabs/php_codesniffer": "^3.4",
+ "symfony/finder": "~4.0",
+ "symfony/yaml": "~4.0",
+ "symplify/git-wrapper": ">=9.0 <9.3.27"
+ },
+ "suggest": {
+ "ext-curl": "*",
+ "monolog/monolog": "Allows for client-level logging and tracing"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/autoload.php"
+ ],
+ "psr-4": {
+ "Elasticsearch\\": "src/Elasticsearch/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Zachary Tong"
+ },
+ {
+ "name": "Enrico Zimuel"
+ }
+ ],
+ "description": "PHP Client for Elasticsearch",
+ "keywords": [
+ "client",
+ "elasticsearch",
+ "search"
+ ],
+ "time": "2021-07-14T14:41:55+00:00"
+ },
+ {
+ "name": "ezimuel/guzzlestreams",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ezimuel/guzzlestreams.git",
+ "reference": "abe3791d231167f14eb80d413420d1eab91163a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ezimuel/guzzlestreams/zipball/abe3791d231167f14eb80d413420d1eab91163a8",
+ "reference": "abe3791d231167f14eb80d413420d1eab91163a8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Stream\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "Fork of guzzle/streams (abandoned) to be used with elasticsearch-php",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": [
+ "Guzzle",
+ "stream"
+ ],
+ "time": "2020-02-14T23:11:50+00:00"
+ },
+ {
+ "name": "ezimuel/ringphp",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ezimuel/ringphp.git",
+ "reference": "0b78f89d8e0bb9e380046c31adfa40347e9f663b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ezimuel/ringphp/zipball/0b78f89d8e0bb9e380046c31adfa40347e9f663b",
+ "reference": "0b78f89d8e0bb9e380046c31adfa40347e9f663b",
+ "shasum": ""
+ },
+ "require": {
+ "ezimuel/guzzlestreams": "^3.0.1",
+ "php": ">=5.4.0",
+ "react/promise": "~2.0"
+ },
+ "require-dev": {
+ "ext-curl": "*",
+ "phpunit/phpunit": "~4.0"
+ },
+ "suggest": {
+ "ext-curl": "Guzzle will use specific adapters if cURL is present"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Ring\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "Fork of guzzle/RingPHP (abandoned) to be used with elasticsearch-php",
+ "time": "2020-02-14T23:51:21+00:00"
+ },
+ {
+ "name": "platformsh/config-reader",
+ "version": "2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/platformsh/config-reader-php.git",
+ "reference": "5511abfdb673ccfcf0eac9eaf65204f73edd90fd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/platformsh/config-reader-php/zipball/5511abfdb673ccfcf0eac9eaf65204f73edd90fd",
+ "reference": "5511abfdb673ccfcf0eac9eaf65204f73edd90fd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Platformsh\\ConfigReader\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Larry Garfield",
+ "email": "larry@platform.sh"
+ }
+ ],
+ "description": "Small helper to access Platform.sh environment variables",
+ "time": "2020-12-10T20:50:12+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "time": "2021-05-03T11:20:27+00:00"
+ },
+ {
+ "name": "react/promise",
+ "version": "v2.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise.git",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Promise\\": "src/"
+ },
+ "files": [
+ "src/functions_include.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com"
+ }
+ ],
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "time": "2020-05-12T15:16:56+00:00"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">7.2"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "1.1.0"
+}
diff --git a/examples/elasticsearch-6.8/esearch.php b/examples/elasticsearch-6.8/esearch.php
new file mode 100644
index 0000000..b3f869c
--- /dev/null
+++ b/examples/elasticsearch-6.8/esearch.php
@@ -0,0 +1,98 @@
+credentials('elasticsearch');
+
+try {
+ // The Elasticsearch library lets you connect to multiple hosts.
+ // On Platform.sh Standard there is only a single host so just
+ // register that.
+ $hosts = [
+ [
+ 'scheme' => $credentials['scheme'],
+ 'host' => $credentials['host'],
+ 'port' => $credentials['port'],
+ ]
+ ];
+
+ // Create an Elasticsearch client object.
+ $builder = ClientBuilder::create();
+ $builder->setHosts($hosts);
+ $client = $builder->build();
+
+ $index = 'my_index';
+ $type = 'People';
+
+ // Index a few document.
+ $params = [
+ 'index' => $index,
+ 'type' => $type,
+ ];
+
+ $names = ['Ada Lovelace', 'Alonzo Church', 'Barbara Liskov'];
+
+ foreach ($names as $name) {
+ $params['body']['name'] = $name;
+ $client->index($params);
+ }
+
+ // Force just-added items to be indexed.
+ $client->indices()->refresh(array('index' => $index));
+
+
+ // Search for documents.
+ $result = $client->search([
+ 'index' => $index,
+ 'type' => $type,
+ 'body' => [
+ 'query' => [
+ 'match' => [
+ 'name' => 'Barbara Liskov',
+ ],
+ ],
+ ],
+ ]);
+
+ if (isset($result['hits']['hits'])) {
+ print <<
+
+| ID | Name |
+
+
+TABLE;
+ foreach ($result['hits']['hits'] as $record) {
+ printf("| %s | %s |
\n", $record['_id'], $record['_source']['name']);
+ }
+ print "\n
\n";
+ }
+
+ // Delete documents.
+ $params = [
+ 'index' => $index,
+ 'type' => $type,
+ ];
+
+ $ids = array_map(function($row) {
+ return $row['_id'];
+ }, $result['hits']['hits']);
+
+ foreach ($ids as $id) {
+ $params['id'] = $id;
+ $client->delete($params);
+ }
+
+} catch (Exception $e) {
+ print $e->getMessage();
+}
diff --git a/examples/elasticsearch-6.8/index.php b/examples/elasticsearch-6.8/index.php
new file mode 100644
index 0000000..f157f05
--- /dev/null
+++ b/examples/elasticsearch-6.8/index.php
@@ -0,0 +1 @@
+HELLO!
diff --git a/examples/elasticsearch-7.2/.editorconfig b/examples/elasticsearch-7.2/.editorconfig
new file mode 100644
index 0000000..9371936
--- /dev/null
+++ b/examples/elasticsearch-7.2/.editorconfig
@@ -0,0 +1,20 @@
+# Drupal editor configuration normalization
+# @see http://editorconfig.org/
+
+# This is the top-most .editorconfig file; do not search in parent directories.
+root = true
+
+# All files.
+[*]
+end_of_line = LF
+indent_style = space
+indent_size = 4
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[composer.{json,lock}]
+indent_size = 4
+
+[.platform.app.yaml]
+indent_size = 4
diff --git a/examples/elasticsearch-7.2/.gitignore b/examples/elasticsearch-7.2/.gitignore
new file mode 100644
index 0000000..84200aa
--- /dev/null
+++ b/examples/elasticsearch-7.2/.gitignore
@@ -0,0 +1,11 @@
+vendor
+files
+data
+private
+.platform/local
+
+*.sql
+*.tar.gz
+*.tar
+
+.DS_Store
diff --git a/examples/elasticsearch-7.2/.lando.yml b/examples/elasticsearch-7.2/.lando.yml
new file mode 100644
index 0000000..834be85
--- /dev/null
+++ b/examples/elasticsearch-7.2/.lando.yml
@@ -0,0 +1,10 @@
+name: lando-platformsh-elasticsearch-7.2
+recipe: platformsh
+config:
+ id: DISCONNECTED
+
+
+# This is important because it lets lando know to test against the plugin in this repo
+# DO NOT REMOVE THIS!
+plugins:
+ "@lando/platformsh": ./../../
diff --git a/examples/elasticsearch-7.2/.platform.app.yaml b/examples/elasticsearch-7.2/.platform.app.yaml
new file mode 100644
index 0000000..fadc456
--- /dev/null
+++ b/examples/elasticsearch-7.2/.platform.app.yaml
@@ -0,0 +1,12 @@
+name: app
+type: "php:7.3"
+build:
+ flavor: composer
+web:
+ locations:
+ "/":
+ root: "."
+ passthru: "/index.php"
+relationships:
+ elasticsearch: "searchelastic:elasticsearch"
+ elasticsearch-plugin: "searchelastic-plugin:elasticsearch"
diff --git a/examples/elasticsearch-7.2/.platform/routes.yaml b/examples/elasticsearch-7.2/.platform/routes.yaml
new file mode 100644
index 0000000..b588ae0
--- /dev/null
+++ b/examples/elasticsearch-7.2/.platform/routes.yaml
@@ -0,0 +1,8 @@
+# The routes of the project.
+#
+# Each route describes how an incoming URL is going
+# to be processed by Platform.sh.
+
+"https://{default}/":
+ type: upstream
+ upstream: "app:http"
diff --git a/examples/elasticsearch-7.2/.platform/services.yaml b/examples/elasticsearch-7.2/.platform/services.yaml
new file mode 100644
index 0000000..3d6c784
--- /dev/null
+++ b/examples/elasticsearch-7.2/.platform/services.yaml
@@ -0,0 +1,7 @@
+searchelastic:
+ type: elasticsearch:7.2
+searchelastic-plugin:
+ type: elasticsearch:7.2
+ configuration:
+ plugins:
+ - mapper-size
diff --git a/examples/elasticsearch-7.2/README.md b/examples/elasticsearch-7.2/README.md
new file mode 100644
index 0000000..83b8649
--- /dev/null
+++ b/examples/elasticsearch-7.2/README.md
@@ -0,0 +1,74 @@
+Platform.sh elasticsearch 7.2 Example
+=================================
+
+This example exists to test this plugin's implementation of Platform.sh's `elasticsearch:7.2` service.
+
+* [`elasticsearch:7.2`](https://docs.platform.sh/configuration/services/elasticsearch.html)
+
+Start up tests
+--------------
+
+Run the following commands to get up and running with this example.
+
+```bash
+# Should poweroff
+lando poweroff
+
+# Should start up successfully
+lando start
+```
+
+Verification commands
+---------------------
+
+Run the following commands to validate things are rolling as they should.
+
+```bash
+# Should have the expected platformsh containers and images
+docker ps --filter label=com.docker.compose.project=landoplatformshelasticsearch72 | grep docker.registry.platform.sh/php-7.3 | grep landoplatformshelasticsearch72_app_1
+docker ps --filter label=com.docker.compose.project=landoplatformshelasticsearch72 | grep docker.registry.platform.sh/elasticsearch-7.2 | grep landoplatformshelasticsearch72_searchelastic_1
+
+# Should be running all application containers as web
+lando ssh -s app -c "id" | grep web
+
+# Should have the platform cli in all application containers
+lando ssh -s app -c "platform -V"
+
+# Should be running the correct php version
+lando ssh -s app -c "php --version" | grep 7.3.
+
+# Should be running all elasticsearch containers as elasticsearch
+lando ssh -s searchelastic -c "id" | grep elasticsearch
+
+# Should be running the correct elasticsearch versions
+lando ssh -s searchelastic -c "curl -XGET 'http://localhost:9200'" | grep 7.2
+
+# Should be able to connect to elasticsearch from the application containers
+lando ssh -s app -c "curl localhost/esearch.php" | grep "Barbara Liskov"
+
+# Should be running the correct elasticsearch versions (plugin service)
+lando ssh -s searchelastic-plugin -c "curl -XGET 'http://localhost:9200'" | grep 7.2
+
+# Should be able to enable the _size field for mapper-size plugin
+lando ssh -s searchelastic-plugin -c "curl -X PUT 'localhost:9200/my_index?pretty' -H 'Content-Type:application/json' -d'{\"mappings\": {\"_doc\": {\"_size\": {\"enabled\": true}}}}'"
+
+# Should be able to add a doc to the ES index
+lando ssh -s searchelastic-plugin -c "curl -X PUT 'localhost:9200/my-index/_doc/1?pretty' -H 'Content-Type: application/json' -d'{\"text\": \"This is a document\"}'"
+
+# Should see _size field when querying ES index.
+lando ssh -s searchelastic-plugin -c "curl -X GET 'localhost:9200/my_index/_search?pretty' -H 'Content-Type: application/json' -d '{ \"query\": { \"range\": { \"_size\": { \"gt\": 10 } } }, \"aggs\": { \"sizes\": { \"terms\": { \"field\": \"_size\", \"size\": 10 } } }, \"sort\": [ { \"_size\": { \"order\": \"desc\" } } ], \"script_fields\": { \"size\": { \"script\": \"doc[\\u0027_size\\u0027]\" } }}'" | grep sizes
+
+```
+
+Destroy tests
+-------------
+
+Run the following commands to trash this app like nothing ever happened.
+
+```bash
+# Should be able to destroy our app
+lando destroy -y
+
+# Should poweroff
+lando poweroff
+```
diff --git a/examples/elasticsearch-7.2/composer.json b/examples/elasticsearch-7.2/composer.json
new file mode 100644
index 0000000..ec04cdc
--- /dev/null
+++ b/examples/elasticsearch-7.2/composer.json
@@ -0,0 +1,16 @@
+{
+ "name": "lando/platformsh-elasticsearch-7.2",
+ "description": "A basic application to test Lando's implementation of platformsh's elasticsearch 7.2 service.",
+ "license": "MIT",
+ "type" : "project",
+ "require": {
+ "php": ">7.2",
+ "platformsh/config-reader": "~2.0",
+ "elasticsearch/elasticsearch": "~7.2.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "App\\": "src/"
+ }
+ }
+}
diff --git a/examples/elasticsearch-7.2/composer.lock b/examples/elasticsearch-7.2/composer.lock
new file mode 100644
index 0000000..2fe6f37
--- /dev/null
+++ b/examples/elasticsearch-7.2/composer.lock
@@ -0,0 +1,316 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "cd7f2bdb926c4e9570006eb55fdfc970",
+ "packages": [
+ {
+ "name": "elasticsearch/elasticsearch",
+ "version": "v7.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/elastic/elasticsearch-php.git",
+ "reference": "eefeaa8decab4056d6457d179147cd885faf6653"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/eefeaa8decab4056d6457d179147cd885faf6653",
+ "reference": "eefeaa8decab4056d6457d179147cd885faf6653",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": ">=1.3.7",
+ "guzzlehttp/ringphp": "~1.0",
+ "php": "^7.1",
+ "psr/log": "~1.0"
+ },
+ "require-dev": {
+ "cpliakas/git-wrapper": "~2.0",
+ "doctrine/inflector": "^1.3",
+ "mockery/mockery": "^1.2",
+ "phpstan/phpstan-shim": "^0.11",
+ "phpunit/phpunit": "^7.5",
+ "squizlabs/php_codesniffer": "^3.4",
+ "symfony/finder": "~4.0",
+ "symfony/yaml": "~4.0"
+ },
+ "suggest": {
+ "ext-curl": "*",
+ "monolog/monolog": "Allows for client-level logging and tracing"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Elasticsearch\\": "src/Elasticsearch/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Zachary Tong"
+ },
+ {
+ "name": "Enrico Zimuel"
+ }
+ ],
+ "description": "PHP Client for Elasticsearch",
+ "keywords": [
+ "client",
+ "elasticsearch",
+ "search"
+ ],
+ "time": "2019-08-30T08:20:06+00:00"
+ },
+ {
+ "name": "guzzlehttp/ringphp",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/RingPHP.git",
+ "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/5e2a174052995663dd68e6b5ad838afd47dd615b",
+ "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/streams": "~3.0",
+ "php": ">=5.4.0",
+ "react/promise": "~2.0"
+ },
+ "require-dev": {
+ "ext-curl": "*",
+ "phpunit/phpunit": "~4.0"
+ },
+ "suggest": {
+ "ext-curl": "Guzzle will use specific adapters if cURL is present"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Ring\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.",
+ "abandoned": true,
+ "time": "2018-07-31T13:22:33+00:00"
+ },
+ {
+ "name": "guzzlehttp/streams",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/streams.git",
+ "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+ "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Stream\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "Provides a simple abstraction over streams of data",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": [
+ "Guzzle",
+ "stream"
+ ],
+ "abandoned": true,
+ "time": "2014-10-12T19:18:40+00:00"
+ },
+ {
+ "name": "platformsh/config-reader",
+ "version": "2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/platformsh/config-reader-php.git",
+ "reference": "5511abfdb673ccfcf0eac9eaf65204f73edd90fd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/platformsh/config-reader-php/zipball/5511abfdb673ccfcf0eac9eaf65204f73edd90fd",
+ "reference": "5511abfdb673ccfcf0eac9eaf65204f73edd90fd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Platformsh\\ConfigReader\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Larry Garfield",
+ "email": "larry@platform.sh"
+ }
+ ],
+ "description": "Small helper to access Platform.sh environment variables",
+ "time": "2020-12-10T20:50:12+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "time": "2021-05-03T11:20:27+00:00"
+ },
+ {
+ "name": "react/promise",
+ "version": "v2.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise.git",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Promise\\": "src/"
+ },
+ "files": [
+ "src/functions_include.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com"
+ }
+ ],
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "time": "2020-05-12T15:16:56+00:00"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">7.2"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "1.1.0"
+}
diff --git a/examples/elasticsearch-7.2/esearch.php b/examples/elasticsearch-7.2/esearch.php
new file mode 100644
index 0000000..b3f869c
--- /dev/null
+++ b/examples/elasticsearch-7.2/esearch.php
@@ -0,0 +1,98 @@
+credentials('elasticsearch');
+
+try {
+ // The Elasticsearch library lets you connect to multiple hosts.
+ // On Platform.sh Standard there is only a single host so just
+ // register that.
+ $hosts = [
+ [
+ 'scheme' => $credentials['scheme'],
+ 'host' => $credentials['host'],
+ 'port' => $credentials['port'],
+ ]
+ ];
+
+ // Create an Elasticsearch client object.
+ $builder = ClientBuilder::create();
+ $builder->setHosts($hosts);
+ $client = $builder->build();
+
+ $index = 'my_index';
+ $type = 'People';
+
+ // Index a few document.
+ $params = [
+ 'index' => $index,
+ 'type' => $type,
+ ];
+
+ $names = ['Ada Lovelace', 'Alonzo Church', 'Barbara Liskov'];
+
+ foreach ($names as $name) {
+ $params['body']['name'] = $name;
+ $client->index($params);
+ }
+
+ // Force just-added items to be indexed.
+ $client->indices()->refresh(array('index' => $index));
+
+
+ // Search for documents.
+ $result = $client->search([
+ 'index' => $index,
+ 'type' => $type,
+ 'body' => [
+ 'query' => [
+ 'match' => [
+ 'name' => 'Barbara Liskov',
+ ],
+ ],
+ ],
+ ]);
+
+ if (isset($result['hits']['hits'])) {
+ print <<
+
+| ID | Name |
+
+
+TABLE;
+ foreach ($result['hits']['hits'] as $record) {
+ printf("| %s | %s |
\n", $record['_id'], $record['_source']['name']);
+ }
+ print "\n
\n";
+ }
+
+ // Delete documents.
+ $params = [
+ 'index' => $index,
+ 'type' => $type,
+ ];
+
+ $ids = array_map(function($row) {
+ return $row['_id'];
+ }, $result['hits']['hits']);
+
+ foreach ($ids as $id) {
+ $params['id'] = $id;
+ $client->delete($params);
+ }
+
+} catch (Exception $e) {
+ print $e->getMessage();
+}
diff --git a/examples/elasticsearch-7.2/index.php b/examples/elasticsearch-7.2/index.php
new file mode 100644
index 0000000..f157f05
--- /dev/null
+++ b/examples/elasticsearch-7.2/index.php
@@ -0,0 +1 @@
+HELLO!