ops-cli 2.3.1__tar.gz → 2.4.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 (169) hide show
  1. {ops_cli-2.3.1/src/ops_cli.egg-info → ops_cli-2.4.0}/PKG-INFO +55 -40
  2. {ops_cli-2.3.1 → ops_cli-2.4.0}/README.md +20 -3
  3. {ops_cli-2.3.1 → ops_cli-2.4.0}/requirements.txt +32 -35
  4. {ops_cli-2.3.1 → ops_cli-2.4.0}/setup.py +1 -1
  5. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/__init__.py +6 -0
  6. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/parser.py +2 -0
  7. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/playbook.py +4 -2
  8. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/run.py +3 -2
  9. ops_cli-2.4.0/src/ops/cli/ssh.py +460 -0
  10. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/sync.py +63 -33
  11. ops_cli-2.4.0/src/ops/data/ssh/ssh.teleport.config.tpl +9 -0
  12. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/__init__.py +18 -0
  13. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/ec2inventory.py +16 -2
  14. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/cns.py +1 -0
  15. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/ec2.py +4 -1
  16. ops_cli-2.4.0/src/ops/inventory/sshconfig.py +109 -0
  17. {ops_cli-2.3.1 → ops_cli-2.4.0/src/ops_cli.egg-info}/PKG-INFO +55 -40
  18. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops_cli.egg-info/SOURCES.txt +1 -0
  19. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops_cli.egg-info/requires.txt +36 -41
  20. ops_cli-2.3.1/src/ops/cli/ssh.py +0 -337
  21. ops_cli-2.3.1/src/ops/inventory/sshconfig.py +0 -98
  22. {ops_cli-2.3.1 → ops_cli-2.4.0}/LICENSE +0 -0
  23. {ops_cli-2.3.1 → ops_cli-2.4.0}/MANIFEST.in +0 -0
  24. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/.opsconfig.yaml +0 -0
  25. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/README.md +0 -0
  26. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/clusters/kubeconfigs/README.md +0 -0
  27. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/clusters/my-kubernetes-cluster.yaml +0 -0
  28. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/backends.tf.jinja2 +0 -0
  29. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/common_variables.tf.jinja2 +0 -0
  30. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/configure-local-kubectl.tf.jinja2 +0 -0
  31. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster-autoscaler.tf.jinja2 +0 -0
  32. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster.tf.jinja2 +0 -0
  33. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-worker-nodes-auth-configmap.tf.jinja2 +0 -0
  34. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-worker-nodes.tf.jinja2 +0 -0
  35. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/outputs.tf.jinja2 +0 -0
  36. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/providers.tf.jinja2 +0 -0
  37. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/scripts/fileexist.sh +0 -0
  38. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/variables.tf.jinja2 +0 -0
  39. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/vpc.tf.jinja2 +0 -0
  40. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/common/backends.tf.jinja2 +0 -0
  41. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/common/common_variables.tf.jinja2 +0 -0
  42. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/common/providers.tf.jinja2 +0 -0
  43. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/backends.tf.jinja2 +0 -0
  44. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/cluster-autoscaler.tf +0 -0
  45. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/common_variables.tf.jinja2 +0 -0
  46. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/dashboard.tf +0 -0
  47. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/kube-state-metrics.tf +0 -0
  48. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/kube2iam.tf +0 -0
  49. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/provider_helm.tf.jinja2 +0 -0
  50. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/providers.tf.jinja2 +0 -0
  51. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/variables.tf.jinja2 +0 -0
  52. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm-init/backends.tf.jinja2 +0 -0
  53. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm-init/helm-init.tf.jinja2 +0 -0
  54. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/update.sh +0 -0
  55. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/.opsconfig.yaml +0 -0
  56. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/README.md +0 -0
  57. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/install_stress_tool.yaml +0 -0
  58. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/setup.yaml +0 -0
  59. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/setup12.yaml +0 -0
  60. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/cassandra-env.sh +0 -0
  61. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/cassandra_defaults.yaml +0 -0
  62. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/cassandra_defaults_12.yaml +0 -0
  63. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/stress.yaml +0 -0
  64. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible.cfg +0 -0
  65. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/cluster1.yaml +0 -0
  66. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/cluster2.yaml +0 -0
  67. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/main/main.tf.jinja2 +0 -0
  68. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/main/variables.tf.jinja2 +0 -0
  69. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/cassandra/main.tf.jinja2 +0 -0
  70. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/macros.tf.jinja2 +0 -0
  71. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/shared_iam/default_policy.json +0 -0
  72. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/vpc/main.tf.jinja2 +0 -0
  73. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/user_data +0 -0
  74. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/README.md +0 -0
  75. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/cluster/dev/dev.yaml +0 -0
  76. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/cluster/prod/prod.yaml +0 -0
  77. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/inventory/hosts +0 -0
  78. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/password_dev.txt +0 -0
  79. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/password_prod.txt +0 -0
  80. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/playbook/example.yaml +0 -0
  81. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/vault/vault_dev.yaml +0 -0
  82. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/vault/vault_prod.yaml +0 -0
  83. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/inventory/.opsconfig.yaml +0 -0
  84. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/inventory/README.md +0 -0
  85. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/inventory/local_inventory/hosts +0 -0
  86. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/inventory/my-aws-cluster.yaml +0 -0
  87. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/inventory/my-azure-cluster.yaml +0 -0
  88. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/packer/README.md +0 -0
  89. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/packer/clusters/ubuntu.yaml +0 -0
  90. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/packer/packer/ubuntu.json +0 -0
  91. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/.gitignore +0 -0
  92. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/README.md +0 -0
  93. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/ansible.cfg +0 -0
  94. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/playbooks/site.yaml +0 -0
  95. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/roles/common/tasks/main.yaml +0 -0
  96. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/roles/db/tasks/main.yaml +0 -0
  97. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/roles/web/tasks/main.yaml +0 -0
  98. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/tasks/copy-key.yaml +0 -0
  99. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/clusters/example.yaml +0 -0
  100. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/main/main.tf.jinja2 +0 -0
  101. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/main/shared_variables.tf +0 -0
  102. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/db/instance.tf.jinja2 +0 -0
  103. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/db/main.tf.jinja2 +0 -0
  104. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/macros.tf.jinja2 +0 -0
  105. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/shared_iam/default_policy.json +0 -0
  106. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/vpc/main.tf.jinja2 +0 -0
  107. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/web/elb.tf.jinja2 +0 -0
  108. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/web/instance.tf.jinja2 +0 -0
  109. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/web/main.tf.jinja2 +0 -0
  110. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/user_data +0 -0
  111. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/.opsconfig.yaml +0 -0
  112. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/README.md +0 -0
  113. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/compositions/terraform/cluster/main.tf +0 -0
  114. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/compositions/terraform/network/main.tf +0 -0
  115. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/composition=cluster/conf.yaml +0 -0
  116. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/composition=network/conf.yaml +0 -0
  117. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/conf.yaml +0 -0
  118. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/composition=cluster/conf.yaml +0 -0
  119. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/composition=network/conf.yaml +0 -0
  120. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/conf.yaml +0 -0
  121. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/default.yaml +0 -0
  122. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/modules/cluster/main.tf +0 -0
  123. {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/modules/network/main.tf +0 -0
  124. {ops_cli-2.3.1 → ops_cli-2.4.0}/setup.cfg +0 -0
  125. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/__init__.py +0 -0
  126. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/__init__.py +0 -0
  127. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/callback_plugins/__init__.py +0 -0
  128. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/filter_plugins/__init__.py +0 -0
  129. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/filter_plugins/commonfilters.py +0 -0
  130. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/vars_plugins/__init__.py +0 -0
  131. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/vars_plugins/clusterconfig.py +0 -0
  132. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/vars_plugins/opsconfig.py +0 -0
  133. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/aws.py +0 -0
  134. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/config.py +0 -0
  135. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/config_generator.py +0 -0
  136. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/helmfile.py +0 -0
  137. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/inventory.py +0 -0
  138. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/packer.py +0 -0
  139. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/terraform.py +0 -0
  140. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ansible/ansible.cfg +0 -0
  141. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ansible/tasks/deploy_prometheus_alert_rules.yml +0 -0
  142. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ansible/tasks/install_rpm.yml +0 -0
  143. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ansible/tasks/remove_prometheus_alert_rules.yml +0 -0
  144. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ssh/ssh.config +0 -0
  145. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ssh/ssh.scb.proxy.config.tpl +0 -0
  146. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ssh/ssh.tunnel.config +0 -0
  147. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/terraform/terraformrc +0 -0
  148. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/git_utils.py +0 -0
  149. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/hierarchical/__init__.py +0 -0
  150. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/hierarchical/composition_config_generator.py +0 -0
  151. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/SKMS.py +0 -0
  152. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/azurerm.py +0 -0
  153. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/caching.py +0 -0
  154. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/generator.py +0 -0
  155. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/__init__.py +0 -0
  156. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/azr.py +0 -0
  157. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/legacy_pcs.py +0 -0
  158. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/skms.py +0 -0
  159. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/jinja/__init__.py +0 -0
  160. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/main.py +0 -0
  161. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/opsconfig.py +0 -0
  162. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/simpleconsul.py +0 -0
  163. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/simplessm.py +0 -0
  164. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/simplevault.py +0 -0
  165. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/terraform/__init__.py +0 -0
  166. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/terraform/terraform_cmd_generator.py +0 -0
  167. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops_cli.egg-info/dependency_links.txt +0 -0
  168. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops_cli.egg-info/entry_points.txt +0 -0
  169. {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: ops-cli
3
- Version: 2.3.1
3
+ Version: 2.4.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
@@ -26,12 +26,12 @@ License-File: LICENSE
26
26
  Requires-Dist: adal==1.2.7
27
27
  Requires-Dist: ansible==8.7.0; python_version >= "3.9"
28
28
  Requires-Dist: ansible-core==2.15.13; python_version >= "3.9"
29
- Requires-Dist: awscli==1.32.6; python_version >= "3.8"
29
+ Requires-Dist: awscli==1.42.30; python_version >= "3.9"
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.32.0; python_version >= "3.8"
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
@@ -110,58 +110,55 @@ 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
- Requires-Dist: backports.functools-lru-cache==1.6.6; python_version >= "2.6"
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"
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"
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
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"
113
+ Requires-Dist: boto3==1.40.30; python_version >= "3.9"
114
+ Requires-Dist: botocore==1.40.30; python_version >= "3.9"
115
+ Requires-Dist: certifi==2026.1.4; python_version >= "3.7"
116
+ Requires-Dist: cffi==2.0.0; python_version >= "3.9"
117
+ Requires-Dist: charset-normalizer==3.4.4; python_version >= "3.7"
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"
119
+ Requires-Dist: cryptography==46.0.4; python_version >= "3.8" and python_full_version not in "3.9.0, 3.9.1"
120
+ Requires-Dist: deepmerge==2.0; python_version >= "3.8"
121
+ Requires-Dist: docutils==0.19; python_version >= "3.7"
122
+ Requires-Dist: durationpy==0.10
124
123
  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"
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
- Requires-Dist: himl==0.15.2; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3"
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"
130
- Requires-Dist: idna==3.10; python_version >= "3.6"
129
+ 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
- Requires-Dist: jinja2==3.1.4; python_version >= "3.7"
134
- Requires-Dist: jmespath==1.0.1; python_version >= "3.7"
135
- Requires-Dist: kubernetes==26.1.0; python_version >= "3.6"
136
- Requires-Dist: lru-cache==0.2.3
137
- Requires-Dist: markupsafe==3.0.2; python_version >= "3.9"
138
- Requires-Dist: msal==1.31.1; python_version >= "3.7"
132
+ Requires-Dist: jinja2==3.1.6; python_version >= "3.7"
133
+ Requires-Dist: jmespath==1.1.0; python_version >= "3.9"
134
+ Requires-Dist: kubernetes==33.1.0; python_version >= "3.6"
135
+ Requires-Dist: markupsafe==3.0.3; python_version >= "3.9"
136
+ Requires-Dist: msal==1.34.0; python_version >= "3.8"
139
137
  Requires-Dist: msrest==0.7.1; python_version >= "3.6"
140
138
  Requires-Dist: msrestazure==0.6.4
141
- Requires-Dist: oauthlib==3.2.2; python_version >= "3.6"
142
- Requires-Dist: packaging==24.2; python_version >= "3.8"
139
+ Requires-Dist: oauthlib==3.3.1; python_version >= "3.8"
140
+ Requires-Dist: packaging==26.0; python_version >= "3.8"
143
141
  Requires-Dist: passgen==1.1.1
144
142
  Requires-Dist: pathlib2==2.3.7.post1
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"
143
+ Requires-Dist: pyasn1==0.6.2; python_version >= "3.8"
144
+ Requires-Dist: pyasn1-modules==0.4.2; python_version >= "3.8"
145
+ Requires-Dist: pycparser==3.0; python_version >= "3.10"
148
146
  Requires-Dist: pyhcl==0.4.5
149
- Requires-Dist: pyjwt[crypto]==2.10.1; python_version >= "3.9"
147
+ Requires-Dist: pyjwt[crypto]==2.11.0; python_version >= "3.9"
150
148
  Requires-Dist: python-consul==1.1.0
151
149
  Requires-Dist: python-dateutil==2.9.0.post0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2"
152
150
  Requires-Dist: pyyaml==6.0.1; python_version >= "3.6"
153
- Requires-Dist: requests==2.32.3; python_version >= "3.8"
151
+ Requires-Dist: requests==2.32.5; python_version >= "3.9"
154
152
  Requires-Dist: requests-oauthlib==2.0.0; python_version >= "3.4"
155
153
  Requires-Dist: resolvelib==1.0.1
156
154
  Requires-Dist: rsa==4.7.2; python_version >= "3.5" and python_version < "4"
157
- Requires-Dist: s3transfer==0.10.4; python_version >= "3.8"
158
- Requires-Dist: setuptools==75.8.0; python_version >= "3.9"
155
+ Requires-Dist: s3transfer==0.14.0; python_version >= "3.9"
159
156
  Requires-Dist: simpledi==0.4.1
160
157
  Requires-Dist: six==1.17.0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2"
161
158
  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"
159
+ Requires-Dist: typing-extensions==4.15.0; python_version >= "3.9"
160
+ Requires-Dist: urllib3==2.6.0; python_version >= "3.9"
161
+ Requires-Dist: websocket-client==1.9.0; python_version >= "3.9"
165
162
  Dynamic: author
166
163
  Dynamic: author-email
167
164
  Dynamic: classifier
@@ -169,6 +166,7 @@ Dynamic: description
169
166
  Dynamic: description-content-type
170
167
  Dynamic: home-page
171
168
  Dynamic: license
169
+ Dynamic: license-file
172
170
  Dynamic: requires-dist
173
171
  Dynamic: requires-python
174
172
  Dynamic: summary
@@ -326,7 +324,7 @@ workon ops
326
324
  # uninstall previous `ops` version (if you have it)
327
325
  pip uninstall ops --yes
328
326
 
329
- # install ops-cli v2.3.1 stable release
327
+ # install ops-cli v2.4.0 stable release
330
328
  pip install --upgrade ops-cli
331
329
  ```
332
330
 
@@ -342,7 +340,7 @@ You can try out `ops-cli`, by using docker. The docker image has all required pr
342
340
 
343
341
  To start out a container, running the latest `ops-cli` docker image run:
344
342
  ```sh
345
- docker run -it ghcr.io/adobe/ops-cli:2.3.1 bash
343
+ docker run -it ghcr.io/adobe/ops-cli:2.4.0 bash
346
344
  ```
347
345
 
348
346
  After the container has started, you can start using `ops-cli`:
@@ -713,6 +711,23 @@ If there are connection issues double check that the proxy is running.
713
711
  ...
714
712
  ```
715
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
+
716
731
  ### Play
717
732
 
718
733
  Run an ansible playbook.
@@ -937,7 +952,7 @@ env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/
937
952
 
938
953
  ## Running tests
939
954
 
940
- - on your machine: `py.test tests`
955
+ - on your machine: `python -m pytest tests` or `build_scripts/run_tests.sh`
941
956
 
942
957
  # Troubleshooting
943
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.1 stable release
154
+ # install ops-cli v2.4.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.3.1 bash
170
+ docker run -it ghcr.io/adobe/ops-cli:2.4.0 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
 
@@ -1,12 +1,12 @@
1
1
  adal==1.2.7
2
2
  ansible==8.7.0; python_version >= '3.9'
3
3
  ansible-core==2.15.13; python_version >= '3.9'
4
- awscli==1.32.6; python_version >= '3.8'
4
+ awscli==1.42.30; python_version >= '3.9'
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.32.0; python_version >= '3.8'
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
@@ -85,55 +85,52 @@ 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
- backports.functools-lru-cache==1.6.6; python_version >= '2.6'
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'
95
- colorama==0.4.4; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
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
98
- docutils==0.16; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
88
+ boto3==1.40.30; python_version >= '3.9'
89
+ botocore==1.40.30; python_version >= '3.9'
90
+ certifi==2026.1.4; python_version >= '3.7'
91
+ cffi==2.0.0; python_version >= '3.9'
92
+ charset-normalizer==3.4.4; python_version >= '3.7'
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'
94
+ cryptography==46.0.4; python_version >= '3.8' and python_full_version not in '3.9.0, 3.9.1'
95
+ deepmerge==2.0; python_version >= '3.8'
96
+ docutils==0.19; python_version >= '3.7'
97
+ durationpy==0.10
99
98
  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'
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
- himl==0.15.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
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'
105
- idna==3.10; python_version >= '3.6'
104
+ 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
- jinja2==3.1.4; python_version >= '3.7'
109
- jmespath==1.0.1; python_version >= '3.7'
110
- kubernetes==26.1.0; python_version >= '3.6'
111
- lru-cache==0.2.3
112
- markupsafe==3.0.2; python_version >= '3.9'
113
- msal==1.31.1; python_version >= '3.7'
107
+ jinja2==3.1.6; python_version >= '3.7'
108
+ jmespath==1.1.0; python_version >= '3.9'
109
+ kubernetes==33.1.0; python_version >= '3.6'
110
+ markupsafe==3.0.3; python_version >= '3.9'
111
+ msal==1.34.0; python_version >= '3.8'
114
112
  msrest==0.7.1; python_version >= '3.6'
115
113
  msrestazure==0.6.4
116
- oauthlib==3.2.2; python_version >= '3.6'
117
- packaging==24.2; python_version >= '3.8'
114
+ oauthlib==3.3.1; python_version >= '3.8'
115
+ packaging==26.0; python_version >= '3.8'
118
116
  passgen==1.1.1
119
117
  pathlib2==2.3.7.post1
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'
118
+ pyasn1==0.6.2; python_version >= '3.8'
119
+ pyasn1-modules==0.4.2; python_version >= '3.8'
120
+ pycparser==3.0; python_version >= '3.10'
123
121
  pyhcl==0.4.5
124
- pyjwt[crypto]==2.10.1; python_version >= '3.9'
122
+ pyjwt[crypto]==2.11.0; python_version >= '3.9'
125
123
  python-consul==1.1.0
126
124
  python-dateutil==2.9.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
127
125
  pyyaml==6.0.1; python_version >= '3.6'
128
- requests==2.32.3; python_version >= '3.8'
126
+ requests==2.32.5; python_version >= '3.9'
129
127
  requests-oauthlib==2.0.0; python_version >= '3.4'
130
128
  resolvelib==1.0.1
131
129
  rsa==4.7.2; python_version >= '3.5' and python_version < '4'
132
- s3transfer==0.10.4; python_version >= '3.8'
133
- setuptools==75.8.0; python_version >= '3.9'
130
+ s3transfer==0.14.0; python_version >= '3.9'
134
131
  simpledi==0.4.1
135
132
  six==1.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
136
133
  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'
134
+ typing-extensions==4.15.0; python_version >= '3.9'
135
+ urllib3==2.6.0; python_version >= '3.9'
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.1',
26
+ version='2.4.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',
@@ -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}' \\