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.
- {ops_cli-2.3.1/src/ops_cli.egg-info → ops_cli-2.4.0}/PKG-INFO +55 -40
- {ops_cli-2.3.1 → ops_cli-2.4.0}/README.md +20 -3
- {ops_cli-2.3.1 → ops_cli-2.4.0}/requirements.txt +32 -35
- {ops_cli-2.3.1 → ops_cli-2.4.0}/setup.py +1 -1
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/__init__.py +6 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/parser.py +2 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/playbook.py +4 -2
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/run.py +3 -2
- ops_cli-2.4.0/src/ops/cli/ssh.py +460 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/sync.py +63 -33
- ops_cli-2.4.0/src/ops/data/ssh/ssh.teleport.config.tpl +9 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/__init__.py +18 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/ec2inventory.py +16 -2
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/cns.py +1 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/ec2.py +4 -1
- ops_cli-2.4.0/src/ops/inventory/sshconfig.py +109 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0/src/ops_cli.egg-info}/PKG-INFO +55 -40
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops_cli.egg-info/SOURCES.txt +1 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops_cli.egg-info/requires.txt +36 -41
- ops_cli-2.3.1/src/ops/cli/ssh.py +0 -337
- ops_cli-2.3.1/src/ops/inventory/sshconfig.py +0 -98
- {ops_cli-2.3.1 → ops_cli-2.4.0}/LICENSE +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/MANIFEST.in +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/.opsconfig.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/README.md +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/clusters/kubeconfigs/README.md +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/clusters/my-kubernetes-cluster.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/backends.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/common_variables.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/configure-local-kubectl.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster-autoscaler.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster.tf.jinja2 +0 -0
- {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
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-worker-nodes.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/outputs.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/providers.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/scripts/fileexist.sh +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/variables.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/vpc.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/common/backends.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/common/common_variables.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/common/providers.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/backends.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/cluster-autoscaler.tf +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/common_variables.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/dashboard.tf +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/kube-state-metrics.tf +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/kube2iam.tf +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/provider_helm.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/providers.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/variables.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm-init/backends.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm-init/helm-init.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/aws-kubernetes/update.sh +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/.opsconfig.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/README.md +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/install_stress_tool.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/setup.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/setup12.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/cassandra-env.sh +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/cassandra_defaults.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/cassandra_defaults_12.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/stress.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/ansible.cfg +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/cluster1.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/cluster2.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/main/main.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/main/variables.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/cassandra/main.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/macros.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/shared_iam/default_policy.json +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/vpc/main.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/user_data +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/README.md +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/cluster/dev/dev.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/cluster/prod/prod.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/inventory/hosts +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/password_dev.txt +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/password_prod.txt +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/playbook/example.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/vault/vault_dev.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/ansible-vault/vault/vault_prod.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/inventory/.opsconfig.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/inventory/README.md +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/inventory/local_inventory/hosts +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/inventory/my-aws-cluster.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/inventory/my-azure-cluster.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/packer/README.md +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/packer/clusters/ubuntu.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/packer/packer/ubuntu.json +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/.gitignore +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/README.md +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/ansible.cfg +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/playbooks/site.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/roles/common/tasks/main.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/roles/db/tasks/main.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/roles/web/tasks/main.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/tasks/copy-key.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/clusters/example.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/main/main.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/main/shared_variables.tf +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/db/instance.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/db/main.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/macros.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/shared_iam/default_policy.json +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/vpc/main.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/web/elb.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/web/instance.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/web/main.tf.jinja2 +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/user_data +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/.opsconfig.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/README.md +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/compositions/terraform/cluster/main.tf +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/compositions/terraform/network/main.tf +0 -0
- {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
- {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
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/conf.yaml +0 -0
- {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
- {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
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/conf.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/default.yaml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/modules/cluster/main.tf +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/modules/network/main.tf +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/setup.cfg +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/__init__.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/__init__.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/callback_plugins/__init__.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/filter_plugins/__init__.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/filter_plugins/commonfilters.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/vars_plugins/__init__.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/vars_plugins/clusterconfig.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/ansible/vars_plugins/opsconfig.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/aws.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/config.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/config_generator.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/helmfile.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/inventory.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/packer.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/cli/terraform.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ansible/ansible.cfg +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ansible/tasks/deploy_prometheus_alert_rules.yml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ansible/tasks/install_rpm.yml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ansible/tasks/remove_prometheus_alert_rules.yml +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ssh/ssh.config +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ssh/ssh.scb.proxy.config.tpl +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/ssh/ssh.tunnel.config +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/data/terraform/terraformrc +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/git_utils.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/hierarchical/__init__.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/hierarchical/composition_config_generator.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/SKMS.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/azurerm.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/caching.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/generator.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/__init__.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/azr.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/legacy_pcs.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/inventory/plugin/skms.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/jinja/__init__.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/main.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/opsconfig.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/simpleconsul.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/simplessm.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/simplevault.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/terraform/__init__.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops/terraform/terraform_cmd_generator.py +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops_cli.egg-info/dependency_links.txt +0 -0
- {ops_cli-2.3.1 → ops_cli-2.4.0}/src/ops_cli.egg-info/entry_points.txt +0 -0
- {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.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: ops-cli
|
|
3
|
-
Version: 2.
|
|
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.
|
|
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.
|
|
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:
|
|
114
|
-
Requires-Dist:
|
|
115
|
-
Requires-Dist:
|
|
116
|
-
Requires-Dist:
|
|
117
|
-
Requires-Dist:
|
|
118
|
-
Requires-Dist:
|
|
119
|
-
Requires-Dist:
|
|
120
|
-
Requires-Dist:
|
|
121
|
-
Requires-Dist:
|
|
122
|
-
Requires-Dist:
|
|
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.
|
|
126
|
-
Requires-Dist: google-auth==2.
|
|
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.
|
|
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.
|
|
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.
|
|
134
|
-
Requires-Dist: jmespath==1.0
|
|
135
|
-
Requires-Dist: kubernetes==
|
|
136
|
-
Requires-Dist:
|
|
137
|
-
Requires-Dist:
|
|
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.
|
|
142
|
-
Requires-Dist: packaging==
|
|
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.
|
|
146
|
-
Requires-Dist: pyasn1-modules==0.4.
|
|
147
|
-
Requires-Dist: pycparser==
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
163
|
-
Requires-Dist: urllib3==2.0
|
|
164
|
-
Requires-Dist: websocket-client==1.
|
|
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.
|
|
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.
|
|
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: `
|
|
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.
|
|
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.
|
|
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: `
|
|
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.
|
|
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.
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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.
|
|
101
|
-
google-auth==2.
|
|
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.
|
|
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.
|
|
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.
|
|
109
|
-
jmespath==1.0
|
|
110
|
-
kubernetes==
|
|
111
|
-
|
|
112
|
-
|
|
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.
|
|
117
|
-
packaging==
|
|
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.
|
|
121
|
-
pyasn1-modules==0.4.
|
|
122
|
-
pycparser==
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
138
|
-
urllib3==2.0
|
|
139
|
-
websocket-client==1.
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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}' \\
|