code: def install(self):
      log.info(self.openssl_cli)
      if not self.has_openssl or self.args.force:
          if not self.has_src:
              self._download_src()
          else:
              log.debug("Already has src {}".format(self.src_file))
          self._unpack_src()
          self._build_src()
          self._make_install()
      else:
          log.info(
              "Already has installation {}".format(self.install_dir)
          )
      # validate installation
      version = self.openssl_version
      if self.version not in version:
          raise ValueError(version)
  
imports: from __future__ import print_function
  import argparse
  from datetime import datetime
  import logging
  import os
  import re
  import shutil
  import subprocess
  import sys
  import tarfile
label_desc: Use image node_id 20 for calling the AbstractBuilder obj's underlying member method code with example usage: obj.install() without return types