ops-cli 2.3.2__tar.gz → 2.4.1__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 (169) hide show
  1. {ops_cli-2.3.2/src/ops_cli.egg-info → ops_cli-2.4.1}/PKG-INFO +32 -16
  2. {ops_cli-2.3.2 → ops_cli-2.4.1}/README.md +20 -3
  3. {ops_cli-2.3.2 → ops_cli-2.4.1}/requirements.txt +11 -12
  4. {ops_cli-2.3.2 → ops_cli-2.4.1}/setup.py +1 -1
  5. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/__init__.py +6 -0
  6. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/parser.py +2 -0
  7. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/playbook.py +4 -2
  8. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/run.py +3 -2
  9. ops_cli-2.4.1/src/ops/cli/ssh.py +460 -0
  10. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/sync.py +63 -33
  11. ops_cli-2.4.1/src/ops/data/ssh/ssh.teleport.config.tpl +9 -0
  12. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/__init__.py +18 -0
  13. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/ec2inventory.py +16 -2
  14. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/plugin/cns.py +1 -0
  15. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/plugin/ec2.py +4 -1
  16. ops_cli-2.4.1/src/ops/inventory/sshconfig.py +109 -0
  17. {ops_cli-2.3.2 → ops_cli-2.4.1/src/ops_cli.egg-info}/PKG-INFO +32 -16
  18. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops_cli.egg-info/SOURCES.txt +1 -0
  19. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops_cli.egg-info/requires.txt +13 -12
  20. ops_cli-2.3.2/src/ops/cli/ssh.py +0 -337
  21. ops_cli-2.3.2/src/ops/inventory/sshconfig.py +0 -98
  22. {ops_cli-2.3.2 → ops_cli-2.4.1}/LICENSE +0 -0
  23. {ops_cli-2.3.2 → ops_cli-2.4.1}/MANIFEST.in +0 -0
  24. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/.opsconfig.yaml +0 -0
  25. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/README.md +0 -0
  26. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/clusters/kubeconfigs/README.md +0 -0
  27. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/clusters/my-kubernetes-cluster.yaml +0 -0
  28. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/backends.tf.jinja2 +0 -0
  29. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/common_variables.tf.jinja2 +0 -0
  30. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/configure-local-kubectl.tf.jinja2 +0 -0
  31. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster-autoscaler.tf.jinja2 +0 -0
  32. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster.tf.jinja2 +0 -0
  33. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-worker-nodes-auth-configmap.tf.jinja2 +0 -0
  34. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-worker-nodes.tf.jinja2 +0 -0
  35. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/outputs.tf.jinja2 +0 -0
  36. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/providers.tf.jinja2 +0 -0
  37. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/scripts/fileexist.sh +0 -0
  38. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/variables.tf.jinja2 +0 -0
  39. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/aws-eks/vpc.tf.jinja2 +0 -0
  40. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/common/backends.tf.jinja2 +0 -0
  41. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/common/common_variables.tf.jinja2 +0 -0
  42. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/common/providers.tf.jinja2 +0 -0
  43. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/helm/backends.tf.jinja2 +0 -0
  44. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/helm/cluster-autoscaler.tf +0 -0
  45. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/helm/common_variables.tf.jinja2 +0 -0
  46. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/helm/dashboard.tf +0 -0
  47. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/helm/kube-state-metrics.tf +0 -0
  48. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/helm/kube2iam.tf +0 -0
  49. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/helm/provider_helm.tf.jinja2 +0 -0
  50. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/helm/providers.tf.jinja2 +0 -0
  51. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/helm/variables.tf.jinja2 +0 -0
  52. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/helm-init/backends.tf.jinja2 +0 -0
  53. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/compositions/generic/helm-init/helm-init.tf.jinja2 +0 -0
  54. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/aws-kubernetes/update.sh +0 -0
  55. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/.opsconfig.yaml +0 -0
  56. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/README.md +0 -0
  57. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/ansible/install_stress_tool.yaml +0 -0
  58. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/ansible/setup.yaml +0 -0
  59. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/ansible/setup12.yaml +0 -0
  60. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/ansible/templates/cassandra-env.sh +0 -0
  61. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/ansible/templates/cassandra_defaults.yaml +0 -0
  62. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/ansible/templates/cassandra_defaults_12.yaml +0 -0
  63. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/ansible/templates/stress.yaml +0 -0
  64. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/ansible.cfg +0 -0
  65. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/cluster1.yaml +0 -0
  66. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/cluster2.yaml +0 -0
  67. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/terraform/main/main.tf.jinja2 +0 -0
  68. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/terraform/main/variables.tf.jinja2 +0 -0
  69. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/terraform/modules/cassandra/main.tf.jinja2 +0 -0
  70. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/terraform/modules/macros.tf.jinja2 +0 -0
  71. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/terraform/modules/shared_iam/default_policy.json +0 -0
  72. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/terraform/modules/vpc/main.tf.jinja2 +0 -0
  73. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/cassandra-stress/terraform/user_data +0 -0
  74. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/ansible-vault/README.md +0 -0
  75. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/ansible-vault/cluster/dev/dev.yaml +0 -0
  76. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/ansible-vault/cluster/prod/prod.yaml +0 -0
  77. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/ansible-vault/inventory/hosts +0 -0
  78. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/ansible-vault/password_dev.txt +0 -0
  79. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/ansible-vault/password_prod.txt +0 -0
  80. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/ansible-vault/playbook/example.yaml +0 -0
  81. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/ansible-vault/vault/vault_dev.yaml +0 -0
  82. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/ansible-vault/vault/vault_prod.yaml +0 -0
  83. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/inventory/.opsconfig.yaml +0 -0
  84. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/inventory/README.md +0 -0
  85. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/inventory/local_inventory/hosts +0 -0
  86. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/inventory/my-aws-cluster.yaml +0 -0
  87. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/inventory/my-azure-cluster.yaml +0 -0
  88. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/packer/README.md +0 -0
  89. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/packer/clusters/ubuntu.yaml +0 -0
  90. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/packer/packer/ubuntu.json +0 -0
  91. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/.gitignore +0 -0
  92. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/README.md +0 -0
  93. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/ansible/ansible.cfg +0 -0
  94. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/ansible/playbooks/site.yaml +0 -0
  95. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/ansible/roles/common/tasks/main.yaml +0 -0
  96. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/ansible/roles/db/tasks/main.yaml +0 -0
  97. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/ansible/roles/web/tasks/main.yaml +0 -0
  98. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/ansible/tasks/copy-key.yaml +0 -0
  99. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/clusters/example.yaml +0 -0
  100. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/terraform/main/main.tf.jinja2 +0 -0
  101. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/terraform/main/shared_variables.tf +0 -0
  102. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/terraform/modules/db/instance.tf.jinja2 +0 -0
  103. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/terraform/modules/db/main.tf.jinja2 +0 -0
  104. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/terraform/modules/macros.tf.jinja2 +0 -0
  105. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/terraform/modules/shared_iam/default_policy.json +0 -0
  106. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/terraform/modules/vpc/main.tf.jinja2 +0 -0
  107. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/terraform/modules/web/elb.tf.jinja2 +0 -0
  108. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/terraform/modules/web/instance.tf.jinja2 +0 -0
  109. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/terraform/modules/web/main.tf.jinja2 +0 -0
  110. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-and-ansible/terraform/user_data +0 -0
  111. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/.opsconfig.yaml +0 -0
  112. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/README.md +0 -0
  113. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/compositions/terraform/cluster/main.tf +0 -0
  114. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/compositions/terraform/network/main.tf +0 -0
  115. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/composition=cluster/conf.yaml +0 -0
  116. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/composition=network/conf.yaml +0 -0
  117. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/conf.yaml +0 -0
  118. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/composition=cluster/conf.yaml +0 -0
  119. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/composition=network/conf.yaml +0 -0
  120. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/conf.yaml +0 -0
  121. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/config/env=dev/default.yaml +0 -0
  122. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/modules/cluster/main.tf +0 -0
  123. {ops_cli-2.3.2 → ops_cli-2.4.1}/examples/features/terraform-hierarchical/modules/network/main.tf +0 -0
  124. {ops_cli-2.3.2 → ops_cli-2.4.1}/setup.cfg +0 -0
  125. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/__init__.py +0 -0
  126. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/ansible/__init__.py +0 -0
  127. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/ansible/callback_plugins/__init__.py +0 -0
  128. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/ansible/filter_plugins/__init__.py +0 -0
  129. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/ansible/filter_plugins/commonfilters.py +0 -0
  130. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/ansible/vars_plugins/__init__.py +0 -0
  131. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/ansible/vars_plugins/clusterconfig.py +0 -0
  132. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/ansible/vars_plugins/opsconfig.py +0 -0
  133. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/aws.py +0 -0
  134. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/config.py +0 -0
  135. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/config_generator.py +0 -0
  136. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/helmfile.py +0 -0
  137. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/inventory.py +0 -0
  138. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/packer.py +0 -0
  139. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/cli/terraform.py +0 -0
  140. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/data/ansible/ansible.cfg +0 -0
  141. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/data/ansible/tasks/deploy_prometheus_alert_rules.yml +0 -0
  142. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/data/ansible/tasks/install_rpm.yml +0 -0
  143. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/data/ansible/tasks/remove_prometheus_alert_rules.yml +0 -0
  144. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/data/ssh/ssh.config +0 -0
  145. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/data/ssh/ssh.scb.proxy.config.tpl +0 -0
  146. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/data/ssh/ssh.tunnel.config +0 -0
  147. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/data/terraform/terraformrc +0 -0
  148. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/git_utils.py +0 -0
  149. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/hierarchical/__init__.py +0 -0
  150. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/hierarchical/composition_config_generator.py +0 -0
  151. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/SKMS.py +0 -0
  152. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/azurerm.py +0 -0
  153. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/caching.py +0 -0
  154. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/generator.py +0 -0
  155. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/plugin/__init__.py +0 -0
  156. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/plugin/azr.py +0 -0
  157. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/plugin/legacy_pcs.py +0 -0
  158. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/inventory/plugin/skms.py +0 -0
  159. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/jinja/__init__.py +0 -0
  160. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/main.py +0 -0
  161. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/opsconfig.py +0 -0
  162. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/simpleconsul.py +0 -0
  163. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/simplessm.py +0 -0
  164. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/simplevault.py +0 -0
  165. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/terraform/__init__.py +0 -0
  166. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops/terraform/terraform_cmd_generator.py +0 -0
  167. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops_cli.egg-info/dependency_links.txt +0 -0
  168. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops_cli.egg-info/entry_points.txt +0 -0
  169. {ops_cli-2.3.2 → ops_cli-2.4.1}/src/ops_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ops-cli
3
- Version: 2.3.2
3
+ Version: 2.4.1
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
@@ -31,7 +31,7 @@ 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.36.0; python_version >= "3.9"
34
+ Requires-Dist: azure-core==1.38.0; python_version >= "3.9"
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
@@ -112,18 +112,17 @@ Requires-Dist: azure-storage-file==1.4.0
112
112
  Requires-Dist: azure-storage-queue==1.4.0
113
113
  Requires-Dist: boto3==1.40.30; python_version >= "3.9"
114
114
  Requires-Dist: botocore==1.40.30; python_version >= "3.9"
115
- Requires-Dist: cachetools==6.2.1; python_version >= "3.9"
116
- Requires-Dist: certifi==2025.11.12; python_version >= "3.7"
115
+ Requires-Dist: certifi==2026.1.4; python_version >= "3.7"
117
116
  Requires-Dist: cffi==2.0.0; python_version >= "3.9"
118
117
  Requires-Dist: charset-normalizer==3.4.4; python_version >= "3.7"
119
118
  Requires-Dist: colorama==0.4.6; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6"
120
- Requires-Dist: cryptography==46.0.3; python_version >= "3.8" and python_full_version not in "3.9.0, 3.9.1"
119
+ Requires-Dist: cryptography==46.0.4; python_version >= "3.8" and python_full_version not in "3.9.0, 3.9.1"
121
120
  Requires-Dist: deepmerge==2.0; python_version >= "3.8"
122
121
  Requires-Dist: docutils==0.19; python_version >= "3.7"
123
122
  Requires-Dist: durationpy==0.10
124
123
  Requires-Dist: gitdb==4.0.12; python_version >= "3.7"
125
- Requires-Dist: gitpython==3.1.45; python_version >= "3.7"
126
- Requires-Dist: google-auth==2.43.0; python_version >= "3.7"
124
+ Requires-Dist: gitpython==3.1.46; python_version >= "3.7"
125
+ Requires-Dist: google-auth==2.48.0; python_version >= "3.8"
127
126
  Requires-Dist: hashmerge==0.2
128
127
  Requires-Dist: himl==0.18.0; python_version >= "3.9"
129
128
  Requires-Dist: hvac==1.2.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0"
@@ -131,21 +130,21 @@ Requires-Dist: idna==3.11; python_version >= "3.8"
131
130
  Requires-Dist: inflection==0.5.1; python_version >= "3.5"
132
131
  Requires-Dist: isodate==0.7.2; python_version >= "3.7"
133
132
  Requires-Dist: jinja2==3.1.6; python_version >= "3.7"
134
- Requires-Dist: jmespath==1.0.1; python_version >= "3.7"
133
+ Requires-Dist: jmespath==1.1.0; python_version >= "3.9"
135
134
  Requires-Dist: kubernetes==33.1.0; python_version >= "3.6"
136
135
  Requires-Dist: markupsafe==3.0.3; python_version >= "3.9"
137
136
  Requires-Dist: msal==1.34.0; python_version >= "3.8"
138
137
  Requires-Dist: msrest==0.7.1; python_version >= "3.6"
139
138
  Requires-Dist: msrestazure==0.6.4
140
139
  Requires-Dist: oauthlib==3.3.1; python_version >= "3.8"
141
- Requires-Dist: packaging==25.0; python_version >= "3.8"
140
+ Requires-Dist: packaging==26.0; python_version >= "3.8"
142
141
  Requires-Dist: passgen==1.1.1
143
142
  Requires-Dist: pathlib2==2.3.7.post1
144
- Requires-Dist: pyasn1==0.6.1; python_version >= "3.8"
143
+ Requires-Dist: pyasn1==0.6.2; python_version >= "3.8"
145
144
  Requires-Dist: pyasn1-modules==0.4.2; python_version >= "3.8"
146
- Requires-Dist: pycparser==2.23; python_version >= "3.8"
145
+ Requires-Dist: pycparser==3.0; python_version >= "3.10"
147
146
  Requires-Dist: pyhcl==0.4.5
148
- Requires-Dist: pyjwt[crypto]==2.10.1; python_version >= "3.9"
147
+ Requires-Dist: pyjwt[crypto]==2.11.0; python_version >= "3.9"
149
148
  Requires-Dist: python-consul==1.1.0
150
149
  Requires-Dist: python-dateutil==2.9.0.post0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2"
151
150
  Requires-Dist: pyyaml==6.0.1; python_version >= "3.6"
@@ -158,7 +157,7 @@ Requires-Dist: simpledi==0.4.1
158
157
  Requires-Dist: six==1.17.0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2"
159
158
  Requires-Dist: smmap==5.0.2; python_version >= "3.7"
160
159
  Requires-Dist: typing-extensions==4.15.0; python_version >= "3.9"
161
- Requires-Dist: urllib3==2.5.0; python_version >= "3.9"
160
+ Requires-Dist: urllib3==2.6.0; python_version >= "3.9"
162
161
  Requires-Dist: websocket-client==1.9.0; python_version >= "3.9"
163
162
  Dynamic: author
164
163
  Dynamic: author-email
@@ -325,7 +324,7 @@ workon ops
325
324
  # uninstall previous `ops` version (if you have it)
326
325
  pip uninstall ops --yes
327
326
 
328
- # install ops-cli v2.3.2 stable release
327
+ # install ops-cli v2.4.1 stable release
329
328
  pip install --upgrade ops-cli
330
329
  ```
331
330
 
@@ -341,7 +340,7 @@ You can try out `ops-cli`, by using docker. The docker image has all required pr
341
340
 
342
341
  To start out a container, running the latest `ops-cli` docker image run:
343
342
  ```sh
344
- docker run -it ghcr.io/adobe/ops-cli:2.3.2 bash
343
+ docker run -it ghcr.io/adobe/ops-cli:2.4.1 bash
345
344
  ```
346
345
 
347
346
  After the container has started, you can start using `ops-cli`:
@@ -712,6 +711,23 @@ If there are connection issues double check that the proxy is running.
712
711
  ...
713
712
  ```
714
713
 
714
+ #### Teleport
715
+ Teleport (https://goteleport.com/) provides secretless SSH.
716
+ `ops` has support for using Teleport as ssh for the following operations: `ssh, tunnel, proxy, ansible play, run and sync`
717
+
718
+ In order to use Teleport an extra section needs to be added to the cluster config file:
719
+ ***
720
+ ```
721
+ inventory:
722
+ - plugin: cns
723
+ args:
724
+ teleport_enabled: True -> add this to existing configuration
725
+
726
+
727
+ teleport:
728
+ enabled: true -> add this whole block
729
+ ```
730
+
715
731
  ### Play
716
732
 
717
733
  Run an ansible playbook.
@@ -936,7 +952,7 @@ env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/
936
952
 
937
953
  ## Running tests
938
954
 
939
- - on your machine: `py.test tests`
955
+ - on your machine: `python -m pytest tests` or `build_scripts/run_tests.sh`
940
956
 
941
957
  # Troubleshooting
942
958
 
@@ -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.3.2 stable release
154
+ # install ops-cli v2.4.1 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.3.2 bash
170
+ docker run -it ghcr.io/adobe/ops-cli:2.4.1 bash
171
171
  ```
172
172
 
173
173
  After the container has started, you can start using `ops-cli`:
@@ -538,6 +538,23 @@ If there are connection issues double check that the proxy is running.
538
538
  ...
539
539
  ```
540
540
 
541
+ #### Teleport
542
+ Teleport (https://goteleport.com/) provides secretless SSH.
543
+ `ops` has support for using Teleport as ssh for the following operations: `ssh, tunnel, proxy, ansible play, run and sync`
544
+
545
+ In order to use Teleport an extra section needs to be added to the cluster config file:
546
+ ***
547
+ ```
548
+ inventory:
549
+ - plugin: cns
550
+ args:
551
+ teleport_enabled: True -> add this to existing configuration
552
+
553
+
554
+ teleport:
555
+ enabled: true -> add this whole block
556
+ ```
557
+
541
558
  ### Play
542
559
 
543
560
  Run an ansible playbook.
@@ -762,7 +779,7 @@ env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/
762
779
 
763
780
  ## Running tests
764
781
 
765
- - on your machine: `py.test tests`
782
+ - on your machine: `python -m pytest tests` or `build_scripts/run_tests.sh`
766
783
 
767
784
  # Troubleshooting
768
785
 
@@ -6,7 +6,7 @@ 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.36.0; python_version >= '3.9'
9
+ azure-core==1.38.0; python_version >= '3.9'
10
10
  azure-cosmosdb-nspkg==2.0.2
11
11
  azure-cosmosdb-table==1.0.6
12
12
  azure-datalake-store==0.0.53
@@ -87,18 +87,17 @@ azure-storage-file==1.4.0
87
87
  azure-storage-queue==1.4.0
88
88
  boto3==1.40.30; python_version >= '3.9'
89
89
  botocore==1.40.30; python_version >= '3.9'
90
- cachetools==6.2.1; python_version >= '3.9'
91
- certifi==2025.11.12; python_version >= '3.7'
90
+ certifi==2026.1.4; python_version >= '3.7'
92
91
  cffi==2.0.0; python_version >= '3.9'
93
92
  charset-normalizer==3.4.4; python_version >= '3.7'
94
93
  colorama==0.4.6; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'
95
- cryptography==46.0.3; python_version >= '3.8' and python_full_version not in '3.9.0, 3.9.1'
94
+ cryptography==46.0.4; python_version >= '3.8' and python_full_version not in '3.9.0, 3.9.1'
96
95
  deepmerge==2.0; python_version >= '3.8'
97
96
  docutils==0.19; python_version >= '3.7'
98
97
  durationpy==0.10
99
98
  gitdb==4.0.12; python_version >= '3.7'
100
- gitpython==3.1.45; python_version >= '3.7'
101
- google-auth==2.43.0; python_version >= '3.7'
99
+ gitpython==3.1.46; python_version >= '3.7'
100
+ google-auth==2.48.0; python_version >= '3.8'
102
101
  hashmerge==0.2
103
102
  himl==0.18.0; python_version >= '3.9'
104
103
  hvac==1.2.1; python_full_version >= '3.6.2' and python_full_version < '4.0.0'
@@ -106,21 +105,21 @@ idna==3.11; python_version >= '3.8'
106
105
  inflection==0.5.1; python_version >= '3.5'
107
106
  isodate==0.7.2; python_version >= '3.7'
108
107
  jinja2==3.1.6; python_version >= '3.7'
109
- jmespath==1.0.1; python_version >= '3.7'
108
+ jmespath==1.1.0; python_version >= '3.9'
110
109
  kubernetes==33.1.0; python_version >= '3.6'
111
110
  markupsafe==3.0.3; python_version >= '3.9'
112
111
  msal==1.34.0; python_version >= '3.8'
113
112
  msrest==0.7.1; python_version >= '3.6'
114
113
  msrestazure==0.6.4
115
114
  oauthlib==3.3.1; python_version >= '3.8'
116
- packaging==25.0; python_version >= '3.8'
115
+ packaging==26.0; python_version >= '3.8'
117
116
  passgen==1.1.1
118
117
  pathlib2==2.3.7.post1
119
- pyasn1==0.6.1; python_version >= '3.8'
118
+ pyasn1==0.6.2; python_version >= '3.8'
120
119
  pyasn1-modules==0.4.2; python_version >= '3.8'
121
- pycparser==2.23; python_version >= '3.8'
120
+ pycparser==3.0; python_version >= '3.10'
122
121
  pyhcl==0.4.5
123
- pyjwt[crypto]==2.10.1; python_version >= '3.9'
122
+ pyjwt[crypto]==2.11.0; python_version >= '3.9'
124
123
  python-consul==1.1.0
125
124
  python-dateutil==2.9.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
126
125
  pyyaml==6.0.1; python_version >= '3.6'
@@ -133,5 +132,5 @@ simpledi==0.4.1
133
132
  six==1.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
134
133
  smmap==5.0.2; python_version >= '3.7'
135
134
  typing-extensions==4.15.0; python_version >= '3.9'
136
- urllib3==2.5.0; python_version >= '3.9'
135
+ urllib3==2.6.0; python_version >= '3.9'
137
136
  websocket-client==1.9.0; python_version >= '3.9'
@@ -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.3.2',
26
+ version='2.4.1',
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',
@@ -11,6 +11,7 @@
11
11
  import os
12
12
  from subprocess import Popen, PIPE
13
13
  import sys
14
+ from shutil import which
14
15
 
15
16
 
16
17
  def get_output(command, trim=True):
@@ -41,3 +42,8 @@ def get_config_value(config, key):
41
42
  err("You must set the %s value in %s.yaml or in the cli as an extra variable: -e %s=value" %
42
43
  (e.message, config['cluster'], e.message))
43
44
  sys.exit(1)
45
+
46
+ def check_if_teleport_binary_installed():
47
+ if which("tsh") is None:
48
+ err('tsh binary needs to be installed for Teleport to work!')
49
+ sys.exit(2)
@@ -112,5 +112,7 @@ def configure_common_ansible_args(parser):
112
112
  parser.add_argument('--noscb', action='store_false', dest='use_scb',
113
113
  help='Disable use of Shell Control Box (SCB) even if '
114
114
  'it is enabled in the cluster config')
115
+ parser.add_argument('--teleport', action='store_false', dest='use_teleport',
116
+ help='Use Teleport for SSH')
115
117
 
116
118
  return parser
@@ -73,9 +73,11 @@ class PlaybookRunner(object):
73
73
  def run(self, args, extra_args):
74
74
  logger.info("Found extra_args %s", extra_args)
75
75
  inventory_path, ssh_config_paths = self.inventory_generator.generate()
76
- ssh_config_path = SshConfigGenerator.get_ssh_config_path(self.cluster_config,
76
+ ssh_config_generator = SshConfigGenerator(self.ops_config.package_dir)
77
+ ssh_config_path = ssh_config_generator.get_ssh_config_path(self.cluster_config,
77
78
  ssh_config_paths,
78
- args.use_scb)
79
+ args)
80
+
79
81
  ssh_config = f"ANSIBLE_SSH_ARGS='-F {ssh_config_path}'"
80
82
 
81
83
  ansible_config = "ANSIBLE_CONFIG=%s" % self.ops_config.ansible_config_path
@@ -68,9 +68,10 @@ class CommandRunner(object):
68
68
  logger.info("Found extra_args %s", extra_args)
69
69
  inventory_path, ssh_config_paths = self.inventory_generator.generate()
70
70
  limit = args.host_pattern
71
- ssh_config_path = SshConfigGenerator.get_ssh_config_path(self.cluster_config,
71
+ ssh_config_generator = SshConfigGenerator(self.ops_config.package_dir)
72
+ ssh_config_path = ssh_config_generator.get_ssh_config_path(self.cluster_config,
72
73
  ssh_config_paths,
73
- args.use_scb)
74
+ args)
74
75
  extra_args = ' '.join(args.extra_args)
75
76
  command = """cd {root_dir}
76
77
  ANSIBLE_SSH_ARGS='-F {ssh_config}' ANSIBLE_CONFIG={ansible_config_path} ansible -i {inventory_path} '{limit}' \\