celery -A proj report
في الإصدار.master
.1.deploy_tomcat2.py
`من .AnsibleApi استيراد CallApi
def django_process (jira_num):
الخادم = '10 .10.51.30 '
الاسم = 'abc'
المنفذ = 11011
الكود = 'efs'
jdk = '1.12.13'
jvm = 'xxxx'
if str.isdigit(jira_num):
# import pdb
# pdb.set_trace()
call = CallApi(server,name,port,code,jdk,jvm)
return call.run_task()
"
استيراد التسجيل
من مسجل الاستيراد
من إعدادات استيراد django.conf
من مجموعات استيراد اسمهtuple
من ansible.parsing.dataloader استيراد DataLoader
من ansible.vars استيراد VariableManager
من جرد استيراد ansible.inventory
من ansible.playbook.play استيراد اللعب
من ansible.executor.task_queue_manager استيراد TaskQueueManager
من ansible.plugins.callback استيراد CallbackBase
السجل = المسجل ('/ tmp / auto_deploy_tomcat.log' ، logging.INFO)
فئة ResultCallback (CallbackBase):
def __init __ (self، args، * kwargs):
super (ResultCallback، self) .__ init __ ( args، * kwargs)
self.host_ok = {}
self.host_unreachable = {}
self.host_failed = {}
def v2_runner_on_unreachable(self, result):
self.host_unreachable[result._host.get_name()] = result
def v2_runner_on_ok(self, result, *args, **kwargs):
self.host_ok[result._host.get_name()] = result
def v2_runner_on_failed(self, result, *args, **kwargs):
self.host_failed[result._host.get_name()] = result
فئة CallApi (كائن):
المستخدم = الإعدادات
ssh_private_key_file = الإعدادات
results_callback = ResultCallback ()
الخيارات = مسمى ("خيارات" ،
['connect'، 'module_path'، 'private_key_file'، 'forks'، 'تصبح'، 'get_method'،
'Bec_user'، 'check'])
def __init__(self,ip,name,port,code,jdk,jvm):
self.ip = ip
self.name = name
self.port = port
self.code = code
self.jdk = jdk
self.jvm = jvm
self.results_callback = ResultCallback()
self.results_raw = {}
def _gen_user_task(self):
tasks = []
deploy_script = 'autodeploy/abc.sh'
dst_script = '/tmp/abc.sh'
cargs = dict(src=deploy_script, dest=dst_script, owner=self.user, group=self.user, mode='0755')
args = "%s %s %d %s %s '%s'" % (dst_script, self.name, self.port, self.code, self.jdk, self.jvm)
tasks.append(dict(action=dict(module='copy', args=cargs),register='shell_out'))
tasks.append(dict(action=dict(module='debug', args=dict(msg='{{shell_out}}'))))
# tasks.append(dict(action=dict(module='command', args=args)))
# tasks.append(dict(action=dict(module='command', args=args), register='result'))
# tasks.append(dict(action=dict(module='debug', args=dict(msg='{{result.stdout}}'))))
self.tasks = tasks
def _set_option(self):
self._gen_user_task()
self.variable_manager = VariableManager()
self.loader = DataLoader()
self.options = self.Options(connection='smart', module_path=None, private_key_file=self.ssh_private_key_file, forks=None,
become=True, become_method='sudo', become_user='root', check=False)
self.inventory = Inventory(loader=self.loader, variable_manager=self.variable_manager, host_list=[self.ip])
self.variable_manager.set_inventory(self.inventory)
play_source = dict(
name = "auto deploy tomcat",
hosts = self.ip,
remote_user = self.user,
gather_facts='no',
tasks = self.tasks
)
self.play = Play().load(play_source, variable_manager=self.variable_manager, loader=self.loader)
def run_task(self):
self.results_raw = {'success':{}, 'failed':{}, 'unreachable':{}}
tqm = None
from celery.contrib import rdb
rdb.set_trace()
self._set_option()
try:
tqm = TaskQueueManager(
inventory=self.inventory,
variable_manager=self.variable_manager,
loader=self.loader,
options=self.options,
passwords=None,
stdout_callback=self.results_callback,
)
result = tqm.run(self.play)
finally:
if tqm is not None:
tqm.cleanup()
for host, result in self.results_callback.host_ok.items():
self.results_raw['success'][host] = result._result
for host, result in self.results_callback.host_failed.items():
self.results_raw['failed'][host] = result._result
for host, result in self.results_callback.host_unreachable.items():
self.results_raw['unreachable'][host]= result._result
Log.info("result is :%s" % self.results_raw)
return self.results_raw
3.tasks.py
من __future__ استيراد Absolute_import، unicode_literals
من استيراد الكرفس shared_task
من .deploy_tomcat2 استيراد django_process
تضمين التغريدة
نشر def (عدد):
#return تنسيق "hello world {0}". (num)
# rdb.set_trace ()
return django_process(num)`
في وحدة تحكم django: python manager.py shell ، يمكنني استخدام النشر ('123') ، واستدعاء الكود ansibleApi لنسخ abc.sh إلى خادم dst بنجاح.
لكنني لم أعمل عندما استخدمت "publish.apply_async (args = ['1334']، queue = 'queue.ops.deploy'، routing_key = 'ops.deploy') '
لقد بحثت بضعة أيام ، وما زلت لا أعمل.
AnsibleApi ترجع رسالة فارغة: {'Success': {}، 'failure': {}، 'unreachable': {}}
هناك طريقتان لحل هذه المشكلة تعطيل التأكيد :
1.حيث يبدأ الكرفس ، قم بتعيين تصدير PYTHONOPTIMIZE = 1 أو ابدأ الكرفس بهذه المعلمة -O الأمثل
2.تعطيل عملية المعالجة المتعددة لحزم البايثون. سطر 102:
assert not _current_process._config.get('daemon'), \
'daemonic processes are not allowed to have children'
هناك طريقتان لحل هذه المشكلة تعطيل التأكيد :
1.حيث يبدأ الكرفس ، قم بتعيين تصدير PYTHONOPTIMIZE = 1 أو ابدأ الكرفس بهذه المعلمة -O الأمثل
2.تعطيل عملية المعالجة المتعددة لحزم البايثون. سطر 102:
تأكيد عدم _current_process._config.get ('daemon') ، \ 'العمليات الخفية غير مسموح لها بإنجاب الأطفال
@ Xuexiang825 معذرة ، لا يعمل ، أنا أستخدم Python 3.6.3 و ansible 2.4.2.0 ، والكرفس 4.1.0. رسالة عرض executer الخاصة بي ولكن لا تفعل شيئًا. علاوة على ذلك ، هل يمكن أن تخبرني شيئًا عن المعلمة -O الأمثل؟
@ Xuexiang825 لقد قرأت للتو إجابتك في سأستخدم اللغة الصينية ، لقد استخدمت متغير التصدير حتى يعمل! لكن يبدو أن المعلمة -O ليس لها أي تأثير ، عامل الكرفس -A celery_worker.celery --loglevel = info -O OPTIMIZATION هذا هو أمر بدء التشغيل الخاص بي.يبدو أنه لا يوجد شيء خطأ ، صحيح
التعليق الأكثر فائدة
هناك طريقتان لحل هذه المشكلة تعطيل التأكيد :
1.حيث يبدأ الكرفس ، قم بتعيين تصدير PYTHONOPTIMIZE = 1 أو ابدأ الكرفس بهذه المعلمة -O الأمثل
2.تعطيل عملية المعالجة المتعددة لحزم البايثون. سطر 102:
assert not _current_process._config.get('daemon'), \ 'daemonic processes are not allowed to have children'