ops-cli 2.2.1__tar.gz → 2.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ops-cli-2.2.1/src/ops_cli.egg-info → ops_cli-2.3.0}/PKG-INFO +58 -43
- {ops-cli-2.2.1 → ops_cli-2.3.0}/README.md +8 -2
- {ops-cli-2.2.1 → ops_cli-2.3.0}/requirements.txt +38 -39
- {ops-cli-2.2.1 → ops_cli-2.3.0}/setup.py +1 -1
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/inventory.py +1 -1
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/ssh.py +18 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/ec2inventory.py +90 -115
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/cns.py +7 -7
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/ec2.py +7 -5
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/simplevault.py +116 -46
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/terraform/terraform_cmd_generator.py +7 -3
- {ops-cli-2.2.1 → ops_cli-2.3.0/src/ops_cli.egg-info}/PKG-INFO +58 -43
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops_cli.egg-info/requires.txt +41 -44
- {ops-cli-2.2.1 → ops_cli-2.3.0}/LICENSE +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/MANIFEST.in +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/.opsconfig.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/README.md +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/clusters/kubeconfigs/README.md +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/clusters/my-kubernetes-cluster.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/backends.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/common_variables.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/configure-local-kubectl.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster-autoscaler.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-worker-nodes-auth-configmap.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-worker-nodes.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/outputs.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/providers.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/scripts/fileexist.sh +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/variables.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/vpc.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/common/backends.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/common/common_variables.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/common/providers.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/backends.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/cluster-autoscaler.tf +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/common_variables.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/dashboard.tf +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/kube-state-metrics.tf +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/kube2iam.tf +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/provider_helm.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/providers.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/variables.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm-init/backends.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm-init/helm-init.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/update.sh +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/.opsconfig.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/README.md +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/install_stress_tool.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/setup.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/setup12.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/templates/cassandra-env.sh +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/templates/cassandra_defaults.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/templates/cassandra_defaults_12.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/templates/stress.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible.cfg +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/cluster1.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/cluster2.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/main/main.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/main/variables.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/modules/cassandra/main.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/modules/macros.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/modules/shared_iam/default_policy.json +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/modules/vpc/main.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/user_data +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/README.md +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/cluster/dev/dev.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/cluster/prod/prod.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/inventory/hosts +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/password_dev.txt +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/password_prod.txt +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/playbook/example.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/vault/vault_dev.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/vault/vault_prod.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/inventory/.opsconfig.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/inventory/README.md +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/inventory/local_inventory/hosts +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/inventory/my-aws-cluster.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/inventory/my-azure-cluster.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/packer/README.md +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/packer/clusters/ubuntu.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/packer/packer/ubuntu.json +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/.gitignore +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/README.md +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/ansible.cfg +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/playbooks/site.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/roles/common/tasks/main.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/roles/db/tasks/main.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/roles/web/tasks/main.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/tasks/copy-key.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/clusters/example.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/main/main.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/main/shared_variables.tf +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/db/instance.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/db/main.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/macros.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/shared_iam/default_policy.json +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/vpc/main.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/web/elb.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/web/instance.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/web/main.tf.jinja2 +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/user_data +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/.opsconfig.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/README.md +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/compositions/terraform/cluster/main.tf +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/compositions/terraform/network/main.tf +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/composition=cluster/conf.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/composition=network/conf.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/conf.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/composition=cluster/conf.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/composition=network/conf.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/conf.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/config/env=dev/default.yaml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/modules/cluster/main.tf +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/modules/network/main.tf +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/setup.cfg +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/__init__.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/__init__.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/callback_plugins/__init__.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/filter_plugins/__init__.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/filter_plugins/commonfilters.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/vars_plugins/__init__.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/vars_plugins/clusterconfig.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/vars_plugins/opsconfig.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/__init__.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/aws.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/config.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/config_generator.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/helmfile.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/packer.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/parser.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/playbook.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/run.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/sync.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/terraform.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ansible/ansible.cfg +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ansible/tasks/deploy_prometheus_alert_rules.yml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ansible/tasks/install_rpm.yml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ansible/tasks/remove_prometheus_alert_rules.yml +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ssh/ssh.config +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ssh/ssh.scb.proxy.config.tpl +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ssh/ssh.tunnel.config +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/terraform/terraformrc +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/git_utils.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/hierarchical/__init__.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/hierarchical/composition_config_generator.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/SKMS.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/__init__.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/azurerm.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/caching.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/generator.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/__init__.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/azr.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/legacy_pcs.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/skms.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/sshconfig.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/jinja/__init__.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/main.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/opsconfig.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/simpleconsul.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/simplessm.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/terraform/__init__.py +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops_cli.egg-info/SOURCES.txt +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops_cli.egg-info/dependency_links.txt +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops_cli.egg-info/entry_points.txt +0 -0
- {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops_cli.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: ops-cli
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.0
|
|
4
4
|
Summary: Ops - wrapper for Terraform, Ansible, and SSH for cloud automation
|
|
5
5
|
Home-page: https://github.com/adobe/ops-cli
|
|
6
6
|
Author: Adobe
|
|
@@ -24,14 +24,14 @@ Requires-Python: >=3.5
|
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
25
25
|
License-File: LICENSE
|
|
26
26
|
Requires-Dist: adal==1.2.7
|
|
27
|
-
Requires-Dist: ansible==8.
|
|
28
|
-
Requires-Dist: ansible-core==2.15.
|
|
29
|
-
Requires-Dist: awscli==1.
|
|
27
|
+
Requires-Dist: ansible==8.7.0; python_version >= "3.9"
|
|
28
|
+
Requires-Dist: ansible-core==2.15.13; python_version >= "3.9"
|
|
29
|
+
Requires-Dist: awscli==1.32.6; python_version >= "3.8"
|
|
30
30
|
Requires-Dist: azure==4.0.0
|
|
31
31
|
Requires-Dist: azure-applicationinsights==0.1.1
|
|
32
32
|
Requires-Dist: azure-batch==4.1.3
|
|
33
33
|
Requires-Dist: azure-common==1.1.28
|
|
34
|
-
Requires-Dist: azure-core==1.
|
|
34
|
+
Requires-Dist: azure-core==1.32.0; python_version >= "3.8"
|
|
35
35
|
Requires-Dist: azure-cosmosdb-nspkg==2.0.2
|
|
36
36
|
Requires-Dist: azure-cosmosdb-table==1.0.6
|
|
37
37
|
Requires-Dist: azure-datalake-store==0.0.53
|
|
@@ -105,64 +105,73 @@ Requires-Dist: azure-mgmt-web==0.35.0
|
|
|
105
105
|
Requires-Dist: azure-nspkg==3.0.2
|
|
106
106
|
Requires-Dist: azure-servicebus==0.21.1
|
|
107
107
|
Requires-Dist: azure-servicefabric==6.3.0.0
|
|
108
|
-
Requires-Dist: azure-servicemanagement-legacy==0.20.
|
|
108
|
+
Requires-Dist: azure-servicemanagement-legacy==0.20.8
|
|
109
109
|
Requires-Dist: azure-storage-blob==1.5.0
|
|
110
110
|
Requires-Dist: azure-storage-common==1.4.2
|
|
111
111
|
Requires-Dist: azure-storage-file==1.4.0
|
|
112
112
|
Requires-Dist: azure-storage-queue==1.4.0
|
|
113
113
|
Requires-Dist: backports.functools-lru-cache==1.6.6; python_version >= "2.6"
|
|
114
|
-
Requires-Dist:
|
|
115
|
-
Requires-Dist:
|
|
116
|
-
Requires-Dist:
|
|
117
|
-
Requires-Dist:
|
|
118
|
-
Requires-Dist:
|
|
119
|
-
Requires-Dist:
|
|
120
|
-
Requires-Dist: charset-normalizer==3.3.0; python_full_version >= "3.7.0"
|
|
114
|
+
Requires-Dist: boto3==1.34.6; python_version >= "3.8"
|
|
115
|
+
Requires-Dist: botocore==1.34.6; python_version >= "3.8"
|
|
116
|
+
Requires-Dist: cachetools==5.5.0; python_version >= "3.7"
|
|
117
|
+
Requires-Dist: certifi==2024.12.14; python_version >= "3.6"
|
|
118
|
+
Requires-Dist: cffi==1.17.1; python_version >= "3.8"
|
|
119
|
+
Requires-Dist: charset-normalizer==3.4.1; python_version >= "3.7"
|
|
121
120
|
Requires-Dist: colorama==0.4.4; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3, 3.4"
|
|
122
|
-
Requires-Dist: cryptography==
|
|
123
|
-
Requires-Dist: deepmerge==1.1.
|
|
121
|
+
Requires-Dist: cryptography==44.0.0; python_version >= "3.7" and python_full_version not in "3.9.0, 3.9.1"
|
|
122
|
+
Requires-Dist: deepmerge==1.1.1
|
|
124
123
|
Requires-Dist: docutils==0.16; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3, 3.4"
|
|
125
|
-
Requires-Dist: gitdb==4.0.
|
|
126
|
-
Requires-Dist: gitpython==3.1.
|
|
127
|
-
Requires-Dist: google-auth==2.
|
|
124
|
+
Requires-Dist: gitdb==4.0.12; python_version >= "3.7"
|
|
125
|
+
Requires-Dist: gitpython==3.1.44; python_version >= "3.7"
|
|
126
|
+
Requires-Dist: google-auth==2.37.0; python_version >= "3.7"
|
|
128
127
|
Requires-Dist: hashmerge==0.2
|
|
129
|
-
Requires-Dist: himl==0.15.
|
|
130
|
-
Requires-Dist: hvac==1.
|
|
131
|
-
Requires-Dist: idna==3.
|
|
128
|
+
Requires-Dist: himl==0.15.2; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3"
|
|
129
|
+
Requires-Dist: hvac==1.2.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0"
|
|
130
|
+
Requires-Dist: idna==3.10; python_version >= "3.6"
|
|
132
131
|
Requires-Dist: inflection==0.5.1; python_version >= "3.5"
|
|
133
|
-
Requires-Dist: isodate==0.
|
|
134
|
-
Requires-Dist: jinja2==3.1.
|
|
132
|
+
Requires-Dist: isodate==0.7.2; python_version >= "3.7"
|
|
133
|
+
Requires-Dist: jinja2==3.1.4; python_version >= "3.7"
|
|
135
134
|
Requires-Dist: jmespath==1.0.1; python_version >= "3.7"
|
|
136
135
|
Requires-Dist: kubernetes==26.1.0; python_version >= "3.6"
|
|
137
136
|
Requires-Dist: lru-cache==0.2.3
|
|
138
|
-
Requires-Dist: markupsafe==
|
|
139
|
-
Requires-Dist: msal==1.
|
|
137
|
+
Requires-Dist: markupsafe==3.0.2; python_version >= "3.9"
|
|
138
|
+
Requires-Dist: msal==1.31.1; python_version >= "3.7"
|
|
140
139
|
Requires-Dist: msrest==0.7.1; python_version >= "3.6"
|
|
141
140
|
Requires-Dist: msrestazure==0.6.4
|
|
142
141
|
Requires-Dist: oauthlib==3.2.2; python_version >= "3.6"
|
|
143
|
-
Requires-Dist: packaging==
|
|
142
|
+
Requires-Dist: packaging==24.2; python_version >= "3.8"
|
|
144
143
|
Requires-Dist: passgen==1.1.1
|
|
145
144
|
Requires-Dist: pathlib2==2.3.7.post1
|
|
146
|
-
Requires-Dist: pyasn1==0.
|
|
147
|
-
Requires-Dist: pyasn1-modules==0.
|
|
148
|
-
Requires-Dist: pycparser==2.
|
|
145
|
+
Requires-Dist: pyasn1==0.6.1; python_version >= "3.8"
|
|
146
|
+
Requires-Dist: pyasn1-modules==0.4.1; python_version >= "3.8"
|
|
147
|
+
Requires-Dist: pycparser==2.22; python_version >= "3.8"
|
|
149
148
|
Requires-Dist: pyhcl==0.4.5
|
|
150
|
-
Requires-Dist: pyjwt==2.
|
|
149
|
+
Requires-Dist: pyjwt[crypto]==2.10.1; python_version >= "3.9"
|
|
151
150
|
Requires-Dist: python-consul==1.1.0
|
|
152
|
-
Requires-Dist: python-dateutil==2.
|
|
151
|
+
Requires-Dist: python-dateutil==2.9.0.post0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2"
|
|
153
152
|
Requires-Dist: pyyaml==6.0.1; python_version >= "3.6"
|
|
154
|
-
Requires-Dist: requests==2.
|
|
155
|
-
Requires-Dist: requests-oauthlib==
|
|
153
|
+
Requires-Dist: requests==2.32.3; python_version >= "3.8"
|
|
154
|
+
Requires-Dist: requests-oauthlib==2.0.0; python_version >= "3.4"
|
|
156
155
|
Requires-Dist: resolvelib==1.0.1
|
|
157
156
|
Requires-Dist: rsa==4.7.2; python_version >= "3.5" and python_version < "4"
|
|
158
|
-
Requires-Dist: s3transfer==0.
|
|
159
|
-
Requires-Dist: setuptools==
|
|
157
|
+
Requires-Dist: s3transfer==0.10.4; python_version >= "3.8"
|
|
158
|
+
Requires-Dist: setuptools==75.8.0; python_version >= "3.9"
|
|
160
159
|
Requires-Dist: simpledi==0.4.1
|
|
161
|
-
Requires-Dist: six==1.
|
|
162
|
-
Requires-Dist: smmap==5.0.
|
|
163
|
-
Requires-Dist: typing-extensions==4.
|
|
164
|
-
Requires-Dist: urllib3==
|
|
165
|
-
Requires-Dist: websocket-client==1.
|
|
160
|
+
Requires-Dist: six==1.17.0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2"
|
|
161
|
+
Requires-Dist: smmap==5.0.2; python_version >= "3.7"
|
|
162
|
+
Requires-Dist: typing-extensions==4.12.2; python_version >= "3.8"
|
|
163
|
+
Requires-Dist: urllib3==2.0.7; python_version >= "3.7"
|
|
164
|
+
Requires-Dist: websocket-client==1.8.0; python_version >= "3.8"
|
|
165
|
+
Dynamic: author
|
|
166
|
+
Dynamic: author-email
|
|
167
|
+
Dynamic: classifier
|
|
168
|
+
Dynamic: description
|
|
169
|
+
Dynamic: description-content-type
|
|
170
|
+
Dynamic: home-page
|
|
171
|
+
Dynamic: license
|
|
172
|
+
Dynamic: requires-dist
|
|
173
|
+
Dynamic: requires-python
|
|
174
|
+
Dynamic: summary
|
|
166
175
|
|
|
167
176
|
# Ops CLI
|
|
168
177
|
[](https://github.com/adobe/ops-cli/actions/workflows/release.yml) [](https://github.com/adobe/ops-cli/pkgs/container/ops-cli) [](https://github.com/adobe/ops-cli/blob/master/LICENSE)
|
|
@@ -317,7 +326,7 @@ workon ops
|
|
|
317
326
|
# uninstall previous `ops` version (if you have it)
|
|
318
327
|
pip uninstall ops --yes
|
|
319
328
|
|
|
320
|
-
# install ops-cli v2.
|
|
329
|
+
# install ops-cli v2.3.0 stable release
|
|
321
330
|
pip install --upgrade ops-cli
|
|
322
331
|
```
|
|
323
332
|
|
|
@@ -333,7 +342,7 @@ You can try out `ops-cli`, by using docker. The docker image has all required pr
|
|
|
333
342
|
|
|
334
343
|
To start out a container, running the latest `ops-cli` docker image run:
|
|
335
344
|
```sh
|
|
336
|
-
docker run -it ghcr.io/adobe/ops-cli:2.
|
|
345
|
+
docker run -it ghcr.io/adobe/ops-cli:2.3.0 bash
|
|
337
346
|
```
|
|
338
347
|
|
|
339
348
|
After the container has started, you can start using `ops-cli`:
|
|
@@ -859,6 +868,12 @@ Which will translate behind the scenes in :
|
|
|
859
868
|
This allows us to just refer in cluster files a secret that actually exists in vault and make sure we only generate it once - if it was already created by os or any other system, we will just use what is already there.
|
|
860
869
|
The reference is by means of fixed form jinja call added to the cluster file, which ends up interpreted later during the templating phase.
|
|
861
870
|
|
|
871
|
+
#### Vault auth
|
|
872
|
+
Ops checks if a valid vault token is present in `~/.vault-token` or in the environment variable `VAULT_TOKEN`. If not, it will try to authenticate using the method defined in `OPS_VAULT_AUTH_METHOD` environment variable.
|
|
873
|
+
The following methods are supported:
|
|
874
|
+
- `okta` - use the Vault Okta auth method (default)
|
|
875
|
+
- `ldap` - use the Vault ldap auth method
|
|
876
|
+
|
|
862
877
|
### Amazon Secrets Manager (SSM)
|
|
863
878
|
|
|
864
879
|
Amazon offers the possibility to use their [Secrets Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) in order to manage configuration data such as credentials, passwords and license keys.
|
|
@@ -151,7 +151,7 @@ workon ops
|
|
|
151
151
|
# uninstall previous `ops` version (if you have it)
|
|
152
152
|
pip uninstall ops --yes
|
|
153
153
|
|
|
154
|
-
# install ops-cli v2.
|
|
154
|
+
# install ops-cli v2.3.0 stable release
|
|
155
155
|
pip install --upgrade ops-cli
|
|
156
156
|
```
|
|
157
157
|
|
|
@@ -167,7 +167,7 @@ You can try out `ops-cli`, by using docker. The docker image has all required pr
|
|
|
167
167
|
|
|
168
168
|
To start out a container, running the latest `ops-cli` docker image run:
|
|
169
169
|
```sh
|
|
170
|
-
docker run -it ghcr.io/adobe/ops-cli:2.
|
|
170
|
+
docker run -it ghcr.io/adobe/ops-cli:2.3.0 bash
|
|
171
171
|
```
|
|
172
172
|
|
|
173
173
|
After the container has started, you can start using `ops-cli`:
|
|
@@ -693,6 +693,12 @@ Which will translate behind the scenes in :
|
|
|
693
693
|
This allows us to just refer in cluster files a secret that actually exists in vault and make sure we only generate it once - if it was already created by os or any other system, we will just use what is already there.
|
|
694
694
|
The reference is by means of fixed form jinja call added to the cluster file, which ends up interpreted later during the templating phase.
|
|
695
695
|
|
|
696
|
+
#### Vault auth
|
|
697
|
+
Ops checks if a valid vault token is present in `~/.vault-token` or in the environment variable `VAULT_TOKEN`. If not, it will try to authenticate using the method defined in `OPS_VAULT_AUTH_METHOD` environment variable.
|
|
698
|
+
The following methods are supported:
|
|
699
|
+
- `okta` - use the Vault Okta auth method (default)
|
|
700
|
+
- `ldap` - use the Vault ldap auth method
|
|
701
|
+
|
|
696
702
|
### Amazon Secrets Manager (SSM)
|
|
697
703
|
|
|
698
704
|
Amazon offers the possibility to use their [Secrets Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) in order to manage configuration data such as credentials, passwords and license keys.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
adal==1.2.7
|
|
2
|
-
ansible==8.
|
|
3
|
-
ansible-core==2.15.
|
|
4
|
-
awscli==1.
|
|
2
|
+
ansible==8.7.0; python_version >= '3.9'
|
|
3
|
+
ansible-core==2.15.13; python_version >= '3.9'
|
|
4
|
+
awscli==1.32.6; python_version >= '3.8'
|
|
5
5
|
azure==4.0.0
|
|
6
6
|
azure-applicationinsights==0.1.1
|
|
7
7
|
azure-batch==4.1.3
|
|
8
8
|
azure-common==1.1.28
|
|
9
|
-
azure-core==1.
|
|
9
|
+
azure-core==1.32.0; python_version >= '3.8'
|
|
10
10
|
azure-cosmosdb-nspkg==2.0.2
|
|
11
11
|
azure-cosmosdb-table==1.0.6
|
|
12
12
|
azure-datalake-store==0.0.53
|
|
@@ -80,61 +80,60 @@ azure-mgmt-web==0.35.0
|
|
|
80
80
|
azure-nspkg==3.0.2
|
|
81
81
|
azure-servicebus==0.21.1
|
|
82
82
|
azure-servicefabric==6.3.0.0
|
|
83
|
-
azure-servicemanagement-legacy==0.20.
|
|
83
|
+
azure-servicemanagement-legacy==0.20.8
|
|
84
84
|
azure-storage-blob==1.5.0
|
|
85
85
|
azure-storage-common==1.4.2
|
|
86
86
|
azure-storage-file==1.4.0
|
|
87
87
|
azure-storage-queue==1.4.0
|
|
88
88
|
backports.functools-lru-cache==1.6.6; python_version >= '2.6'
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
charset-normalizer==3.3.0; python_full_version >= '3.7.0'
|
|
89
|
+
boto3==1.34.6; python_version >= '3.8'
|
|
90
|
+
botocore==1.34.6; python_version >= '3.8'
|
|
91
|
+
cachetools==5.5.0; python_version >= '3.7'
|
|
92
|
+
certifi==2024.12.14; python_version >= '3.6'
|
|
93
|
+
cffi==1.17.1; python_version >= '3.8'
|
|
94
|
+
charset-normalizer==3.4.1; python_version >= '3.7'
|
|
96
95
|
colorama==0.4.4; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
|
|
97
|
-
cryptography==
|
|
98
|
-
deepmerge==1.1.
|
|
96
|
+
cryptography==44.0.0; python_version >= '3.7' and python_full_version not in '3.9.0, 3.9.1'
|
|
97
|
+
deepmerge==1.1.1
|
|
99
98
|
docutils==0.16; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
|
|
100
|
-
gitdb==4.0.
|
|
101
|
-
gitpython==3.1.
|
|
102
|
-
google-auth==2.
|
|
99
|
+
gitdb==4.0.12; python_version >= '3.7'
|
|
100
|
+
gitpython==3.1.44; python_version >= '3.7'
|
|
101
|
+
google-auth==2.37.0; python_version >= '3.7'
|
|
103
102
|
hashmerge==0.2
|
|
104
|
-
himl==0.15.
|
|
105
|
-
hvac==1.
|
|
106
|
-
idna==3.
|
|
103
|
+
himl==0.15.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
|
|
104
|
+
hvac==1.2.1; python_full_version >= '3.6.2' and python_full_version < '4.0.0'
|
|
105
|
+
idna==3.10; python_version >= '3.6'
|
|
107
106
|
inflection==0.5.1; python_version >= '3.5'
|
|
108
|
-
isodate==0.
|
|
109
|
-
jinja2==3.1.
|
|
107
|
+
isodate==0.7.2; python_version >= '3.7'
|
|
108
|
+
jinja2==3.1.4; python_version >= '3.7'
|
|
110
109
|
jmespath==1.0.1; python_version >= '3.7'
|
|
111
110
|
kubernetes==26.1.0; python_version >= '3.6'
|
|
112
111
|
lru-cache==0.2.3
|
|
113
|
-
markupsafe==
|
|
114
|
-
msal==1.
|
|
112
|
+
markupsafe==3.0.2; python_version >= '3.9'
|
|
113
|
+
msal==1.31.1; python_version >= '3.7'
|
|
115
114
|
msrest==0.7.1; python_version >= '3.6'
|
|
116
115
|
msrestazure==0.6.4
|
|
117
116
|
oauthlib==3.2.2; python_version >= '3.6'
|
|
118
|
-
packaging==
|
|
117
|
+
packaging==24.2; python_version >= '3.8'
|
|
119
118
|
passgen==1.1.1
|
|
120
119
|
pathlib2==2.3.7.post1
|
|
121
|
-
pyasn1==0.
|
|
122
|
-
pyasn1-modules==0.
|
|
123
|
-
pycparser==2.
|
|
120
|
+
pyasn1==0.6.1; python_version >= '3.8'
|
|
121
|
+
pyasn1-modules==0.4.1; python_version >= '3.8'
|
|
122
|
+
pycparser==2.22; python_version >= '3.8'
|
|
124
123
|
pyhcl==0.4.5
|
|
125
|
-
pyjwt==2.
|
|
124
|
+
pyjwt[crypto]==2.10.1; python_version >= '3.9'
|
|
126
125
|
python-consul==1.1.0
|
|
127
|
-
python-dateutil==2.
|
|
126
|
+
python-dateutil==2.9.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
|
|
128
127
|
pyyaml==6.0.1; python_version >= '3.6'
|
|
129
|
-
requests==2.
|
|
130
|
-
requests-oauthlib==
|
|
128
|
+
requests==2.32.3; python_version >= '3.8'
|
|
129
|
+
requests-oauthlib==2.0.0; python_version >= '3.4'
|
|
131
130
|
resolvelib==1.0.1
|
|
132
131
|
rsa==4.7.2; python_version >= '3.5' and python_version < '4'
|
|
133
|
-
s3transfer==0.
|
|
134
|
-
setuptools==
|
|
132
|
+
s3transfer==0.10.4; python_version >= '3.8'
|
|
133
|
+
setuptools==75.8.0; python_version >= '3.9'
|
|
135
134
|
simpledi==0.4.1
|
|
136
|
-
six==1.
|
|
137
|
-
smmap==5.0.
|
|
138
|
-
typing-extensions==4.
|
|
139
|
-
urllib3==
|
|
140
|
-
websocket-client==1.
|
|
135
|
+
six==1.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
|
|
136
|
+
smmap==5.0.2; python_version >= '3.7'
|
|
137
|
+
typing-extensions==4.12.2; python_version >= '3.8'
|
|
138
|
+
urllib3==2.0.7; python_version >= '3.7'
|
|
139
|
+
websocket-client==1.8.0; python_version >= '3.8'
|
|
@@ -23,7 +23,7 @@ _mydir = os.path.abspath(os.path.dirname(sys.argv[0]))
|
|
|
23
23
|
_requires = [r for r in open(os.path.sep.join((_mydir, 'requirements.txt')), "r").read().split('\n') if len(r) > 1]
|
|
24
24
|
setup(
|
|
25
25
|
name='ops-cli',
|
|
26
|
-
version='2.
|
|
26
|
+
version='2.3.0',
|
|
27
27
|
description='Ops - wrapper for Terraform, Ansible, and SSH for cloud automation',
|
|
28
28
|
long_description=_readme + '\n\n',
|
|
29
29
|
long_description_content_type='text/markdown',
|
|
@@ -53,7 +53,7 @@ class InventoryRunner(object):
|
|
|
53
53
|
group_names = [group.name for group in host.get_groups()]
|
|
54
54
|
group_names = sorted(group_names)
|
|
55
55
|
group_string = ", ".join(group_names)
|
|
56
|
-
host_id = host.vars.get('
|
|
56
|
+
host_id = host.vars.get('ec2_InstanceId', '')
|
|
57
57
|
if host_id != '':
|
|
58
58
|
name_and_id = "%s -- %s" % (stringc(host.name,
|
|
59
59
|
'blue'), stringc(host_id, 'blue'))
|
|
@@ -92,6 +92,12 @@ class SshParserConfig(SubParserConfig):
|
|
|
92
92
|
help='When using Shell Control Box (SCB) and creating a proxy,'
|
|
93
93
|
'a random port is generated, which will be used in the ssh config '
|
|
94
94
|
'for all playbook, run and sync operations')
|
|
95
|
+
parser.add_argument(
|
|
96
|
+
'--ssh-dest-user',
|
|
97
|
+
type=str,
|
|
98
|
+
dest='ssh_dest_user',
|
|
99
|
+
help='SSH User for the destination host, different from the bastion or SCB user. '
|
|
100
|
+
'Useful when LDAP is not working on the destination host.')
|
|
95
101
|
|
|
96
102
|
def get_help(self):
|
|
97
103
|
return 'SSH or create an SSH tunnel to a server in the cluster'
|
|
@@ -260,6 +266,12 @@ class SshRunner(object):
|
|
|
260
266
|
ssh_config = args.ssh_config or self.ops_config.get(
|
|
261
267
|
'ssh.config') or self.ansible_inventory.get_ssh_config()
|
|
262
268
|
|
|
269
|
+
ssh_host_bastion, ssh_host_dest = None, None
|
|
270
|
+
if args.ssh_dest_user:
|
|
271
|
+
ssh_host_parts = ssh_host.split('--')
|
|
272
|
+
ssh_host_bastion = ssh_host_parts[0]
|
|
273
|
+
ssh_host_dest = ssh_host_parts[1] if len(ssh_host_parts) > 1 else None
|
|
274
|
+
|
|
263
275
|
scb_ssh_host = None
|
|
264
276
|
if scb_enabled:
|
|
265
277
|
# scb->bastion->host vs scb->bastion
|
|
@@ -280,8 +292,14 @@ class SshRunner(object):
|
|
|
280
292
|
else:
|
|
281
293
|
if scb_enabled:
|
|
282
294
|
command = f"ssh -F {ssh_config} {ssh_user}@{scb_ssh_host}"
|
|
295
|
+
if args.ssh_dest_user and ssh_host_dest:
|
|
296
|
+
command = (f"ssh -F {ssh_config} -t {ssh_user}@{ssh_host_bastion}@{scb_host} "
|
|
297
|
+
f"ssh {args.ssh_dest_user}@{ssh_host_dest}")
|
|
283
298
|
else:
|
|
284
299
|
command = f"ssh -F {ssh_config} {ssh_host}"
|
|
300
|
+
if args.ssh_dest_user and ssh_host_dest:
|
|
301
|
+
command = (f"ssh -F {ssh_config} -t {ssh_user}@{ssh_host_bastion} "
|
|
302
|
+
f"ssh {args.ssh_dest_user}@{ssh_host_dest}")
|
|
285
303
|
|
|
286
304
|
if args.proxy:
|
|
287
305
|
if scb_enabled:
|