mirror of https://github.com/jumpserver/jumpserver
				
				
				
			fix: ansible playbook render and run in localhost
							parent
							
								
									be6d8566da
								
							
						
					
					
						commit
						ae7a562b85
					
				| 
						 | 
				
			
			@ -12,7 +12,7 @@ from sshtunnel import SSHTunnelForwarder
 | 
			
		|||
 | 
			
		||||
from assets.automations.methods import platform_automation_methods
 | 
			
		||||
from common.utils import get_logger, lazyproperty, is_openssh_format_key, ssh_pubkey_gen
 | 
			
		||||
from ops.ansible import JMSInventory, PlaybookRunner, DefaultCallback
 | 
			
		||||
from ops.ansible import JMSInventory, SuperPlaybookRunner, DefaultCallback
 | 
			
		||||
 | 
			
		||||
logger = get_logger(__name__)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -269,7 +269,7 @@ class BasePlaybookManager:
 | 
			
		|||
                if not playbook_path:
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
                runer = PlaybookRunner(
 | 
			
		||||
                runer = SuperPlaybookRunner(
 | 
			
		||||
                    inventory_path,
 | 
			
		||||
                    playbook_path,
 | 
			
		||||
                    self.runtime_dir,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
import os
 | 
			
		||||
import uuid
 | 
			
		||||
import shutil
 | 
			
		||||
import uuid
 | 
			
		||||
 | 
			
		||||
import ansible_runner
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
from django.utils._os import safe_join
 | 
			
		||||
| 
						 | 
				
			
			@ -43,6 +44,9 @@ class AdHocRunner:
 | 
			
		|||
 | 
			
		||||
        if not os.path.exists(self.project_dir):
 | 
			
		||||
            os.mkdir(self.project_dir, 0o755)
 | 
			
		||||
        private_env = safe_join(self.project_dir, 'env')
 | 
			
		||||
        if os.path.exists(private_env):
 | 
			
		||||
            shutil.rmtree(private_env)
 | 
			
		||||
 | 
			
		||||
        ansible_runner.run(
 | 
			
		||||
            timeout=self.timeout if self.timeout > 0 else None,
 | 
			
		||||
| 
						 | 
				
			
			@ -69,9 +73,13 @@ class PlaybookRunner:
 | 
			
		|||
        if not callback:
 | 
			
		||||
            callback = DefaultCallback()
 | 
			
		||||
        self.cb = callback
 | 
			
		||||
        self.envs = {}
 | 
			
		||||
 | 
			
		||||
    def run(self, verbosity=0, **kwargs):
 | 
			
		||||
        verbosity = get_ansible_log_verbosity(verbosity)
 | 
			
		||||
        private_env = safe_join(self.project_dir, 'env')
 | 
			
		||||
        if os.path.exists(private_env):
 | 
			
		||||
            shutil.rmtree(private_env)
 | 
			
		||||
 | 
			
		||||
        ansible_runner.run(
 | 
			
		||||
            private_data_dir=self.project_dir,
 | 
			
		||||
| 
						 | 
				
			
			@ -81,11 +89,18 @@ class PlaybookRunner:
 | 
			
		|||
            event_handler=self.cb.event_handler,
 | 
			
		||||
            status_handler=self.cb.status_handler,
 | 
			
		||||
            host_cwd=self.project_dir,
 | 
			
		||||
            envvars=self.envs,
 | 
			
		||||
            **kwargs
 | 
			
		||||
        )
 | 
			
		||||
        return self.cb
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SuperPlaybookRunner(PlaybookRunner):
 | 
			
		||||
    def __init__(self, *args, **kwargs):
 | 
			
		||||
        super().__init__(*args, **kwargs)
 | 
			
		||||
        self.envs = {"LOCAL_CONNECTION_ENABLED": "1"}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UploadFileRunner:
 | 
			
		||||
    def __init__(self, inventory, job_id, dest_path, callback=None):
 | 
			
		||||
        self.id = uuid.uuid4()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ from django.utils import timezone
 | 
			
		|||
 | 
			
		||||
from common.db.utils import safe_db_connection
 | 
			
		||||
from common.utils import get_logger, random_string
 | 
			
		||||
from ops.ansible import PlaybookRunner, JMSInventory
 | 
			
		||||
from ops.ansible import SuperPlaybookRunner, JMSInventory
 | 
			
		||||
from terminal.models import Applet, AppletHostDeployment
 | 
			
		||||
 | 
			
		||||
logger = get_logger(__name__)
 | 
			
		||||
| 
						 | 
				
			
			@ -137,7 +137,7 @@ class DeployAppletHostManager:
 | 
			
		|||
    def _run_playbook(self, generate_playbook: callable, **kwargs):
 | 
			
		||||
        inventory = self.generate_inventory()
 | 
			
		||||
        playbook = generate_playbook()
 | 
			
		||||
        runner = PlaybookRunner(
 | 
			
		||||
        runner = SuperPlaybookRunner(
 | 
			
		||||
            inventory=inventory, playbook=playbook, project_dir=self.run_dir
 | 
			
		||||
        )
 | 
			
		||||
        return runner.run(**kwargs)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
 | 
			
		||||
# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "adal"
 | 
			
		||||
| 
						 | 
				
			
			@ -480,7 +480,7 @@ description = "Radically simple IT automation"
 | 
			
		|||
optional = false
 | 
			
		||||
python-versions = ">=3.9"
 | 
			
		||||
files = [
 | 
			
		||||
    {file = "ansible-2.14.1.2.zip", hash = "sha256:813b39d8e03d5ea23b47703b3ba4d0372f68141b33e2b1be28deb6ad28b31c73"},
 | 
			
		||||
    {file = "v2.14.1.4.zip", hash = "sha256:1805e06391223ac6198229a18f501f0e001e66c3b334cb7c5061e0ac810297d6"},
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[package.dependencies]
 | 
			
		||||
| 
						 | 
				
			
			@ -492,7 +492,7 @@ resolvelib = ">=0.5.3,<0.9.0"
 | 
			
		|||
 | 
			
		||||
[package.source]
 | 
			
		||||
type = "url"
 | 
			
		||||
url = "https://github.com/jumpserver/ansible/releases/download/v2.14.1.2/ansible-2.14.1.2.zip"
 | 
			
		||||
url = "https://github.com/jumpserver/ansible/archive/refs/tags/v2.14.1.4.zip"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "ansible-runner"
 | 
			
		||||
| 
						 | 
				
			
			@ -2836,8 +2836,14 @@ files = [
 | 
			
		|||
[package.dependencies]
 | 
			
		||||
google-auth = ">=2.14.1,<3.0.dev0"
 | 
			
		||||
googleapis-common-protos = ">=1.56.2,<2.0.dev0"
 | 
			
		||||
grpcio = {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}
 | 
			
		||||
grpcio-status = {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}
 | 
			
		||||
grpcio = [
 | 
			
		||||
    {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""},
 | 
			
		||||
    {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""},
 | 
			
		||||
]
 | 
			
		||||
grpcio-status = [
 | 
			
		||||
    {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""},
 | 
			
		||||
    {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""},
 | 
			
		||||
]
 | 
			
		||||
protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0"
 | 
			
		||||
requests = ">=2.18.0,<3.0.0.dev0"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4166,7 +4172,6 @@ files = [
 | 
			
		|||
    {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fbb160554e319f7b22ecf530a80a3ff496d38e8e07ae763b9e82fadfe96f273"},
 | 
			
		||||
    {file = "msgpack-1.0.8-cp39-cp39-win32.whl", hash = "sha256:f9af38a89b6a5c04b7d18c492c8ccf2aee7048aff1ce8437c4683bb5a1df893d"},
 | 
			
		||||
    {file = "msgpack-1.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ed59dd52075f8fc91da6053b12e8c89e37aa043f8986efd89e61fae69dc1b011"},
 | 
			
		||||
    {file = "msgpack-1.0.8-py3-none-any.whl", hash = "sha256:24f727df1e20b9876fa6e95f840a2a2651e34c0ad147676356f4bf5fbb0206ca"},
 | 
			
		||||
    {file = "msgpack-1.0.8.tar.gz", hash = "sha256:95c02b0e27e706e48d0e5426d1710ca78e0f0628d6e89d5b5a5b91a5f12274f3"},
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5809,9 +5814,11 @@ files = [
 | 
			
		|||
    {file = "pymssql-2.2.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:049f2e3de919e8e02504780a21ebbf235e21ca8ed5c7538c5b6e705aa6c43d8c"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd86d8e3e346e34f3f03d12e333747b53a1daa74374a727f4714d5b82ee0dd5"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:508226a0df7cb6faeda9f8e84e85743690ca427d7b27af9a73d75fcf0c1eef6e"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:47859887adeaf184766b5e0bc845dd23611f3808f9521552063bb36eabc10092"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d873e553374d5b1c57fe1c43bb75e3bcc2920678db1ef26f6bfed396c7d21b30"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf31b8b76634c826a91f9999e15b7bfb0c051a0f53b319fd56481a67e5b903bb"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:821945c2214fe666fd456c61e09a29a00e7719c9e136c801bffb3a254e9c579b"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:cc85b609b4e60eac25fa38bbac1ff854fd2c2a276e0ca4a3614c6f97efb644bb"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:ebe7f64d5278d807f14bea08951e02512bfbc6219fd4d4f15bb45ded885cf3d4"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:253af3d39fc0235627966817262d5c4c94ad09dcbea59664748063470048c29c"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c9d109df536dc5f7dd851a88d285a4c9cb12a9314b621625f4f5ab1197eb312"},
 | 
			
		||||
| 
						 | 
				
			
			@ -5827,11 +5834,13 @@ files = [
 | 
			
		|||
    {file = "pymssql-2.2.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3906993300650844ec140aa58772c0f5f3e9e9d5709c061334fd1551acdcf066"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7309c7352e4a87c9995c3183ebfe0ff4135e955bb759109637673c61c9f0ca8d"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9b8d603cc1ec7ae585c5a409a1d45e8da067970c79dd550d45c238ae0aa0f79f"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:293cb4d0339e221d877d6b19a1905082b658f0100a1e2ccc9dda10de58938901"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:895041edd002a2e91d8a4faf0906b6fbfef29d9164bc6beb398421f5927fa40e"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6b2d9c6d38a416c6f2db36ff1cd8e69f9a5387a46f9f4f612623192e0c9404b1"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d63d6f25cf40fe6a03c49be2d4d337858362b8ab944d6684c268e4990807cf0c"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:c83ad3ad20951f3a94894b354fa5fa9666dcd5ebb4a635dad507c7d1dd545833"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3933f7f082be74698eea835df51798dab9bc727d94d3d280bffc75ab9265f890"},
 | 
			
		||||
    {file = "pymssql-2.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:de313375b90b0f554058992f35c4a4beb3f6ec2f5912d8cd6afb649f95b03a9f"},
 | 
			
		||||
    {file = "pymssql-2.2.8.tar.gz", hash = "sha256:9baefbfbd07d0142756e2dfcaa804154361ac5806ab9381350aad4e780c3033e"},
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -7867,4 +7876,4 @@ reference = "tsinghua"
 | 
			
		|||
[metadata]
 | 
			
		||||
lock-version = "2.0"
 | 
			
		||||
python-versions = "^3.11"
 | 
			
		||||
content-hash = "1f72926fa41fea0f19eb552cc2c82497f91d010bfed8beda5f001b2ab0581a47"
 | 
			
		||||
content-hash = "fb0541ac9e68b6395b1b151dda57caf4e05d45ca072ae2fec659ad0886cf002d"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ python = "^3.11"
 | 
			
		|||
cython = "3.0.0"
 | 
			
		||||
aiofiles = "23.1.0"
 | 
			
		||||
amqp = "5.1.1"
 | 
			
		||||
ansible-core = { url = "https://github.com/jumpserver/ansible/releases/download/v2.14.1.2/ansible-2.14.1.2.zip" }
 | 
			
		||||
ansible-core = { url = "https://github.com/jumpserver/ansible/archive/refs/tags/v2.14.1.4.zip" }
 | 
			
		||||
ansible = "7.1.0"
 | 
			
		||||
ansible-runner = "2.3.3"
 | 
			
		||||
asn1crypto = "1.5.1"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue