ops-cli 2.3.2__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.2/src/ops_cli.egg-info → ops_cli-2.4.0}/PKG-INFO +32 -16
- {ops_cli-2.3.2 → ops_cli-2.4.0}/README.md +20 -3
- {ops_cli-2.3.2 → ops_cli-2.4.0}/requirements.txt +11 -12
- {ops_cli-2.3.2 → ops_cli-2.4.0}/setup.py +1 -1
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/cli/__init__.py +6 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/cli/parser.py +2 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/cli/playbook.py +4 -2
- {ops_cli-2.3.2 → 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.2 → 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.2 → ops_cli-2.4.0}/src/ops/inventory/__init__.py +18 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/inventory/ec2inventory.py +16 -2
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/inventory/plugin/cns.py +1 -0
- {ops_cli-2.3.2 → 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.2 → ops_cli-2.4.0/src/ops_cli.egg-info}/PKG-INFO +32 -16
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops_cli.egg-info/SOURCES.txt +1 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops_cli.egg-info/requires.txt +13 -12
- ops_cli-2.3.2/src/ops/cli/ssh.py +0 -337
- ops_cli-2.3.2/src/ops/inventory/sshconfig.py +0 -98
- {ops_cli-2.3.2 → ops_cli-2.4.0}/LICENSE +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/MANIFEST.in +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/.opsconfig.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/README.md +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/clusters/kubeconfigs/README.md +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/clusters/my-kubernetes-cluster.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/backends.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/common_variables.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/configure-local-kubectl.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster-autoscaler.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-cluster.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → 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.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/eks-worker-nodes.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/outputs.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/providers.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/scripts/fileexist.sh +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/variables.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/aws-eks/vpc.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/common/backends.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/common/common_variables.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/common/providers.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/backends.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/cluster-autoscaler.tf +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/common_variables.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/dashboard.tf +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/kube-state-metrics.tf +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/kube2iam.tf +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/provider_helm.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/providers.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm/variables.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm-init/backends.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/compositions/generic/helm-init/helm-init.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/aws-kubernetes/update.sh +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/.opsconfig.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/README.md +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/install_stress_tool.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/setup.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/setup12.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/cassandra-env.sh +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/cassandra_defaults.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/cassandra_defaults_12.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/ansible/templates/stress.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/ansible.cfg +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/cluster1.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/cluster2.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/main/main.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/main/variables.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/cassandra/main.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/macros.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/shared_iam/default_policy.json +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/modules/vpc/main.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/cassandra-stress/terraform/user_data +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/ansible-vault/README.md +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/ansible-vault/cluster/dev/dev.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/ansible-vault/cluster/prod/prod.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/ansible-vault/inventory/hosts +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/ansible-vault/password_dev.txt +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/ansible-vault/password_prod.txt +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/ansible-vault/playbook/example.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/ansible-vault/vault/vault_dev.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/ansible-vault/vault/vault_prod.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/inventory/.opsconfig.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/inventory/README.md +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/inventory/local_inventory/hosts +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/inventory/my-aws-cluster.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/inventory/my-azure-cluster.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/packer/README.md +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/packer/clusters/ubuntu.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/packer/packer/ubuntu.json +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/.gitignore +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/README.md +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/ansible.cfg +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/playbooks/site.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/roles/common/tasks/main.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/roles/db/tasks/main.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/roles/web/tasks/main.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/ansible/tasks/copy-key.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/clusters/example.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/main/main.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/main/shared_variables.tf +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/db/instance.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/db/main.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/macros.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/shared_iam/default_policy.json +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/vpc/main.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/web/elb.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/web/instance.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/modules/web/main.tf.jinja2 +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-and-ansible/terraform/user_data +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/.opsconfig.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/README.md +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/compositions/terraform/cluster/main.tf +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/compositions/terraform/network/main.tf +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/composition=cluster/conf.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/composition=network/conf.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster1/conf.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/composition=cluster/conf.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/composition=network/conf.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/cluster=cluster2/conf.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/config/env=dev/default.yaml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/modules/cluster/main.tf +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/examples/features/terraform-hierarchical/modules/network/main.tf +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/setup.cfg +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/__init__.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/ansible/__init__.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/ansible/callback_plugins/__init__.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/ansible/filter_plugins/__init__.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/ansible/filter_plugins/commonfilters.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/ansible/vars_plugins/__init__.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/ansible/vars_plugins/clusterconfig.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/ansible/vars_plugins/opsconfig.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/cli/aws.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/cli/config.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/cli/config_generator.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/cli/helmfile.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/cli/inventory.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/cli/packer.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/cli/terraform.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/data/ansible/ansible.cfg +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/data/ansible/tasks/deploy_prometheus_alert_rules.yml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/data/ansible/tasks/install_rpm.yml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/data/ansible/tasks/remove_prometheus_alert_rules.yml +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/data/ssh/ssh.config +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/data/ssh/ssh.scb.proxy.config.tpl +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/data/ssh/ssh.tunnel.config +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/data/terraform/terraformrc +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/git_utils.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/hierarchical/__init__.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/hierarchical/composition_config_generator.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/inventory/SKMS.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/inventory/azurerm.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/inventory/caching.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/inventory/generator.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/inventory/plugin/__init__.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/inventory/plugin/azr.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/inventory/plugin/legacy_pcs.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/inventory/plugin/skms.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/jinja/__init__.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/main.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/opsconfig.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/simpleconsul.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/simplessm.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/simplevault.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/terraform/__init__.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops/terraform/terraform_cmd_generator.py +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops_cli.egg-info/dependency_links.txt +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/src/ops_cli.egg-info/entry_points.txt +0 -0
- {ops_cli-2.3.2 → ops_cli-2.4.0}/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
|
+
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
|
|
@@ -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.
|
|
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:
|
|
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.
|
|
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.
|
|
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
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
|
|
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==
|
|
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.
|
|
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==
|
|
145
|
+
Requires-Dist: pycparser==3.0; python_version >= "3.10"
|
|
147
146
|
Requires-Dist: pyhcl==0.4.5
|
|
148
|
-
Requires-Dist: pyjwt[crypto]==2.
|
|
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.
|
|
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.
|
|
327
|
+
# install ops-cli v2.4.0 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.
|
|
343
|
+
docker run -it ghcr.io/adobe/ops-cli:2.4.0 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: `
|
|
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.
|
|
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
|
|
|
@@ -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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
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
|
|
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==
|
|
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.
|
|
118
|
+
pyasn1==0.6.2; python_version >= '3.8'
|
|
120
119
|
pyasn1-modules==0.4.2; python_version >= '3.8'
|
|
121
|
-
pycparser==
|
|
120
|
+
pycparser==3.0; python_version >= '3.10'
|
|
122
121
|
pyhcl==0.4.5
|
|
123
|
-
pyjwt[crypto]==2.
|
|
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.
|
|
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.
|
|
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}' \\
|