Есть ли более элегантный способ доступа к номеру задания во время выполнения? - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь получить доступ к номеру задания, чтобы отправить по электронной почте ссылку на журналы вышки. Он должен иметь доступ в пределах playbook и быть доступным во время выполнения. Это оказалось чрезвычайно трудным, поскольку ansible башня изначально не имеет этой функции. Вот часть сценария, который вызывает мою пьесу:

#Stores the output of the job
tmp = "/tmp/runTowerJob"+str(rand(0,1))
#Stores the input for the job
extravars = " ".join([x+'='+inputDic[x] for x in inputDic])
cmd = 'tower-cli job launch --job-template=' + migration_template + ' --inventory=' + migration_inventory
#Launch first job
system(cmd + ' --extra-vars "' + extravars + '" > ' + tmp + ' 2> /dev/null')
jobNum = open(tmp).read().split('\n')[-3].split(' ')[0]
jobURL = 'https://tower.companyname.ca/#/jobs/playbook/' + jobNum
#Append the real job URL to the parameter file
extravars += ' jobURL=' + jobURL

cmd = 'tower-cli job launch --job-template=' + recordJob_template + ' --inventory=' + recordJob_inventory
cmd = cmd + ' --extra-vars="' + extravars + '" > /dev/null 2> /dev/null'
#Launch second job
system(cmd)

Extravars содержит набор параметров, используемых в пьесе. Номер задания доступен только после вызова реальной работы. Второе задание создает текстовый файл с JobURL . Реальное задание получит доступ к этому файлу, чтобы прочитать его URL задания, а затем удалить его.

Это, очевидно, не идеально, создает много невидимых зависимостей и трудно построить. Есть ли способ лучше? Есть ли в Ansible нативная функциональность, которую я мог просмотреть?

1 Ответ

0 голосов
/ 28 января 2020

Оказывается, вы можете вызывать {{tower_job_id}} в любой точке игрового поля, и это будет работать!

...