Revision e6ce9ae1

b/docs/developers/showcase.rst
49 49

  
50 50
    from sys import stderr
51 51
    from kamaki.cli.config import Config, CONFIG_PATH
52
    from kamaki.clients.astakos import AstakosClient, ClientError
52
    from kamaki.clients import ClientError
53
    from kamaki.clients.astakos import AstakosClient
53 54

  
54 55
    #  Initialize Config with default values.
55 56
    cnf = Config()
56 57

  
57 58
    #  1. Get the credentials
58
    #  Get default cloud name 
59
    try:
60
        cloud_name = cnf.get('global', 'default_cloud')
61
    except KeyError:
62
        stderr.write('No default cloud set in file %s\n' % CONFIG_PATH)
63
        raise
59
    #  Get default cloud name
60
    cloud_name = cnf.get('global', 'default_cloud')
61
    assert cloud_name, 'No default_cloud in file %s\n' % CONFIG_PATH
64 62

  
65 63
    #  Get cloud authentication URL and TOKEN
66 64
    try:
......
86 84

  
87 85
    #  3. Get the endpoints
88 86
    #  Identity, Account --> astakos
89
    #  Compute --> cyclades
87
    #  Compute, Network --> cyclades
90 88
    #  Object-store --> pithos
91 89
    #  Image --> plankton
92 90
    try:
93 91
        endpoints = dict(
94 92
            astakos=AUTH_URL,
95 93
            cyclades=auth.get_service_endpoints('compute')['publicURL'],
94
            network=auth.get_service_endpoints('network')['publicURL'],
96 95
            pithos=auth.get_service_endpoints('object-store')['publicURL'],
97 96
            plankton=auth.get_service_endpoints('image')['publicURL']
98 97
            )
99
        user_id = auth.user_info()['id']
98
        user_id = auth.user_info['id']
100 99
    except ClientError:
101 100
        stderr.write(
102 101
            'Failed to get user id and endpoints from the identity server\n')
103 102
        raise
104 103

  
104
    #  4. Pretty print the results
105
    stderr.write('Endpoints for user with id %s\n' % user_id)
106
    for k, v in endpoints.items():
107
        stderr.write('\t%s:\t%s\n' % (k, v))
108

  
109
The output of this script should look similar to this::
110

  
111
    Endpoints for user with id my-us3r-1d-asdf-1234-fd324rt
112
        pithos:     https://pithos.example.com/object-store/v1
113
        plankton:   https://cyclades.example.com/image/v1.0
114
        network:    https://cyclades.example.com/network/v2.0
115
        cyclades:   https://cyclades.example.com/compute/v2.0
116
        astakos:    https://accounts.example.com/identity/v2.0
117

  
118

  
119

  
105 120
Upload the image
106 121
----------------
107 122

  
......
123 138
    CONTAINER = 'images'
124 139
    IMAGE_FILE = 'my_image.diskdump'
125 140

  
141

  
126 142
    #  1. Initialize Pithos+ client and set account to current user
127 143
    try:
128 144
        pithos = PithosClient(endpoints['pithos'], AUTH_TOKEN)
......
133 149

  
134 150
    #  2. Create the container "images" and let pithos client work with that
135 151
    try:
136
        pithos.create_container('images')
152
        pithos.create_container(CONTAINER)
137 153
    except ClientError:
138
        stderr.write('Failed to create container "image"\n')
154
        stderr.write('Failed to create container %s\n' % CONTAINER)
139 155
        raise
140 156
    pithos.container = CONTAINER
141 157

  
142 158
    #  3. Upload
143 159
    with open(abspath(IMAGE_FILE)) as f:
144 160
        try:
161
            stderr.write('This may take a while ...')
145 162
            pithos.upload_object(IMAGE_FILE, f)
146 163
        except ClientError:
147 164
            stderr.write('Failed to upload file %s to container %s\n' % (
......
171 188
    #  3.2 Register the image
172 189
    properties = dict(osfamily='linux', root_partition='1')
173 190
    try:
174
        image = plankton.image_register(IMAGE_NAME, IMAGE_LOCATION)
191
        image = plankton.register(IMAGE_NAME, IMAGE_LOCATION)
175 192
    except ClientError:
176 193
        stderr.write('Failed to register image %s\n' % IMAGE_NAME)
177 194
        raise
......
442 459

  
443 460
.. code-block:: python
444 461

  
445
    #!/usr/bin/env python
446

  
447 462
    from sys import argv
448 463
    from os.path import abspath
449 464
    from base64 import b64encode
450 465
    from kamaki.clients import ClientError
451 466
    from kamaki.cli.logger import get_logger, add_file_logger
467
    from progress.bar import Bar
452 468
    from logging import DEBUG
453 469

  
454 470
    #  Define loggers
......
457 473
    add_file_logger(__name__, DEBUG, '%s.log' % __name__)
458 474

  
459 475
    #  Create progress bar generator
460
    try:
461
        from progress.bar import Bar
462 476

  
463
        def create_pb(msg):
464
            def generator(n):
465
                bar=Bar(msg)
466
                for i in bar.iter(range(int(n))):
467
                    yield
477

  
478
    def create_pb(msg):
479
        def generator(n):
480
            bar = Bar(msg)
481
            for i in bar.iter(range(int(n))):
468 482
                yield
469
            return generator
470
    except ImportError:
471
        log.warning('Suggestion: install python-progress')
472
        def create_pb(msg):
473
            return None
483
            yield
484
        return generator
474 485

  
475 486

  
476 487
    #  kamaki.config
......
519 530
            endpoints = dict(
520 531
                astakos=auth.get_service_endpoints('identity')['publicURL'],
521 532
                cyclades=auth.get_service_endpoints('compute')['publicURL'],
533
                network=auth.get_service_endpoints('network')['publicURL'],
522 534
                pithos=auth.get_service_endpoints('object-store')['publicURL'],
523 535
                plankton=auth.get_service_endpoints('image')['publicURL']
524 536
                )
525
            user_id = auth.user_info()['id']
537
            user_id = auth.user_info['id']
526 538
        except ClientError:
527 539
            print('Failed to get endpoints & user_id from identity server')
528 540
            raise
......
586 598
        image_location = (user_id, container, path)
587 599
        print(' Register the image')
588 600
        try:
589
             return plankton.register(name, image_location, properties)
601
            return plankton.register(name, image_location, properties)
590 602
        except ClientError:
591 603
            log.debug('Failed to register image %s' % name)
592 604
            raise
......
654 666
            for i in range(1, self.size + 1):
655 667
                try:
656 668
                    server_name = '%s%s' % (self.prefix, i)
669

  
657 670
                    servers.append(self.client.create_server(
658 671
                        server_name, self.flavor_id, self.image_id,
672
                        networks=[],
659 673
                        personality=self._personality(ssh_k_path, pub_k_path)))
660 674
                except ClientError:
661 675
                    log.debug('Failed while creating server %s' % server_name)
......
698 712

  
699 713
        print('4.  Create  virtual  cluster')
700 714
        cluster = Cluster(
701
            cyclades = init_cyclades(endpoints['cyclades'], token),
715
            cyclades=init_cyclades(endpoints['cyclades'], token),
702 716
            prefix=opts.prefix,
703 717
            flavor_id=opts.flavorid,
704 718
            image_id=image['id'],
......
738 752
        parser.add_option('--prefix',
739 753
                          action='store', type='string', dest='prefix',
740 754
                          help='The prefix to use for naming cluster nodes',
741
                          default='cluster')
755
                          default='node')
742 756
        parser.add_option('--clustersize',
743 757
                          action='store', type='string', dest='clustersize',
744 758
                          help='Number of virtual cluster nodes to create ',
......
795 809
        opts, args = parser.parse_args(argv[1:])
796 810

  
797 811
        main(opts)
798

  

Also available in: Unified diff