'Create a new node and run a script on start-up.
:param  name: The name of the node to create.
:type   name: ``str``
:param  size: The machine type to use.
:type   size: ``str`` or :class:`GCENodeSize`
:param  image: The image to use to create the node.
:type   image: ``str`` or :class:`GCENodeImage`
:param  script: File path to start-up script
:type   script: ``str``
:keyword  location: The location (zone) to create the node in.
:type     location: ``str`` or :class:`NodeLocation` or
:class:`GCEZone` or ``None``
:keyword  ex_network: The network to associate with the node.
:type     ex_network: ``str`` or :class:`GCENetwork`
:keyword  ex_tags: A list of tags to associate with the node.
:type     ex_tags: ``list`` of ``str`` or ``None``
:keyword  ex_service_accounts: Specify a list of serviceAccounts when
creating the instance. The format is a
list of dictionaries containing email
and list of scopes, e.g.
[{\'email\':\'default\',
\'scopes\':[\'compute\', ...]}, ...]
Scopes can either be full URLs or short
names. If not provided, use the
\'default\' service account email and a
scope of \'devstorage.read_only\'. Also
accepts the aliases defined in
\'gcloud compute\'.
:type     ex_service_accounts: ``list``
:return:  A Node object for the new node.
:rtype:   :class:`Node`'

def deploy_node(self, name, size, image, script, location=None, ex_network='default', ex_tags=None, ex_service_accounts=None):

    with open(script, 'r') as f:
        script_data = f.read()
    metadata = {'items': [{'key': 'startup-script', 'value': script_data}]}
    return self.create_node(name, size, image, location=location, ex_network=ex_network, ex_tags=ex_tags, ex_metadata=metadata, ex_service_accounts=ex_service_accounts)
