Beispiel #1
0
    def __init__(self,
                 oozie_node,
                 task_id,
                 trigger_rule=TriggerRule.ALL_SUCCESS,
                 params={},
                 template='ssh.tpl'):
        ActionMapper.__init__(self, oozie_node, task_id, trigger_rule)

        self.template = template

        cmd_node = self.oozie_node.find('command')
        arg_nodes = self.oozie_node.findall('args')
        cmd = ' '.join([cmd_node.text] + [x.text for x in arg_nodes])
        self.command = el_utils.convert_el_to_jinja(cmd, quote=True)

        host_key = el_utils.strip_el(self.oozie_node.find('host').text)
        # the <user> node is formatted like [USER]@[HOST]
        if host_key in params:
            host_key = params[host_key]

        # Since ariflow separates user and host, we can't use jinja templating.
        # We must check if it is in params.
        user_host = host_key.split('@')
        self.user = user_host[0]
        self.host = user_host[1]
Beispiel #2
0
 def _parse_oozie_node(self):
     res_man_text = self.oozie_node.find("resource-manager").text
     name_node_text = self.oozie_node.find("name-node").text
     self.resource_manager = el_utils.replace_el_with_var(
         res_man_text, params=self.params, quote=False)
     self.name_node = el_utils.replace_el_with_var(name_node_text,
                                                   params=self.params,
                                                   quote=False)
     self._parse_config()
     cmd_node = self.oozie_node.find("exec")
     arg_nodes = self.oozie_node.findall("argument")
     cmd = " ".join([cmd_node.text] + [x.text for x in arg_nodes])
     self.bash_command = el_utils.convert_el_to_jinja(cmd, quote=False)
 def parse_prepare_node(prepare_node: ET.Element):
     """
     <prepare>
         <delete path="[PATH]"/>
         ...
         <mkdir path="[PATH]"/>
         ...
     </prepare>
     """
     delete_paths = []
     mkdir_paths = []
     for node in prepare_node:
         node_path = el_utils.convert_el_to_jinja(node.attrib["path"],
                                                  quote=False)
         if node.tag == "delete":
             delete_paths.append(node_path)
         else:
             mkdir_paths.append(node_path)
     return delete_paths, mkdir_paths
Beispiel #4
0
    def __init__(
        self,
        oozie_node: Element,
        name: str,
        trigger_rule: str = TriggerRule.ALL_SUCCESS,
        params: Dict[str, str] = None,
        template: str = "ssh.tpl",
        **kwargs,
    ):
        ActionMapper.__init__(self,
                              oozie_node=oozie_node,
                              name=name,
                              trigger_rule=trigger_rule,
                              **kwargs)

        if params is None:
            params = {}
        self.template = template

        cmd_node = self.oozie_node.find("command")
        arg_nodes = self.oozie_node.findall("args")
        if cmd_node is None or not cmd_node.text:
            raise Exception(
                "Missing or empty command node in SSH action {}".format(
                    self.oozie_node))
        cmd = " ".join([cmd_node.text] +
                       [x.text if x.text else "" for x in arg_nodes])
        self.command = el_utils.convert_el_to_jinja(cmd, quote=True)
        host = self.oozie_node.find("host")
        if host is None:
            raise Exception("Missing host node in SSH action: {}".format(
                self.oozie_node))
        host_key = el_utils.strip_el(host.text)
        # the <user> node is formatted like [USER]@[HOST]
        if host_key in params:
            host_key = params[host_key]

        # Since ariflow separates user and host, we can't use jinja templating.
        # We must check if it is in params.
        user_host = host_key.split("@")
        self.user = user_host[0]
        self.host = user_host[1]
 def test_convert_el_to_jinja_var_no_quote(self):
     el_function = "${hostname}"
     expected = "{{ params.hostname }}"
     self.assertEqual(
         expected, el_utils.convert_el_to_jinja(el_function, quote=False))
 def test_convert_el_to_jinja_no_change_quote(self):
     el_function = "no_el_here"
     expected = "'no_el_here'"
     self.assertEqual(expected,
                      el_utils.convert_el_to_jinja(el_function, quote=True))
 def test_convert_el_to_jinja_func_quote(self):
     el_function = '${concat("ab", "de")}'
     expected = 'concat("ab", "de")'
     self.assertEqual(expected,
                      el_utils.convert_el_to_jinja(el_function, quote=True))
Beispiel #8
0
 def test_convert_el_to_jinja_var_no_quote(self):
     el = '${hostname}'
     expected = '{{ params.hostname }}'
     self.assertEqual(expected, el_utils.convert_el_to_jinja(el,
                                                             quote=False))
Beispiel #9
0
 def test_convert_el_to_jinja_no_change_quote(self):
     el = 'no_el_here'
     expected = '\'no_el_here\''
     self.assertEqual(expected, el_utils.convert_el_to_jinja(el,
                                                             quote=True))
Beispiel #10
0
 def test_convert_el_to_jinja_func_no_quote(self):
     el = '${concat("ab", "de")}'
     expected = 'concat("ab", "de")'
     self.assertEqual(expected, el_utils.convert_el_to_jinja(el,
                                                             quote=False))