From 280d7cd68cb60299bbf008cf46fc4dba7cedd86d Mon Sep 17 00:00:00 2001 From: Dominik Przybyl Date: Mon, 27 May 2024 22:53:22 +0200 Subject: [PATCH 1/3] added local type --- examples/go_local/Pulumi.yaml | 6 + examples/go_local/aem.yml | 258 ++++++++++++++++++++++ examples/go_local/go.mod | 98 +++++++++ examples/go_local/go.sum | 317 ++++++++++++++++++++++++++++ examples/go_local/main.go | 60 ++++++ examples/nodejs_local/.gitignore | 2 + examples/nodejs_local/Pulumi.yaml | 6 + examples/nodejs_local/aem.yml | 258 ++++++++++++++++++++++ examples/nodejs_local/index.ts | 46 ++++ examples/nodejs_local/package.json | 11 + examples/nodejs_local/tsconfig.json | 18 ++ provider/client/client.go | 13 -- provider/client/client_manager.go | 10 +- provider/client/connection_local.go | 46 ++++ provider/instance_client.go | 8 + 15 files changed, 1136 insertions(+), 21 deletions(-) create mode 100644 examples/go_local/Pulumi.yaml create mode 100644 examples/go_local/aem.yml create mode 100644 examples/go_local/go.mod create mode 100644 examples/go_local/go.sum create mode 100644 examples/go_local/main.go create mode 100644 examples/nodejs_local/.gitignore create mode 100644 examples/nodejs_local/Pulumi.yaml create mode 100644 examples/nodejs_local/aem.yml create mode 100644 examples/nodejs_local/index.ts create mode 100644 examples/nodejs_local/package.json create mode 100644 examples/nodejs_local/tsconfig.json create mode 100644 provider/client/connection_local.go diff --git a/examples/go_local/Pulumi.yaml b/examples/go_local/Pulumi.yaml new file mode 100644 index 0000000..7fe5974 --- /dev/null +++ b/examples/go_local/Pulumi.yaml @@ -0,0 +1,6 @@ +name: pulumi-aem +runtime: go +plugins: + providers: + - name: aem + path: ../../bin diff --git a/examples/go_local/aem.yml b/examples/go_local/aem.yml new file mode 100644 index 0000000..197db8d --- /dev/null +++ b/examples/go_local/aem.yml @@ -0,0 +1,258 @@ +# AEM instances to work with +instance: + + # Full details of local or remote instances + config: + local_author: + active: true + http_url: http://127.0.0.1:6502 + user: admin + password: admin + run_modes: [local] + jvm_opts: + - -server + - -Djava.awt.headless=true + - -Djava.io.tmpdir=[[canonicalPath .Path "aem/home/tmp"]] + - -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:16502 + - -Duser.language=en + - -Duser.country=US + - -Duser.timezone=UTC + start_opts: [] + secret_vars: + - ACME_SECRET=value + env_vars: + - ACME_VAR=value + sling_props: [] + local_publish: + active: true + http_url: http://127.0.0.1:6503 + user: admin + password: admin + run_modes: [local] + jvm_opts: + - -server + - -Djava.awt.headless=true + - -Djava.io.tmpdir=[[canonicalPath .Path "aem/home/tmp"]] + - -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:16503 + - -Duser.language=en + - -Duser.country=US + - -Duser.timezone=UTC + start_opts: [] + secret_vars: + - ACME_SECRET=value + env_vars: + - ACME_VAR=value + sling_props: [] + + # Tuning performance & reliability + # 'auto' - for more than 1 local instances - 'serial', otherwise 'parallel' + # 'parallel' - for working with remote instances + # 'serial' - for working with local instances + processing_mode: auto + + # HTTP client settings + http: + timeout: 10m + debug: false + disable_warn: true + + # State checking + check: + # Time to wait before first state checking (to avoid false-positives) + warmup: 1s + # Time to wait for next state checking + interval: 6s + # Number of successful check attempts that indicates end of checking + done_threshold: 3 + # Wait only for those instances whose state has been changed internally (unaware of external changes) + await_strict: true + # Max time to wait for the instance to be healthy after executing the start script or e.g deploying a package + await_started: + timeout: 30m + # Max time to wait for the instance to be stopped after executing the stop script + await_stopped: + timeout: 10m + # Max time in which socket connection to instance should be established + reachable: + skip: false + timeout: 3s + # Bundle state tracking + bundle_stable: + skip: false + symbolic_names_ignored: [] + # OSGi events tracking + event_stable: + skip: false + # Topics indicating that instance is not stable + topics_unstable: + - "org/osgi/framework/ServiceEvent/*" + - "org/osgi/framework/FrameworkEvent/*" + - "org/osgi/framework/BundleEvent/*" + # Ignored service names to handle known issues + details_ignored: + - "*.*MBean" + - "org.osgi.service.component.runtime.ServiceComponentRuntime" + - "java.util.ResourceBundle" + received_max_age: 5s + # OSGi components state tracking + component_stable: + skip: false + pids: + include: ['com.day.crx.packaging.*', 'org.apache.sling.installer.*'] + exclude: ['org.apache.sling.installer.hc.*', 'org.apache.sling.installer.core.impl.console.*'] + match: + "disabled": [] + "no config": [] + "unsatisfied (reference)": [] + "satisfied": [] + # Sling Installer tracking + installer: + skip: false + # JMX state checking + state: true + # Pause Installation nodes checking + pause: true + # Specific endpoints / paths (like login page) + path_ready: + timeout: 10s + login_page: + skip: false + path: "/libs/granite/core/content/login.html" + status_code: 200 + contained_text: QUICKSTART_HOMEPAGE + + # Managed locally (set up automatically) + local: + # Current runtime dir (Sling launchpad, JCR repository) + unpack_dir: "aem/home/var/instance" + # Archived runtime dir (AEM backup files '*.aemb.zst') + backup_dir: "aem/home/var/backup" + + # Oak Run tool options (offline instance management) + oak_run: + download_url: "https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/1.44.0/oak-run-1.44.0.jar" + store_path: "crx-quickstart/repository/segmentstore" + + # Source files + quickstart: + # AEM SDK ZIP or JAR + dist_file: 'aem/home/lib/{aem-sdk,cq-quickstart}-*.{zip,jar}' + # AEM License properties file + license_file: "aem/home/lib/license.properties" + + # Status discovery (timezone, AEM version, etc) + status: + timeout: 500ms + + # JCR Repository + repo: + property_change_ignored: + # AEM assigns them automatically + - "jcr:created" + - "cq:lastModified" + # AEM encrypts it right after changing by replication agent setup command + - "transportPassword" + + # CRX Package Manager + package: + # Force re-uploading/installing of snapshot AEM packages (just built / unreleased) + snapshot_patterns: [ "**/*-SNAPSHOT.zip" ] + snapshot_ignored: false + # Use checksums to avoid re-deployments when snapshot AEM packages are unchanged + snapshot_deploy_skipping: true + # Disable following workflow launchers for a package deployment time only + toggled_workflows: [/libs/settings/workflow/launcher/config/update_asset_*,/libs/settings/workflow/launcher/config/dam_*] + # Also sub-packages + install_recursive: true + # Use slower HTML endpoint for deployments but with better troubleshooting + install_html: + enabled: false + # Print HTML directly to console instead of writing to file + console: false + # Fail on case 'installed with errors' + strict: true + # Number of changes after which the commit to the repository is performed + install_save_threshold: 1024 + # Allows to relax dependency handling if needed + install_dependency_handling: required + # Controls how 'rep:policy' nodes are handled during import + install_ac_handling: '' + + # 'SSL By Default' + ssl: + setup_timeout: 30s + + # OSGi Framework + osgi: + shutdown_delay: 3s + + bundle: + install: + start: true + start_level: 20 + refresh_packages: true + + # Crypto Support + crypto: + key_bundle_symbolic_name: com.adobe.granite.crypto.file + + # Replication + replication: + bundle_symbolic_name: com.day.cq.cq-replication + + # Workflow Manager + workflow: + launcher: + lib_root: /libs/settings/workflow/launcher + config_root: /conf/global/settings/workflow/launcher + toggle_retry: + timeout: 10m + delay: 10s + +java: + # Require following versions before e.g running AEM instances + version_constraints: ">= 11, < 12" + + # Pre-installed local JDK dir + # a) keep it empty to download open source Java automatically for current OS and architecture + # b) set it to absolute path or to env var '[[.Env.JAVA_HOME]]' to indicate where closed source Java like Oracle is installed + home_dir: "" + + # Auto-installed JDK options + download: + # Source URL with template vars support + url: "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.18%2B10/OpenJDK11U-jdk_[[.Arch]]_[[.Os]]_hotspot_11.0.18_10.[[.ArchiveExt]]" + # Map source URL template vars to be compatible with Adoptium Java + replacements: + # Var 'Os' (GOOS) + "darwin": "mac" + # Var 'Arch' (GOARCH) + "x86_64": "x64" + "amd64": "x64" + "386": "x86-32" + # enforce non-ARM Java as some AEM features are not working on ARM (e.g Scene7) + "arm64": "x64" + "aarch64": "x64" + +base: + # Location of temporary files (downloaded AEM packages, etc) + tmp_dir: aem/home/tmp + # Location of supportive tools (downloaded Java, OakRun, unpacked AEM SDK) + tool_dir: aem/home/opt + +log: + level: info + timestamp_format: "2006-01-02 15:04:05" + full_timestamp: true + +input: + format: yml + file: STDIN + +output: + format: text + log: + # File path of logs written especially when output format is different than 'text' + file: aem/home/var/log/aem.log + # Controls where outputs and logs should be written to when format is 'text' (console|file|both) + mode: both diff --git a/examples/go_local/go.mod b/examples/go_local/go.mod new file mode 100644 index 0000000..011e001 --- /dev/null +++ b/examples/go_local/go.mod @@ -0,0 +1,98 @@ +module github.com/wttech/pulumi-aem/examples/go_aws_ssm + +go 1.21 + +replace github.com/wttech/pulumi-aem/sdk => ../../sdk + +require ( + github.com/pulumi/pulumi/sdk/v3 v3.117.0 + github.com/wttech/pulumi-aem/sdk v0.1.1 +) + +require ( + dario.cat/mergo v1.0.0 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/ProtonMail/go-crypto v1.0.0 // indirect + github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect + github.com/agext/levenshtein v1.2.3 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/atotto/clipboard v0.1.4 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/charmbracelet/bubbles v0.18.0 // indirect + github.com/charmbracelet/bubbletea v0.26.3 // indirect + github.com/charmbracelet/lipgloss v0.11.0 // indirect + github.com/charmbracelet/x/ansi v0.1.1 // indirect + github.com/charmbracelet/x/input v0.1.1 // indirect + github.com/charmbracelet/x/term v0.1.1 // indirect + github.com/charmbracelet/x/windows v0.1.2 // indirect + github.com/cheggaaa/pb v1.0.29 // indirect + github.com/cloudflare/circl v1.3.8 // indirect + github.com/cyphar/filepath-securejoin v0.2.5 // indirect + github.com/djherbis/times v1.6.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/go-billy/v5 v5.5.0 // indirect + github.com/go-git/go-git/v5 v5.12.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.2.1 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/hcl/v2 v2.20.1 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-localereader v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/muesli/termenv v0.15.2 // indirect + github.com/opentracing/basictracer-go v1.1.0 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pgavlin/fx v0.1.6 // indirect + github.com/pjbgf/sha1cd v0.3.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pkg/term v1.1.0 // indirect + github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect + github.com/pulumi/esc v0.8.3 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect + github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect + github.com/skeema/knownhosts v1.2.2 // indirect + github.com/spf13/cobra v1.8.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/stretchr/objx v0.2.0 // indirect + github.com/texttheater/golang-levenshtein v1.0.1 // indirect + github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 // indirect + github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + github.com/zclconf/go-cty v1.14.4 // indirect + go.uber.org/atomic v1.11.0 // indirect + golang.org/x/crypto v0.23.0 // indirect + golang.org/x/exp v0.0.0-20240525044651-4c93da0ed11d // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/term v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect + golang.org/x/tools v0.21.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e // indirect + google.golang.org/grpc v1.64.0 // indirect + google.golang.org/protobuf v1.34.1 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + lukechampine.com/frand v1.4.2 // indirect +) diff --git a/examples/go_local/go.sum b/examples/go_local/go.sum new file mode 100644 index 0000000..0853027 --- /dev/null +++ b/examples/go_local/go.sum @@ -0,0 +1,317 @@ +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= +github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/charmbracelet/bubbles v0.18.0 h1:PYv1A036luoBGroX6VWjQIE9Syf2Wby2oOl/39KLfy0= +github.com/charmbracelet/bubbles v0.18.0/go.mod h1:08qhZhtIwzgrtBjAcJnij1t1H0ZRjwHyGsy6AL11PSw= +github.com/charmbracelet/bubbletea v0.26.3 h1:iXyGvI+FfOWqkB2V07m1DF3xxQijxjY2j8PqiXYqasg= +github.com/charmbracelet/bubbletea v0.26.3/go.mod h1:bpZHfDHTYJC5g+FBK+ptJRCQotRC+Dhh3AoMxa/2+3Q= +github.com/charmbracelet/lipgloss v0.11.0 h1:UoAcbQ6Qml8hDwSWs0Y1cB5TEQuZkDPH/ZqwWWYTG4g= +github.com/charmbracelet/lipgloss v0.11.0/go.mod h1:1UdRTH9gYgpcdNN5oBtjbu/IzNKtzVtb7sqN1t9LNn8= +github.com/charmbracelet/x/ansi v0.1.1 h1:CGAduulr6egay/YVbGc8Hsu8deMg1xZ/bkaXTPi1JDk= +github.com/charmbracelet/x/ansi v0.1.1/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw= +github.com/charmbracelet/x/input v0.1.1 h1:YDOJaTUKCqtGnq9PHzx3pkkl4pXDOANUHmhH3DqMtM4= +github.com/charmbracelet/x/input v0.1.1/go.mod h1:jvdTVUnNWj/RD6hjC4FsoB0SeZCJ2ZBkiuFP9zXvZI0= +github.com/charmbracelet/x/term v0.1.1 h1:3cosVAiPOig+EV4X9U+3LDgtwwAoEzJjNdwbXDjF6yI= +github.com/charmbracelet/x/term v0.1.1/go.mod h1:wB1fHt5ECsu3mXYusyzcngVWWlu1KKUmmLhfgr/Flxw= +github.com/charmbracelet/x/windows v0.1.2 h1:Iumiwq2G+BRmgoayww/qfcvof7W/3uLoelhxojXlRWg= +github.com/charmbracelet/x/windows v0.1.2/go.mod h1:GLEO/l+lizvFDBPLIOk+49gdX49L9YWMB5t+DZd0jkQ= +github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= +github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.8 h1:j+V8jJt09PoeMFIu2uh5JUyEaIHTXVOHslFoLNAKqwI= +github.com/cloudflare/circl v1.3.8/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cyphar/filepath-securejoin v0.2.5 h1:6iR5tXJ/e6tJZzzdMc1km3Sa7RRIVBKAK32O2s7AYfo= +github.com/cyphar/filepath-securejoin v0.2.5/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c= +github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= +github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE= +github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= +github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys= +github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v1.2.1 h1:OptwRhECazUx5ix5TTWC3EZhsZEHWcYWY4FQHTIubm4= +github.com/golang/glog v1.2.1/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/hcl/v2 v2.20.1 h1:M6hgdyz7HYt1UN9e61j+qKJBqR3orTWbI1HKBJEdxtc= +github.com/hashicorp/hcl/v2 v2.20.1/go.mod h1:TZDqQ4kNKCbh1iJp99FdPiUaVDDUPivbqxZulxDYqL4= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= +github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= +github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= +github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pgavlin/fx v0.1.6 h1:r9jEg69DhNoCd3Xh0+5mIbdbS3PqWrVWujkY76MFRTU= +github.com/pgavlin/fx v0.1.6/go.mod h1:KWZJ6fqBBSh8GxHYqwYCf3rYE7Gp2p0N8tJp8xv9u9M= +github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= +github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0= +github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= +github.com/pulumi/esc v0.8.3 h1:myeDL6dD/mz34zZjCL8s7d/tWHBJYxfMxDCL11MHoqc= +github.com/pulumi/esc v0.8.3/go.mod h1:v5VAPxYDa9DRwvubbzKt4ZYf5y0esWC2ccSp/AT923I= +github.com/pulumi/pulumi/sdk/v3 v3.117.0 h1:ImIsukZ2ZIYQG94uWdSZl9dJjJTosQSTsOQTauTNX7U= +github.com/pulumi/pulumi/sdk/v3 v3.117.0/go.mod h1:kNea72+FQk82OjZ3yEP4dl6nbAl2ngE8PDBc0iFAaHg= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= +github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= +github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 h1:X9dsIWPuuEJlPX//UmRKophhOKCGXc46RVIGuttks68= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7/go.mod h1:UxoP3EypF8JfGEjAII8jx1q8rQyDnX8qdTCs/UQBVIE= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8= +github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/exp v0.0.0-20240525044651-4c93da0ed11d h1:N0hmiNbwsSNwHBAvR3QB5w25pUwH4tK0Y/RltD1j1h4= +golang.org/x/exp v0.0.0-20240525044651-4c93da0ed11d/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= +golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e h1:Elxv5MwEkCI9f5SkoL6afed6NTdxaGoAo39eANBwHL8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= +google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +lukechampine.com/frand v1.4.2 h1:RzFIpOvkMXuPMBb9maa4ND4wjBn71E1Jpf8BzJHMaVw= +lukechampine.com/frand v1.4.2/go.mod h1:4S/TM2ZgrKejMcKMbeLjISpJMO+/eZ1zu3vYX9dtj3s= +pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= +pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= diff --git a/examples/go_local/main.go b/examples/go_local/main.go new file mode 100644 index 0000000..798cc13 --- /dev/null +++ b/examples/go_local/main.go @@ -0,0 +1,60 @@ +package main + +import ( + _ "embed" + "fmt" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/wttech/pulumi-aem/sdk/go/aem/compose" +) + +//go:embed aem.yml +var configYML string + +func main() { + pulumi.Run(func(ctx *pulumi.Context) error { + env := ctx.Stack() + dataDir := fmt.Sprintf("~/data/%s", env) + composeDir := fmt.Sprintf("%s/aemc", dataDir) + workDir := fmt.Sprintf("~/tmp/%s/aemc", env) + libraryDir := "~/lib" + + _, err := compose.NewInstance(ctx, "aem_instance", &compose.InstanceArgs{ + Client: compose.ClientArgs{ + Type: pulumi.String("local"), + Settings: pulumi.StringMap{}, + }, + System: compose.SystemArgs{ + Data_dir: pulumi.String(composeDir), + Work_dir: pulumi.String(workDir), + Bootstrap: compose.InstanceScriptArgs{ + Inline: pulumi.StringArray{}, + }, + }, + Compose: compose.ComposeArgs{ + Config: pulumi.String(configYML), + Create: compose.InstanceScriptArgs{ + Inline: pulumi.StringArray{ + pulumi.Sprintf("mkdir -p %s/aem/home/lib", composeDir), + pulumi.Sprintf("cp %s/* %s/aem/home/lib", libraryDir, composeDir), + pulumi.String("sh aemw instance init"), + pulumi.String("sh aemw instance create"), + }, + }, + Configure: compose.InstanceScriptArgs{ + Inline: pulumi.StringArray{ + pulumi.String("sh aemw osgi config save --pid 'org.apache.sling.jcr.davex.impl.servlets.SlingDavExServlet' --input-string 'alias: /crx/server'"), + pulumi.String("sh aemw repl agent setup -A --location 'author' --name 'publish' --input-string '{enabled: true, transportUri: \"http://localhost:4503/bin/receive?sling:authRequestLogin=1\", transportUser: admin, transportPassword: admin, userId: admin}'"), + }, + }, + }, + }) + if err != nil { + return err + } + + ctx.Export("output", pulumi.Map{ + "instanceIp": pulumi.String("127:0:0:1"), + }) + return nil + }) +} diff --git a/examples/nodejs_local/.gitignore b/examples/nodejs_local/.gitignore new file mode 100644 index 0000000..dc902b5 --- /dev/null +++ b/examples/nodejs_local/.gitignore @@ -0,0 +1,2 @@ +/bin/ +/node_modules/ \ No newline at end of file diff --git a/examples/nodejs_local/Pulumi.yaml b/examples/nodejs_local/Pulumi.yaml new file mode 100644 index 0000000..25eb9a3 --- /dev/null +++ b/examples/nodejs_local/Pulumi.yaml @@ -0,0 +1,6 @@ +name: pulumi-aem +runtime: nodejs +plugins: + providers: + - name: aem + path: ../../bin diff --git a/examples/nodejs_local/aem.yml b/examples/nodejs_local/aem.yml new file mode 100644 index 0000000..197db8d --- /dev/null +++ b/examples/nodejs_local/aem.yml @@ -0,0 +1,258 @@ +# AEM instances to work with +instance: + + # Full details of local or remote instances + config: + local_author: + active: true + http_url: http://127.0.0.1:6502 + user: admin + password: admin + run_modes: [local] + jvm_opts: + - -server + - -Djava.awt.headless=true + - -Djava.io.tmpdir=[[canonicalPath .Path "aem/home/tmp"]] + - -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:16502 + - -Duser.language=en + - -Duser.country=US + - -Duser.timezone=UTC + start_opts: [] + secret_vars: + - ACME_SECRET=value + env_vars: + - ACME_VAR=value + sling_props: [] + local_publish: + active: true + http_url: http://127.0.0.1:6503 + user: admin + password: admin + run_modes: [local] + jvm_opts: + - -server + - -Djava.awt.headless=true + - -Djava.io.tmpdir=[[canonicalPath .Path "aem/home/tmp"]] + - -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:16503 + - -Duser.language=en + - -Duser.country=US + - -Duser.timezone=UTC + start_opts: [] + secret_vars: + - ACME_SECRET=value + env_vars: + - ACME_VAR=value + sling_props: [] + + # Tuning performance & reliability + # 'auto' - for more than 1 local instances - 'serial', otherwise 'parallel' + # 'parallel' - for working with remote instances + # 'serial' - for working with local instances + processing_mode: auto + + # HTTP client settings + http: + timeout: 10m + debug: false + disable_warn: true + + # State checking + check: + # Time to wait before first state checking (to avoid false-positives) + warmup: 1s + # Time to wait for next state checking + interval: 6s + # Number of successful check attempts that indicates end of checking + done_threshold: 3 + # Wait only for those instances whose state has been changed internally (unaware of external changes) + await_strict: true + # Max time to wait for the instance to be healthy after executing the start script or e.g deploying a package + await_started: + timeout: 30m + # Max time to wait for the instance to be stopped after executing the stop script + await_stopped: + timeout: 10m + # Max time in which socket connection to instance should be established + reachable: + skip: false + timeout: 3s + # Bundle state tracking + bundle_stable: + skip: false + symbolic_names_ignored: [] + # OSGi events tracking + event_stable: + skip: false + # Topics indicating that instance is not stable + topics_unstable: + - "org/osgi/framework/ServiceEvent/*" + - "org/osgi/framework/FrameworkEvent/*" + - "org/osgi/framework/BundleEvent/*" + # Ignored service names to handle known issues + details_ignored: + - "*.*MBean" + - "org.osgi.service.component.runtime.ServiceComponentRuntime" + - "java.util.ResourceBundle" + received_max_age: 5s + # OSGi components state tracking + component_stable: + skip: false + pids: + include: ['com.day.crx.packaging.*', 'org.apache.sling.installer.*'] + exclude: ['org.apache.sling.installer.hc.*', 'org.apache.sling.installer.core.impl.console.*'] + match: + "disabled": [] + "no config": [] + "unsatisfied (reference)": [] + "satisfied": [] + # Sling Installer tracking + installer: + skip: false + # JMX state checking + state: true + # Pause Installation nodes checking + pause: true + # Specific endpoints / paths (like login page) + path_ready: + timeout: 10s + login_page: + skip: false + path: "/libs/granite/core/content/login.html" + status_code: 200 + contained_text: QUICKSTART_HOMEPAGE + + # Managed locally (set up automatically) + local: + # Current runtime dir (Sling launchpad, JCR repository) + unpack_dir: "aem/home/var/instance" + # Archived runtime dir (AEM backup files '*.aemb.zst') + backup_dir: "aem/home/var/backup" + + # Oak Run tool options (offline instance management) + oak_run: + download_url: "https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/1.44.0/oak-run-1.44.0.jar" + store_path: "crx-quickstart/repository/segmentstore" + + # Source files + quickstart: + # AEM SDK ZIP or JAR + dist_file: 'aem/home/lib/{aem-sdk,cq-quickstart}-*.{zip,jar}' + # AEM License properties file + license_file: "aem/home/lib/license.properties" + + # Status discovery (timezone, AEM version, etc) + status: + timeout: 500ms + + # JCR Repository + repo: + property_change_ignored: + # AEM assigns them automatically + - "jcr:created" + - "cq:lastModified" + # AEM encrypts it right after changing by replication agent setup command + - "transportPassword" + + # CRX Package Manager + package: + # Force re-uploading/installing of snapshot AEM packages (just built / unreleased) + snapshot_patterns: [ "**/*-SNAPSHOT.zip" ] + snapshot_ignored: false + # Use checksums to avoid re-deployments when snapshot AEM packages are unchanged + snapshot_deploy_skipping: true + # Disable following workflow launchers for a package deployment time only + toggled_workflows: [/libs/settings/workflow/launcher/config/update_asset_*,/libs/settings/workflow/launcher/config/dam_*] + # Also sub-packages + install_recursive: true + # Use slower HTML endpoint for deployments but with better troubleshooting + install_html: + enabled: false + # Print HTML directly to console instead of writing to file + console: false + # Fail on case 'installed with errors' + strict: true + # Number of changes after which the commit to the repository is performed + install_save_threshold: 1024 + # Allows to relax dependency handling if needed + install_dependency_handling: required + # Controls how 'rep:policy' nodes are handled during import + install_ac_handling: '' + + # 'SSL By Default' + ssl: + setup_timeout: 30s + + # OSGi Framework + osgi: + shutdown_delay: 3s + + bundle: + install: + start: true + start_level: 20 + refresh_packages: true + + # Crypto Support + crypto: + key_bundle_symbolic_name: com.adobe.granite.crypto.file + + # Replication + replication: + bundle_symbolic_name: com.day.cq.cq-replication + + # Workflow Manager + workflow: + launcher: + lib_root: /libs/settings/workflow/launcher + config_root: /conf/global/settings/workflow/launcher + toggle_retry: + timeout: 10m + delay: 10s + +java: + # Require following versions before e.g running AEM instances + version_constraints: ">= 11, < 12" + + # Pre-installed local JDK dir + # a) keep it empty to download open source Java automatically for current OS and architecture + # b) set it to absolute path or to env var '[[.Env.JAVA_HOME]]' to indicate where closed source Java like Oracle is installed + home_dir: "" + + # Auto-installed JDK options + download: + # Source URL with template vars support + url: "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.18%2B10/OpenJDK11U-jdk_[[.Arch]]_[[.Os]]_hotspot_11.0.18_10.[[.ArchiveExt]]" + # Map source URL template vars to be compatible with Adoptium Java + replacements: + # Var 'Os' (GOOS) + "darwin": "mac" + # Var 'Arch' (GOARCH) + "x86_64": "x64" + "amd64": "x64" + "386": "x86-32" + # enforce non-ARM Java as some AEM features are not working on ARM (e.g Scene7) + "arm64": "x64" + "aarch64": "x64" + +base: + # Location of temporary files (downloaded AEM packages, etc) + tmp_dir: aem/home/tmp + # Location of supportive tools (downloaded Java, OakRun, unpacked AEM SDK) + tool_dir: aem/home/opt + +log: + level: info + timestamp_format: "2006-01-02 15:04:05" + full_timestamp: true + +input: + format: yml + file: STDIN + +output: + format: text + log: + # File path of logs written especially when output format is different than 'text' + file: aem/home/var/log/aem.log + # Controls where outputs and logs should be written to when format is 'text' (console|file|both) + mode: both diff --git a/examples/nodejs_local/index.ts b/examples/nodejs_local/index.ts new file mode 100644 index 0000000..ea9a37a --- /dev/null +++ b/examples/nodejs_local/index.ts @@ -0,0 +1,46 @@ +import * as aem from "@wttech/aem"; +import * as pulumi from "@pulumi/pulumi"; +import * as fs from "fs"; + +const configYML = fs.readFileSync("aem.yml", "utf8"); + +const env = pulumi.getStack() +const dataDir = `/data/${env}` +const composeDir = `${dataDir}/aemc` +const workDir = `~/tmp/${env}/aemc` +const libraryDir = "~/lib" + +new aem.compose.Instance("aem_instance", { + client: { + type: "local", + settings: {}, + }, + system: { + data_dir: composeDir, + work_dir: workDir, + bootstrap: { + inline: [], + }, + }, + compose: { + config: configYML, + create: { + inline: [ + `mkdir -p ${composeDir}/aem/home/lib`, + `cp ${libraryDir}/* ${composeDir}/aem/home/lib`, + "sh aemw instance init", + "sh aemw instance create", + ], + }, + configure: { + inline: [ + "sh aemw osgi config save --pid 'org.apache.sling.jcr.davex.impl.servlets.SlingDavExServlet' --input-string 'alias: /crx/server'", + "sh aemw repl agent setup -A --location 'author' --name 'publish' --input-string '{enabled: true, transportUri: \"http://localhost:4503/bin/receive?sling:authRequestLogin=1\", transportUser: admin, transportPassword: admin, userId: admin}'", + ], + }, + } +}); + +export const output = { + instanceIp: "127.0.0.1", +}; diff --git a/examples/nodejs_local/package.json b/examples/nodejs_local/package.json new file mode 100644 index 0000000..ab0d24e --- /dev/null +++ b/examples/nodejs_local/package.json @@ -0,0 +1,11 @@ +{ + "name": "pulumi-aem", + "devDependencies": { + "@types/node": "^14" + }, + "dependencies": { + "typescript": "^4.0.0", + "fs": "0.0.1-security", + "@wttech/aem": "0.1.1" + } +} \ No newline at end of file diff --git a/examples/nodejs_local/tsconfig.json b/examples/nodejs_local/tsconfig.json new file mode 100644 index 0000000..11fc69a --- /dev/null +++ b/examples/nodejs_local/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "strict": true, + "outDir": "bin", + "target": "es2016", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "experimentalDecorators": true, + "pretty": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.ts", + ] +} \ No newline at end of file diff --git a/provider/client/client.go b/provider/client/client.go index bae25ab..9528ef5 100644 --- a/provider/client/client.go +++ b/provider/client/client.go @@ -24,19 +24,6 @@ func (c Client) TypeName() string { return c.typeName } -func (c Client) Use(callback func(c Client) error) error { - if err := c.Connect(); err != nil { - return err - } - if err := callback(c); err != nil { - return err - } - if err := c.Disconnect(); err != nil { - return err - } - return nil -} - func (c Client) Connect() error { return c.connection.Connect() } diff --git a/provider/client/client_manager.go b/provider/client/client_manager.go index 8f37b5d..423747e 100644 --- a/provider/client/client_manager.go +++ b/provider/client/client_manager.go @@ -20,14 +20,6 @@ func (c ClientManager) Make(typeName string, settings map[string]string) (*Clien }, nil } -func (c ClientManager) Use(typeName string, settings map[string]string, callback func(c Client) error) error { - client, err := c.Make(typeName, settings) - if err != nil { - return err - } - return client.Use(callback) -} - func (c ClientManager) connection(typeName string, settings map[string]string) (Connection, error) { switch typeName { case "ssh": @@ -48,6 +40,8 @@ func (c ClientManager) connection(typeName string, settings map[string]string) ( commandWaitMin: cast.ToDuration(settings["command_wait_min"]), commandWaitMax: cast.ToDuration(settings["command_wait_max"]), }, nil + case "local": + return &LocalConnection{}, nil } return nil, fmt.Errorf("unknown AEM client type: %s", typeName) } diff --git a/provider/client/connection_local.go b/provider/client/connection_local.go new file mode 100644 index 0000000..7637417 --- /dev/null +++ b/provider/client/connection_local.go @@ -0,0 +1,46 @@ +package client + +import ( + "fmt" + "os/exec" + "strings" +) + +type LocalConnection struct { +} + +func (a *LocalConnection) Info() string { + return "local environment" +} + +func (a *LocalConnection) User() string { + return "" +} + +func (a *LocalConnection) Connect() error { + return nil +} + +func (a *LocalConnection) Disconnect() error { + return nil +} + +func (a *LocalConnection) Command(cmdLine []string) ([]byte, error) { + var alterCmdLine []string + for _, cmdElem := range cmdLine { + alterCmdLine = append(alterCmdLine, strings.Trim(cmdElem, `"`)) + } + cmd := exec.Command(alterCmdLine[0], alterCmdLine[1:]...) + output, err := cmd.Output() + if err != nil { + return nil, fmt.Errorf("local: error executing command: %v", err) + } + return output, nil +} + +func (a *LocalConnection) CopyFile(localPath string, remotePath string) error { + cmd := fmt.Sprintf("cp %s %s", localPath, remotePath) + cmdLine := []string{"sh", "-c", "\"" + cmd + "\""} + _, err := a.Command(cmdLine) + return err +} diff --git a/provider/instance_client.go b/provider/instance_client.go index 04a5dca..12170da 100644 --- a/provider/instance_client.go +++ b/provider/instance_client.go @@ -104,6 +104,10 @@ func (ic *InstanceClient) saveProfileScript() error { } func (ic *InstanceClient) configureService() error { + if ic.data.Client.Type == "local" { + return nil + } + user := ic.data.System.User if user == "" { user = ic.cl.Connection().User() @@ -132,6 +136,10 @@ func (ic *InstanceClient) configureService() error { } func (ic *InstanceClient) runServiceAction(action string) error { + if ic.data.Client.Type == "local" { + return nil + } + ic.cl.Sudo = true defer func() { ic.cl.Sudo = false }() From 5c68305a5ae7a92209ee7e890894e28632b5d365 Mon Sep 17 00:00:00 2001 From: Dominik Przybyl Date: Sat, 15 Jun 2024 13:51:54 +0200 Subject: [PATCH 2/3] added local type --- examples/go_local/main.go | 5 +++-- provider/cmd/pulumi-resource-aem/schema.json | 6 +++++- provider/instance_client.go | 4 ++-- provider/provider.go | 15 +++++++++------ sdk/dotnet/Compose/Inputs/SystemArgs.cs | 6 ++++++ sdk/dotnet/Compose/Outputs/System.cs | 7 +++++++ sdk/dotnet/version.txt | 2 +- sdk/go/aem/compose/pulumiTypes.go | 19 +++++++++++++++++++ sdk/nodejs/types/input.ts | 4 ++++ sdk/nodejs/types/output.ts | 4 ++++ sdk/python/wttech_aem/compose/_inputs.py | 16 ++++++++++++++++ sdk/python/wttech_aem/compose/outputs.py | 12 ++++++++++++ 12 files changed, 88 insertions(+), 12 deletions(-) diff --git a/examples/go_local/main.go b/examples/go_local/main.go index 798cc13..cdca112 100644 --- a/examples/go_local/main.go +++ b/examples/go_local/main.go @@ -24,8 +24,9 @@ func main() { Settings: pulumi.StringMap{}, }, System: compose.SystemArgs{ - Data_dir: pulumi.String(composeDir), - Work_dir: pulumi.String(workDir), + Data_dir: pulumi.String(composeDir), + Work_dir: pulumi.String(workDir), + Service_enabled: pulumi.Bool(false), Bootstrap: compose.InstanceScriptArgs{ Inline: pulumi.StringArray{}, }, diff --git a/provider/cmd/pulumi-resource-aem/schema.json b/provider/cmd/pulumi-resource-aem/schema.json index 6d1af4a..d0007c7 100644 --- a/provider/cmd/pulumi-resource-aem/schema.json +++ b/provider/cmd/pulumi-resource-aem/schema.json @@ -1,6 +1,6 @@ { "name": "aem", - "version": "0.1.2-alpha.1716160755+bb5916a5.dirty", + "version": "0.1.2-alpha.1718453175+e73fab23", "description": "Easily manage AEM instances in the cloud without a deep dev-ops knowledge", "keywords": [ "pulumi", @@ -191,6 +191,10 @@ "type": "string", "description": "Contents of the AEM system service definition file (systemd)." }, + "service_enabled": { + "type": "boolean", + "description": "Enabled the AEM system service (systemd)." + }, "user": { "type": "string", "description": "System user under which AEM instance will be running. By default, the same as the user used to connect to the machine." diff --git a/provider/instance_client.go b/provider/instance_client.go index 12170da..1eb241b 100644 --- a/provider/instance_client.go +++ b/provider/instance_client.go @@ -104,7 +104,7 @@ func (ic *InstanceClient) saveProfileScript() error { } func (ic *InstanceClient) configureService() error { - if ic.data.Client.Type == "local" { + if !ic.data.System.ServiceEnabled || ic.data.Client.Type == "local" { return nil } @@ -136,7 +136,7 @@ func (ic *InstanceClient) configureService() error { } func (ic *InstanceClient) runServiceAction(action string) error { - if ic.data.Client.Type == "local" { + if !ic.data.System.ServiceEnabled || ic.data.Client.Type == "local" { return nil } diff --git a/provider/provider.go b/provider/provider.go index 41b97c1..b1718de 100644 --- a/provider/provider.go +++ b/provider/provider.go @@ -98,18 +98,20 @@ func (m *Client) Annotate(a infer.Annotator) { } type System struct { - DataDir string `pulumi:"data_dir,optional"` - WorkDir string `pulumi:"work_dir,optional"` - Env map[string]string `pulumi:"env,optional"` - ServiceConfig string `pulumi:"service_config,optional"` - User string `pulumi:"user,optional"` - Bootstrap *InstanceScript `pulumi:"bootstrap,optional"` + DataDir string `pulumi:"data_dir,optional"` + WorkDir string `pulumi:"work_dir,optional"` + Env map[string]string `pulumi:"env,optional"` + ServiceEnabled bool `pulumi:"service_enabled,optional"` + ServiceConfig string `pulumi:"service_config,optional"` + User string `pulumi:"user,optional"` + Bootstrap *InstanceScript `pulumi:"bootstrap,optional"` } func (m *System) Annotate(a infer.Annotator) { a.Describe(&m.DataDir, "Remote root path in which AEM Compose files and unpacked AEM instances will be stored.") a.Describe(&m.WorkDir, "Remote root path where provider-related files will be stored.") a.Describe(&m.Env, "Environment variables for AEM instances.") + a.Describe(&m.ServiceEnabled, "Enabled the AEM system service (systemd).") a.Describe(&m.ServiceConfig, "Contents of the AEM system service definition file (systemd).") a.Describe(&m.User, "System user under which AEM instance will be running. By default, the same as the user used to connect to the machine.") a.Describe(&m.Bootstrap, "Script executed once upon instance connection, often for mounting on VM data volumes from attached disks (e.g., AWS EBS, Azure Disk Storage). This script runs only once, even during instance recreation, as changes are typically persistent and system-wide. If re-execution is needed, it is recommended to set up a new machine.") @@ -247,6 +249,7 @@ func (Instance) Check(ctx p.Context, name string, oldInputs, newInputs resource. setDefaultInlineScripts(inputs, "bootstrap", []string{}) setDefaultValue(inputs, "data_dir", resource.NewStringProperty("/mnt/aemc")) setDefaultValue(inputs, "work_dir", resource.NewStringProperty("/tmp/aemc")) + setDefaultValue(inputs, "service_enabled", resource.NewBoolProperty(true)) setDefaultValue(inputs, "service_config", resource.NewStringProperty(instance.ServiceConf)) setDefaultValue(inputs, "user", resource.NewStringProperty("")) setDefaultValue(inputs, "env", resource.NewObjectProperty(resource.PropertyMap{})) diff --git a/sdk/dotnet/Compose/Inputs/SystemArgs.cs b/sdk/dotnet/Compose/Inputs/SystemArgs.cs index bd84216..7694594 100644 --- a/sdk/dotnet/Compose/Inputs/SystemArgs.cs +++ b/sdk/dotnet/Compose/Inputs/SystemArgs.cs @@ -43,6 +43,12 @@ public InputMap Env [Input("service_config")] public Input? Service_config { get; set; } + /// + /// Enabled the AEM system service (systemd). + /// + [Input("service_enabled")] + public Input? Service_enabled { get; set; } + /// /// System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. /// diff --git a/sdk/dotnet/Compose/Outputs/System.cs b/sdk/dotnet/Compose/Outputs/System.cs index 7204a82..885f87e 100644 --- a/sdk/dotnet/Compose/Outputs/System.cs +++ b/sdk/dotnet/Compose/Outputs/System.cs @@ -31,6 +31,10 @@ public sealed class System /// public readonly string? Service_config; /// + /// Enabled the AEM system service (systemd). + /// + public readonly bool? Service_enabled; + /// /// System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. /// public readonly string? User; @@ -49,6 +53,8 @@ private System( string? service_config, + bool? service_enabled, + string? user, string? work_dir) @@ -57,6 +63,7 @@ private System( Data_dir = data_dir; Env = env; Service_config = service_config; + Service_enabled = service_enabled; User = user; Work_dir = work_dir; } diff --git a/sdk/dotnet/version.txt b/sdk/dotnet/version.txt index c614de8..e109159 100644 --- a/sdk/dotnet/version.txt +++ b/sdk/dotnet/version.txt @@ -1 +1 @@ -0.1.2-alpha.1716160755+bb5916a5.dirty +0.1.2-alpha.1718453175+e73fab23 diff --git a/sdk/go/aem/compose/pulumiTypes.go b/sdk/go/aem/compose/pulumiTypes.go index 28708ac..28da91a 100644 --- a/sdk/go/aem/compose/pulumiTypes.go +++ b/sdk/go/aem/compose/pulumiTypes.go @@ -577,6 +577,8 @@ type System struct { Env map[string]string `pulumi:"env"` // Contents of the AEM system service definition file (systemd). Service_config *string `pulumi:"service_config"` + // Enabled the AEM system service (systemd). + Service_enabled *bool `pulumi:"service_enabled"` // System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. User *string `pulumi:"user"` // Remote root path where provider-related files will be stored. @@ -603,6 +605,8 @@ type SystemArgs struct { Env pulumi.StringMapInput `pulumi:"env"` // Contents of the AEM system service definition file (systemd). Service_config pulumi.StringPtrInput `pulumi:"service_config"` + // Enabled the AEM system service (systemd). + Service_enabled pulumi.BoolPtrInput `pulumi:"service_enabled"` // System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. User pulumi.StringPtrInput `pulumi:"user"` // Remote root path where provider-related files will be stored. @@ -706,6 +710,11 @@ func (o SystemOutput) Service_config() pulumi.StringPtrOutput { return o.ApplyT(func(v System) *string { return v.Service_config }).(pulumi.StringPtrOutput) } +// Enabled the AEM system service (systemd). +func (o SystemOutput) Service_enabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v System) *bool { return v.Service_enabled }).(pulumi.BoolPtrOutput) +} + // System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. func (o SystemOutput) User() pulumi.StringPtrOutput { return o.ApplyT(func(v System) *string { return v.User }).(pulumi.StringPtrOutput) @@ -780,6 +789,16 @@ func (o SystemPtrOutput) Service_config() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +// Enabled the AEM system service (systemd). +func (o SystemPtrOutput) Service_enabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *System) *bool { + if v == nil { + return nil + } + return v.Service_enabled + }).(pulumi.BoolPtrOutput) +} + // System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. func (o SystemPtrOutput) User() pulumi.StringPtrOutput { return o.ApplyT(func(v *System) *string { diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts index 8c49205..a99caa8 100644 --- a/sdk/nodejs/types/input.ts +++ b/sdk/nodejs/types/input.ts @@ -84,6 +84,10 @@ export namespace compose { * Contents of the AEM system service definition file (systemd). */ service_config?: pulumi.Input; + /** + * Enabled the AEM system service (systemd). + */ + service_enabled?: pulumi.Input; /** * System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. */ diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts index 2b2610b..73ebe3b 100644 --- a/sdk/nodejs/types/output.ts +++ b/sdk/nodejs/types/output.ts @@ -111,6 +111,10 @@ export namespace compose { * Contents of the AEM system service definition file (systemd). */ service_config?: string; + /** + * Enabled the AEM system service (systemd). + */ + service_enabled?: boolean; /** * System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. */ diff --git a/sdk/python/wttech_aem/compose/_inputs.py b/sdk/python/wttech_aem/compose/_inputs.py index 45320df..7b89c1d 100644 --- a/sdk/python/wttech_aem/compose/_inputs.py +++ b/sdk/python/wttech_aem/compose/_inputs.py @@ -250,6 +250,7 @@ def __init__(__self__, *, data_dir: Optional[pulumi.Input[str]] = None, env: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, service_config: Optional[pulumi.Input[str]] = None, + service_enabled: Optional[pulumi.Input[bool]] = None, user: Optional[pulumi.Input[str]] = None, work_dir: Optional[pulumi.Input[str]] = None): """ @@ -257,6 +258,7 @@ def __init__(__self__, *, :param pulumi.Input[str] data_dir: Remote root path in which AEM Compose files and unpacked AEM instances will be stored. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] env: Environment variables for AEM instances. :param pulumi.Input[str] service_config: Contents of the AEM system service definition file (systemd). + :param pulumi.Input[bool] service_enabled: Enabled the AEM system service (systemd). :param pulumi.Input[str] user: System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. :param pulumi.Input[str] work_dir: Remote root path where provider-related files will be stored. """ @@ -268,6 +270,8 @@ def __init__(__self__, *, pulumi.set(__self__, "env", env) if service_config is not None: pulumi.set(__self__, "service_config", service_config) + if service_enabled is not None: + pulumi.set(__self__, "service_enabled", service_enabled) if user is not None: pulumi.set(__self__, "user", user) if work_dir is not None: @@ -321,6 +325,18 @@ def service_config(self) -> Optional[pulumi.Input[str]]: def service_config(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "service_config", value) + @property + @pulumi.getter + def service_enabled(self) -> Optional[pulumi.Input[bool]]: + """ + Enabled the AEM system service (systemd). + """ + return pulumi.get(self, "service_enabled") + + @service_enabled.setter + def service_enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "service_enabled", value) + @property @pulumi.getter def user(self) -> Optional[pulumi.Input[str]]: diff --git a/sdk/python/wttech_aem/compose/outputs.py b/sdk/python/wttech_aem/compose/outputs.py index f45542f..083fc52 100644 --- a/sdk/python/wttech_aem/compose/outputs.py +++ b/sdk/python/wttech_aem/compose/outputs.py @@ -273,6 +273,7 @@ def __init__(__self__, *, data_dir: Optional[str] = None, env: Optional[Mapping[str, str]] = None, service_config: Optional[str] = None, + service_enabled: Optional[bool] = None, user: Optional[str] = None, work_dir: Optional[str] = None): """ @@ -280,6 +281,7 @@ def __init__(__self__, *, :param str data_dir: Remote root path in which AEM Compose files and unpacked AEM instances will be stored. :param Mapping[str, str] env: Environment variables for AEM instances. :param str service_config: Contents of the AEM system service definition file (systemd). + :param bool service_enabled: Enabled the AEM system service (systemd). :param str user: System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. :param str work_dir: Remote root path where provider-related files will be stored. """ @@ -291,6 +293,8 @@ def __init__(__self__, *, pulumi.set(__self__, "env", env) if service_config is not None: pulumi.set(__self__, "service_config", service_config) + if service_enabled is not None: + pulumi.set(__self__, "service_enabled", service_enabled) if user is not None: pulumi.set(__self__, "user", user) if work_dir is not None: @@ -328,6 +332,14 @@ def service_config(self) -> Optional[str]: """ return pulumi.get(self, "service_config") + @property + @pulumi.getter + def service_enabled(self) -> Optional[bool]: + """ + Enabled the AEM system service (systemd). + """ + return pulumi.get(self, "service_enabled") + @property @pulumi.getter def user(self) -> Optional[str]: From 7ccb428eba59fc2e233fd8fb1f2bedcd00e437fc Mon Sep 17 00:00:00 2001 From: Dominik Przybyl Date: Mon, 17 Jun 2024 09:43:16 +0200 Subject: [PATCH 3/3] added local type (service_name) --- provider/cmd/pulumi-resource-aem/schema.json | 6 +++++- provider/instance_client.go | 17 ++++++++++++----- provider/provider.go | 2 ++ sdk/dotnet/Compose/Inputs/SystemArgs.cs | 6 ++++++ sdk/dotnet/Compose/Outputs/System.cs | 7 +++++++ sdk/dotnet/version.txt | 2 +- sdk/go/aem/compose/pulumiTypes.go | 19 +++++++++++++++++++ sdk/nodejs/types/input.ts | 4 ++++ sdk/nodejs/types/output.ts | 4 ++++ sdk/python/wttech_aem/compose/_inputs.py | 16 ++++++++++++++++ sdk/python/wttech_aem/compose/outputs.py | 12 ++++++++++++ 11 files changed, 88 insertions(+), 7 deletions(-) diff --git a/provider/cmd/pulumi-resource-aem/schema.json b/provider/cmd/pulumi-resource-aem/schema.json index d0007c7..406e4d4 100644 --- a/provider/cmd/pulumi-resource-aem/schema.json +++ b/provider/cmd/pulumi-resource-aem/schema.json @@ -1,6 +1,6 @@ { "name": "aem", - "version": "0.1.2-alpha.1718453175+e73fab23", + "version": "0.1.2-alpha.1718453293+5c68305a.dirty", "description": "Easily manage AEM instances in the cloud without a deep dev-ops knowledge", "keywords": [ "pulumi", @@ -195,6 +195,10 @@ "type": "boolean", "description": "Enabled the AEM system service (systemd)." }, + "service_name": { + "type": "string", + "description": "Name of the AEM system service (systemd)." + }, "user": { "type": "string", "description": "System user under which AEM instance will be running. By default, the same as the user used to connect to the machine." diff --git a/provider/instance_client.go b/provider/instance_client.go index 1eb241b..cd754a2 100644 --- a/provider/instance_client.go +++ b/provider/instance_client.go @@ -85,8 +85,15 @@ func (ic *InstanceClient) create() error { return nil } +func (ic *InstanceClient) serviceName() string { + if ic.data.System.ServiceName != "" { + return ic.data.System.ServiceName + } + return ServiceName +} + func (ic *InstanceClient) saveProfileScript() error { - envFile := fmt.Sprintf("/etc/profile.d/%s.sh", ServiceName) + envFile := fmt.Sprintf("/etc/profile.d/%s.sh", ic.serviceName()) systemEnvMap := ic.data.System.Env @@ -104,7 +111,7 @@ func (ic *InstanceClient) saveProfileScript() error { } func (ic *InstanceClient) configureService() error { - if !ic.data.System.ServiceEnabled || ic.data.Client.Type == "local" { + if !ic.data.System.ServiceEnabled { return nil } @@ -124,7 +131,7 @@ func (ic *InstanceClient) configureService() error { if err != nil { return fmt.Errorf("unable to template AEM system service definition: %w", err) } - serviceFile := fmt.Sprintf("/etc/systemd/system/%s.service", ServiceName) + serviceFile := fmt.Sprintf("/etc/systemd/system/%s.service", ic.serviceName()) if err := ic.cl.FileWrite(serviceFile, serviceTemplated); err != nil { return fmt.Errorf("unable to write AEM system service definition '%s': %w", serviceFile, err) } @@ -136,14 +143,14 @@ func (ic *InstanceClient) configureService() error { } func (ic *InstanceClient) runServiceAction(action string) error { - if !ic.data.System.ServiceEnabled || ic.data.Client.Type == "local" { + if !ic.data.System.ServiceEnabled { return nil } ic.cl.Sudo = true defer func() { ic.cl.Sudo = false }() - outBytes, err := ic.cl.RunShellCommand(fmt.Sprintf("systemctl %s %s.service", action, ServiceName), ".") + outBytes, err := ic.cl.RunShellCommand(fmt.Sprintf("systemctl %s %s.service", action, ic.serviceName()), ".") if err != nil { return fmt.Errorf("unable to perform AEM system service action '%s': %w", action, err) } diff --git a/provider/provider.go b/provider/provider.go index b1718de..c794bbf 100644 --- a/provider/provider.go +++ b/provider/provider.go @@ -102,6 +102,7 @@ type System struct { WorkDir string `pulumi:"work_dir,optional"` Env map[string]string `pulumi:"env,optional"` ServiceEnabled bool `pulumi:"service_enabled,optional"` + ServiceName string `pulumi:"service_name,optional"` ServiceConfig string `pulumi:"service_config,optional"` User string `pulumi:"user,optional"` Bootstrap *InstanceScript `pulumi:"bootstrap,optional"` @@ -112,6 +113,7 @@ func (m *System) Annotate(a infer.Annotator) { a.Describe(&m.WorkDir, "Remote root path where provider-related files will be stored.") a.Describe(&m.Env, "Environment variables for AEM instances.") a.Describe(&m.ServiceEnabled, "Enabled the AEM system service (systemd).") + a.Describe(&m.ServiceName, "Name of the AEM system service (systemd).") a.Describe(&m.ServiceConfig, "Contents of the AEM system service definition file (systemd).") a.Describe(&m.User, "System user under which AEM instance will be running. By default, the same as the user used to connect to the machine.") a.Describe(&m.Bootstrap, "Script executed once upon instance connection, often for mounting on VM data volumes from attached disks (e.g., AWS EBS, Azure Disk Storage). This script runs only once, even during instance recreation, as changes are typically persistent and system-wide. If re-execution is needed, it is recommended to set up a new machine.") diff --git a/sdk/dotnet/Compose/Inputs/SystemArgs.cs b/sdk/dotnet/Compose/Inputs/SystemArgs.cs index 7694594..70a2bd4 100644 --- a/sdk/dotnet/Compose/Inputs/SystemArgs.cs +++ b/sdk/dotnet/Compose/Inputs/SystemArgs.cs @@ -49,6 +49,12 @@ public InputMap Env [Input("service_enabled")] public Input? Service_enabled { get; set; } + /// + /// Name of the AEM system service (systemd). + /// + [Input("service_name")] + public Input? Service_name { get; set; } + /// /// System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. /// diff --git a/sdk/dotnet/Compose/Outputs/System.cs b/sdk/dotnet/Compose/Outputs/System.cs index 885f87e..bf0503c 100644 --- a/sdk/dotnet/Compose/Outputs/System.cs +++ b/sdk/dotnet/Compose/Outputs/System.cs @@ -35,6 +35,10 @@ public sealed class System /// public readonly bool? Service_enabled; /// + /// Name of the AEM system service (systemd). + /// + public readonly string? Service_name; + /// /// System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. /// public readonly string? User; @@ -55,6 +59,8 @@ private System( bool? service_enabled, + string? service_name, + string? user, string? work_dir) @@ -64,6 +70,7 @@ private System( Env = env; Service_config = service_config; Service_enabled = service_enabled; + Service_name = service_name; User = user; Work_dir = work_dir; } diff --git a/sdk/dotnet/version.txt b/sdk/dotnet/version.txt index e109159..b75242c 100644 --- a/sdk/dotnet/version.txt +++ b/sdk/dotnet/version.txt @@ -1 +1 @@ -0.1.2-alpha.1718453175+e73fab23 +0.1.2-alpha.1718453293+5c68305a.dirty diff --git a/sdk/go/aem/compose/pulumiTypes.go b/sdk/go/aem/compose/pulumiTypes.go index 28da91a..e4f8f31 100644 --- a/sdk/go/aem/compose/pulumiTypes.go +++ b/sdk/go/aem/compose/pulumiTypes.go @@ -579,6 +579,8 @@ type System struct { Service_config *string `pulumi:"service_config"` // Enabled the AEM system service (systemd). Service_enabled *bool `pulumi:"service_enabled"` + // Name of the AEM system service (systemd). + Service_name *string `pulumi:"service_name"` // System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. User *string `pulumi:"user"` // Remote root path where provider-related files will be stored. @@ -607,6 +609,8 @@ type SystemArgs struct { Service_config pulumi.StringPtrInput `pulumi:"service_config"` // Enabled the AEM system service (systemd). Service_enabled pulumi.BoolPtrInput `pulumi:"service_enabled"` + // Name of the AEM system service (systemd). + Service_name pulumi.StringPtrInput `pulumi:"service_name"` // System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. User pulumi.StringPtrInput `pulumi:"user"` // Remote root path where provider-related files will be stored. @@ -715,6 +719,11 @@ func (o SystemOutput) Service_enabled() pulumi.BoolPtrOutput { return o.ApplyT(func(v System) *bool { return v.Service_enabled }).(pulumi.BoolPtrOutput) } +// Name of the AEM system service (systemd). +func (o SystemOutput) Service_name() pulumi.StringPtrOutput { + return o.ApplyT(func(v System) *string { return v.Service_name }).(pulumi.StringPtrOutput) +} + // System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. func (o SystemOutput) User() pulumi.StringPtrOutput { return o.ApplyT(func(v System) *string { return v.User }).(pulumi.StringPtrOutput) @@ -799,6 +808,16 @@ func (o SystemPtrOutput) Service_enabled() pulumi.BoolPtrOutput { }).(pulumi.BoolPtrOutput) } +// Name of the AEM system service (systemd). +func (o SystemPtrOutput) Service_name() pulumi.StringPtrOutput { + return o.ApplyT(func(v *System) *string { + if v == nil { + return nil + } + return v.Service_name + }).(pulumi.StringPtrOutput) +} + // System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. func (o SystemPtrOutput) User() pulumi.StringPtrOutput { return o.ApplyT(func(v *System) *string { diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts index a99caa8..f00aa5e 100644 --- a/sdk/nodejs/types/input.ts +++ b/sdk/nodejs/types/input.ts @@ -88,6 +88,10 @@ export namespace compose { * Enabled the AEM system service (systemd). */ service_enabled?: pulumi.Input; + /** + * Name of the AEM system service (systemd). + */ + service_name?: pulumi.Input; /** * System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. */ diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts index 73ebe3b..68eaa6e 100644 --- a/sdk/nodejs/types/output.ts +++ b/sdk/nodejs/types/output.ts @@ -115,6 +115,10 @@ export namespace compose { * Enabled the AEM system service (systemd). */ service_enabled?: boolean; + /** + * Name of the AEM system service (systemd). + */ + service_name?: string; /** * System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. */ diff --git a/sdk/python/wttech_aem/compose/_inputs.py b/sdk/python/wttech_aem/compose/_inputs.py index 7b89c1d..97dcfd0 100644 --- a/sdk/python/wttech_aem/compose/_inputs.py +++ b/sdk/python/wttech_aem/compose/_inputs.py @@ -251,6 +251,7 @@ def __init__(__self__, *, env: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, service_config: Optional[pulumi.Input[str]] = None, service_enabled: Optional[pulumi.Input[bool]] = None, + service_name: Optional[pulumi.Input[str]] = None, user: Optional[pulumi.Input[str]] = None, work_dir: Optional[pulumi.Input[str]] = None): """ @@ -259,6 +260,7 @@ def __init__(__self__, *, :param pulumi.Input[Mapping[str, pulumi.Input[str]]] env: Environment variables for AEM instances. :param pulumi.Input[str] service_config: Contents of the AEM system service definition file (systemd). :param pulumi.Input[bool] service_enabled: Enabled the AEM system service (systemd). + :param pulumi.Input[str] service_name: Name of the AEM system service (systemd). :param pulumi.Input[str] user: System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. :param pulumi.Input[str] work_dir: Remote root path where provider-related files will be stored. """ @@ -272,6 +274,8 @@ def __init__(__self__, *, pulumi.set(__self__, "service_config", service_config) if service_enabled is not None: pulumi.set(__self__, "service_enabled", service_enabled) + if service_name is not None: + pulumi.set(__self__, "service_name", service_name) if user is not None: pulumi.set(__self__, "user", user) if work_dir is not None: @@ -337,6 +341,18 @@ def service_enabled(self) -> Optional[pulumi.Input[bool]]: def service_enabled(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "service_enabled", value) + @property + @pulumi.getter + def service_name(self) -> Optional[pulumi.Input[str]]: + """ + Name of the AEM system service (systemd). + """ + return pulumi.get(self, "service_name") + + @service_name.setter + def service_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "service_name", value) + @property @pulumi.getter def user(self) -> Optional[pulumi.Input[str]]: diff --git a/sdk/python/wttech_aem/compose/outputs.py b/sdk/python/wttech_aem/compose/outputs.py index 083fc52..91aaef1 100644 --- a/sdk/python/wttech_aem/compose/outputs.py +++ b/sdk/python/wttech_aem/compose/outputs.py @@ -274,6 +274,7 @@ def __init__(__self__, *, env: Optional[Mapping[str, str]] = None, service_config: Optional[str] = None, service_enabled: Optional[bool] = None, + service_name: Optional[str] = None, user: Optional[str] = None, work_dir: Optional[str] = None): """ @@ -282,6 +283,7 @@ def __init__(__self__, *, :param Mapping[str, str] env: Environment variables for AEM instances. :param str service_config: Contents of the AEM system service definition file (systemd). :param bool service_enabled: Enabled the AEM system service (systemd). + :param str service_name: Name of the AEM system service (systemd). :param str user: System user under which AEM instance will be running. By default, the same as the user used to connect to the machine. :param str work_dir: Remote root path where provider-related files will be stored. """ @@ -295,6 +297,8 @@ def __init__(__self__, *, pulumi.set(__self__, "service_config", service_config) if service_enabled is not None: pulumi.set(__self__, "service_enabled", service_enabled) + if service_name is not None: + pulumi.set(__self__, "service_name", service_name) if user is not None: pulumi.set(__self__, "user", user) if work_dir is not None: @@ -340,6 +344,14 @@ def service_enabled(self) -> Optional[bool]: """ return pulumi.get(self, "service_enabled") + @property + @pulumi.getter + def service_name(self) -> Optional[str]: + """ + Name of the AEM system service (systemd). + """ + return pulumi.get(self, "service_name") + @property @pulumi.getter def user(self) -> Optional[str]: