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.
Files changed (166) hide show
  1. {ops-cli-2.2.1/src/ops_cli.egg-info → ops_cli-2.3.0}/PKG-INFO +58 -43
  2. {ops-cli-2.2.1 → ops_cli-2.3.0}/README.md +8 -2
  3. {ops-cli-2.2.1 → ops_cli-2.3.0}/requirements.txt +38 -39
  4. {ops-cli-2.2.1 → ops_cli-2.3.0}/setup.py +1 -1
  5. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/inventory.py +1 -1
  6. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/ssh.py +18 -0
  7. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/ec2inventory.py +90 -115
  8. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/cns.py +7 -7
  9. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/ec2.py +7 -5
  10. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/simplevault.py +116 -46
  11. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/terraform/terraform_cmd_generator.py +7 -3
  12. {ops-cli-2.2.1 → ops_cli-2.3.0/src/ops_cli.egg-info}/PKG-INFO +58 -43
  13. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops_cli.egg-info/requires.txt +41 -44
  14. {ops-cli-2.2.1 → ops_cli-2.3.0}/LICENSE +0 -0
  15. {ops-cli-2.2.1 → ops_cli-2.3.0}/MANIFEST.in +0 -0
  16. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/.opsconfig.yaml +0 -0
  17. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/README.md +0 -0
  18. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/clusters/kubeconfigs/README.md +0 -0
  19. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/clusters/my-kubernetes-cluster.yaml +0 -0
  20. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/backends.tf.jinja2 +0 -0
  21. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/common_variables.tf.jinja2 +0 -0
  22. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/configure-local-kubectl.tf.jinja2 +0 -0
  23. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster-autoscaler.tf.jinja2 +0 -0
  24. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster.tf.jinja2 +0 -0
  25. {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
  26. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-worker-nodes.tf.jinja2 +0 -0
  27. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/outputs.tf.jinja2 +0 -0
  28. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/providers.tf.jinja2 +0 -0
  29. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/scripts/fileexist.sh +0 -0
  30. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/variables.tf.jinja2 +0 -0
  31. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/aws-eks/vpc.tf.jinja2 +0 -0
  32. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/common/backends.tf.jinja2 +0 -0
  33. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/common/common_variables.tf.jinja2 +0 -0
  34. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/common/providers.tf.jinja2 +0 -0
  35. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/backends.tf.jinja2 +0 -0
  36. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/cluster-autoscaler.tf +0 -0
  37. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/common_variables.tf.jinja2 +0 -0
  38. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/dashboard.tf +0 -0
  39. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/kube-state-metrics.tf +0 -0
  40. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/kube2iam.tf +0 -0
  41. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/provider_helm.tf.jinja2 +0 -0
  42. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/providers.tf.jinja2 +0 -0
  43. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm/variables.tf.jinja2 +0 -0
  44. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm-init/backends.tf.jinja2 +0 -0
  45. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/compositions/generic/helm-init/helm-init.tf.jinja2 +0 -0
  46. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/aws-kubernetes/update.sh +0 -0
  47. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/.opsconfig.yaml +0 -0
  48. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/README.md +0 -0
  49. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/install_stress_tool.yaml +0 -0
  50. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/setup.yaml +0 -0
  51. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/setup12.yaml +0 -0
  52. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/templates/cassandra-env.sh +0 -0
  53. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/templates/cassandra_defaults.yaml +0 -0
  54. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/templates/cassandra_defaults_12.yaml +0 -0
  55. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible/templates/stress.yaml +0 -0
  56. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/ansible.cfg +0 -0
  57. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/cluster1.yaml +0 -0
  58. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/cluster2.yaml +0 -0
  59. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/main/main.tf.jinja2 +0 -0
  60. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/main/variables.tf.jinja2 +0 -0
  61. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/modules/cassandra/main.tf.jinja2 +0 -0
  62. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/modules/macros.tf.jinja2 +0 -0
  63. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/modules/shared_iam/default_policy.json +0 -0
  64. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/modules/vpc/main.tf.jinja2 +0 -0
  65. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/cassandra-stress/terraform/user_data +0 -0
  66. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/README.md +0 -0
  67. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/cluster/dev/dev.yaml +0 -0
  68. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/cluster/prod/prod.yaml +0 -0
  69. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/inventory/hosts +0 -0
  70. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/password_dev.txt +0 -0
  71. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/password_prod.txt +0 -0
  72. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/playbook/example.yaml +0 -0
  73. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/vault/vault_dev.yaml +0 -0
  74. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/ansible-vault/vault/vault_prod.yaml +0 -0
  75. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/inventory/.opsconfig.yaml +0 -0
  76. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/inventory/README.md +0 -0
  77. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/inventory/local_inventory/hosts +0 -0
  78. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/inventory/my-aws-cluster.yaml +0 -0
  79. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/inventory/my-azure-cluster.yaml +0 -0
  80. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/packer/README.md +0 -0
  81. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/packer/clusters/ubuntu.yaml +0 -0
  82. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/packer/packer/ubuntu.json +0 -0
  83. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/.gitignore +0 -0
  84. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/README.md +0 -0
  85. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/ansible.cfg +0 -0
  86. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/playbooks/site.yaml +0 -0
  87. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/roles/common/tasks/main.yaml +0 -0
  88. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/roles/db/tasks/main.yaml +0 -0
  89. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/roles/web/tasks/main.yaml +0 -0
  90. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/ansible/tasks/copy-key.yaml +0 -0
  91. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/clusters/example.yaml +0 -0
  92. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/main/main.tf.jinja2 +0 -0
  93. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/main/shared_variables.tf +0 -0
  94. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/db/instance.tf.jinja2 +0 -0
  95. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/db/main.tf.jinja2 +0 -0
  96. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/macros.tf.jinja2 +0 -0
  97. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/shared_iam/default_policy.json +0 -0
  98. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/vpc/main.tf.jinja2 +0 -0
  99. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/web/elb.tf.jinja2 +0 -0
  100. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/web/instance.tf.jinja2 +0 -0
  101. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/modules/web/main.tf.jinja2 +0 -0
  102. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-and-ansible/terraform/user_data +0 -0
  103. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/.opsconfig.yaml +0 -0
  104. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/README.md +0 -0
  105. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/compositions/terraform/cluster/main.tf +0 -0
  106. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/compositions/terraform/network/main.tf +0 -0
  107. {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
  108. {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
  109. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/conf.yaml +0 -0
  110. {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
  111. {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
  112. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/conf.yaml +0 -0
  113. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/config/env=dev/default.yaml +0 -0
  114. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/modules/cluster/main.tf +0 -0
  115. {ops-cli-2.2.1 → ops_cli-2.3.0}/examples/features/terraform-hierarchical/modules/network/main.tf +0 -0
  116. {ops-cli-2.2.1 → ops_cli-2.3.0}/setup.cfg +0 -0
  117. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/__init__.py +0 -0
  118. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/__init__.py +0 -0
  119. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/callback_plugins/__init__.py +0 -0
  120. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/filter_plugins/__init__.py +0 -0
  121. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/filter_plugins/commonfilters.py +0 -0
  122. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/vars_plugins/__init__.py +0 -0
  123. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/vars_plugins/clusterconfig.py +0 -0
  124. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/ansible/vars_plugins/opsconfig.py +0 -0
  125. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/__init__.py +0 -0
  126. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/aws.py +0 -0
  127. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/config.py +0 -0
  128. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/config_generator.py +0 -0
  129. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/helmfile.py +0 -0
  130. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/packer.py +0 -0
  131. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/parser.py +0 -0
  132. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/playbook.py +0 -0
  133. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/run.py +0 -0
  134. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/sync.py +0 -0
  135. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/cli/terraform.py +0 -0
  136. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ansible/ansible.cfg +0 -0
  137. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ansible/tasks/deploy_prometheus_alert_rules.yml +0 -0
  138. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ansible/tasks/install_rpm.yml +0 -0
  139. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ansible/tasks/remove_prometheus_alert_rules.yml +0 -0
  140. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ssh/ssh.config +0 -0
  141. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ssh/ssh.scb.proxy.config.tpl +0 -0
  142. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/ssh/ssh.tunnel.config +0 -0
  143. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/data/terraform/terraformrc +0 -0
  144. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/git_utils.py +0 -0
  145. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/hierarchical/__init__.py +0 -0
  146. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/hierarchical/composition_config_generator.py +0 -0
  147. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/SKMS.py +0 -0
  148. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/__init__.py +0 -0
  149. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/azurerm.py +0 -0
  150. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/caching.py +0 -0
  151. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/generator.py +0 -0
  152. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/__init__.py +0 -0
  153. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/azr.py +0 -0
  154. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/legacy_pcs.py +0 -0
  155. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/plugin/skms.py +0 -0
  156. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/inventory/sshconfig.py +0 -0
  157. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/jinja/__init__.py +0 -0
  158. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/main.py +0 -0
  159. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/opsconfig.py +0 -0
  160. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/simpleconsul.py +0 -0
  161. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/simplessm.py +0 -0
  162. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops/terraform/__init__.py +0 -0
  163. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops_cli.egg-info/SOURCES.txt +0 -0
  164. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops_cli.egg-info/dependency_links.txt +0 -0
  165. {ops-cli-2.2.1 → ops_cli-2.3.0}/src/ops_cli.egg-info/entry_points.txt +0 -0
  166. {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
1
+ Metadata-Version: 2.2
2
2
  Name: ops-cli
3
- Version: 2.2.1
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.2.0; python_version >= "3.9"
28
- Requires-Dist: ansible-core==2.15.5; python_version >= "3.9"
29
- Requires-Dist: awscli==1.29.12; python_version >= "3.7"
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.29.4; python_version >= "3.7"
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.7
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: boto==2.49.0
115
- Requires-Dist: boto3==1.28.12; python_version >= "3.7"
116
- Requires-Dist: botocore==1.31.12; python_version >= "3.7"
117
- Requires-Dist: cachetools==5.3.1; python_version >= "3.7"
118
- Requires-Dist: certifi==2023.7.22; python_version >= "3.6"
119
- Requires-Dist: cffi==1.16.0; python_version >= "3.8"
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==41.0.4; python_version >= "3.7"
123
- Requires-Dist: deepmerge==1.1.0
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.10; python_version >= "3.7"
126
- Requires-Dist: gitpython==3.1.37; python_version >= "3.7"
127
- Requires-Dist: google-auth==2.23.3; python_version >= "3.7"
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.0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3"
130
- Requires-Dist: hvac==1.1.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0"
131
- Requires-Dist: idna==3.4; python_version >= "3.5"
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.6.1
134
- Requires-Dist: jinja2==3.1.2; python_version >= "3.7"
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==2.1.3; python_version >= "3.7"
139
- Requires-Dist: msal==1.24.1; python_version >= "2.7"
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==23.2; python_version >= "3.7"
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.5.0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3, 3.4, 3.5"
147
- Requires-Dist: pyasn1-modules==0.3.0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3, 3.4, 3.5"
148
- Requires-Dist: pycparser==2.21
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.8.0; python_version >= "3.7"
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.8.2; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.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.31.0; python_version >= "3.7"
155
- Requires-Dist: requests-oauthlib==1.3.1; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3"
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.6.2; python_version >= "3.7"
159
- Requires-Dist: setuptools==68.2.2; python_version >= "3.8"
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.16.0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2"
162
- Requires-Dist: smmap==5.0.1; python_version >= "3.7"
163
- Requires-Dist: typing-extensions==4.8.0; python_version >= "3.8"
164
- Requires-Dist: urllib3==1.26.17; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3, 3.4, 3.5"
165
- Requires-Dist: websocket-client==1.6.4; python_version >= "3.8"
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
  [![Build status](https://github.com/adobe/ops-cli/actions/workflows/release.yml/badge.svg)](https://github.com/adobe/ops-cli/actions/workflows/release.yml) [![Docker image](https://img.shields.io/badge/Docker-ghcr.io/adobe/opscli-brightgreen.svg?style=flat-square)](https://github.com/adobe/ops-cli/pkgs/container/ops-cli) [![License](https://img.shields.io/github/license/adobe/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.2.1 stable release
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.2.1 bash
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.2.1 stable release
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.2.1 bash
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.2.0; python_version >= '3.9'
3
- ansible-core==2.15.5; python_version >= '3.9'
4
- awscli==1.29.12; python_version >= '3.7'
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.29.4; python_version >= '3.7'
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.7
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
- boto==2.49.0
90
- boto3==1.28.12; python_version >= '3.7'
91
- botocore==1.31.12; python_version >= '3.7'
92
- cachetools==5.3.1; python_version >= '3.7'
93
- certifi==2023.7.22; python_version >= '3.6'
94
- cffi==1.16.0; python_version >= '3.8'
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==41.0.4; python_version >= '3.7'
98
- deepmerge==1.1.0
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.10; python_version >= '3.7'
101
- gitpython==3.1.37; python_version >= '3.7'
102
- google-auth==2.23.3; python_version >= '3.7'
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.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
105
- hvac==1.1.1; python_full_version >= '3.6.2' and python_full_version < '4.0.0'
106
- idna==3.4; python_version >= '3.5'
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.6.1
109
- jinja2==3.1.2; python_version >= '3.7'
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==2.1.3; python_version >= '3.7'
114
- msal==1.24.1; python_version >= '2.7'
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==23.2; python_version >= '3.7'
117
+ packaging==24.2; python_version >= '3.8'
119
118
  passgen==1.1.1
120
119
  pathlib2==2.3.7.post1
121
- pyasn1==0.5.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
122
- pyasn1-modules==0.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
123
- pycparser==2.21
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.8.0; python_version >= '3.7'
124
+ pyjwt[crypto]==2.10.1; python_version >= '3.9'
126
125
  python-consul==1.1.0
127
- python-dateutil==2.8.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.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.31.0; python_version >= '3.7'
130
- requests-oauthlib==1.3.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
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.6.2; python_version >= '3.7'
134
- setuptools==68.2.2; python_version >= '3.8'
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.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
137
- smmap==5.0.1; python_version >= '3.7'
138
- typing-extensions==4.8.0; python_version >= '3.8'
139
- urllib3==1.26.17; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
140
- websocket-client==1.6.4; python_version >= '3.8'
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.2.1',
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('ec2_id', '')
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: