def get_command(self) -> str:
        cmd_txt = xml_utils.get_tag_el_text(self.oozie_node, TAG_CMD, self.props)
        args = xml_utils.get_tags_el_array_from_text(self.oozie_node, TAG_ARG, self.props)
        if not cmd_txt:
            raise Exception("Missing or empty command node in SSH action {}".format(self.oozie_node))

        cmd = " ".join([cmd_txt] + [shlex.quote(x) for x in args])
        cmd = el_utils.convert_el_to_jinja(cmd)
        return cmd
    def _parse_oozie_node(self):
        self.resource_manager = get_tag_el_text(self.oozie_node, TAG_RESOURCE,
                                                self.props)
        self.name_node = get_tag_el_text(self.oozie_node, TAG_NAME, self.props)

        cmd_txt = get_tag_el_text(self.oozie_node, TAG_CMD, self.props)
        args = get_tags_el_array_from_text(self.oozie_node, TAG_ARG,
                                           self.props)
        cmd = " ".join([cmd_txt] + [x for x in args])

        self.bash_command = convert_el_to_jinja(cmd, quote=False)
        self.pig_command = f"sh {self.bash_command}"
Esempio n. 3
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,
                                                          props=self.props,
                                                          quote=False)
     self.name_node = el_utils.replace_el_with_var(name_node_text,
                                                   props=self.props,
                                                   quote=False)
     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)
     self.pig_command = f"sh {self.bash_command}"
Esempio n. 4
0
    def __init__(
        self, oozie_node: Element, name: str, props: PropertySet, template: str = "ssh.tpl", **kwargs
    ):
        ActionMapper.__init__(self, oozie_node=oozie_node, name=name, props=props, **kwargs)
        self.template = template
        cmd = self.get_command()

        self.command = el_utils.convert_el_to_jinja(cmd)
        host_key = self.get_host_key()

        # Since Airflow separates user and host, we can't use jinja templating.
        # We must check if it is in job_properties.
        user_host = host_key.split("@")
        self.user = user_host[0]
        self.host = user_host[1]
Esempio n. 5
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 = cmd_node.text
        args = (x.text if x.text else "" for x in arg_nodes)
        cmd = " ".join(shlex.quote(x) for x in [cmd, *args])

        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_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))
 def test_convert_el_to_jinja_var_quote(self):
     el_function = "${hostname}"
     expected = "'{{ params.hostname }}'"
     self.assertEqual(expected,
                      el_utils.convert_el_to_jinja(el_function, quote=True))
 def test_convert_el_to_jinja_var_no_quote(self):
     el_function = "${hostname}"
     expected = "{{ params.props.merged['hostname'] }}"
     self.assertEqual(
         expected, el_utils.convert_el_to_jinja(el_function, quote=False))