PageRenderTime 50ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/test/units/playbook/test_play_context.py

https://gitlab.com/0072016/Facebook-SDK-json-
Python | 308 lines | 282 code | 9 blank | 17 comment | 0 complexity | 052db341b40dd174a0dc859ff3fa4a8d MD5 | raw file
  1. # (c) 2012-2014, Michael DeHaan <michael.dehaan@gmail.com>
  2. #
  3. # This file is part of Ansible
  4. #
  5. # Ansible is free software: you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation, either version 3 of the License, or
  8. # (at your option) any later version.
  9. #
  10. # Ansible is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
  17. # Make coding more python3-ish
  18. from __future__ import (absolute_import, division, print_function)
  19. __metaclass__ = type
  20. import os
  21. from ansible.compat.tests import unittest
  22. from ansible.compat.tests.mock import patch, MagicMock
  23. from ansible import constants as C
  24. from ansible.cli import CLI
  25. from ansible.errors import AnsibleError, AnsibleParserError
  26. from ansible.playbook.play_context import PlayContext
  27. from units.mock.loader import DictDataLoader
  28. class TestPlayContext(unittest.TestCase):
  29. def setUp(self):
  30. self._parser = CLI.base_parser(
  31. runas_opts = True,
  32. meta_opts = True,
  33. runtask_opts = True,
  34. vault_opts = True,
  35. async_opts = True,
  36. connect_opts = True,
  37. subset_opts = True,
  38. check_opts = True,
  39. inventory_opts = True,
  40. )
  41. def tearDown(self):
  42. pass
  43. def test_play_context(self):
  44. (options, args) = self._parser.parse_args(['-vv', '--check'])
  45. play_context = PlayContext(options=options)
  46. self.assertEqual(play_context.connection, 'smart')
  47. self.assertEqual(play_context.remote_addr, None)
  48. self.assertEqual(play_context.remote_user, None)
  49. self.assertEqual(play_context.password, '')
  50. self.assertEqual(play_context.port, None)
  51. self.assertEqual(play_context.private_key_file, C.DEFAULT_PRIVATE_KEY_FILE)
  52. self.assertEqual(play_context.timeout, C.DEFAULT_TIMEOUT)
  53. self.assertEqual(play_context.shell, None)
  54. self.assertEqual(play_context.verbosity, 2)
  55. self.assertEqual(play_context.check_mode, True)
  56. self.assertEqual(play_context.no_log, None)
  57. mock_play = MagicMock()
  58. mock_play.connection = 'mock'
  59. mock_play.remote_user = 'mock'
  60. mock_play.port = 1234
  61. mock_play.become = True
  62. mock_play.become_method = 'mock'
  63. mock_play.become_user = 'mockroot'
  64. mock_play.no_log = True
  65. play_context = PlayContext(play=mock_play, options=options)
  66. self.assertEqual(play_context.connection, 'mock')
  67. self.assertEqual(play_context.remote_user, 'mock')
  68. self.assertEqual(play_context.password, '')
  69. self.assertEqual(play_context.port, 1234)
  70. self.assertEqual(play_context.become, True)
  71. self.assertEqual(play_context.become_method, "mock")
  72. self.assertEqual(play_context.become_user, "mockroot")
  73. mock_task = MagicMock()
  74. mock_task.connection = 'mocktask'
  75. mock_task.remote_user = 'mocktask'
  76. mock_task.no_log = mock_play.no_log
  77. mock_task.become = True
  78. mock_task.become_method = 'mocktask'
  79. mock_task.become_user = 'mocktaskroot'
  80. mock_task.become_pass = 'mocktaskpass'
  81. mock_task._local_action = False
  82. mock_task.delegate_to = None
  83. all_vars = dict(
  84. ansible_connection = 'mock_inventory',
  85. ansible_ssh_port = 4321,
  86. )
  87. mock_templar = MagicMock()
  88. play_context = PlayContext(play=mock_play, options=options)
  89. play_context = play_context.set_task_and_variable_override(task=mock_task, variables=all_vars, templar=mock_templar)
  90. self.assertEqual(play_context.connection, 'mock_inventory')
  91. self.assertEqual(play_context.remote_user, 'mocktask')
  92. self.assertEqual(play_context.port, 4321)
  93. self.assertEqual(play_context.no_log, True)
  94. self.assertEqual(play_context.become, True)
  95. self.assertEqual(play_context.become_method, "mocktask")
  96. self.assertEqual(play_context.become_user, "mocktaskroot")
  97. self.assertEqual(play_context.become_pass, "mocktaskpass")
  98. mock_task.no_log = False
  99. play_context = play_context.set_task_and_variable_override(task=mock_task, variables=all_vars, templar=mock_templar)
  100. self.assertEqual(play_context.no_log, False)
  101. def test_play_context_make_become_cmd(self):
  102. (options, args) = self._parser.parse_args([])
  103. play_context = PlayContext(options=options)
  104. default_cmd = "/bin/foo"
  105. default_exe = "/bin/bash"
  106. sudo_exe = C.DEFAULT_SUDO_EXE or 'sudo'
  107. sudo_flags = C.DEFAULT_SUDO_FLAGS
  108. su_exe = C.DEFAULT_SU_EXE or 'su'
  109. su_flags = C.DEFAULT_SU_FLAGS or ''
  110. pbrun_exe = 'pbrun'
  111. pbrun_flags = ''
  112. pfexec_exe = 'pfexec'
  113. pfexec_flags = ''
  114. doas_exe = 'doas'
  115. doas_flags = ' -n -u foo '
  116. dzdo_exe = 'dzdo'
  117. cmd = play_context.make_become_cmd(cmd=default_cmd, executable=default_exe)
  118. self.assertEqual(cmd, default_cmd)
  119. play_context.become = True
  120. play_context.become_user = 'foo'
  121. play_context.become_method = 'sudo'
  122. cmd = play_context.make_become_cmd(cmd=default_cmd, executable="/bin/bash")
  123. self.assertEqual(cmd, """%s %s -u %s %s -c 'echo %s; %s'""" % (sudo_exe, sudo_flags, play_context.become_user, default_exe, play_context.success_key, default_cmd))
  124. play_context.become_pass = 'testpass'
  125. cmd = play_context.make_become_cmd(cmd=default_cmd, executable=default_exe)
  126. self.assertEqual(cmd, """%s %s -p "%s" -u %s %s -c 'echo %s; %s'""" % (sudo_exe, sudo_flags.replace('-n',''), play_context.prompt, play_context.become_user, default_exe, play_context.success_key, default_cmd))
  127. play_context.become_pass = None
  128. play_context.become_method = 'su'
  129. cmd = play_context.make_become_cmd(cmd=default_cmd, executable="/bin/bash")
  130. self.assertEqual(cmd, """%s %s -c '%s -c '"'"'echo %s; %s'"'"''""" % (su_exe, play_context.become_user, default_exe, play_context.success_key, default_cmd))
  131. play_context.become_method = 'pbrun'
  132. cmd = play_context.make_become_cmd(cmd=default_cmd, executable="/bin/bash")
  133. self.assertEqual(cmd, """%s -b %s -u %s 'echo %s; %s'""" % (pbrun_exe, pbrun_flags, play_context.become_user, play_context.success_key, default_cmd))
  134. play_context.become_method = 'pfexec'
  135. cmd = play_context.make_become_cmd(cmd=default_cmd, executable="/bin/bash")
  136. self.assertEqual(cmd, '''%s %s "'echo %s; %s'"''' % (pfexec_exe, pfexec_flags, play_context.success_key, default_cmd))
  137. play_context.become_method = 'doas'
  138. cmd = play_context.make_become_cmd(cmd=default_cmd, executable="/bin/bash")
  139. self.assertEqual(cmd, """%s %s echo %s && %s %s env ANSIBLE=true %s""" % (doas_exe, doas_flags, play_context.success_key, doas_exe, doas_flags, default_cmd))
  140. play_context.become_method = 'bad'
  141. self.assertRaises(AnsibleError, play_context.make_become_cmd, cmd=default_cmd, executable="/bin/bash")
  142. play_context.become_method = 'dzdo'
  143. cmd = play_context.make_become_cmd(cmd=default_cmd, executable="/bin/bash")
  144. self.assertEqual(cmd, """%s -u %s %s -c 'echo %s; %s'""" % (dzdo_exe, play_context.become_user, default_exe, play_context.success_key, default_cmd))
  145. class TestTaskAndVariableOverrride(unittest.TestCase):
  146. inventory_vars = (
  147. ('preferred_names',
  148. dict(ansible_connection='local',
  149. ansible_user='ansibull',
  150. ansible_become_user='ansibull',
  151. ansible_become_method='su',
  152. ansible_become_pass='ansibullwuzhere',),
  153. dict(connection='local',
  154. remote_user='ansibull',
  155. become_user='ansibull',
  156. become_method='su',
  157. become_pass='ansibullwuzhere',)
  158. ),
  159. ('alternate_names',
  160. dict(ansible_become_password='ansibullwuzhere',),
  161. dict(become_pass='ansibullwuzhere',)
  162. ),
  163. ('deprecated_names',
  164. dict(ansible_ssh_user='ansibull',
  165. ansible_sudo_user='ansibull',
  166. ansible_sudo_pass='ansibullwuzhere',),
  167. dict(remote_user='ansibull',
  168. become_method='sudo',
  169. become_user='ansibull',
  170. become_pass='ansibullwuzhere',)
  171. ),
  172. ('deprecated_names2',
  173. dict(ansible_ssh_user='ansibull',
  174. ansible_su_user='ansibull',
  175. ansible_su_pass='ansibullwuzhere',),
  176. dict(remote_user='ansibull',
  177. become_method='su',
  178. become_user='ansibull',
  179. become_pass='ansibullwuzhere',)
  180. ),
  181. ('deprecated_alt_names',
  182. dict(ansible_sudo_password='ansibullwuzhere',),
  183. dict(become_method='sudo',
  184. become_pass='ansibullwuzhere',)
  185. ),
  186. ('deprecated_alt_names2',
  187. dict(ansible_su_password='ansibullwuzhere',),
  188. dict(become_method='su',
  189. become_pass='ansibullwuzhere',)
  190. ),
  191. ('deprecated_and_preferred_names',
  192. dict(ansible_user='ansibull',
  193. ansible_ssh_user='badbull',
  194. ansible_become_user='ansibull',
  195. ansible_sudo_user='badbull',
  196. ansible_become_method='su',
  197. ansible_become_pass='ansibullwuzhere',
  198. ansible_sudo_pass='badbull',
  199. ),
  200. dict(connection='local',
  201. remote_user='ansibull',
  202. become_user='ansibull',
  203. become_method='su',
  204. become_pass='ansibullwuzhere',)
  205. ),
  206. )
  207. def setUp(self):
  208. parser = CLI.base_parser(
  209. runas_opts = True,
  210. meta_opts = True,
  211. runtask_opts = True,
  212. vault_opts = True,
  213. async_opts = True,
  214. connect_opts = True,
  215. subset_opts = True,
  216. check_opts = True,
  217. inventory_opts = True,
  218. )
  219. (options, args) = parser.parse_args(['-vv', '--check'])
  220. mock_play = MagicMock()
  221. mock_play.connection = 'mock'
  222. mock_play.remote_user = 'mock'
  223. mock_play.port = 1234
  224. mock_play.become = True
  225. mock_play.become_method = 'mock'
  226. mock_play.become_user = 'mockroot'
  227. mock_play.no_log = True
  228. self.play_context = PlayContext(play=mock_play, options=options)
  229. mock_task = MagicMock()
  230. mock_task.connection = mock_play.connection
  231. mock_task.remote_user = mock_play.remote_user
  232. mock_task.no_log = mock_play.no_log
  233. mock_task.become = mock_play.become
  234. mock_task.become_method = mock_play.becom_method
  235. mock_task.become_user = mock_play.become_user
  236. mock_task.become_pass = 'mocktaskpass'
  237. mock_task._local_action = False
  238. mock_task.delegate_to = None
  239. self.mock_task = mock_task
  240. self.mock_templar = MagicMock()
  241. def tearDown(self):
  242. pass
  243. def _check_vars_overridden(self):
  244. self.assertEqual(play_context.connection, 'mock_inventory')
  245. self.assertEqual(play_context.remote_user, 'mocktask')
  246. self.assertEqual(play_context.port, 4321)
  247. self.assertEqual(play_context.no_log, True)
  248. self.assertEqual(play_context.become, True)
  249. self.assertEqual(play_context.become_method, "mocktask")
  250. self.assertEqual(play_context.become_user, "mocktaskroot")
  251. self.assertEqual(play_context.become_pass, "mocktaskpass")
  252. mock_task.no_log = False
  253. play_context = play_context.set_task_and_variable_override(task=mock_task, variables=all_vars, templar=mock_templar)
  254. self.assertEqual(play_context.no_log, False)
  255. def test_override_magic_variables(self):
  256. play_context = play_context.set_task_and_variable_override(task=self.mock_task, variables=all_vars, templar=self.mock_templar)
  257. mock_play.connection = 'mock'
  258. mock_play.remote_user = 'mock'
  259. mock_play.port = 1234
  260. mock_play.become_method = 'mock'
  261. mock_play.become_user = 'mockroot'
  262. mock_task.become_pass = 'mocktaskpass'
  263. # Inventory vars override things set from cli vars (--become, -user,
  264. # etc... [notably, not --extravars])
  265. for test_name, all_vars, expected in self.inventory_vars:
  266. yield self._check_vars_overriden, test_name, all_vars, expected