././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.414189 manila-23.0.0.0rc1/0000775000175000017500000000000015251045336012427 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.806228 manila-23.0.0.0rc1/.coveragerc0000664000175000017500000000014715251045254014551 0ustar00zuulzuul[run] branch = True source = manila omit = manila/test* concurrency = eventlet [report] precision = 0 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8082283 manila-23.0.0.0rc1/.pre-commit-config.yaml0000664000175000017500000000157315251045254016715 0ustar00zuulzuul--- repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - id: trailing-whitespace - id: mixed-line-ending args: ['--fix', 'lf'] exclude: '.*\.(svg)$' - id: fix-byte-order-marker - id: check-executables-have-shebangs - id: check-merge-conflict - id: debug-statements - id: check-yaml files: .*\.(yaml|yml)$ exclude: '^(zuul.d|rally-jobs)/.*$' - repo: https://github.com/PyCQA/doc8 rev: v2.0.0 hooks: - id: doc8 args: ['--ignore', 'D001'] - repo: https://github.com/openstack/bashate rev: 2.1.1 hooks: - id: bashate args: ['--ignore', 'E006,E042,E043'] - repo: https://opendev.org/openstack/hacking rev: 8.0.0 hooks: - id: hacking additional_dependencies: [] exclude: '^(doc|releasenotes|tools)/.*$' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8082283 manila-23.0.0.0rc1/.pylintrc0000664000175000017500000001253615251045254014302 0ustar00zuulzuul[MASTER] # A comma-separated list of package or module names from where C extensions may # be loaded. Extensions are loading into the active Python interpreter and may # run arbitrary code. extension-pkg-whitelist= # Add files or directories to the blacklist. They should be base names, not # paths. ignore=CVS,tests,test # Add files or directories matching the regex patterns to the blacklist. The # regex matches against base names, not paths. ignore-patterns= # Python code to execute, usually for sys.path manipulation such as # pygtk.require(). #init-hook= # Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the # number of processors available to use. jobs=1 # Control the amount of potential inferred values when inferring a single # object. This can help the performance when dealing with large functions or # complex, nested conditions. limit-inference-results=100 # List of plugins (as comma separated values of python modules names) to load, # usually to register additional checkers. load-plugins= # Pickle collected data for later comparisons. persistent=yes # Specify a configuration file. #rcfile= # When enabled, pylint would attempt to guess common misconfiguration and emit # user-friendly hints instead of false-positive error messages. suggestion-mode=yes # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. unsafe-load-any-extension=no [MESSAGES CONTROL] # Only show warnings with the listed confidence levels. Leave empty to show # all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. confidence= # Disable the message, report, category or checker with the given id(s). You # can either give multiple identifiers separated by comma (,) or put this # option multiple times (only on the command line, not in the configuration # file where it should appear only once). You can also use "--disable=all" to # disable everything first and then reenable specific checks. For example, if # you want to run only the similarities checker, you can use "--disable=all # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use "--disable=all --enable=classes # --disable=W". disable= # "F" Fatal errors that prevent further processing import-error, # "I" Informational noise locally-disabled, c-extension-no-member, # "E" Error for important programming issues (likely bugs) no-member, too-many-function-args, not-callable, assignment-from-none, unsubscriptable-object, used-prior-global-declaration, not-an-iterable, # "W" Warnings for stylistic problems or minor programming issues unused-argument, bad-indentation, unused-variable, useless-else-on-loop, pointless-string-statement, unused-import, redefined-outer-name, redefined-builtin, attribute-defined-outside-init, abstract-method, fixme, exec-used, anomalous-backslash-in-string, broad-except, protected-access, arguments-differ, undefined-loop-variable, try-except-raise, global-statement, super-init-not-called, pointless-statement, global-statement, unnecessary-lambda, keyword-arg-before-vararg, deprecated-method, useless-super-delegation, eval-used, wildcard-import, reimported, expression-not-assigned, cell-var-from-loop, signature-differs, # "C" Coding convention violations missing-docstring, invalid-name, wrong-import-order, len-as-condition, wrong-import-position, bad-continuation, too-many-lines, misplaced-comparison-constant, bad-mcs-classmethod-argument, ungrouped-imports, superfluous-parens, unidiomatic-typecheck, consider-iterating-dictionary, bad-whitespace, dangerous-default-value, line-too-long, consider-using-enumerate, useless-import-alias, singleton-comparison, # "R" Refactor recommendations no-self-use, no-else-return, too-many-locals, too-many-public-methods, consider-using-set-comprehension, inconsistent-return-statements, useless-object-inheritance, too-few-public-methods, too-many-boolean-expressions, too-many-instance-attributes, too-many-return-statements, literal-comparison, too-many-statements, too-many-ancestors, literal-comparison, consider-merging-isinstance, too-many-nested-blocks, trailing-comma-tuple, simplifiable-if-statement, consider-using-in, consider-using-ternary, too-many-arguments [REPORTS] # Tells whether to display a full report or only the messages. reports=no [BASIC] # Variable names can be 1 to 31 characters long, with lowercase and underscores variable-rgx=[a-z_][a-z0-9_]{0,30}$ # Argument names can be 2 to 31 characters long, with lowercase and underscores argument-rgx=[a-z_][a-z0-9_]{1,30}$ # Method names should be at least 3 characters long # and be lowercased with underscores method-rgx=([a-z_][a-z0-9_]{2,}|setUp|tearDown)$ # Module names matching neutron-* are ok (files in bin/) module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+)|(neutron-[a-z0-9_-]+))$ # Don't require docstrings on tests. no-docstring-rgx=((__.*__)|([tT]est.*)|setUp|tearDown)$ [FORMAT] # Maximum number of characters on a single line. max-line-length=79 [VARIABLES] # List of additional names supposed to be defined in builtins. Remember that # you should avoid to define new builtins when possible. additional-builtins=_ [TYPECHECK] # List of module names for which member attributes should not be checked ignored-modules=six.moves,_MovedItems,alembic.op ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8082283 manila-23.0.0.0rc1/.stestr.conf0000664000175000017500000000005615251045254014700 0ustar00zuulzuul[DEFAULT] test_path=./manila/tests top_dir=./ ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151965.6881816 manila-23.0.0.0rc1/AUTHORS0000664000175000017500000005242415251045336013506 0ustar00zuulzuul119Vik Abhilash Divakaran Abhishek Gupta Accela Zhao Adam Harwell Akshai Parthasarathy Aleks Chirko Alex Deiter Alex Meade Alex O'Rourke Alex O'Rourke Alexander Deiter Alexander Epaneshnikov Alexander Job Haskins Alexandre Engloner Alexey Khodos Alexey Ovchinnikov Alfredo Moralejo Alin Balutoiu Alyson Rosa Amarachi Ogbonnaya Amir Nikpour Amit Oren Andrea Frittoli (andreaf) Andrea Frittoli Andrea Ma Andreas Jaeger Andreas Jaeger Andrei Ta Andrei V. Ostapenko Andrew Kerr Andrey Kurilin Anh Tran Ankit Agrawal Anthony Lee Arjun Kashyap Arne Wiebalck Arnon Yaari Artem Goncharov Arturo Borrero Gonzalez Ashley Rodriguez Asma Mothana Atsushi SAKAI Ben Swartzlander Ben Swartzlander Ben Swartzlander Bertrand Lallau Besjana Gjika Bill Owen Bin Zhou Bob Callaway Bob-OpenStack <295988511@qq.com> Brian Haley Brian Rosmaita BubaVV Béla Vancsics Caique Mello CaiqueMello Cameron Kolodjski Cao Xuan Hoang Carlos Eduardo Carlos da Silva Cedric Zhuang Chandan Kumar ChangBo Guo(gcb) Chaozhe.Chen Che, Roger Chris Yang Christian Berendt Chuan Chuan Miao Chuan Miao Chuck Short Ciara Stacke Clifford Clifford Emeka Clinton Knight Cloud User Colleen Murphy Copilot Corey Bryant Csaba Henk Cyril Roelandt Dai Dang Van Dan Sneddon Daniel Gonzalez Daniel Mellado Daniel Russell Daniel Stelter-Gliese Danny Al-Gaaf Daria Kobtseva Darren Chance Davanum Srinivas Dave Hill David Caro David Disseldorp David Sariel Deepak C Shetty Deepika Gupta Deliang Fan Denver Baraka Diem Tran Dina Saparbaeva Dirk Mueller Dmitriy Rabotyagov Dmitry Bogun Dmitry Galkin Doug Hellmann Douglas Viroel Duan Jiong Dustin Schoenbrun Eduardo Olivares Eduardo Santos Elias Wimmer Elod Illes Elvis Acheampong Emilien Macchi Eric Harney Eunkyung99 Evan Tatavitto Fabio Oliveira Felipe Rodrigues Felipe Rodrigues FelipeLooze Fernando Ferraz Flavio Percoco Francesco Pantano Gaurang Tapase George Melikov Gerardo Gonzalez Ghanshyam Maan Ghanshyam Maan Ghanshyam Mann Gireesh Awasthi Goutham Pacha Ravi Goutham Pacha Ravi Graham Hayes Gray Lutalo Gábor Antal Ha Van Tu Harshada Mangesh Kakad Helen Walsh Helena Dantas Hervé Beraud Hiroyuki Eguchi Hongbin Lu HyungJoon Kim Ian Wienand Igor Malinovskiy Iswarya_Vakati Itai Weisman Ivan Anfimov Ivan Kolodyazhny James E. Blair James Page James Page Jan Provaznik Jan Vondra Javier Pena Jay Mehta Jay Xu Jeremiah Dabney Jeremy Liu Jeremy Stanley Jiao Pengju Joe Gordon Joel Capitao Johannes Kulik John Spray John Spray JonathanKoerber Jordan Pittier Jose Castro Leon Jose Falavinha Jose Porrua Joshua Cornutt Juan Antonio Osorio Robles Julia Varlamova Kafilat Adeleke Kamil Rykowski Keerthivasan Ken'ichi Ohmichi Kiran Pawar Kuirong.Chen Kumar Tadepalli Lance Bragstad Leslie Mwendwa Li Wei Li, Chen Lin Yang LinPeiWen <591171850@qq.com> LiuNanke Liyankun Longgeek Lori Ruffing Lucas Oliveira Lucas de Oliveira Lucian Petrut Lucio Seki Lucky samadhiya Luigi Toscano Luis Pabón Luisa Amaral Luiz Santos LuizSantos Lukas Bezdicka Luong Anh Tuan M V P Nitesh Manideen Manideep Manideep Maddileti Manish Honap Marc Koderer Marc Solanas Tarre Marco Wehrhahn Maria Gallego Mariusz Adamski Mark McLoughlin Mark Sturdevant Mark Sturdevant Martin Kletzander Marty Turner Masaki Matsushita Matheus Andrade MatheusAndrade777 Matt Riedemann Maurice Escher Maurice Schreiber Maysa Macedo Medha Choudhary Meer Hashaam Khan Megharth MelloCaique Michael Arndt Michael Krotscheck Michael Still Mike Bayer Miriam Yumi Mohammed Naser Monty Taylor Nahim Alves de Souza Naresh Kumar Gunjalli Ngo Quoc Cuong Nguyen Hai Truong Nguyen Hung Phuong Nguyen Phuong An Nguyen Van Trung Nicolas Trangez Nikita Skakun Nilesh Bhosale Nilesh Thathagar Nishant Kumar OTSUKA, Yuanying Okeke Christian Ondřej Nový OpenStack Release Bot Pan Pavlo Shchelokovskyy Pengju Jiao Pete Zaitcev Peter Wang Petr Kuběna Pierre Riteau Ponomaryov Valeriy Pony Chou Prasasnt Padhi Premlata Jha Priestess Prudhvi Rao Shedimbi Quique Llorente Rafael Rivero Raffaela Cunha Raffaela de Castro Cunha Raissa Sarmento Ralf Rantzau Ram Raja Ramana Raja Ramy Asselin Ratnakaram Rajesh Ravichandran Nudurumati Renan Vitor Renan Vitor Riane Torres Rich Hagarty Rishabh Dave Rob Esker Rodrigo Barbieri Rodrigo Barbieri Rodrigo Barbieri Romain Dupont Ronald Bradford Rose Kimondo Rui Yuan Dou Rushil Chugh Ryan Hefner Ryan Liang Ryan Liang Saikumar Pulluri Saju.Madhavan Sally Karimi Sam Wan Saravanan Manickam Sascha Peilicke Sean McGinnis Sean McGinnis Sean McGinnis Sebastian Lohff Sergey Vilgelm Seyeong Kim Shaohui Wang Shatadru Bandyopadhyay Shaun Edwards Shaun Edwards Shuquan Huang Siddharth Kumar Silvan Kaiser Silvia-Wachira Simon Dodsley Simon Dodsley SolKuczala Solly Srinesh A R Stefan Nica Stephen Finucane Stephen Gordon Steve Kowalik Sumit Kumar Sun Jun Surya Ghatty Swapnil Kulkarni (coolsvap) Sylvan LE DEUNFF Sylvan Le Deunff Takashi Kajinami Takashi Kajinami Takashi NATSUME Takashi Natsume Thierry Carrez Thomas Bechtold Thomas Goirand Tiago Pasqualini Tin Lam Tina Tina Tang Tobias Urdin Tom Barron Tom Patzig TommyLike Tony Faijue Ubuntu Valeriy Valeriy Ponomaryov Vasyl Saienko Victor Sergeyev Victoria Martinez de la Cruz Vida Haririan Vijay Bellur Vincent Untz Vitaliy Levitksi Vivek Soni Vladimir Vechkanov Volodymyr Boiko Vu Cong Tuan Woohyung Han Xiaoyang Zhang XieYingYun Xing Yang Yaguang Tang Yang Wei Yatin Kumbhare Yian Zong Yiping Huang Yogesh Yong Huang Youngjun Your Name Youssef YuYang Yulia Portnova Yulia Portnova Yusuke Hayashi Yuval Brik Zachary Goggin Zhao Lei ZhiQiang Fan Zhiteng Huang ZhongShengping Zhongyue Luo agireesh akintewe andrebeltrami andrebeltrami archanaserver arthurnsantos ashrod98 binean bswartz caowei caoyuan carloss chao liu chen-li chenaidong1 chengebj5238 chenghuiyu chenxing chuan137 comfort oyewole crenduchintala88 cuiyeliu daiki kato danielarthurt darkwsh debeltrami dengzhaosen digvijay2016 dingd dongdongpei dtapia dviroel ericxiett fpxie gaofei gecong1973 gengchc2 ghanshyam guotao.bj gyh haixin haixin haobing1 hashaam-011 hongp houming-wang howardlee hparekh huayue hulina huwenhui huyang inspur-storage janonymous jason bishop jayaanand borra jayaanand.borra@netapp.com jeckxie ji-xuepeng jiaqi07 jinxingfang junboli katie kavithahr kedy klindgren kpdev kutner leiyashuai li,chen lijunbo lijunjie linpeiwen linpeiwen liucheng liujiong liuke2 liumengwen liushi liushuobj liuyamin liviacavalcanti liyanhang ljhuang lkuchlan luqitao maaoyu maaritamm maqi marcusvrn mark.sturdevant mark.sturdevant mayurindalkar medhac medhac1403 melakualehegn melissaml nidhimittalhada niuke npraveen35 olamidepeterojo pangliye paulali pavithra_mahadev pawnesh.kumar pengdake <19921207pq@gmail.com> pengyuesheng peter_wang popododo0720 rajat29 renanpiranguinho renanv ricolin rogerkorantenng sakumbha sankethnshetty scottda shangxiaobj shaoxj sharat.sharma shenxindi shews shreyash bhosale shubhendu silvacarloss silvacarloss silvacarloss smcginnis snpd songwenping sonu.kumar soyoon-lee stack stack sundee sunjia sunjiazz tclayton ting.wang tpsilva tutkuna ubu venkatamahesh vponomaryov vrushti wang yong wangdequn wangqi wangqiangbj weiting-chen whhan91 whoami-rajat wlhc <1216083447@qq.com> wu.shiming wudong xiaozhuangqing xing-yang xinyanzhang <236592348@qq.com> xuanyandong xulei xuleibj xurong00037997 yanghuichan yangweiwei yangyapeng yanjun.fu yatinkarel yfzhao yfzhao yogesh yuhui_inspur zengyingzhe zhang.lei zhangbailin zhangdaolong zhangdebo zhangdebo1987 zhangguoqing zhangqing zhangqing zhangshj zhangxuanyuan zhangyangyang zhangyanxian zhangyanxian zhaohua zhengwei6082 zhiguo.li zhongjun zhongjun2 zhongjun2 zhu.boxiang zhufl zzxwill ��용 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8082283 manila-23.0.0.0rc1/CONTRIBUTING.rst0000664000175000017500000000125215251045254015067 0ustar00zuulzuulThe source repository for this project can be found at: https://opendev.org/openstack/manila This repository is mirrored to GitHub at: https://github.com/openstack/manila Pull requests submitted through GitHub are not monitored. To start contributing to OpenStack, follow the steps in the contribution guide to set up and use Gerrit: https://docs.openstack.org/contributors/code-and-documentation/quick-start.html Bugs should be filed on Launchpad: https://bugs.launchpad.net/manila For more specific information about contributing to this repository, see the Manila contributor guide: https://docs.openstack.org/manila/latest/contributor/contributing.html ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151965.3901784 manila-23.0.0.0rc1/ChangeLog0000664000175000017500000055265415251045335014221 0ustar00zuulzuulCHANGES ======= 23.0.0.0rc1 ----------- * Drop duplicated entries of oslo.service * Skip grenade job for git config update * Dell PowerScale: Validate QoS before dedupe in manage\_existing * Dell PowerScale: Automate Domain Mark during manage\_existing * Dell PowerScale: Add QoS support * db: skip share instances with no instance in share group query * Dell PowerScale: Added support of revert to snapshot * Dell PowerStore: Added support of QoS * Fix typo * Fix policies operation path * HPE: Doc change to add note for revert snapshot limitation * Guard WSGIService against threading backend * db: Add missing raise for exception.NotFound() * NetApp : Custom ipspace of Share Server (DHSS=True) is not getting deleted with REST API * Add Weka share driver * Share replicas inherit mount\_point\_name * NetApp ONTAP: REST-based CG snapshot lifecycle for share groups * Add core support for asynchronous revert-to-snapshot * NetApp: Delete SnapMirror snapshots left behind after a DR replica promotion * HPE: Snapshot features for Alletra MP driver * Implement new snapshot\_inherit\_share\_access\_support share capability * Fix NetApp delete retention option in release note * Fix migration\_get\_progress to use GET at microversion 2.98 * [NetApp] Fix missing raise in SnapLock check * Netapp: Implemented flag to disable zapi fallback * Use native threading by default * Add Lustre share driver * NetApp: Fix TypeError in encryption key ref compatibility check * NetApp: fix InvalidShareType in create\_share\_from\_snapshot * Netapp: Implement ZAPI to REST gaps * scheduler: fix capacity filter/weigher for extend of snapshot-based share * [NetApp] Store share server details if failign to reach Barbican * NetApp: default to HTTPS transport and add cert verify option * Add Lustre share driver documentation * Fix access-delete 404 for orphaned share access rules * NetApp: ensure\_shares applies QoS type policy on service restart * Register missing driver config options in opts.py * Auto-generate configuration reference docs * Dell PowerStore: Add manage/unmanage share snapshot support * Dell PowerStore: Add manage/unmanage share support * Open LNET port for Lustre share mounting * Fix workers=None crash with cotyledon backend * NetApp: Support force delete volume via share type extra spec * NetApp: Fix KeyError 'nas' in REST get\_volume\_junction\_path * add missing unit tests for manila/share/qos\_types * NetApp: fix replica promote failing for shares with mount\_point\_name * Document API microversion 2.97 * Fix lock cleanup with shared access rules * api-ref: Document ensuring query parameter for List services * Fix literal string "exc" in \_log\_share\_error() log message * Prevent unauthorized resource locks search * Fix share snapshot reset\_status validation * Remove disabling the scope enforcement * Improve test coverage for share/rpcapi * Enable SRBAC new defaults by default in devstack * db purge: fix share\_access\_map FK violation on purge * db purge: guard against purging un-deleted records with stale deleted\_at * Fix delete when share replica not found in update\_access * api-ref: Add missing fields in share-transfers responses * api-ref: Missing subnet metadata in share network responses * api-ref: document versioned fields in share servers list response * Remove stale api-paste.ini override in grenade upgrade script * share: fix malformed log format strings in backup continuation handlers * Rewrite WSGI deployment guide * Pull container image from quay.io * cephfs: Remove deprecated cephfs\_volume\_path\_prefix * Fix list\_extensions() to retry on ConnectFailure * devstack: fix cross-service auth * Reflect rebrand of Pure Storage to Everpure * Remove setting of oslo\_policy[enforce\_scope] flag * Fix interface mismatch detected by tooz 9.0.0 * Netapp: Remove stanza check from backup config lookup * Pure Storage FlashBlade: verify SSL certificate by default * NetApp: skip efficiency settings on data-protection volumes * Fix neutron\_host\_id sample\_default * [NetApp] Fix FlexGroup replica creation errors * Netapp: Fix for DHSS=True backup vserver creation * Remove dead share network mocking from test helper * [NetApp] Fix FlexVol modify\_volume aggregate lookup and clone-split percent * Changed neutron API calls to use project\_id * Remove setting of oslo\_policy[enforce\_scope] flag * Netapp: Removed wrong field ip\_addresses from get\_cluster\_peers in REST * [NetApp] Retrieve ONTAP version via the /cluster REST endpoint * Fix TypeError in share creation when metadata is not provided * Dell PowerScale: Thin porvisiong feature flag got removed * Netapp Rest implementation for get\_cluster\_peers * Add availability\_zone filter to share list API (microversion 2.97) * [NetApp] Add DNS Configuration for SVMs in DHSS=True Mode * Fix NetApp perf counter retrieval when node down * Remove logic for Python < 2.7 compatibility * devstack: Remove unused token * Improve share snapshot and access list performance * devstack: Drop conflicting override of cinder quota options * devstack: Remove lvm\_max\_over\_subscription\_ratio * devstack: Refactor library installation from source * Fix race condition of snapshot instance deferred deletion * Derive Barbican endpoint path from service catalog * Graduate share migration feature * Replace Quagga with FRR in devstack * Use systemctl command to manage service * Fix TypeError in capacity weigher when capacity is None * netapp: skip pcuser config for DP read-only volumes * Fix typo * install & contributor guide: Switch manila CLI to openstackcli * user-guide: Switch manila CLI to openstackcli * Stop using the Matrix OFTC bridge bot * Clean up experimental features documentation * update share server list endpoint to perform all filtering using ORM * Fix periodic share status update crash * NetApp: add share\_id, project\_id, name, type, proto as volume tags * Create a new transaction for processing each table * Fixed CIFS share creation failure issue for Rest dhss * NetApp - Update ensure\_shares() * Fix flaky CephFS test\_init\_identify\_local\_host * data: fix malformed log format strings in backup error handlers * tests: speed up ldap\_retry\_operation timeout test * api-ref: Fix share-instances show response and list duplicate * Improve test coverage for lock/api * Adjust device\_id on ports after migration * Fix AZ creation race on concurrent service start * Move module-level docstring to the top in client\_auth.py * api-ref: fix share\_server\_id used as path param but defined in body * devstack: fix bash syntax error in array existence check * admin guide: Switch manila CLI to openstackcli * config guide: Switch manila CLI to openstackcli * tests: reset fake\_notifier before each test in extra\_specs * Fix QoS type API docs, samples, and defensive coding * api-ref: fix share\_group\_type\_id path param use * Fix indentation in share replica API docs * Make parse\_is\_public docstring generic * api-ref: add missing availability\_zone to replica responses * Fix AttributeError in RequestContext by reordering attribute initialization * api-ref: document metadata param in manage snapshot * Hitachi HSP: Add configurable TLS certificate verification * Add documentation for Shared File Systems telemetry * Remove deprecated contrib/ci scripts * Remove stale Keystone v2 reference in client\_auth.py * Include share network ID in subnet error messages * Add unit tests for manila.cmd.status module * api-ref: fix incorrect parameter for metadata keys * Validate 'ensuring' filter value in services list API * Load manila settings during upgrade's shutdown phase * Fix incorrect response codes in api-ref for shares and snapshots * Add metadata to share replica API docs * api-ref: fix share\_id parameter reference in share-replicas * Migrate grenade resources.sh from manila CLI to openstack CLI * [CI] set grenade to non-voting and drop grenade-skip-level * api-ref: Fix wrong type for group\_snapshot\_id parameter * Fix service listing with a wrong status * api-ref: Add snapshot\_status\_query parameter definition * api-ref: Fix type for share\_network\_subnet\_mtu parameter * api-ref: Fix project\_id reference in share-networks add security service * textapi-ref: Fix type for group\_snapshot\_links parameter * Change the type of the group\_snapshot\_members field from string to array * Fix jsonschema enum (list instead of tuple) * Fix typos and formatting errors in parameters.yaml * Fix typographical errors in Manila documentation * Avoid redundant replica metadata DB lookups * [Doc] Update quota APIs to use share\_type as query parameter * [Doc] Annotate max api microversion in Gazpacho * Correct classifier typo in pyproject.toml * Update master for stable/2026.1 22.0.0.0rc1 ----------- * Add schema validation for show snapshot API and fix show controller * Dell PowerScale: Fix CIFS manage path resolution and snapshot path * Fix generic driver NFS share deletion 'target is busy' error * Fix grenade skip level job * Follow up on share replica metadata changes * Fix RADOS export index dangling reference in remove\_export() * Fix share group snapshots with CephFS * NetApp: Fix all\_squash by setting user * Fix volume reserved space issue by adding tune2fs * [CephFS driver] Make share deletion idempotent * Remove privileged fields from networks APIs * Deprecate the built-in eventlet WSGI server * Initialize context properly so it can be serialized * CI: Add unit test job with native threading * Fix pagination links with incorrect endpoint names * NetApp: Mock \_start\_periodic\_tasks in setup error tests * Netapp: cifs - enable SMB signing * modify lazy loading for ShareInstance model * Fix QoS type review optimizations * Fix Service.stop() to not hang with threading backend * Replace eventlet GreenPool * Replace greenthread.sleep with time.sleep * Fix delete scheduler hints when share not found * Allow running manila services in threading mode * NetApp: Update created\_at during manage operations * Fix potential double join in export locs query * decorate wrapper method with functools.wrap to keep func name in hooks * Adopt to new castellan * NetApp-Fix Sync replication related feedback comments * unused share servers can be transitioning * Parse and validate share protocol options early * PowerScale documentation update * Implementation of NAE support for NetApp Driver * Netapp: Add support for QoS type specs * netapp: fix pylint errors * Fix pylint issues from 973777 * Metadata for Share Replica Resource * HPE: Lint and Documentation fixes for Alletra MP Driver * [NetApp] Fix mount format while managing share * Add support for QoS type and specs * NetApp - Add support for Synchronous replication for share * Follow up on API v1 removal * Allow services API to filter by ensuring * Validate auth\_strategy parameter * Imported Translations from Zanata * Allow using mount\_point\_name when managing share * devstack: Use common function to manage keystoneauth options * HPE: Add new share driver for HPE Alletra MP B10000 storage * api: Remove use of mixin classes * api: Remove v1 API * Dell PowerScale: resolve managed share path in \_get\_container\_path * tests: Remove tests for v1 API * Dell PowerScale: Follow up patch for 972278 * Dell PowerScale: Dedupe support at share level * docs: Remove references to v1 API * api: Remove references to v1 * api: Move v1 controllers to v2 (2/2) * Dell PowerScale: Added support of mount point name * Dell PowerScale: Addded support of snapshot mount * Dell PowerScale: Added support of manage/unmanage share and snapshot * [doc] Warn admins about share type mutability * pre-commit: Bump versions * api: Remove unnecessary aliasing/brackets * api: Fix schema for quota class sets * Support BFV for DHSS * PowerScale Manila: Add share shrink support * Add schema validation for ensure-shares endpoint * Add description to revert schema paramater * NetApp: Delete parent snapshot from child share after clone * api: Add Schemas for share instance export locations * api: Move v1 controllers to v2 (1/2) * [Netapp] Add support for prune deleted volumes * NetApp - Implemented volume autosize reset support for REST * Adding JSON Schema to Quota Class Sets * [doc] Add pre-commit instructions * Drop redundant hacking check for xrange * Remove old hacking check for oslo namespace package * improve listing share servers with search option * Use oslo.utils implementation to parse/escape server address * Drop reference to [DEFAULT] secure\_proxy\_ssl\_header * Run RBAC job in check/gate * Fix schema for all\_tenants query parameter * Validate enabled\_share\_protocols at confing parsing layer * NetApp: Add min-throughput for QoS policy group create/modify * Drop redundant overrides * Fix domain ids lost during rpc call * api: Add schema for share revert action * api: Add schema for share migration\_start, migration\_get\_progress actions * api: Add schema for share migration\_complete, migration\_cancel actions * api: Add schema for share force\_delete action * api: Add schema for share reset\_status, reset\_task\_state actions * Fix rally jobs * Update show share export location to return 404 error when the location does not belong to the share * Netapp - Enable all\_squash for nfs * [DOC] Add export location metadata documentation * Fix cross-AZ share creation from snapshot * doc: Update Snapshot list and detail API reference to match schema validation * Add schema validation for Share Snapshot list API * fix netapp delete\_share private\_storage cleanup * Reduce NetApp unit test runtime: time.sleep * Fix KeyError in modify\_volume when autosize attributes missing * reno: Update master for unmaintained/2024.1 * Allow configuring netapp volume retention period to zero * grenade: Start/stop services using unit names * Edit deferred\_deletion doc * [doc] Add "mount\_point\_name" request parameter in the POST share API * update to use openstack cli, not legacy manila cli * Doc for deferred share/snapshot deletion * Fixes for targeted restores in the share backup API * Remove the confusing 'deferred deletion' wording from the user guide * Add unit tests for CephFS driver error handling * Fix shares getting stuck in ensuring status * Replace glanceclient with openstacksdk * Updating release notes for share encryption feature * devstack: Makes sure zfs kernel module is installed * Replace eventlet.sleep with time.sleep * Pure Storage - bump version numbers for 2026.1 (Gazpacho) * Add jsonschema and bump oslo.db requirements * Migrate setup configuration to pyproject.toml * Remove option for apache < 2.4 * Remove unused template file * [Doc] Annotate max API microversion in Flamingo * Add encryption key ref field to share create response * db purge: raise on missing tables * Update master for stable/2025.2 21.0.0.0rc1 ----------- * Stop allowing generic backups for non-NFS protocols * Add reno for x-openstack-request-id header * Add option to select keystone endpoint interface * Handle Neuton Subnet Full Exception * Return X-OpenStack-Request-Id header in response * Avoid conflicting update of provisioned\_capacity\_gb * Support region\_name for identity API access * Add missing auth plugin options in [barbican] section * Refactor key manager code * Drop eventlet usage in ssh pools * use os cli for shared-file-crud-share.rst * Add barbican set up to devstack * api: Add schema for share unmanage action * api: Add schemas for share extend, shrink actions * api: Add schemas for share soft\_delete, restore actions * Fix duplicate registration of barbican options * Fix versioning for out of place restore * doc: Add explanation about neutron\_physical\_net\_name * Add support for out of place share backup restores * Remove url tags from README * Use encryption key ref during share create * [NetApp-REST] Fixing basic share creation failure * [NetApp] Barbican share-server/share encryption support * Update get\_snapshot to return 404 if snapshot is inaccessible * [NetApp-ZAPI] Fixing CIFS share creation workflow * Fix ensure shares operation * Dell PowerScale: Add space in the log (follow-up) * Extend request context from\_dict method from oslo context instead of overriding * Add extra spec 'netapp:max\_files\_multiplier' * Dell PowerScale: Rename Isilon to PowerScale in Manila Driver * Fix server instance subnet cleanup * Dell PowerScale: Added support of thin provisioning * Dell PowerScale: add support for ensure shares * Dell PowerScale: add support for update share stats * Dell PowerScale: Http auth issue, SSL verification error and etc * Remove use of exception\_to\_unicode * Drop explicit executor argument * Fix CephFS support matrix table formatting * Run fips-py311 job * Make create\_service\_share\_servers wait until VM is created * Netapp - Enable logical space reporting * NetApp - Preserve custom snapshot policies * [NetApp] Add config option for aes-encryption for cifs shares * Drop unused doc8 from doc requirements * os-api-ref is only a doc requirement * Imported Translations from Zanata * Dell Unity: Fix driver startup issue with LACP configured * Fix: escape special characters in name~ filter for literal search * sqlalchemy: Use built-in declarative * Replace deprecated assertItemsEqual * api: Add Schemas for share export locations * Remove Python 3.9 support * [NetApp] guard already existing cifs access * Drop unused imports * NetApp: Fix vserver create REST API * add guard to qualified\_replica * Fix to create share group when only share properties are provided in filter function * Netapp: Removes stanza check * Allow clean service shutdown * Make grenade skip level job non-voting temporarily * NetApp cDOT only modify qos policy if troughput changed * [doc] Update the "lock\_visibility" description in the POST grant access API * NetApp: delete vlan even if ipspace is reused * improve db calls in periodic replica tasks * [DOC] Update Ceph Testing Matrix * setup: Remove pbr's wsgi\_scripts * devstack: Remove MANILA\_USE\_UWSGI * devstack: Remove MANILA\_USE\_MOD\_WSGI * Add pyproject.toml * Remove installation guide for openSUSE/SLES * Fix NFS-Ganesha crashes when updating CephFS access rules * updated share group type doc * NetApp: Fix export location during replica promote * Add new manila.wsgi module * api: Combine versioned API resources * Updated documentation to openstack commands * Fix CLI Commands in async failures guide * use openstack cli commands * Update CLI commands in share basic operations documentation * Fixes CLI documentation errors for manila-manage * Fix 'server\_migrating' status of non-active replica * added API token based auth * Add mount snapshot support to user guide * Add max api microversion annotation * Pure Storage - bump version number for 2025.2 (Flamingo) * Update master for stable/2025.1 * fix volume resize issue when host not recognized * netapp: Use oslo.config feature to describe sample value 20.0.0.0rc1 ----------- * Doc converte for manila share list to openstack cli * Doc convert for share snapshot create from manila command * addressed outdated documentation * Converted manila snapshot-list to openstack cli command * Fixed the remaining review comments for patch #928608 * Updated NetApp certificate auth options help section * NetApp - Restrict LIF Creation Per HA Pair * Actually try to log in via SSH to validate server * NetApp: Implement share network subnet metadata update method * Pass share network subnet metadata updates to backend drivers * Drop direct test dependency on iso8601 * [NetApp] Certificate based authentication for NetApp drivers * [devstack] cleanup iptables rules * Don't override nfs protocols w/ CephFS * Fix access rule update * Add missing API version description * Ignore not found exception during port delete * [doc] grant access rule response code * Drop redundant pep8 scripts * Skip installation to speed up pep8 * [cephfs] Fix access rule update * Drop duplicated choices * Drop broken manila-all script * Allow filtering shares on mount\_point\_name property * Allow providing mount\_point\_name when creating volume from snapshot in NetApp driver * Improve scheduler performance on thin provisioning * purestorage: Drop unused HAS\_PURITY\_FB flag * Adapt to nova api 2.89 and skip some cinder calls * Deprecate options used solely by Ceph NFSProtocolHelper * Support nova api 2.47 and newer * doc: Use dnf instead of yum * Allow to update access level of access rule * Dell EMC: Refactor redundant if-elas block * Update cephfs driver to return provision capacity * Imported Translations from Zanata * Add new policy \`list\_all\_projects\` for share/share-snapshot * [Netapp] make deleted volume retention period configurable * Updates the share extend and shrink documentation * Improve get all instances with share data * reno: Update master for unmaintained/2023.1 * fix manila to use device uuid instead of name for mounting * Replace deprecated FormatChecker.cls\_checks * vast: return all available export locations * Make default mount point prefix configurable, and allow empty prefix * updated VAST driver documentation * Add periodic task that detects down services * Drop duplicate hacking check of thrid party mock * Fix access rule visibility locks * [netapp] Allow share server migration with replicas * Remove default override for config options policy\_file * Add ensure shares admin docs * Fix docs job reference issues * Skip functional tests on pre-commit config update * Replace deprecated functions in datetime * Drop ineffective required=True * Enable manila-grenade * devstack: Fix missing manila command * decorate all missing \*\_update methods with db\_retry on deadlock * [doc] Add format\_output option in documentation * Add ability to trace SQL transactions with profiler * Improve unit tests in NetApp Driver * Require valid value for endpoint\_type * tests: Actually raise on invalid schemas * [Doc] Annotate max api microversions (Caracal/Dalmatian) * [netapp] remove last-transfer-size check for updating replica state * Pure Storage - bump version numbers for 2025.1 (Epoxy) * Imported Translations from Zanata * Remove Python 3.8 support * NetApp: fix delay clone split when creating share from snapshot (#124) * Fix release name in docs * Remove workaround for eventlet bug #592 * [doc] Driver updatable metadata * Fix share server migration not reusing allocations * Imported Translations from Zanata * Update share/snapshot instance deferred deletion * Add api-ref for ensure shares API * Add CephFS Manage/unmanage documentation * Remove extra policy check * [NetApp] Fixed share creation workflow via REST * Drop SQLALCHEMY\_WARN\_20 * Update master for stable/2024.2 * Add exception handling to share server deletion * Fix "preferred" export locations in the CephFS driver * Fix export location metadata updates by drivers 19.0.0.0rc1 ----------- * Fix export locations update when subnet is added * Fix the remaining review comments from SnapLock patch * [api-ref] fix resource lock api reference * Fix broken release note rendering * [NetApp] SnapLock support for NetApp driver * Metadata for Share Export Location * svm migration across physical networks with multiple port bindings * [NetApp] Custom storage efficiency policy support for Manila share * Imported Translations from Zanata * API for ensure shares * Add json and yaml formatting to manila-manage * Allow scheduling to disabled manila-share host * Python 3.13: do not use removed module "pipes" * Manage/unmanage for CephFS drivers * Allow drivers to set share size after revert to snapshot * NetApp: don't check kerberos config on mgmt LIF * NetApp: Implement share metadata update method * Lock shares when creating a locked access rule * Create ports as disabled with external networks * Remove default override for RBAC config options * pre-commit: Bump versions * api: Add schemas for messages * Initialize profiler after ProcessLauncher fork * update requirements for VAST manila driver * Pass share metadata updates to backend drivers * OpenStack Shares Backup management documentation * Human readable export location documentation * Imported Translations from Zanata * Add share driver for VastData storage * [NetApp] Fix FlexGroup share creation while configuring dedup/compression * Handle race condition for share server delete * Netapp: Retry Dedupe enable/disable if busy * Explicitly decode with utf-8 in validation helpers * Fixed bug 2069125: Manila driver error with ONTAP SVM-scoped user * bug fix: error message fix * Add OpenAPI generation job * [Netapp] Fix soft\_delete\_snapshot get children case * api: Add descriptions to API schemas * Bump pylint version and fix pylint issues * Dell PowerFlex: Set default value for port config * api: Add schemas for availability\_zones * tests: Ensure API schemas are actually valid * tests: Ensure APIs have schemas * Fix leak of ports on share server deletion * Fix share/snapshot show for deferred deletion * [NetApp] Pause and resume clone split during rename snapshot * api: Add schemas for resource\_locks * [CI] Grenade job changes for 2024.2 release cycle * Applies nosec in Dell EMC eNAS * Specify bandit rule to nosec in ZFSSA driver * Fixes for Bandit Issues in Nexenta Drivers * api: Add validation middleware * QNAP bandit follow up * reno: Update master for unmaintained/zed * Refactor mockup file load * Replace deprecated xml.etree.cElementTree * Remove logic for Python 2 compatibility * Remove fallback for Python 2 * Optimize deferred deletion share instance get query * Remove old excludes * Enable Bandit testing in Manila * Replaces qnap driver XML with defusedxml * Fix the backup restore issue for NetApp driver for REST client * Adds nosec comments to Ganesha drivers * Adds usedforsecurity=False to NetApp ONTAP MD5 hashes * Ensure password values are not logged * Adds "usedforsecurity=False" to veritas drivers * RBAC: Enable "new" defaults and scope checks * Adds timeouts to Quobyte driver file * Remove SQLAlchemy tips jobs * Adds usedforsecurity=False to HPE 3PAR driver * Add job to test with SQLAlchemy master (2.x) * Adds nosec comment to ZFSSA driver * tests: Don't (always) auto-create snapshot instances * Add delete CLI helper to ShareCommands * db: rename\_table is not a batch operation * [doc] Quota paramaters have moved to the [quota] section * db: Don't use strings to indicate relationship names * db: Remove unnecessary warning filter * Replaces Huawei driver XML with defusedxml * db: turn off autocommit * db: update migrations to use SQLA 2.0 patterns * Fix backup delete issue when source and destination vserver are same * db: Remove final use of legacy facade * db: Post-migration cleanup * db: Remove 'get\_session' * db: Remove session arguments from AZ methods * db: Migrate "share" APIs to enginefacade * db: Migrate "share snapshot metadata" APIs to enginefacade * db: Migrate "share snapshot export location" APIs to enginefacade * db: Migrate "share \* access" APIs to enginefacade * db: Migrate "share snapshot", "share snapshot instance" APIs to enginefacade * [doc] Mount options in the ceph native driver * [DOC] Add subnet metadata to user guide * [DOC] Add snapshot metadata to user guide * db: Unwind unnecessary independent transactions * Use config validation to reject invalid max\_over\_subscription\_ratio * [doc] add instructions regarding healthchecks * [doc] Admin only modifiable metadata * Fix backup creation errors with NetApp driver * Update master for stable/2024.1 18.0.1 ------ * Add more tests for share/snapshot deferred deletion * Fix the link to get the next share replica * Human readable export location NetApp driver changes * refactoring: modify function parameters and annotations to match * Deprecate the Ceph NFSProtocolHelper * Add support for share/snapshot deferred deletion * Share backups enhancement * Implement the share backup for NetApp driver * [doc] Update CephFS admin guide * Add doc for service disable reason * Forbid resetting state of active replicas * Change admin metadata config option name * Human readable export location core implementation * reno: Update master for unmaintained/xena * reno: Update master for unmaintained/wallaby * reno: Update master for unmaintained/victoria * Deprecate Windows SMB share driver * Add cephfs filesystem to shares metadata * Add disabled reason field to service * Drop reference to WalkVersionsMixin from oslo.db * Add a new config option to specify admin metadata * [CI] Drop glusterfs jobs * reno: Update master for unmaintained/yoga * is\_valid\_ip\_address: Catch non-string values early * db: Fix charset updates in migrations * Deprecate untested Tegile share driver * Remove unused oslo.db.concurrency namespace options * Deprecate GlusterFS (Native) Driver * [CI] Grenade testing updates * tests: has\_calls -> assert\_has\_calls * Conditional Import for FIPS Compliance * Retry on connection error to neutron * Changed user message, and removed unnecessary log message * Dell EMC: Deprecate VNX driver * Dell EMC: Drop "vmax" alias * api: Dump config options when deployed as a wsgi app * Change misleading user message when user services are down * Fixing skipped default override for CORS options * Bump hacking * Clean up removed services from devstack options * Drop upgrade scripts for old releases * Add new feature guidelines documentation * Drop logic for Ubuntu 14.04 * Update supported python versions * Remove unnecessary setup\_hook * Python 3.12: use assertAlmostEqual * NetApp: Stop clone split while deleting child share * [Pure Storage] Add support for multiple data VIPs * TrivialFix: Fix arguments on a mock of \_\_init\_\_ * Pure Storage - bump version numbers for 2024.1 (Caracal) * Fix typo in the release note for bug 2038607 * db: Migrate "share instance", "share replica" APIs to enginefacade * db: Remove unnecessary helper * Change status and error handling for /shares API * update irc dcoumentation * Don't fail remove-export in NFS-Ganesha * Fix BadRequest from share-server-migration-get-progress * Fix python shebang * Fix policy check in metadata APIs * Fix parsing of protocol access mapping options * Delete share network subnet during network deletion * [Doc] Add a quick and dirty IRC guide * [Doc] Annotate max api microversion in Bobcat * Fix missing manila-data options * Add service\_network\_host option for port host * NetApp Derive vserver name from share server identifier * NetApp API failed. Reason - 18177:Relationship is in use by SnapMirror in local cluster * tests: Add 'reason' argument to exceptions * db: Remove unnecessary wrapper class * db: Migrate remaining "transfer" APIs to enginefacade * db: Migrate "transfer" APIs to enginefacade * db: Add '\_share\_update', '\_share\_instance\_update' * db: Convert '\_ensure\_availability\_zone\_exists' to decorator * db: Migrate "export locations", "export location metadata" APIs to enginefacade * Respect provided "host" when plugging ports * Use pre-commit for 'pep8' tox target * [pep8][black] Fix new formatting issues in code * db: Add '\_share\_instance\_get' * db: Add '\_share\_get' * db: Rename 'share\_export\_location\_\*' to 'export\_location\_\*' * db: Rename 'share\_instances\_\*' to 'share\_instance\_\*' * db: Rename some methods * [RBAC] Enforce check for share updates * [NetApp] Add exception for insufficient privilege or incorrect credentials * Fix share network delete procedure * [rbac] Pull up policy checks on share/snapshot APIs * Fix py311 unit test issues * [NetApp] Fix ipspace naming is confusing * Fixes share server manager match of identifiers * Fix count in the response of shares/snapshots list API * Update master for stable/2023.2 17.0.0 ------ * TrivialFix: Fix typo in release note * Add preferred info to ceph nfs export locations * Implement Ensure Shares in the CephFS driver * Support reapplying rules during ensuring * Dell PowerStore and PowerFlex Manila drivers enhancement * Fix openstack-tox-py311 job * Revert "Improve scheduler performance when thin provisioning" * Add default to read\_deleted in context's from\_dict * Add NetApp Active IQ scheduler weigher * Follow-up access rules restrictions change * [Pure Storage] Fix connection issue on network failure * Update Share backup APIs and add api ref * Allow restricting access rules fields and deletion * TrivialFix: Don't warn on legitimate all\_projects usage * Adds a new Manila driver for Dell PowerFlex storage backend * Resource Locks: Support for share deletion lock * Include share\_type information in notifications * Adds a new Manila driver for Dell PowerStore storage backend * Turn off global venv in rally jobs * Improve scheduler performance when thin provisioning * [RFE] NetApp share server migration get progress * Set "updated\_at" field on access rules * [DOC] Add Snapshot Metadata Documentation * Validate provider\_location while managing snapshot * [api-ref] add provider\_location to snapshots * Implement share backup * NetApp: Improve REST API cover and fix internals * [NetApp] Fix share server migration * [API] Validate display name/description length * [NetApp] Recreate security cert during vserver create * [NetApp] Fixed replica promotion to updated autosize attributes * Fix error message from share server API * [NetApp] Fix NetApp driver create from snapshot * Update timedelta and old schedules as per netapp\_snapmirror\_schedule * Add count info in 'snapshot list' API * Handle access rules on share replicas * skip periodic update on replicas in 'error\_deleting' * [Doc] Annotate max api microversion in Antelope * Fix duplicate entries in share\_server\_backend\_details * Stop overriding auth/identity options of tempest * [DOC] Add doc for Scheduler Hints * [DOC] Add doc for Share Transfer * Add pre-commit * Remove trailing spaces, convert dos2unix * Add max share extend size limited by share\_type * Update the generic driver 'Known restrictions' section * [api-ref] Enhance quotas per share types doc * Enhance quota documentation * onlyHostFilter: Fix follow-up suggestions * Report PortLimitExceeded error to customer * Imported Translations from Zanata * sqlalchemy: add generic repr to base model * db: Migrate "share metadata" APIs to enginefacade * db: Migrate "share network subnet metadata" APIs to enginefacade * db: Migrate "share network subnet" APIs to enginefacade * db: Migrate "share network" APIs to enginefacade * db: Migrate "security service" APIs to enginefacade * db: Migrate "share server" APIs to enginefacade * db: Migrate "availability zone" APIs to enginefacade * db: Migrate "driver private data" APIs to enginefacade * db: Migrate "network allocation" APIs to enginefacade * db: Migrate 'purge\_deleted\_records' API to enginefacade * db: Migrate "share type extra specs" APIs to enginefacade * db: Migrate "share type access" APIs to enginefacade * db: Migrate "share type" APIs to enginefacade * db: Migrate "async operation" APIs to enginefacade * db: Migrate remaining quota APIs to enginefacade * db: Migrate quota sync APIs to enginefacade * db: Migrate "share group", "share group type" APIs to enginefacade * db: Migrate 'share\_resources\_host\_update' helper API to enginefacade * Use DLM when creating service network * [DOC] Add api reference to share network subnet metadata * fix to get soft-deleted objects on db model query * Change the default value for \`is\_public\` for share group type creation * Move skip level job to manila-grenade-skip-level-always * add reno to allowlist\_externals * Pure Storage - bump version numbers for 2023.2 (Bobcat) * [doc] Add sample dummy driver config * adds share server uuid on migration cancel * [NetApp] Fix non-disruptive migration cifs shares * [coordination] backend\_url should be secret * Fix Share Network Subnet Metadata policy error * Remove TripleO job * Check share network for share groups before deletion * Update master for stable/2023.1 16.0.0 ------ * NetApp ONTAP: Fix SnapMirror snapshots not being cleaned up * [NetApp] Fix DHSS mode fails to create share on a new pool * update capacity filter during extend share * [docs] Update documentation for Infinidat driver * Fix db query for service cleanup * [NetApp] Configure VLAN/MTU through subnet metadata * allow overide of basepython with TOX\_PYTHON env * NetApp ONTAP: REST transition - DHSS True functions * NetApp ONTAP: REST transition - Data motion related functions * Add 'state' column in 'services' table * tox4 needs allowlist\_externals for fast8 * [CI] Bump timeout for the migrations test case * NetApp ONTAP: REST transition - DHSS False Basic operations * Fix exception in share transfer accept routine * TrivialFix: Fix releasenote file location * check\_exec: /usr/bin/python3 bad interpreter * NetApp: move split job to end * NetApp: Use default\_ad\_site in active directory * Fix wrong assertion methods * Metadata for Share Network Subnet Resource * Prevent failure on get quiesce\_wait\_time * Update micversion to 2.77, support share transfer between project * service instance: Read public ssh key directly * Remove placeholder from upgrade check * Add 'default\_ad\_site' field to security service object * NetApp ONTAP: Implemented REST transition Client * Fix Manila API error message * Add quiesce\_wait\_time option to share replica promote API * Imported Translations from Zanata * [Cephfs] Fix erroneous share mode override on ensure\_shares * NetApp: Disable tunneling in vserver\_exists * db: Migrate "quota usage" APIs to enginefacade * db: Migrate "backend info" APIs to enginefacade * db: Migrate "quota class" APIs to enginefacade * db: Migrate "message" APIs to enginefacade * Add filesystem info to FSAL in CephFS NFS * Drop old notification driver names * Use new get\_rpc\_client API from oslo.messaging * Ignore replicas in error state during allow/deny access * Fix tests for 'share-network' param in share replica create * Fix tox4 errors * db: Migrate "quota" APIs to enginefacade * db: Migrate "service" APIs to enginefacade * db: Prepare 'model\_query' for migration to enginefacade * db: Use oslo\_db.sqlalchemy.enginefacade * tests: Enable SQLAlchemy 2.0 deprecation warnings * test: Add warning fixture * Add config for netapp asynchronous SnapMirror schedule * [NetApp] check snapshot presence after creation * [Infinidat] fixed host assisted migration * [NetApp] catch errors on getting vserver when reusing share server * [NetApp] fallback to cifs-server force delete on vserver cleanup * Imported Translations from Zanata * init share server updated\_at field * Shorten snapshots names in CephFS drivers * Set configured\_ip\_versions fact in cephfs driver * Allow setting endpoint\_type for glance * Rename 'nfs\_cluster\_id' to 'cluster\_id' in the NFSProtocolHelper * Raise an exc if no VIP/backend is available * Update manila-grenade-skip-level job for new release * Pure Storage - bump version numbers for Antelope * Macrosan driver: some improvements about variables and syntax * [devstack][RBAC] Update bootstrap user * Fix neutron plugin get network\_type * Imported Translations from Zanata * Switch to 2023.1 Python3 unit tests and generic template name * Update master for stable/zed 15.0.0 ------ * [RBAC] Return 404 if share is inaccessible * [RBAC] Retain legacy admin behaviour * Change to use iproute2 instead of brctl * [NetApp]: Fix issues with managed snapshot * Fix Create From Snapshot with Server Limits * [NetApp] Consider last transfer size and error for replica state * [Doc] Annotate max api microversion in Zed * [Infinidat] bump driver version and update docs * Fix misuse of assertTrue * Metadata for Share Snapshots Resource * Refactor the Ceph NFS driver to use Cephadm NFS * test: Rename Database fixture to DatabaseFixture * Fix compatibility with oslo.db 12.1.0 * Add scheduler\_default\_extend\_filters option * Set DC discovery-mode to 'none' if server is specified in SS * [devstack] Remove setting for tempest plugin * Fix DriverFilter/GoodnessWeigher string evaluations * [NetApp] Fix lack of retry HTTP requests * Add Macrosan Manila Driver * Fix KeyError exceptions in Manila unit tests * [Infinidat] add support for TLS/SSL communication * Migrate GlusterFS to privsep style * Add "share-network" option for replica create API * remove unicode prefix from code * neutron: do not create default route for service subnet if connect\_share\_server\_to\_tenant\_network is on * remove unicode from code * Replace abc.abstractproperty with property and abc.abstractmethod * Fix reference to deprecated quota\_driver option * Fix InvalidInput wrong message * Nova: Remove unused server operations * Nova: Remove unused image apis * Remove workaround for Python 3.4.[012] * [NetApp] Fix lack of aggregate pool home state * [DOC] Replace references to policy.json * Add FIPS testing job * Stop logging sensitive login information * Use defined project config of manila-tempest-plugin * Fix manila plugin.sh set backend\_availability\_zone * policy.json is no longer required * Fix available share servers to be reused * Add config option reserved\_share\_extend\_percentage * Update python testing as per zed cycle testing runtime * Increase RAM in manila flavor * Rollback quota when share network create API fails * Simplify composition of processutils.execute kwarg * Fix reference to the debug config option * devstack: Support different ssh key format * Mark Python 3.9 as supported * Add Python3 zed unit tests * Define queues at project level * DOC: fix the uri for share groups * Increase MANILA\_SERVICE\_VM\_FLAVOR\_DISK * Remove admin context check, update unit tests * [Native CephFS] Don't fail to deny missing rules * Drop lower-constraints.txt and its testing * [CI] Install dependencies for docs target * DOC: fix the uri for share group types * Fix the bug of TypeError with JsonFilter * Shares Metadata follow-up patch * Deprecate [DEFAULT] use\_forwarded\_for * Use list values for cephfs\_ganesha\_export\_ips * Add missing \`updated\_at\` field in share-instance show * Fix wrong attribute to find remote address * fix typo in reno of bug-1946990 * Remove unused method from manila/utils * Add Guru Meditation Report to wsgi * Fix headings in the API ref * Pure Storage - bump driver version for Zed * Fix Dummy driver fails to get subnet\_allocations * Fix GaneshaNASHelper update\_access signature * Update master for stable/yoga 14.0.0 ------ * Add missing deprecated messages to policy * Fix sporadic test failure in manila * Add validation to share network * DOC: Add neutron binding to network plugins * Fix replica quotas allocation during share migration * [doc] Annotate max api micro version in Yoga * Metadata for Share Resource * Container: Multiple subnets per AZ * [api-ref] Fix missing parameters in share network list * NetApp ONTAP: Add support to multiple subnets per AZ * Add multiple subnets per AZ support * share recycle bin, Fix follow-up suggestions * Migrate LVM driver to privsep * Add grenade-skip-level job * Update micversion to API2.69, Manila share support Recycle Bin * change to valid error status in test\_generic * Check project permissions for share replicas * Implement privsep boilerplate in Manila * Mock tenacity in gluster driver unit tests * Add support of scheduler\_hints in share replica create * Fix quota-set no required parameters on update * remove usage of six library * Add temporary link to patched paramiko * Add Python 3 only classifier * [DOC] Incorrect response code for share network creation * Remove usage of six lib for third party/vendors drivers * Cinder: Remove unused API * Nova: Remove non-existing methods from fake class * Add admin only keys to share metadata * Force disk wipe when running lvcreate * Fix note in the share manager * api-ref: Add share instances by share endpoint * OnlyHostFilter allows user to specify host during share create * ratelimit should not be enabled in nolimit pipeline * Add enforce\_scope setting support for Manila * Set tempest api version config in devstack plugin * remove usage of six library in api layer * Force share server selection on nondisruptive migration * Support group specs search for share group type API * NetApp OnTap: Fix compatibility check for share migrate * Move release notes to correct folders * Move db release note to correct folder * Add api-ref for security service update * Handle successful deletion of snapshot if quota commit fails * early return for \_share\_replica\_update() if there is no active replica * [devstack] Use OSC to set up share types * [api-ref] Fix datatype of cast\_rules\_to\_readonly * replace deprecated pyparsing method * Source admin credentials for manila setup * Modify docker instalation for fedora systems * Drop non-ASCII character from manila config * [NetApp] Fix default thin\_provisioned volumes on AFF * [doc] update doc about query user message * [doc] update cli doc about extend share * [doc] Update PTL documentation * Fix glusterfs test bug * [TrivialFix] Fix up a bugfix release note * [api-ref] Add request examples for share replica APIs * Deletes the six library and all its usages from manila/utils.py * [doc] Fix config and install guide for the generic driver * service\_instance: allow overriding the instance name * Adapt CephFS driver to do not try to escape export ip * Fix ignored [neutron] options * Pure Storage FlashBlade Manila - Version increment for Yoga * retry deadlock for share\_type\_destroy * Replace Jenkins with Zuul * Changed 'Jenkins' to 'Zuul' * NetApp: properly use netapp\_server\_port config * Add release notes command to tox * XENA release note regarding scheduler filters * doc: admin: generic\_driver: extend documentation * doc: admin: generic\_driver: fix indentation * PowerMax Manila - Version increment for Xena * Add Python3 yoga unit tests * Update master for stable/xena 13.0.0 ------ * [doc] Add Xena max api version annotation * Optimize the query logic for share network list * Follow up for share server migration enhancements * [NetApp] Add FlexGroup volume support * Share server migration enhancements * [NetApp] Share server migration through SVM migrate * Add Share Affinity/Anti-Affinity Scheduler Filters * [NetApp] Add readable replication type support * Replace retrying with tenacity * Fix api-ref for access rules * [Optimise] Use ThredGroup to manage periodic tasks * [NetApp] Fix list of mandatory services for CIFS share creation * [doc] add since and before parameter to message-list cli * [NetApp] Fixed scoped account replica delete * Add config option reserved\_share\_from\_snapshot\_percentage * Extend share will go through scheduler * Add missing [oslo\_reports] options * Add missing oslo.service options * Change cifs value from string to list for Dell manila drivers * Use oslo-config-generator conf to load options from libraries * handle replica state on migration complete * [Pure Storage] Honour the share\_name\_template parameter * Early validate for CIFS without security service * Migrate all quota parameters to [quota] section * Use tox 3.1.1 fixes * Add generic fuzzy matching logic to the database layer * tests: Remove use of 'oslo\_db.sqlalchemy.test\_base' * Update api-ref documentation * Replace deprecated scheduler filter module name * Use List for allowed\_origin * Add Pure Storage FlashBlade to Manila Admin docs * Deprecate create snapshot from share group in CephFS * Replace deprecated import of ABCs from collections * Add missing share-type user message * Replace assertDictMatch with assertDictEqual method in tests * Pass sync\_backref=False to relationship call * Replace oslo\_utils.fnmatch with fnmatch * Fix ipaddress issues in the infinidat driver * Adds a clear error message to operator-set limits * TrivialFix: Fix the filter name in config helper * Add Pure Storage FlashBlade driver * Add Ceph version check * Handle service client authorization errors * Remove duplicate line in release note * Filter shares by share type "extra\_specs" * fixes availability zone filter when creating a share from snapshot * init\_host should be called before RPC consumer is created * Fix PDF build * Changed minversion in tox to 3.18.0 * Remove references to sys.version\_info * Update IRC references * Add documentation for per share gigabytes quotas * [devstack] Drop manila-tempest-plugin installation * Fix with\_entities usage in db queries * Fix API reference of share snapshot creation * Replace deprecated SQLAlchemy "with\_lockmode" * Fix api error message for snapshot creation failure * Drop support for SQLite < 3.7 * optimize share size check * Updates CephFS drivers docs * [Glusterfs] Fix create share from snapshot failed * setup.cfg: Replace dashes with underscores * Remove deprecated config and auth * Don't run periodic\_share\_replica\_update() on active replicas * Reuse \_set\_instances\_share\_data for replicas * Direct mgr commands to the mgr daemon * Add documentation for share server limits * Update admin, user and contributor guide * PowerMax Manila - version change for Wallaby * Document policy rule using the description parameter * [doc] Annotate max api microversion in Wallaby * Add Python3 xena unit tests * Update master for stable/wallaby 12.0.0 ------ * Add release note for secure rbac work * Set "context\_is\_admin" to system scope admin roles * Bump RPC version for the scheduler rpc call * [NetApp] Follow up fixes for update security service * Support host assisted share migration for Zadara manila driver * Add exception for insufficient privileges when using security services * Fix wrong totalcount returned by share listing query * Add create share from snapshot in CephFS * Update cephfs drivers to use ceph-mgr client * Move params from DocumentedRule to DeprecatedRule * Remove unused model properties and increase unit test coverage * Put ensure\_share into thread pool to speed up the startup of share service * fix unmange share with manage\_error status will lead to quota error * Disable some policy warnings * Fix generic share resize with 0.0.0.0/24 access * Filter storage protocol in the scheduler * [NetApp] Implement cached status pool * Fix share server lookup * Fix inconsistent ordering caused by low datetime precision * scheduler should ignore earlier time service capabilities * [NetApp] Implement security service update * Add security service update support to the container driver * Add security service update for in-use share networks * [ci] Part 2: Temporarily set docs job to non-voting * [ci] Temporarily set docs job to non-voting * [NetApp] Add support for FPolicy native mode * Implement secure RBAC for shares * Implement secure RBAC for share replicas * Change RBAC for share group snapshots * Implement secure RBAC for share snapshots * [NetApp] Fix security service configuration for LDAP servers * Implement secure RBAC for share type extra spec * Implement secure RBAC for share snapshot instances * Add config option to set per\_share\_size\_limit * Implement secure RBAC for share group type specs * Implement secure RBAC for share network subnets * Implement secure RBAC for share networks * Add share server limits * Implement secure RBAC for share group types * Implement secure RBAC for share groups * Implement secure RBAC for share instances * Implement secure RBAC for group snapshots * Implement secure RBAC for share types * Implement secure RBAC for share servers * Implement secure RBAC for share snapshot instance export locations * Implement secure RBAC for share snapshot locations * Implement secure RBAC for share replica locations * Implement secure RBAC for share instance export location * Fixed some syntax errors * Adding Zadara Manila driver * Adds support min/max share size limited by share\_type * Implement secure RBAC for share locations * Implement secure RBAC for access rule metadata * Implement secure RBAC for share access rules * Implement secure RBAC for services * Implement secure RBAC for security services * Fix traceback in scheduler-stats API * RBAC tightening for share access rule * Clean up some policy code * Drop "system\_scope" from context constructor * Doc: Add profiler support documentation * Integrate OSprofiler and Manila * [NetApp] Fix deepcopy of sqlalchemy objects inside the driver * Remove deprecated public share policies * Fix unit tests to use requests * Catch up to changes in RequestContext * [api-ref] Fix incorrect parameters * tox miniversion update to 3.1.1 * [doc] remove project\_id from api endpoints * [devstack] Setup a "shared-file-system" service * [devstack] create endpoint without project\_id * Advertise v2 API routes without project\_id * Enable healthcheck middleware * [Native CephFS] Add messages for async ACL ops * remove usage of six library from unit tests * remove usage of six library * Remove backend deprecated variables * add additional driver data to migration get progress view * Adds missing caps for mgr in cephfs configuration * [NetApp] Fix kerberos security service issues * Update doc for manila-service-image download * Update manila and Ceph matrix support doc * Fix missing group and group\_snapshots in absolute limits * Implement secure RBAC for storage pool statistics * Implement secure RBAC for quotas * Implement secure RBAC for quota classes * Implement secure RBAC for messages * Implement secure RBAC for storage availability zones * Always use new\_size when extend * Uses local variable with ipv4 gateway config * [Doc] Add admin doc for share group * Add api reference for share server migration * Add developer reference to share server migration * Delete unavailable py2 package * [goal] Deprecate the JSON formatted policy file * Stop manila when unstacking * Update requirements * Updates to support in Ceph local.conf sample * Switch from base64 encodestring to encodebytes * [glusterfs] don't reinit volume list on deletion * Introduce base personas for secure RBAC * Bump oslo.log version to 4.3.0 * Docs: NFS-Ganesha and dbus * [NetApp] Support NFS shares on windows * [NetApp] Fix hard-coded CA cert path for SSL * Retry unmount operation on the LVM driver * Replace deprecated UPPER\_CONSTRAINTS\_FILE variable * Retry unmount operation on the ZFSOnLinux driver * Update share replicas export location API ref * fix reno file location and indention * Remove the unused coding style modules * Move shares filtering to database layer * Fix logic that determines a share exists before manage * disable M325 * Set Victoria max version in the api doc * Fix 'update\_share\_replica' doesn't provide share server model to drivers * Add share server migration admin documentation * [NetApp] Fix access rules for CIFS promoted replica * Add Python3 wallaby unit tests * Update master for stable/victoria 11.0.0 ------ * [DOC] Add admin and user documentation for share revert to snapshot * [NetApp] Improve Adaptive QoS functionality * Documentation for Share Migration Ocata Improvements * Remove unused "\_migrate" API method * requirements: Drop os-testr * [NetApp] Fix issues with share server migration * Follow up change for share server migration * [NetApp] Fix python-manila package version * [NetApp] Fix CIFS promote back issue * Update share replicas api-ref * Update api-ref for share groups graduation * Fix manage share server for container in Focal * Fix manila OverQuota issue while managing shares * Fix capacity calculations in the CephFS driver * Improve migration\_get\_progress error handling * Remove install unnecessary packages * [NetApp] Adding support for Adaptive QoS in NetApp driver with dhss false * [NetApp] Add support for share server migration * Modify share groups w/ manila-manage's update-host * [Container driver] Adds share and share server migration * [NetApp] Enables configuring NFS transfer limits * [Glusterfs] Fix delete share, Couldn't find the 'gluster\_used\_vols' * Add share server migration for Dummy driver * Improve IPv6 documentation for access rules * Add share server migration * Update user doc index * [goal] Migrate tox based testing to ubuntu focal * Update share replica show docstrings * Update "Create and manage shares" doc * Handle oslo.messaging ping endpoint * [Glusterfs] Fix delete share, mount point not disconnected * Fix WsgiLimiterProxy check * Graduate share replication feature * PowerMax Manila - Version increment for Victoria * [doc] clean up compute client options * Fix documentation for types and extra specs * DOC: Update admin generic driver network-options immutable * Add the share-type for the server setup metadata * Update docs for create share from snapshot in another back end * Update access rules documentation for user guide * Updates the API reference for some share operations * Add mod\_wsgi configuration samples * Add uWSGI configuration samples * Fix wrong capacity in pool\_stat for DellEMC manila drivers * Update Share types api-ref * Add api-ref for share network subnets * Move hacking checks to tests dir * [ci] Replace experimental tripleo job * [victoria][goal] Native Zuulv3 CI jobs * Harden LVM driver deletion paths * Zuulv3 native grenade job * [ci] Remove explicit compression of log files * Fix fallback share group snapshot implementation * Add verify-noapi testcase to grenade * Update LVM volume extend * Update NFS helper restart * Use assertEqual instead of assertItemsEqual * [ci] Re-enable scenario tests for lvm job * [NetApp] update set\_preferred\_dc for ontapi 1.150 * Add plugin name to devstack/settings * add share server update to manila-manage share update\_host * [ci] Temporarily disable scenario tests * Add upgrade documentation * Enforce policy checks getting share-type by name * Enable cephfs snapshots * TrivialFix: Correct cephfs support release note * Add Ceph support statement * [api-ref] fix typo * Fix NFS/CIFS share creation failure issue * Make test-setup.sh compatible with mysql8 * [NetApp] Fix HTTPS connection for python 3.7 * [api-ref] Fix HTTP method on the manage API * add manila-manage service cleanup * [NetApp] Updating the release note for bugfix 1688620 * Fix uwsgi path location * [NetApp] Fix svm scoped account * Use unittest.mock instead of mock * Update admin guide for share network subnets change * Add user guide for share network subnets * Add documentation for share replica quotas * Make volume mount path configurable for ContainerShareDriver * Add user message when share shrinking fails at the driver * CIFS extension failing because of volume in use * [devstack] Allow cephfs daemon port access * [NetApp] Fix default ipspace deletion issue * [Unity] Update release note for filter function * Remove unused ManilaNode sqlalchemy model * [Unity]: Failed to enabled ACE for share * Get ports filtered by subnet id on share-server cleanup * Switch to newer openstackdocstheme and reno versions * Fix hacking min version to 3.0.1 * Fix pep8 issues * [NetApp] add max\_over\_subscription\_ratio to pool stats * TrivialFix: Remove unnecessary future imports * [devstack][ci] Set public network ID in tempest.conf * [ci][devstack] Install bridge-utils for Container driver * Monkey patch original current\_thread \_active * [NetApp] Fix falsely report migration cancelation success * [devstack][ci] Move bgp setup to plugin * [devstack][ci] Fix floatingip allocation * [Unity] Implements default filter function * [Unity] Fix unit test issue * [devstack][ci] Modify firewall in ds-plugin * [CI] Remove unused jobs * [devstack][ci] Stop requiring g-reg service * [doc] Fix tempest doc * Remove translation sections from setup.cfg * Remove Babel requirement * [grenade] Switch base version * [CI] Fix grenade share networks test * Trivial fix: Add spec website link to contributor doc * Add py38 package metadata * Add Python3 victoria unit tests * Update master for stable/ussuri 10.0.0.0rc1 ----------- * Drop install\_command usage in tox * [NetApp] Fix vserver peer accept on intra cluster replication * [NetApp] Fix share shrink error status * Update share-manager behavior for shrink share operation * fix bug in quota checking * [doc] Annotate max api microversion in Ussuri * fix bug in consume from share * [cycle-goals] Add PTL and contributor quickstart * Use unittest.mock instead of third party lib * fix bug in tox py test * Fix invalid assert statement * VNX/PowerMax: Fix export locations * [NetApp] Fix vserver peer creation with same vserver * Fix docs duplicated autoclass definition * [CI] Stop gating with manila-tempest-minimal-dsvm-lvm * [NetApp] Improve create share from snapshot functionality * [ZFSonLinux] Create share from snapshot in different backends * Remove experimental flag from share groups feature * Create share from snapshot in another pool or backend * [Unity] Manage/unmanage share server/share/snap * Remove provisioned calculation on non thin provision backends * Delete type access list when deleting types * Add new quota for share replicas * Prevent share type deletion if linked to group types * Increase MANILA\_SERVICE\_VM\_FLAVOR\_DISK * Support query user message by timestamp * Revert "Remove provisioned calculation on non thin provision backends" * Hacking: Fix W605 * Hacking: Fix E731 * Hacking: Fix E741 * Hacking: Fix E305 * Hacking: Fix E117 * Hacking: Fix E226 * Hacking: Fix E241 * Hacking: Fix F601 * Hacking: Fix F841 * Hacking: Fix F632 * Update hacking for Python3 * Remove provisioned calculation on non thin provision backends * Cleanup Python 2.7 support * If only .pyc exist, the extension API will be disabled * [ci] Stop requiring neutron-tempest-plugin * Enforce policy checks for share export locations * Fix URLs in code and documentation * [NetApp] cDOT to set valid QoS during migration * Enable the use scheduler creating share from snapshot flag * [NetApp] Fix driver to honor standard extra specs * share\_networks: enable project\_only API only * Cleanup docs building * Update devstack repository URL * Fix database loading for some resources * Fix release note for LP 1853940's bugfix * Add opt doc and reno for noop interface driver * Add asynchronous error info into messages when share extend error * Use psycopg2-binary for test-requirements * Introduce noop interface driver * Refactor route clearing to linux interface * clear\_outdated\_routes: reduce neutron calls * generic: Refactor network functions to l3\_init * Use StrOpt for instance type * Improve share list speed using lazy='subquery' * Store ganesha logs and configs * [Unity]: Failed to delete cifs share if wrong access set * Fix over-quota exception of snapshot creation * Don't send heartbeats if driver not initializing correctly * Fix missing parameter in the log message * Fix a wrong comma in log message * Add manila-specs link to readme.rst * fix a typo * Fix error that failed to get image for booting server * Make extra\_specs value as case-insensitive * VNX/Powermax: Make it work under python3 * [ussuri][goal] Drop python2.7 support * PowerMax and VNX Manila - Read only policy is not working correctly * [NetApp] Fix share replica failing for 'transfer in progress' error * Document max Train-release API version * [Unity] Add release note and tests for IPv6 fix * Fix invalid assert statement * Fix share network update erroneously returns success * [Unity] Sync Unity related Docs * Enable glusterfs-native ci * [NetApp] Allow extension/shrinking of NetApp replicated share * add document,source,bugs,blueprints links to readme * update readme links * Imported Translations from Zanata * Update master for stable/train 9.0.0 ----- * Fix pagination does not speed up queries bug * Fix timeout when compute server was soft-deleted * Fix [Unity] verification and convert mgmt ipv6 * Retrieve compatible share servers using subnet id * Fix error print format * Skip NFS/Samba install for CephFS * [train][goal] Define new manila-tempest-minimal-lvm-ipv6-only job * Add share network with multiple subnets * Add manila-status to man-pages list * [NetApp] Adds support for replication with DHSS=True * Pylint: use -j 0 arg * update share group test in db * Add update share-type API to Share Types * Remove backend spec from share type while creating replica * Remove support for \`\`data\_node\_access\_ip\`\` * [Unity] Driver supports the mode that does not create and destory share servers (DHSS=False) * Fix \_list\_view function for count * Change PDF file name * [Nexenta] Refactored NexentaStor5 NFS driver * Add PDF documentation build * [Infortrend] Add Infortrend Manila Doc * Fix subsections for container driver * Enable replication tests (DHSS=True) on Dummy driver * Add extend/shrink feature for glusterfs directory layout * Validate API sample JSON files * Correct json format in api-ref * [CI] Enable glusterfs-nfs ci * Fix incorrect 'cephfnfs1' to 'cephfsnfs1' * Add missing space * Add Infortrend Manila Driver * Add manila-ui config instructions * Remove support for "lvm\_share\_export\_ip" * [CI] Convert rally jobs to zuulv3 native * Fix usage of deprecated devstack function * Make manila-tempest-plugin installation optional * [api-ref] Correct share metadata API ref * Conditionally restore default route in setup\_ipv6 * Run tempest jobs under python3 * add IPv6 support for CephFS/NFS back end * [api-ref] Use relative links and fix grammar * Update api-ref location * Manila PowerMax - rebrand from VMAX to PowerMax * Add Python 3 Train unit tests * Remove the redunant table from windows' editor * Unmount NetApp active share after replica promote * Bump the openstackdocstheme extension to 1.20 * Check NetApp SnapRestore license for pools * Fix an invalid assert state * Manila share driver for Inspur InStorage series * [CI] Add bindep.txt * Adding documentation for User Messages in Manila Documentation * Fix typo in Manila docs in manila.rst file * [CI] Run scenario tests in the cephfs-nfs job * Add admin ref for manage/unmanage servers DHSS=True * Blacklist python-cinderclient 4.0.0 * Manila VMAX docs - notification of removal of tags * Update sphinx dependency * [NetApp] Fix race condition issues on vserver deletion * [CI] Bump timeout for the migrations test case * NeutronBindNetworkPlugin: fix multi segment mtu * [api-ref] Update JSON samples for scheduler-stats API * Fix error print format * [Unity] Update doc for revert to snap support * OpenDev Migration Patch * Dropping the py35 testing * The parameters of 'list shares' are optional * [api-ref] Delete unused parameters * [api-ref] De-duplicate name and description parameters * [api-ref] De-duplicate date and time parameters * [api-ref] Replace "tenant" terminology with "project" * Fix misuse of assertFalse * [grenade] Switch base version * [tests] Fix PYTHON3\_VERSION * Manila VMAX docs - clarify backend configurations * [doc][api-ref] Fix annotation and missing parameters * Add api-ref for manage/unmanage with DHSS=True * [doc][api-ref] Clarify manage/unmanage APIs * Replace openstack.org git:// URLs with https:// * [doc][api-ref] snapshot user\_id and project\_id fields * Update master for stable/stein 8.0.0 ----- * Fix server delete attempt along with share net deletion * INFINIDAT: suppress 'no-member' pylint errors * Dummy driver: Don't fail unmanage on malformed share servers * Document Windows SMB driver * Only allow IP access type for CephFS NFS * Drop run\_tests.sh and tools/colorizer.py * Check all\_tenants value in share\_networks api * NetApp cDOT assume disabled compression on empty result * Check all\_tenants value in security\_service api * Fix parameters passed to exception * Destroy type quotas when a share type is deleted * Replacing the HTTP protocol with HTTPS * Fix driver filter to not check share\_backend\_name * Fix logging in wsgi module * Use legacy base to run CI/CD on Bionic * Manila VMAX docs - differences between quotas * Deploy manila with uwsgi on devstack * Fix API version inferred w/ un-versioned URLs * Add missing ws seperator between words * Manila VMAX docs - improve pre-configurations on VMAX section * Bump timeout on sqlalchemy migration test * Bump pylint job timeout * Manila VMAX docs - clarify snapshot support * Fix hyperlink reference to security section * Manila VMAX docs - clarify driver\_handles\_share\_servers * Fix version selector when for proxy-style URLs * VMAX manila doc - SSL Support * TrivialFix: Remove trailing whitespace in tox.ini * [pylint] Fix Manage-Unmanage with DHSS=True pylint issues * [Pylint] Bump pylint version to latest * [pylint] Use filenames in coding-checks * [pylint] Run pylint separately for code and tests * [NetApp] Add manage/unmanage of share servers * Add manage/unmanage of shares in DHSS=True * Fix missing size value in snapshot instance * Add manage/unmanage implementation to Container Driver * Refactor Container Driver * Move grenade job to bionic and run with python 3 * Update docs landing page to follow guideline * [pylint] Fix/ignore pylint errors in test modules * Fix error message when updating quota values * [pylint] Fix/ignore pylint errors in non-test modules * Extend remove\_version\_from\_href support * [NetApp] Fix race condition issue in NetApp driver * Fix tls-proxy issues with the devstack plugin * [pylint] Remove lint tox environment * Include .inc files in doc8 linting * Suppress pylint warnings from dell\_emc drivers * Fix sshpool.remove * Fix typo in test name * Add policy to create/update public shares * [ZFSOnLinux] Log ZFS options as they are retrieved * Return request-id to APIs that don't respond with a body * Fix service image boot issues * Add api ref for access rule metadata feature * [Unity] Shrink share in Unity driver * Allow configuring availability\_zones in share types * Bump timeout on dsvm jobs * Add tripleo scenario004 job to experimental queu * Match job names in playbooks to their names * Address E0102 pylint errors * [CI] Drop redundant if condition in the LVM job playbook * NetApp ONTAP: allow multiple DNS IPs * Run cephfs jobs under py3 * Fix pylint errors for ganesha manager * Set mode for CephFS volumes and snapshots * Deprecated config option [DEFAUL]memcached\_servers * Deprecate [DEFAULT]/share\_usage\_size\_audit\_period * Fix spurious pylint import errors for ddt and mock * Configure per backend availability zones in devstack * Allow configuration of a back end specific availability zone * [Trivial fix] add missing ws seperator between words * Drop [DEFAULT]root\_helper config option * [Unity] Revert to snapshot support * Convert dummy job to py3 * Separate APIs for share & replica export locations * Set paramiko logging to DEBUG level * Change ssh\_utils parameter to correctly send keepalive packets * devstack: Do a vgscan before checking if the VG is there * QNAP: Fix inconsistent cases while create/manage from snapshot * Fix the misspelling of "except" * Publish sample config file in the genconfig job * Improve service instance module debug logging * Move/Drop useless SQL related config options * Drop param2id() from cmd/manage.py * Drop trycmd() from manila/utils.py * QNAP: driver should not manage snapshot which does not exist * Add Ubuntu Bionic CephFS jobs * Drop is\_eventlet\_bug105() from manila/utils.py * QNAP: Support QES FW on TDS series NAS * Adjust ssh timeouts * Add devstack instructions and local.conf samples * [doc] Fix api sections in the contributor doc * Set ram for manila service image to 256 * [Manila Unity/VNX] add 'snapshot support' related Doc for Unity/VNX driver * NetApp cDOT store port IDs and addresses at share server backend details * Deprecate old keystone session config opts * speed up GET scheduler-stats/pools/detail * Fix image\_name retrieval in custom-image jobs * Only run the needed services for CephFS jobs * Use the canonical URL for Manila repositories * fix http link to https link * NetApp ONTAP: cifs add AD security service server as preferred DC * Change openstack-dev to openstack-discuss * Fix ganesha for 0.0.0.0/0 access * Add missing ws separator between words * VMAX manila doc - support for IPv6 * [api-ref] Added share servers show and corrected path to details * [CI][LVM] Run the LVM job on Bionic Beaver * [LVM][IPv6] Quagga changes to support Bionic Beaver * Use OS CLI instead of the neutronclient * Remove i18n.enable\_lazy() translation * Delete the duplicate words in cephfs\_driver.rst * The URL of SSL is missing * [DevRef] Add code review guideline * [Trivial Fix] Correct spelling error of "throughput" * [CI] Switch Xenial tempest jobs to Bionic Beaver * VMAX manila - deprecate old tags correctly * inspur: transfer 'rw' to 'rwx' when Shared File Systems protocol is cifs * NeutronBindNetworkPlugin: fix multi segment neutron data save * NetApp ONTAP: Fix use of multiple subnets with DHSS=True * VMAX manila doc - use of correct VMAX tags * Add manila-status upgrade check command framework * [LVM] Run filesystem check before assigning UUID * Change python3.5 job to python3.7 job on Stein+ * Increment versioning with pbr instruction * Make coverage non-voting and fix use of rpc\_backend * Simplify running pylint * Don't quote {posargs} in tox.ini * remove glusterfs-nfs job from check queue * change tox envlist from 3.5 to 3 * Remove run\_tests.sh * [grenade] Switch base version * [Container driver] Fix volume group data collection * [ZFSOnLinux] Allow devstack bootstrap in Ubuntu > 16.04 * 3PAR: Update Storage Driver docs * Remove install-guide-jobs * Use templates for cover and lower-constraints * Spelling Errors * Add version maximum annotation to API versions doc * Add command to update share instance hosts * add python 3.6 unit test job * switch documentation job to new PTI * import zuul job settings from project-config * NetApp ONTAP fix test allocate container with share\_instance * Remove logging overrides from plugin.sh * adjust response code in 'service.inc' * Adds export path option to Quobyte driver * Fix manila-ui link in the contributor doc * Fix ShareGroup sqlalchemy model ShareGroupTypes relation * [ZFSOnLinux] Retry unmounting old datasets during manage * Update reno for stable/rocky * NetApp ONTAP: change cifs server valid dns hostname * NetApp cDOT driver switch volume efficiency 7.0.0 ----- * replace 'data=' with 'message=' * NetApp cDOT driver qos policy same name * Test share type per test suite changes * INFINIDAT: unit tests - remove fake exception body * Fix grenade job * Fix mutable config in manila-scheduler * Fix ZFSOnLinux doc about manage ops * INFINIDAT: add host.created\_by metadata key * check all\_tenants value in share api * NetApp cDOT: use security service ou 7.0.0.0b3 --------- * Api-ref: Add min\_version in the API parameters * Retrieve is\_default value to fix empty display in CLI * [Docs] Don't include unittest documentation * Support metadata for access rule resource * QNAP: Add support for QES 2.1.0 * [CI] Don't set test config for API microversions if master * Api-ref: Add missing parameter in the version api * Allow setting test API microversions in gate tests * Api-ref: change fix \`\`extra-spec-key\`\` key in path * Docs: glance image-create returns an error issue * [NetApp driver] Control snapshot folder visibility * Fix results capturing for the dummy driver * Fix ensure\_shares bugs * [NetApp driver] NVE License not present fix * Change depreciated to deprecated * Fix bare exceptions in ganesha manager * INFINIDAT: change create\_child to create\_snapshot * Manila share driver for Inspur AS13000 series * Add share instance index on share\_id * [Manila Unity/VNX] admin doc failed to render * DB Migration: fix downgrade in 579c267fbb4d * Cannot remove user rule for NFS share * Fix mutable default argument in Quobyte jsonrpc * API: Add \`\`all\_tenants\`\` parameter * Fix doc warnings * [API] Doc snapshot and share net deletion preconditions * Address trivial TODOs * NetApp cDOT driver skip vserver route with no gateway * Remove confusing DB deprecation messages * add release notes to README.rst * rectify 'a export ID' to 'an export ID' * rectify 'a extra specs' to 'an extra specs' * rectify 'a exact match' to 'an exact match' * Document the preconditions for deleting a share * Use volume\_uuid in \_resize\_share of Quobyte Driver * Limit formatting routes when adding resources * Allow api\_version\_request.matches to accept a string or None * Update link address * Generic driver - Limiting SSH access from tenant network * [Trivialfix] Remove the useless parameter 'ext\_mgr' * Delete unused test check * [Doc] Add 'gateway' and 'mtu' in share network api-ref * QNAP: driver changes share size when manage share * Trivial: Update pypi url to new url * Config for cephfs volume path prefix * Switch to oslo\_messaging.ConfFixture.transport\_url * Use class name in invocation of super * Fix use of pbr version release 7.0.0.0b2 --------- * Default pylint to run using python3 * fix tox python3 overrides * [Grenade] Switch base to stable/queens * Set initial quota in Quobyte and correct resizing * Trivial:Update pypi url to new url * Fix share-service VM restart problem * Fix test plugin issues in dsvm-lvm-centos job * Fix manila-tempest-\*-centos-7 jobs * VMAX driver - Implement IPv6 support for Dell EMC VMAX driver * Fix post-execution for tempest tests * Fix access control for single host addresses * Switch from ostestr to stestr * Update "auth\_url" in install docs * NetApp ONTAP: Fix delete-share for vsadmin users * Fix title overline too short when generate docs * Fix bug for share type filter search * Update auth\_url value in install docs * Fix doc build warnings * Add ou to security service * [Manila Unity] Set unity\_server\_meta\_pool option as required * Use 'Default' as the value of domain name in install guide * Remove deprecated DEFAULT options * uncap eventlet * Update auth\_uri option to www\_authenticate\_uri * Fix allow the use of blank in user group name to access the share 7.0.0.0b1 --------- * move securiy service error explanation from comment * Run pep8/fast8 with python3 * Circumvent bug #1747721 to prevent CI failures * Remove option standalone\_network\_plugin\_ip\_version * Updated from global requirements * Support filter search for share type API * Fix typos in help text of Generic driver and ZFSSA config opts * Remove the deprecated "giturl" option * Disable tempest in rally jobs * Modify grammatical errors * Use rest\_status\_code for api-ref response codes * Updated from global requirements * add lower-constraints job * Update the new PTI for document build * Add manila-tempest-plugin as a requirement in rally job definitions * use http code constant instead of int * Adding driver to mysql connection URL * Log config options with oslo.config * Fix tap device disappear after node restart * Updated from global requirements * Update doc name and path for dell emc vnx and unity driver * Fetch and install manila-tempest-plugin system-wide * INFINIDAT: fix release notes * Updated from global requirements * Change a parameter key for CIFS mounting command * Updated NetApp driver features support mapping * INFINIDAT: set REST API client parameters * Add docs for quota\_class\_set API * Fix the incorrect reference links * Rename Zuul jobs * Remove the nonexistent install-guide directory * Remove use of unsupported TEMPEST\_SERVICES variable * Fix manila logging rabbitmq password in debug mode * Updated from global requirements * Replace Chinese quotes to English quotes * Fix db migration for mariadb >= 10.2.8 * Move openstackdocstheme to extensions in api-ref * Update documentation links * Fix typos * Update reno for stable/queens * Update docs since manila\_tempest\_tests are installed system-wide 6.0.0.0rc1 ---------- * Revert Id905d47600bda9923cebae617749c8286552ec94 * Fix LVM driver not handling IPv6 in recovery mode * Fix UnicodeDecodeError when decode API input * Fix Host-assisted Share Migration with IPv4+IPv6 * Add manila.data.helper options to config sample * INFINIDAT: load-balance shares inside network space * INFINIDAT: support deleting datasets with snapshots * Replace chinese double quotes to English double quotes * Remove the unused variable * Fix boolean types in db migration tests * drivers/cephfs: log an error if RO access is used and it's unavailable * Fix a trivial bug of Dell EMC Manila IPv6 implementation * Handle TZ change in iso8601 >=0.1.12 6.0.0.0b3 --------- * Use native Zuul v3 tox job * fix misspelling of 'password' * Enable IPv6 scenario tests in Upstream CI * Update manila plugin to support IPv6 * NetApp cDOT: Add NVE support in Manila * Update unreachable link * Replace curly quotes with straight quotes * Updated from global requirements * Update contributor/tempest\_tests.rst * Implement IPv6 support for Manila Dell EMC Unity driver * Disable security group rule when create port * Modify outdated links * Updated from global requirements * Add ipv6 for share network admin doc * Follow the new PTI for document build * Updated from global requirements * DocImpact: Add MapR-FS native driver * Use stestr for coverage * Fix NFS/CIFS share creation failure issue * Implement IPv6 support for Dell EMC VNX driver * Fix version details API does not return 200 OK * QNAP: Add support for QES 2.0.0 * Remove ordering attempts of 'unorderable types' * Fix volume attach error in generic driver * Always disable root-squash * Add support for enhanced features to the QNAP Manila driver * Fix error message in the manage API * DocImpact: Add quotas per share type * Fix running docs job failure * Raise error when image status is not active * ganesha: read and store non-ASCII data in exports * Api-ref: add show details for share type * Replace invalid link in manila doc * Fix incorrect api ref parameters * [Doc] Correct a known restriction in cephfs\_driver * QNAP Manila driver: Access rule setting is override by the later rule setting * Fix install docs reference error * Fix default and detailed share type result not correct * Remove in-tree tempest plugin * Updated from global requirements * Add policy documentation and sample file [10/10] * [policy in code] Add support for AZ, scheduler and message resource [9/10] * [policy in code] Add support for share and type extra resource [8/10] * [policy in code] Add support for replicas, networks and security services [7/10] * [policy in code] Add support for group resource [6/10] * Huawei driver supports snapshot revert * Updated from global requirements * Fix getting share networks and security services error * Updated from global requirements * Change ensure share to make startup faster * [policy in code] Add support for service and quota resource [5/10] * Remove unused configuration options * [policy in code] Add support for snapshot resource [4/10] * Add count info in /shares and /shares/detail response * Extend .gitignore for linux swap files range * [policy in code] Add support for share resource [3/10] * [policy in code] Add support for share type resource [2/10] * Add count info in /shares and /shares/detail API doc * Updated from global requirements * Remove usage of deprecated config 'resources\_prefix' * ganesha: store exports and export counter in RADOS * INFINIDAT add Manila driver 6.0.0.0b2 --------- * Updated from global requirements * Simplify the way drivers report support for ipv6 * QNAP: Add support for QES 1.1.4 * Update docs to fix broken links * Add utils methods to write files * Fix drivers\_private\_data update on deleted entries * Use v3 cinder client for share volume * Updated from global requirements * Added Handling Newer Quobyte API Error Codes * Remove 'branches:' lines from .zuul.yaml * Install centos-release-openstack-pike * Add 'description' in share type API Doc * Add 'description' in share type APIs * [Api-ref] update parameters for share types api * fix keystone auth failed since project\_domain\_id and user\_domain\_id * [Doc]Update cephfs\_auth\_id for cephfsnfs Configuration * Fix quota usages update deleting same share from several API endpoints * [Doc] Use share group instead of consistency group in driver\_requirements * Fix shared-file-systems-share-types URL * Utilize requests lib for Huawei storage connection * Remove setting of version/release from releasenotes * Add ssl support for manila API access * Remove unused functions from api/extensions.py * Api ref contains incorrect parameters * Updated from global requirements * [policy in code] Add support for share instance export location resource * Remove hdfs job from check queue * Updated from global requirements * Advertise IPv6 support in the NetApp driver * Allow IPv6 gateways for the default route * Allow ZAPI over IPv6 * Remove glusterfs-native job from check queue * Updated from global requirements 6.0.0.0b1 --------- * Add API document for share group [3/3] * Add API document for share group [2/3] * The default cephfs\_enable\_snapshots set to False * Add admin documentation for following keys of quotas: -'share\_groups' -'share\_group\_snapshots' * Add API document for share group [1/3] * Purge doc of references to nova net * Remove deprecated ganesha\_nfs\_export\_options * Fix missing neutron net plugin options * Zuul: add file extension to playbook path * Fix duplicate standalone\_network\_plugin\_ip\_version * Fix issue with different decimal separators * Use sslutils from oslo\_service * Impove coverage job accuracy * NetApp ONTAP: Fix share size when creating from snapshot * [Doc] Fix parameters in share network api-ref * [Doc] Fix wrong links in docs * [doc] Fix install guide doc * Don't attempt to escalate manila-manage privileges * CentOS share node install docs * Migrating legacy jobs * doc: move stuff from contributor to admin * Delete limited\_by\_marker from api/common.py * Rename to index.rst * Restore .testr.conf * Fix 'project\_share\_type\_quotas' DB table unique constraint * Updated from global requirements * Use generic user for both zuul v2 and v3 * [Doc] Add share group in doc * Updated from global requirements * Fixed creation neutron api mapping for security groups * cleanup test-requirements * Add default configuration files to data\_files * NetApp ONTAP: Add support for filtering API tracing * Updated from global requirements * Switch base to latest in link address * Enable mutable config in Manila * ganesha: cleanup of tmp config files * [Doc] Delete consistency group in doc * tempest: remove call to set\_network\_resources() * Removes use of timeutils.set\_time\_override * Updated from global requirements * Implementation of Manila driver for Veritas Access * tests: replace .testr.conf with .stestr.conf * [install-guide] remove install-guide doc * [doc] Add API document for snapshot instances * Remove auto generated files and unnecessary .gitignore file * Allows the use of dollar sign in usernames * [Api-ref] Delete the duplicate tenant arguments in parameters.yaml * Fix html\_last\_updated\_fmt in conf.py * Fix test\_rpc\_consumer\_isolation for oslo.messaging 5.31.0 * Fix wrong links in manila * Delete the 'share\_extension:types\_extra\_specs' policy * Add API document for share replica * [Grenade] Switch base to stable/pike * NetApp: Fix usage of iso8601\_from\_timestamp * Use newer location for iso8601 UTC * Remove name and description from the search\_options list * Fix a typo in share\_migration.rst * Fix a typo: replace microverison with microversion * Remove "os\_region\_name" config option * [doc] Move Experimental APIs description to a common place * [Api-ref] Remove unused parameter extra\_specs\_2 in parameters.yaml * Updated from global requirements * Remove vestigate HUDSON\_PUBLISH\_DOCS reference * Add API document for share type quota * doc migration: update the doc link address * Update the documentation link for doc migration * Fix incorrect literal\_block error when build docs * Updated from global requirements * doc migration: configuration reference * Fix man page build * Remove unused variables and broken links * doc migration: cli reference * doc migration: user-guide * doc migration: install guide * doc migration: admin guide * doc migration: new directory layout * doc migration: openstackdocstheme completion * NetApp ONTAP: Fix revert-to-snapshot * Updated from global requirements * [Doc] Fix access rule description in api-ref * Update reno for stable/pike * [Doc] Add more description to user messages api-ref * [Api-ref] remove "is\_public" in snapshot updated description * TrivialFix: Add code block and format JSON data * Fix the duplicate hacking check M312 and H203 5.0.0 ----- * Re-enable broken CG code in NetApp driver * Fix wrong links * [Api-ref] Add supported protocol "MAPRFS" in doc * Add API document for share group quotas * [Doc] Remove unused 'provider\_location' parameter * [Doc] Fix API document for Consistency group * Change the way to create image service * [Tempest] Fix tests for pre-existing share network * NetApp cDOT: Fix security style for CIFS shares * Remove duplicate variables * Remove tempest pin * Imported Translations from Zanata * Update links in README * Fix NFSHelper 0-length netmask bug * Enable some off-by-default checks * Imported Translations from Zanata * Fix multiple issues with revert to snapshot in LVM * Add exception for no default share type configured * Fix cannot deny ipv6 access rules * Removed unnecessary setUp() calls in tests * [Trivialfix]Fix typos * Imported Translations from Zanata * Use tempest-plugin service client registration * Imported Translations from Zanata * Add ipaddress in manila requirements * Updated from global requirements * Enable IPv6 in manila(documentation) * Updated from global requirements 5.0.0.0b3 --------- * Enable IPv6 in manila(network plugins and drivers) * Add share groups and share group snapshots quotas * Add share usage size tracking in doc * Add share usage size tracking * Update location of dynamic creds in tempest tests * Provide filter name in user messages * Fix the exact filter can be filter by inexact value * NetApp cDOT: Add support for QoS/throughput ceilings * Updated from global requirements * NetApp: Define 'preferred' to False instead of none * Updated from global requirements * Add quotas per share type * Fix deprecated options version * Replace test.attr with decorators.attr * Allow 2 or more export IPs for LVM driver * Updated from global requirements * Disable notifications * Add user messages periodic cleanup task * Added like filter in api-ref * Enable IPv6 in manila(allow access) * NetApp cDOT: Fix share specs on migration * Updated from global requirements * Updated from global requirements * Update the documentation link for doc migration * Fix grammatical mistake, Changed character from "a" to "an" * Update URL home-page in documents according to document migration * Extend usage of user messages * User Messages * Add prefix 'test' to test name in test\_shares * Fix inappropriate parameters * VMAX VNX Manila - Refactor VMAX and VNX to use common code * Allow docs build without git * VNX: bump the version for Pike * Add like filter * TrivialFix: replace set(sorted(x)) with sorted(set(x)) * Remove --omit argument in run\_tests.sh * Unity: unexpected data in share from snapshot * VNX: share server cannot be deleted * Add export-location filter in share and share instance list API * NetApp cDOT: Add gateway information to create static routes * Add create/delete/extend/shrink share notifications * Updated from global requirements * NetApp cDOT: Fix share server deletion * Updated from global requirements * Replace the usage of 'admin\_manager' with 'os\_admin' * Add support for Guru Meditation Reports for manila * Replace the usage of 'manager' with 'os\_primary' * Use parenthesis instead of backslashes in tempest folder * Retry backend initialization * Allow endless retry loops in the utility function * Updated from global requirements * cephfs/driver: add nfs protocol support * Use parenthesis instead of backslashes in tests folder * Use parenthesis instead of backslashes in scheduler folder * Updated from global requirements * Wrong substitution of replica ID in log message * Fix ShareSnapshotInstance DB table * Use parenthesis instead of backslashes in db folder * Use parenthesis instead of backslashes in share folder * Use parenthesis instead of backslashes in API folder * Replace assertEqual([], items) with assertEmpty(items) * Change example value in docs for CephFS snapshots * [Docs] Correct glusterfs references * Updated from global requirements * Updated from global requirements 5.0.0.0b2 --------- * Imported Translations from Zanata * GPFS: Changing default value of NFS server type * Use get\_rpc\_transport instead of get\_transport * CI: Update tempest commit * [Share Groups] Squash SGS member and SS instances DB tables * Updated from global requirements * [Share Groups] Add two new fields to SG API object * [Share Groups] Add availability zone support * [Share Groups] Fix creation of share group types with wrong specs values * [Generic driver] Fix incompatibility with novaclient * ganesha: dynamically update access of share * [Share groups] Add scheduler filter ConsistentSnapshotFilter * Remove pbr warnerrors in favor of sphinx check * Clean releasenotes and install-guide build dir * Fix pep8 M325 error with python 3.5 * Use get\_notification\_transport for notifications * Updated from global requirements * Implement update\_access in Isilon Driver * Replace oslo\_utils.timeutils.isotime * Use ShareInstance model to access share properties * CI: Update tempest commit * Fix share instance list API display error * Remove unused function in test\_share\_snapshot\_instances file * Updated from global requirements * Refactor share instances tempest test * GPFS Path: Fix bugs related to initialization of GPFS Driver * Updated from global requirements * Add a releasenote for tooz heartbeat * coordination: use tooz builtin heartbeat feature * Updated from global requirements * Remove unused self.context * Correct re-raising of exception in VNX driver * Updated from global requirements * Fix typos in document * Fix unit test failures in gate * Replaced exc.message with str(exc) * Change to share access list API * Fix update share instance pool fail * Change share to share snapshot in snapshot list API annotation * devstack: clone Manila client only if marked to * api-ref:Update ref link * Set access\_policy for messaging's dispatcher * Fix api-ref doc generation for Python3 * Optimize the link address * Add periodic task to clean up expired reservation * Refactor and rename CephFSNativeDriver * Remove usage of parameter enforce\_type * Capitalize the first letter in comment 5.0.0.0b1 --------- * Add comment explaining ignore D001 for doc8 * Updated from global requirements * Add possibility to run 'manila-api' with wsgi web servers * Hacking: do not translate log messages * Updated from global requirements * Remove log translations in others 5/5 * Replace six.iteritems() with .items() * Add sem-ver flag so pbr generates correct version * Fix important:: directive display in install guide * [CI] Add support for CI jobs with custom images * Updated from global requirements * Remove service\_instance\_network\_helper\_type option * Update to current tempest tag * Add read-only tests for cephx access rules * Remove log translations in share and share\_group 4/5 * Remove log translations in scheduler 3/5 * [Rally] fix jobs * Remove unnecessary setUp function in testcase * Remove log translations in cmd,common,data,db and network 2/5 * Updated from global requirements * Remove log translations in api 1/5 * Updated from global requirements * Remove deprecated manila-all command * setup \_IntegratedTestBase without verbose flag * Handle SSL from VNX driver * [Dell EMC Unity] Create with user capacity * Move create\_manila\_accounts to post-config * Imported Translations from Zanata * change user access name limit from 32 to 255 characters * Fix some reST field lists in docstrings * Fix docs failures caused by latest eventlet * Use HostAddressOpt for opts that accept IP and hostnames * set basepython for pylint tox env * Updated from global requirements * Remove old oslo.messaging transport aliases * Revert "Handle ssl for VNX manila driver" * remove hacking rule that enforces log translation * docs: fix build failure on html\_last\_updated\_fmt * devstack: skip nfs kernel install if nfs-ganesha * Updated from global requirements * Handle ssl for VNX manila driver * Update share replicas after promotion in proper order * Enable share groups back * Updated from global requirements * Switch to use stable data\_utils * Deprecate 'ganesha\_nfs\_export\_options' * Local copy of scenario test base class * Rename wrapped methods in share manager * CephFS driver: change CG variables to SG variables * [api-ref]: Add missing share statuses * Fix python3 pep8 errors * Update share server provisioning for share groups * Send resize parameters in rpc as list in the Quobyte driver * [Tempest] Fix concurrency in test with listing share servers * The python version is added Python 3 and 3.5 version was missing * Start NFS and SMB services on fedora platforms * Remove unused "share\_id" parameter * Remove unused assignments in share manager * Updated from global requirements * Unblock gate failure on docs build * Fix 3 CI breakages * [Grenade] Fix devstack configuration in CI hook * Change tempest tag to 15.0.0 * Fix gate breakage caused by localrc usage * Fix host-assisted migration stale source share * Fix syntax in devstack plugin * Align policy.json with code * Add Apache License Content in index.rst * Use https instead of http for git.openstack.org * Remove unused pylintrc * Address family neutrality for container driver * container driver: log network id as network id * Remove redundant revert-to-snapshot test option * Fix some typos * Update tempest pin to 15.0.0 * Only return share host for admins using shares API * Fix migration\_success before completing * Update HNAS driver version history * doc: verify all rst files * Fix to use correct config options for network\_for\_ssh * Adds manila-manage 'db purge' command to man page * Enable devstack deploy of container driver on Fedora * Add Share Migration devref docs * Improve HNAS driver coverage * Updated from global requirements * [Tempest] Refactor api/tests/admin/test\_share\_servers module * 3PAR: Replace ConsistencyGroup * Updated from global requirements * Updated from global requirements * Update tempest pin to latest commit ref * [Tempest] Split up share migration tests to separate classes * Mock time.sleep in tests that sleep * HNAS: Fix concurrency creating/deleting snapshots * [Grenade] Add test with creation of share snapshot * Fix Windows SMB helper * [Grenade] Switch base to stable/ocata * Use more specific asserts in tests * Optimize opposite driver modes migration test * HNAS: ensure snapshot before trying to revert * Update reno for stable/ocata 4.0.0.0rc1 ---------- * Add 'consistent\_snapshot\_support' attr to 'share\_groups' DB model * Pass access rules to driver on snapshot revert * Fix default approach for share group snapshot creation * Remove a py34 environment from tox * Disable share groups APIs by default * Fix devstack manila nfs install for fedora * Improve test coverage for share migration * Replaces yaml.load() with yaml.safe\_load() * Prepare for using standard python tests * Fix nonsense variable name * Fix wrong access-rule negative test * Fix migration of mountable snapshots * Fix HNAS driver inconsistent exceptions * Fix HNAS driver always handling mountable snapshots * HNAS: Fix syntax to make shares read-only in snapshot create * Blocked migration of shares within share groups * HNAS: Fix managed snapshots not being mounted * Fix multiple export locations during migration * Fix snapshot export locations incorrectly handled * HNAS: avoid mismatch access level for managed shares * Fix error'ed access rules being sent to driver * Fix setup of DHSS=False mode for generic driver * HNAS: Fix concurrency error when managing snapshots * Enable host-assisted migration in ZFSOnLinux CI * Decrease share migration periodic task interval * Add access-rules tests to improve the coverage * Remove unit test that is not relevant anymore * Fix creation of share group types using share type names * Mark 'v1' API deprecated in the versions response * Fix Generic driver DHSS=False setup * Fix string formatting in access-deny API error message * Make LVM export IP configurable * Updated from global requirements 4.0.0.0b3 --------- * Updated from global requirements * Revert "[Devstack] Workaround osclient breakage" * Add mountable snapshots support to HNAS driver * Improve share migration scenario test validation * Mountable snapshots scenario tests * Fix MapRFS test\_\_execute to not impact others * Add mountable snapshots support * Fix devstack plugin to not depend on private network * VMAX manila plugin - Support for VMAX in Manila * NetApp: Support share revert to snapshot * [Tempest] Add functional tests for share groups feature * Manila Share Groups * Rename consistency group modules to share groups * [api-ref] Fix missing parameters in api-ref * Removes unnecessary utf-8 coding * NetApp cDOT: Add Intra-Vserver migration support * Updated from global requirements * Add QNAP Manila Driver * Add cast\_rules\_to\_readonly to share instances * Don't call update\_access if there are no rules * Implement Revert-to-snapshot in HNAS Driver * Share Migration Ocata Improvements * Refactor Access Rules APIs * Tooz integration * Trivial fixes to snapshot revert patch * [api-ref] Refactor share network documentation * Fix \`\`exportfs -u\`\` usage in generic driver * Add manila-manage db purge command * [Unity driver] VLAN enhancement * Implement share revert to snapshot * Fix metadata's soft-delete error when deleting shares * Fix license and E265 errors in doc/source/conf.py * Updated from global requirements * tests: remove useless variables in db\_utils methods * Some share api test cleanup * Update .gitignore * Fix column name error in migration script * Fix error message in Share Networks API * Remove NovaNetworkPlugin * [TrivialFix] Add negative test in quota detail * Add MapR-FS native driver * Allow skipping manila tempest tests * Properly deprecate service\_instance\_network\_helper\_type * remove devref jenkins doc * Support python 3.5 in tox * Unity/VNX Driver: Rename driver options * Migration Data Check fixes * Remove trailing backtick * Updated from global requirements * Remove nova net support from service\_instance * [api-ref] Refactor share instance export locations API documentation * GPFS: Add update\_access() * Report create\_share\_from\_snapshot\_support * Allow share status reset to migration status * Add support for manage/unmanage in GPFS driver * [api-ref] Refactor share actions API documentation * [api-ref] Refactor share export location API documentation * Add the ability to check the tenant quota in detail * Fix test variable injection in CI * [TrivialFix] optimize get filesystem id in huawei driver * [Devstack] Workaround osclient breakage * Updated from global requirements * GPFS KNFS: Fix deny access to succeed when possible * GPFS KNFS: Do not reuse ssh prefix in loop * Add create\_share\_from\_snapshot\_support extra spec * Trivial fix LOG.exception issues * [Grenade] Do not run tempest tests * Fix typo in rootwrap.conf * use six.StringIO for compatibility with io.StringIO in python3 * Trivial fix translate issues * NetApp: set proper broadcast domain for IPspace * Add Apache 2.0 license to source file * [Dell EMC Unity] Support create share smaller than 3 GB * Updated from global requirements * [TrivialFix] Move share type filter tempest to test\_scheduler\_stats.py * [devref] copy samples/local.conf correctly * GPFS CES: Fix bugs related to access rules not found * Add DriverFilter and GoodnessWeigher documentation * Setting up a development env with devstack instructions * Enable scenario tests for LVM and ZFSonLinux drivers * [Tempest] Add scenario test creating share from snapshot 4.0.0.0b2 --------- * Decouple Manila UI from Manila Devstack plugin * [Generic driver] Fix generation of admin export location * Fix undefined attribute in scenario test class * Fix Manila service image config for 3rd party CIs * Change network allocation of Unity driver to 1 * [LVM,Generic drivers] Fix relationships between parent and child shares * Replace six.iteritems() with .items() * Add "update\_access" interface support for VNX * Add share\_type filter support to pool\_list * [TrivialFix] Fix doc typo error * Updated from global requirements * [Tempest] Fix concurrency issue in scenario test * Add support for manage/unmanage snapshots in HNAS driver * [ZFSonLinux] Stop inheriting options creating share from snapshot * Updated from global requirements * [Devstack] Use openstack CLI instead of other clients * [Devstack] Fix DHSS=False setup for Generic driver * [Devstack] Run tempest update in proper time * Fix wrong data type in database migration * LOG marker mismatch in the code * [hacking] Ensure not to use LOG.warn * Fix devstack smb configuration outside ubuntu * Fix share writable in host-assisted migration * Remove unused function in db api * [api-ref] Refactor Manila scheduler stats API * TrivialFix: Remove Duplicate Keys * Show team and repo badges on README * Fix wrong instructions in the install guide * [Dummy driver] Add possibility to set delays for driver methods * [Devstack] Fix devstack plugin compatibility * Add Admin network support to HNAS driver * Fix extend operation of shrinked share in generic driver 4.0.0.0b1 --------- * [Tempest] Make share size configurable in scenario tests * [Tempest] Port remote\_client into Manila * hacking: Use uuidutils to generate UUID * devref/driver\_requirements: add cephfs protocol * Add Rally CI jobs with Manila scenarios * Fix spelling mistakes in cover.sh * Updated from global requirements * Check ceph backend connection on driver setup * Move EMC drivers to dell\_emc folder * NetApp cDOT controller utilization metrics * Replaces uuid.uuid4 with uuidutils.generate\_uuid() * Remove unused link * [install] Make the rabbitmq configuration simpler * Add testscenario to test-requirements * Fix share manage tempest test cleanup * Updated from global requirements * [Devstack] Create additional custom share types by default * Remove fake CG support from Generic share driver * Correct the order of parameters in assertEqual() * Use cors.set\_defaults instead of cfg.set\_defaults * Fix missing 'migration\_completing' task state * Replace 'assertEqual(None, ...)' with 'assertIsNone(...)' * Compare the encoded tag more accurately for huawei driver * Updated from global requirements * Add support of endpoint\_type and region\_name to clients manila uses * Updated from global requirements * [Tempest] Fix visibility of test\_quotas.py module * Fix a typo * Remove broken modindex link from devref * Clarify language in release notes * Updated from global requirements * Remove warnings for dropped context arguments * NetApp cDOT driver enhanced support logging * Add utility of boolean value parser * Fix concurrency issues in container driver * Updated from global requirements * Remove unused functions in utils * Update .coveragerc after the removal of openstack directory * [Grenade] Update devstack and pre\_test\_hook * Fix a typo in parameters.yaml * updated positional argument and output * Fix a typo in api\_version\_request.py * Updated from global requirements * NetApp cDOT driver should not report untenable pools * [api-ref] Refactor Manila snapshot API * [Container] Fix deletion of veths * Updated from global requirements * Enable release notes translation * Updated from global requirements * Avoid Forcing the Translation of Translatable Variables * Fix devstack for ubuntu-xenial * Stop adding ServiceAvailable group option * cephfs\_native: doc fixes * Remove tempest.test usage from manila tests * Fix typo in test\_gpfs.py * Use assert(Not)In/Greater(Equal)/LessEqual/IsNotNone * Updated from global requirements * Use method is\_ipv6\_enabled from oslo.utils * Files with no code must be left completely empty * TrivialFix: Remove default=None when set defaul value in Config * [TrivialFix] Correct file mode settings * [api-ref] Refactor Manila security service API * Remove redundant 'the' * Adjust doc about threading * Updated Hitachi NAS Platform Driver documentation * Updated from global requirements * Remove unused methods * Fix huawei driver username/password encoding bug * Use fnmatch from oslo.utils * Updated from global requirements * Fix check for nfsd presence * [api-ref] Refactor Manila availability-zones API * Fix huawei driver cannot delete qos while status is idle * Bring remote and local executors into accord * Add tempest tests for mtu and gateway fields * Make port\_binding\_extension mandatory if host\_id is specified * [api-ref] Refactor Manila quota set API * [api-ref] Remove temporary block in conf.py * Make nfs-kernel-server run on a clean host * Modify use of assertTrue(A in B) * Updated from global requirements * 3PAR driver fails to validate conf share server IPs * Manila install guide: Fix wrong instructions * delete python bytecode including pyo before every test run * Update installation tutorial and api-ref instructions * Update reno for stable/newton * [api-ref] Refactor limits and services API * [api-ref] Refactor manila extension API * [api-ref] Refactor consistency group API 3.0.0 ----- * Add cleanup to create from snap in Manila HNAS driver * [ZFSonLinux] Fix share migration using remote host * Put all imports from manila.i18n in one line * Fix access rules for managed shares in HSP driver * Improve Share Migration tempest tests * Fix allow/deny error message and race in migration * Fix for LV mounting issue in docker containers * Fix flaky Neutron port binding unit tests * Fix useless statements in unit tests * [docs] Update dev docs for ZFSonLinux share driver * [ZFSonLinux] Add test coverage for share migration * NetApp cDOT driver autosupport broken * Fix dedup/compression description in doc * huawei driver default create thin type share * HPE 3PAR: file share support of AD in devref * Updated from global requirements * glusterfs: handle new cli XML format * Add provisioned\_capacity\_gb estimation * Fix typo in response status code * standardize release note page ordering * Fix race condition updating routes * share-size not set to 1 with 'manage\_error' state * Config logABug feature for Manila api-ref * NetApp cDOT: Avoid cleaning up 'invalid' mirrors * [ZFSonLinux] Fix share migration support * Update to tempest 12.2.0 3.0.0.0b3 --------- * Add multi-segment support * Add binding\_profile option for backends * Nexenta: adding share drivers for NexentaStor * Updated from global requirements * Windows SMB: implement 'update\_access' method * Windows SMB: remove redundant operations * [Dummy driver] Add share migration support * [ZFSonLinux] Add share migration support * Add share type change to Share Migration * HPE 3PAR driver pool support * Share migration Newton improvements * Unity: Use job for NFS share creation * Correct reraising of exception * Windows SMB: avoid default read share access * Change assertTrue(isinstance()) by optimal assert * Fix Share Migration improper behavior for drivers * Fix Manila HNAS driver managing a share twice * Fix test bugs for replication CI * Implement replication support in huawei driver * Fix connectivity problem in Scenario job * Updated from global requirements * [CI FIX] Fix 'ip route' matching multiple subnets * Clean imports in code * Clarify grenade failure message * Updated from global requirements * Add documentation for EMC Unity Driver for Manila * Remove enable\_v1\_api and enable\_v2\_api config opts * 3PAR: Add update\_access support * add access\_key to share\_access\_map * Add missing filter function in HSP driver * Get ready for os-api-ref sphinx theme change * Fix fallback share migration with empty files * Rename and move HNAS driver * Updated from global requirements * Add neutron driver for binding * Fix sample config generation for cinder, nova and neutron opts * Add Hitachi HSP driver * manila\_tempest\_tests: fix exception messages * Container driver * Tox Upper Constraints - strip out reinstalls for remaining jobs * NetApp cDOT: Apply network MTU to VLAN ports * Fix typo in glusterfs driver comment * [dev-docs] Changed small case letters to capital * Add MTU information in DB and API * In-tree Install Guide * Updated from global requirements * cephfs\_native: enhance update\_access() * TrivialFix: Change LOG.warn to LOG.warning * Fix the broken UT of huawei driver for py34/35 * Add dedupe report in HNAS driver * cephfs\_native: add read-only share support * Updated from global requirements * Refactor GPFS driver for NFS ganesha support * NetApp cDOT driver configurable clone split * NetApp cDOT multi-SVM driver configurable NFS versions * Add support for CIFS shares in HNAS driver * Fix KeyError on err in unit test * Fix concurrent usage of update\_access method for share instances * NetApp cDOT vserver deletion fails if no lifs present * Fix ZFSonLinux driver prerequisites setup * Updated from global requirements * HPE3PAR make share from snapshot writable * Check for usage of same Cephx ID as manila service * Fix share migration test with snapshot support * [Tempest] Fix concurrency in "test\_show\_share\_server" test * [ZFSonLinux] Fix replicated snapshot deletion error * Fix race condition in tempest test * Replaces httplib with requests lib in Quobyte RPC layer * Add EMC Unity Driver for Manila * Add snapshot instances admin APIs * TrivialFix: Fix a wrong order bug in resource\_cleanup() * [ZFSonLinux] Add 'manage snapshot' feature support * Minor optimization and formatting corrections in Quobyte driver * Add retry in VNX driver when DB lock error happened * Remove "host" from driver private data * NetApp: Report hybrid aggregates in share stats * share/access: allow maintenance mode to be triggered * Migrate API reference into tree * Fix devref README and remove Makefile * Add dummy driver * Correct Quobyte driver capacity reporting * Updated from global requirements * Huawei: Support reporting disk type of pool * Documentation changes for thin/thick provisioning * Check 'thin\_provisioning' in extra specs * HPE3PAR: Fix filestore quota decrement * HPE3PAR: Handle exceptions on deleted shares * Fix pep8 job * Add reno notes about http\_proxy\_to\_wsgi middleware * Add DriverFilter and GoodnessWeigher to manila * Use http\_proxy\_to\_wsgi instead of ssl middleware * Use constraints for coverage job * Do not put real hostname and IP address to manila config sample * Add tox job for db revision creation * Add interface port configuration in EMC VNX driver 3.0.0.0b2 --------- * Huawei: Add share sectorsize config in Huawei driver * Huawei driver support access of all IPs * update min tox version to 2.0 * Updated from global requirements * [Tempest] Handle errored shares correctly using recreation logic * [Tempest] Create heavy scenario resources in parallel * Update tempest to newer commit version * Add share manage/unmanage of Oracle ZFSSA driver * Delete duplicated broken tempest test * Add lvm driver options to sample config * Updated from global requirements * [ZFSonLinux] Add 'manage share' feature support * Fix snapshot manage Tempest test * Manage / unmanage snapshot in NetApp cDOT drivers * Add gateway in network\_info and share network API * Fixed a spelling mistake of "seperate" to "separate" * Add share\_size config option * Config: no need to set default=None * Use upper-constraints in tox installs * Updated from global requirements * Update quota usages correctly in manage share operation * Change user\_id and project\_id to 255 length * Add user\_id and project\_id to snapshot APIs * [Tempest] Fix negative replication test * [Tempest] Remove noqa filters * Updated from global requirements * Cleanup unused DB APIs * glusterfs: Implement update\_access() method * ganesha: implement update\_access * Huawei: Add manage share snapshot in Huawei driver * Delete VLAN on delete\_vserver in Netapp cmode * Use is\_valid\_ipv4 and is\_valid\_ipv6 from oslo.utils * Updated from global requirements * Do not supply logging arguments as tuple * cephfs\_native: Fix client eviction * Pass context down to ViewBuilder method * Add more dir exceptions to pep8 tox job * [Tempest] Bump tempest version * [Tempest] Stop using deprecated Tempest opts * [Tempest] Add valuable tags to tests * [Tempest] HotFix for broken CI jobs * Updated from global requirements 3.0.0.0b1 --------- * Fix issue with testtool testrunner * HPE3PAR driver doesn't decrease fstore capacity * Updated from global requirements * Fix badly formatted release note * Use oslo IntOpt function instead of explicit check * Document instructions for documentation * Adding info to use venv of tox for reno * Polish hook decorator * Updated from global requirements * Updated from global requirements * Fix HDS HNAS errors caused by incorrect IDs * Huawei: Fix exception in update\_access not found * Hacking check for str in exception breaks in py34 * Add hacking rule for assertEqual(None, \*) * Squash E042 and E043 bashate warnings * Removed the invalid link from Manila Dev Guide * Use assertTrue rather than assertEqual(True, ...) * Replace assertEqual(None, \*) with assertIsNone in tests * Updated from global requirements * Remove retry logic from manage API * Fix tox errors and warnings in the devref * [Doc] Update quick start guide to Mitaka release * Updated from global requirements * HDS\_HNAS: Fix improper error message * HDS\_HNAS: Remove unused parameter * Fix context warning spam of scheduler and share logs * Updated from global requirements * Fix docs for REST API history and Scheduler * Fix Manila RequestContext.to\_dict() AttributeError * Add wraps function to decorator * Fix context decorator usage in DB API * Add hint how to configure fake\_driver in manila-share * Test: make enforce\_type=True in CONF.set\_override * Remove NetAppCmodeClient.delete\_network\_interface * Updated from global requirements * Add user\_id echo in manila show/create/manage API * Bump Tempest version * Remove deprecated manila RequestBodySizeLimiter * Fixed references for scheduler drivers in doc * Fix share server info in CGs created from CGs * Skip over quota tests if quota tests disabled * Delete Snapshot: status wrongly set when busy * Updated from global requirements * Fix HNAS error with unconfined filesystems * Developer Reference: Adopt the openstackdocstheme * Fix IPv6 standalone network plugin test * cephfs\_native: doc fixes * Added docs for commit message tags * Fix docstring for policy.enforce method * Updated from global requirements * Fix tempest.conf generation * [Trivial] replace logging with oslo.log * Add Grenade support to Manila * NetApp: DR look up config via host name * [Devstack] Set proper driver mode for ZFSonLinux driver * use thread safe fnmatch * Updated from global requirements * Make devstack functions support grenade * Fix microversion usage in share manage functional tests * Handle manage/unmanage for replicated shares * Fix HNAS driver exception messages * Updated from global requirements * Add doc for Share Replication * Fix Share status when driver migrates * Fix doc build if git is absent * Remove unused tenant\_id variable * [Fix CI] Bump Tempest version * Detect addition of executable files * Updated from global requirements * Add release notes usage and documentation * Deprecate manila-all command * update hacking checks for manila * Fix creation of Neutron network in Devstack * Fix manage tempest test validation * Update HPE 3PAR devref docs * NetApp cDOT driver should honor reserved percentage * Remove Devstack workaround for Neutron * Remove unused logging import and LOG global * cephfs\_native: Change backend snapshot dir's name * Remove openstack-common.conf * update dev env doc for Fedora releases * Fix force-delete on snapshot resource * Increase Cinder oversubscription ratio in CI * Use install\_package when preparing LVM driver installation * Fix Manage API synchronous call * Generic driver: ignore VolumeNotFound in deleting * Removing some redundant words * Add common capabilities matrix to devref * Add caution to test-requirements * Increase logging for driver initialization * Capitalize global var for clients * Fix typos * Update ZFSonLinux share driver docs * Update reno for stable/mitaka 2.0.0 ----- * Fix call of clients in post\_test\_hook.sh * Add tests to ensure snapshots across replicas * NetApp cDOT: Handle replicated snapshots * Data Replication: Ensure Snapshots across replicas * Fix update\_access concurrency issue * Fix manage API ignoring type extra specs * Make ZFSonLinux driver handle snapshots of replicated shares properly * Fix keystone v3 issues for all clients * Fix for incorrect LVMMixin exception message * NetApp cDOT: Fix status updates for replicas * NetApp cDOT: Raise ShareResourceNotFound in update\_access * Add hacking check to ensure not to use xrange() * Fix generic and LVM driver access rules for CIDRs * Fix report of ZFSonLinux driver capabilities * Fix the scheduler choose a disable share service * Fix typos * Fix error logged for wrong HPE 3par client * 3PAR remove file tree on delete when using nested shares * HDS-HNAS: Fix exception in update\_access not found * Revert "LXC/LXD driver" * Fix Hitachi HNAS driver version * service instance: also recognize instance name * Fix update of access rules in ZFSonLinux driver * Check share-network in 'share create' API * glusterfs volume layout: take care of deletion of DOA shares * Fix delete when share not found in update\_access * Remove default values for update\_access() * NetApp cDOT driver should not split clones * Fix handling of share server details after error * HDS-HNAS: fixed exception when export not found * Fix lock decorator usage for LVM and Generic drivers * Fix HNAS snapshot creation on deleted shares * Move iso8601 from requirements to test-requirements * Fix typos * glusterfs.common: GlusterManager.gluster\_call error report fix * glusterfs.GlusterNFSVolHelper: remove \_\_init\_\_ * Add tempest tests for Share Replication * register the config generator default hook with the right name * Windows driver: fix share access actions * Collapse common os\_region\_name option * Disallow scheduling multiple replicas on a given pool * update quota of origin user on share extend/shrink * Update quota of proper user on resource delete * Fix Share Migration access rule mapping * Fix unstable DB migration tests * Fix Share Migration KeyError on dict.pop * NetApp cDOT APIs may get too little data * HNAS: Enable no\_root\_squash option when allowing access to a share * Fix HNAS driver crash with unmounted filesystems * Fix compatibility with Tempest * Set proper image name for tempest * Remove nsenter dependency * Fix ZFSonLinux driver share replica SSHing * Fix ZFSonLinux access rules for CIDRs * Fix HNAS driver thin\_provisioning support * Fix pylxd hard dependencies * Squash consequent DB calls in create\_share\_instance * Fix slow unit test * Run ZfsOnLinux gate tests with SSH enabled * Fix status update for replicas * Set TCP keepalive options * Fix manila devstack plugin for keystone v3 usage * Add /usr/local/{sbin,bin} to rootwrap exec\_dirs * Updated from global requirements * Use official location for service image * Allow devstack plugin to work without Cinder * Download service image only when needed * glusterManager instantiation regexp validation 2.0.0.0b3 --------- * Moved CORS middleware configuration into oslo-config-generator * Move Share Migration code to Data Service * Remove unintended exposure of private attribute * Add share driver for Tegile IntelliFlash Arrays * Update tempest commit and switch to tempest.lib * LXC/LXD driver * Update export location retrieval APIs * Huawei driver improve support of StandaloneNetworkPlugin * Add Ceph Native driver * Introduced Data Service * Implement admin network in generic driver * NetApp: Add Replication support in cDOT * Fix NFS helper root squashing in RW access level * Add ZFSonLinux share driver * glusterfs.common: move the numreduct function to toplevel * glusterfs\_native: relocate module under glusterfs * Huawei driver code review * Add QoS description in Huawei * glusterfs/ganesha: add symbolic access-id to export location * Add share resize support to Oracle ZFSSA driver * Implement update\_access() method in huawei driver * Update Huawei driver doc for Mitaka * Remove unused pngmath Sphinx extension * Implement update\_access() in generic driver + LVM * Add doc for export location metadata * gluster\*: clean up volume option querying * Admin networks in NetApp cDOT multi-SVM driver * Support export location metadata in NetApp cDOT drivers * Change sudo to run\_as\_root in LVM driver * Huawei driver: change CIFS rw to full control * Updated from global requirements * Fix NetApp cDOT driver update\_access negative test * Define context.roles with base class * Subclass context from oslo\_context base class * Add Replication admin APIs and driver i/f changes * glusterfs/common: don't suppress vol set errors * Improve exception msg when attaching/detaching volumes * Use assertIsNone instead of assertEqual(None, \*\*\*) * Scheduler enhancements for Share Replication * Fix typo in comment message * Remove aggressive assert from share server test * Fix scenario tests * EMC Isilon Driver Support For CIFS Read-Only Share * Add update\_access() interface to Quobyte driver * Check for device node availability before mkfs * Replace TENANT => PROJECT for manila plugin * Validate qos during share creation * Fix doc string in driver interface * Fix neutron port concurrency in generic driver * Add additional documentation on extra spec operations * Implement update\_access() method in Hitachi HNAS driver * Fix share migration tests in gate * Update help text for some service instance config opts * Three ways to set Thin/Thick Type in Huawei driver * Squash E006 bashate warnings * Implement update\_access() in NetApp cDOT drivers * Add tox fast8 option * Use ostestr to run unit test * Make consistency group timeout exception message more robust * Manage and unmanage snapshot * Stop proxying share\_server\_id through share in share.manager * Remove deprecated share attribute usage from manila.share.api * Get host from share['instance'] in share RPC API * Cleanup deprecation warnings from using share proxy properties in API * Add possibility to skip quota tests in Tempest * Remove default=None from config options * Add space to message in manila\_tempest\_tests/tests/api/test\_shares.py * Fix rpcapi identifiers for better readability * Add admin network for DHSS=True share drivers * Allow DHSS=False tests to override Tempest concurrency * Remove \`None\` as a redundant argument to dict.get() * gluster\*: add proper getter/setters for volume options * Unify usage of project name in doc to 'manila' * Removed ignored checks from tox.ini and fixed pep8 issues * Updated from global requirements * Fix tempest test for export locations API * Support devstack install without nova * EMC Isilon Driver Support For NFS Read-Only Share * replace string format arguments with function parameters * Converted MultiStrOpt to ListOpt * Fix Hitachi HNAS Driver default helper * Use existing "insecure" options when creating nova/cinder clients * Fix Share Replica details in the API * Share Replication API and Scheduler Support * Fixed Hitachi HNAS slow test * Replace 'stack' with $STACK\_USER in devstack plugin * Replace deprecated oslo\_messaging \_impl\_messaging * Avoid KeyError on instance\_id in ensure\_service\_instance * Hitachi HNAS driver share shrink * LVM driver: Pass '--units g' to vgs invocation * Updated from global requirements * Fix scheduling with instance properties * Add update\_access() method to driver interface * Update the home page * Fix issue in hacking with underscore imports * Added Keystone and RequestID headers to CORS middleware * Ext. exception handling for httplib and socket errors in Quobyte driver * Huawei: Create share from snapshot support in Huawei driver * Don't convert share object to dict on create * Fix Cinder's NoValidHostFound errors * Remove outdated pot files * Fix Devstack and Manila-ui interaction * Fix devstack function call recreate db * tempest: wait for deletion of cert rule * Bump tempest version * Fix params order in assertEqual * Removed unnecessary string conversions on Hitachi HNAS Driver * Add feature support information of Oracle ZFSSA Manila driver * extra-specs should work with string True/False * Fix db shim layer mismatches with implementation * TrivialFix: Remove deprecated option 'DEFAULT/verbose' * isoformat instead of deprecated timeutils.isotime 2.0.0.0b2 --------- * Return appropriate data on share create * Hitachi HNAS driver refactoring * Trivial Fix: fix missing import * Remove unused server\_get() method * QoS support for Huawei Driver * Add LVM driver * Fix release of resources created by Tempest * Fix access rules tempest v2 client * Huawei: Ensure that share is exported * Using dict.items() is better than six.iteritems(dict) * Updated from global requirements * gluster\*: refactor gluster\_call * Fix pep8 failure * Fix Mutable default argument * Fix devstack in non-neutron environments * Fix usage of standlone\_network\_plugin * Implement export location metadata feature * Doc: Remove prerequisite: Ubuntu * Hide snapshots with no instances from listing * QoS support for shares * Huawei: Add share server support * Isilon Driver: Update Share Backends Feature Doc * Clean up removed hacking rule from [flake8] ignore lists * Fix Manila tempest tests * Adds extend\_share for Quobyte shares * Update NetApp driver support matrix line * Fix response code for various NotFound exceptions * Huawei driver report pool capabilities [True, False] * Fix 'extend' API for 2.7+ microversions * Replace assertEqual(None, \*) with assertIsNone in tests * Delete Share Instance of unmanaged share * Add debug testenv in tox * A tempest test in services API using unsafe assert * Cannot return a value from \_\_init\_\_ * Make Manila UI be installed after Horizon * Use new approach for setting up CI jobs * Add doc for share driver hooks * Add more documentation to share/driver * Fix grammatical mistake, Changed character from "an" to "a" * Huawei: Add manage share with share type in Huawei driver * Refactor share metadata tests to use DB * Replace deprecated [logger/LOG].warn with warning * Add snap reserve config option to NetApp cDOT driver * Updated from global requirements * Fix tempest case "test\_delete\_ss\_from\_sn\_used\_by\_share\_server" * Fix CI Tempest jobs * glusterfs/vol layout: remove manila-created vols upon delete\_share * Use constants instead of literals in Huawei Driver * Fix unit test of ShareSnapshotNotFound * Fix handling of Novaclient exceptions * Drop MANIFEST.in - it's not needed with PBR * Replace deprecated library function os.popen() with subprocess * Change assertTrue(isinstance()) by optimal assert * EMC Isilon Driver Doc Update for Extend Share * [docs] Fix table elements view on page with list of supported features * Trivial: Remove unused logging import * Set timeout for parmiko ssh connection * Fix wrong flake8 exception and pep8 violations * Remove unused oslo-incubator \_i18n.py from Manila * Deprecated tox -downloadcache option removed * Keep py3.X compatibility for urllib * EMC VNX: Fix the interface garbage in VNX backend * EMC Isilon Driver Support For Extend Share * HPE3PAR finds CIFS share with either prefix * Improve tempest tests for shares listing APIs * Updated from global requirements * Support standard Manila capability flags in NetApp cDOT driver * Mock out service availability check in unit test * Capability lists in Manila scheduler * HPE3PAR support for share extend and shrink * Pop off user/tenant kwargs in RequestContext init * Move the config environment variables into devstack/settings file * glusterfs: document Gluster NFS misbehavior * Change instance service default path for private key to None * Use isoformat() instead of timeutils.strtime() * EMC VNX: Add multi-pools support * Add space to message in manila/consistency\_group/api.py * Remove duplicate keys from dictionary * Fix Tempest microversion comparison approach * Prevent removal of share server used by CG * HPE3PAR support for access-level (ro,rw) * Performance: leverage dict comprehension in PEP-0274 * Updated from global requirements * Document correction in quick\_start.rst * glusterfs\_native: fix parsing of the dynamic-auth option * Fix wrong check message * NetApp cDOT driver should support read-only CIFS shares * Do not allow to modify access for public share type * EMC VNX: Add share extend support * Allow to set share visibility using "manage" API * Remove version per M-1 release instructions * Updated from global requirements * [CI] Speed up Tempest jobs * Avoid service\_instance neutron port clash in HA 2.0.0.0b1 --------- * EMC: Fix bugs when domain controller is not available * Put py34 first in the env order of tox * Move API module 'share\_instances' under v2 dir * Change manila\_tempest\_tests to use credentials\_factory * timeutils.total\_seconds() is deprecated * Reorganize scheduler and merge code from Oslo incubator * glusterfs: add missing i18n import * Fix Share status precedence based on instances * doc: document the non-standard export semantics of Ganesha * Liberty doc updates for GlusterFS drivers * Add new URLs for APIs ported from extensions * Updated from global requirements * NetApp cDOT multi-SVM driver can't handle duplicate addresses * Remove mention of isilon\_share\_root\_dir * Add share-networks validation * Simplify ping usage for service VM check in CI * Improve Tempest tests for consistency groups * Add sleep to CI hooks to avoid races * add Red Hat GlusterFS drivers feature support info * Add reno for release notes management * Delete python bytecode before every test run * Updated from global requirements * Add support of 'network\_type' to standalone network plugin * Fix import of devstack functions for common CI script * Last sync to Manila from oslo-incubator * glusterfs/volume layout: indicate volume usage on volumes themselves * glusterfs/volume layout: fix incorrect usage of export\_location * Refactor authorize() method in wsgi.py * Implements ensure\_share() in Quobyte driver * Prevent Share operations during share migration * Fix typo on quota limit error message * Refactor HP 3PAR share driver to now be HPE * OpenStack typo * Added driver minimum requirements and features doc * Remove httplib2 useless requirement * Added CONTRIBUTING file in .rst format * HPE3PAR create share from snapshot fails * Updated from global requirements * EMC VNX Manila Driver Refactoring * Updated from global requirements * Port share type extensions to core API * Port admin actions extension to core API * Use oslo\_config new type PortOpt for port options * Added CORS support to Manila * Split common logic of CI hooks to separate file * Port share actions to core API * Port quotas to core API * Port services to core API * remove default=None for config options * Add mount automation example based on Zaqar * Make setup.py install Manila Tempest plugin * Sync Manila Tempest plugin with latest Tempest * Port manage/unmanage extensions to core API * Updated from global requirements * Rephrase comments for Share create API * Use assertTrue/False instead of assertEqual(T/F) * Fix no-share-servers CI job * Use default Keystone API version in Devstack * Updated from global requirements * Port availability zones to core API * Generic driver: wait for common server during setup * Port used limits to core API * Updated from global requirements * Add IBM GPFS Manila driver * Fix list-availability-zones API for PostgreSQL * Fix share type model scalability for get request 1.0.0 ----- * Fix usage of dependencies * Fix usage of dependencies * Use 'False' as default value for "compression" common capability * Stop using deprecated tempest options * Make share service understand driver init failure * Fix broken unit tests * Enable extend\_share in HDFS driver * Verify common server in Generic driver on startup * Updated from global requirements * Improve Manila HDS HNAS Driver Manual * Fix order of arguments in assertEqual * Fix order of arguments in assertEqual * Fix order of arguments in assertEqual * Update feature support matrix for Windows SMB 1.0.0.0rc2 ---------- * Share manager: catch exception raised by driver's setup() * Fix display of availability-zone for manila-manage command * glusterfs\_native: use dynamic-auth option if available * Fix setting of "snapshot\_support" extra spec for tempest * Fix deletion of error state access rules * Fix response data for API access-allow * Fix display of availability-zone for manila-manage command * glusterfs: check nfs.export-volumes with Gluster NFS + vol layout * glusterfs: manage nfs.rpc-auth-allow not being set * glusterfs vol layout: start volume cloned from snapshot * glusterfs\_native: use dynamic-auth option if available * NetApp cDOT driver isn't reentrant * Can't create shares on drivers that don't support snapshots * Revert netapp\_lib dependency in NetApp cDOT Manila drivers * Set defaultbranch to stable/liberty in .gitreview * Feature support matrix update for HP 3PAR * Fix \`test\_trans\_add\` for Python 3.4.3 * Remove misleading snapshot methods from Quobyte driver * Fix response data for API access-allow * Improve logging of calls in ShareManager * Use random IPs in security service tests * EMC Isilon Manila Driver Feature Support * Fix deletion of error state access rules * Fix order of arguments in assertEqual * glusterfs vol layout: start volume cloned from snapshot * Fix order of arguments in assertEqual * NetApp cDOT driver isn't reentrant * Fix mentioned DEFAULT\_API\_VERSION in doc * Revert netapp\_lib dependency in NetApp cDOT Manila drivers * Fix \`test\_trans\_add\` for Python 3.4.3 * Adds Quobyte share backend feature support mapping data * Remove language about future features from driver doc * Remove LegacyFormatter from logging\_sample.conf * Fix setting of "snapshot\_support" extra spec for tempest * Fix some spelling typo in manual and error message * glusterfs: check nfs.export-volumes with Gluster NFS + vol layout * glusterfs: manage nfs.rpc-auth-allow not being set * Can't create shares on drivers that don't support snapshots * Add Huawei driver details in doc * Add Hitachi HNAS driver documentation * Open Mitaka development 1.0.0.0rc1 ---------- * glusterfs\*: fix ssh credential options * Make Quobyte shares actually read-only when requested * Fixes a Quobyte backend call issue with a wrong field name * Fix error response when denying snapshot creation * Fix 'cover' tox job * glusterfs: fix gluster-nfs export for volume mapped layout * Updated from global requirements * Fix experimental=True for view in microversion 2.5 * glusterfs\_native: Hardwire Manila Host CN pattern * Fix HDS HNAS manage incorrect share size * glusterfs\*: amend export location * Fix HDS HNAS Create from snapshot ignoring Size * Fix pool\_list filter tests to match pools exactly * Non-admin user can perform 'extra-specs-list' * Fix improper handling of extending error * Update feature support mapping doc for NetApp cDOT * Remove IBM GPFS driver due to lack of CI * Add 'snapshot\_support' attr to share details * Fix get\_stats to return real used space in HNAS * Add new features description in Huawei doc * Fix API version history in Huawei driver * Fix task\_state field shown on API < 2.5 * glusterfs: Fix use of ShareSnapshotInstance object * NetApp cDOT driver should prefer aggregate-local LIFs * Fix HDS HNAS snapshot creation tracking * Return share\_type UUID instead of name in Share API * doc: turn ascii art tables into proper reST grid tables * Make scenario tests able to run with DHSS=False * Fix missing value types for log message * glusterfs\_native: Fix typo for protocol compatibility * Fix typo in test\_hook * Fix Share Migration tempest tests * Remove support for 'latest' microversion * Adds retry function to HNAS driver * Corrects capabilities returned by Quobyte Manila driver * Fix create snapshot API in Huawei driver * Check the snapshot directory before copy it * Remove HDS SOP driver due to lack of CI * Missing check in ShareManager::manage\_existing() * Add v2 Manila API path as base for microversions * Huawei driver: fix reports reduplicate pools * Enhance base driver checking if a method was implemented * Updated from global requirements * Allow service image download to be skipped * Use 'False' as default value for "dedupe" common capability * Capacity filter should check free space if total space is unknown * Fix usage of novaclient * NetApp cDOT driver with vserver creds can't create shares * Fix unstable unit test 'test\_get\_all\_host\_states\_share' * Fix concurrency issue in tempest test * Fix description in Huawei driver * Replaces xrange() with range() for py 2/3 compatibility * Updated from global requirements * Consistency groups in NetApp cDOT drivers * Fix keypair creation * Add functional tests for Manila consistency groups * Place tempest microversions test module in proper place * Consistency Group Support for the Generic Driver * Add Share Migration tempest functional tests * Share Migration support in generic driver * Add Share Migration feature * glusterfs: directory mapped share layout * glusterfs: volume mapped share layout * glusterfs/layout: add layout base classes * Add Consistency Groups API * Scheduler changes for consistency groups * Add DB changes for consistency-groups * Use Tempest plugin interface * Make devstack plugin independent from default Identity API version * glusterfs-native: cut back on redundancy * glusterfs/common: refactor GlusterManager * glusterfs\*: factor out common parts * Add share hooks * Add possibility to setup password for generic driver * Use devstack functions for registering Manila * devstack plug-in to reflect new manila-ui plug-in * HP 3PAR extra-spec prefix needs to be hp3par * Fix the typo "version" * Updated from global requirements 1.0.0.0b3 --------- * Add attributes 'name' and 'share\_name' to ShareSnapshotInstance * Fix data copying issue in DB migration 1f0bd302c1a6 * HP 3PAR driver handles shares servers * Updated from global requirements * Fix failing Quobyte unit test * Remove instances of "infinite" capacity from Manila * Replace thin/thick capabilities with thin\_provisioning * Add Share instances Admin API * Add Windows SMB share driver * Remove ununsed dependency: discover * Implement snapshot tracking in HDS HNAS driver * Use Share Instance ID in 'name' property * Ignore git backup merge files * Tempest: wrong assertion on the number of shares created * Ignore unavailable volumes when deleting a share * Updated from global requirements * New Manila HDS HNAS Driver * Tempest: wait for access rule to be deleted * Fix Tempest tests targeting user based access rules * glusterfs\_native: Add create share from snapshot * Generic driver:Create Cinder volume in correct AZ * Reduce dependency to tempest: exceptions * Add possibility to filter back ends by snapshot support * Add tempest tests for "cert" based access type * Clean up admin\_actions API extension unit tests * Use service availability\_zone for Share Server VM * Add availability zones support * Add methods for share instances in Share API * Add compression in common capabilities doc * HP 3PAR add more info to the share comment * Add tempest tests for REST API microversions * Huawei driver support smartcache and smartpartition * Manila experimental REST APIs * Fix compatibility with sqlalchemy 0.9.7 * Updated from global requirements * Fix incorrect use of snapshot instances * HP 3PAR reports capabilities * Lazy Load Services * Replace assertEqual(None, \*) with assertIsNone in tests * Updated from global requirements * Fix incorrect variable name in some exception class * Update NetApp cDOT Manila drivers to use netapp\_lib * Add manage/unmanage support to NetApp cDOT driver * Service Instance: Add instance reboot method * Add WinRM helper * Common capabilities documentation * Fix Neutron config setting in pre\_test\_hook * Add share instances and snapshot instances * Fix extend share API in Huawei driver * Huawei driver support dedup, compression, thin and thick * Fix the log level in scheduler manage * Enable Tempest tests for glusterfs/hdfs protocols * Support shrink\_share in NetApp cDOT drivers * Fix sample config file generation * Change huawei driver send REST command serially * Support extend\_share in NetApp cDOT drivers * Fix for Isilon driver failing to connect * Updated from global requirements * Fix bug to locate hdfs command in HDFS native driver * Fix AttributeError without share type provided * Implement Manila REST API microversions * Add retry logic when delete a NFS share in VNX * Cleanup shares created by Tempest * Add py34 to test environment to tox.ini * Allow Tempest to skip snapshot tests * Add retries for deadlock-vulnerable DB methods * Adding extend share support in IBM GPFS Driver * Make QuobyteHttpsConnectionWithCaVerification py3 compatible * Add SSL middleware to fix incorrect version host\_url * Updated from global requirements * Fix HTTP headers case for API unit tests * Fix bug to run command as root in HDFS driver * Fix typos in neutron\_network\_plugin.py * Remove incorrect URLs from jenkins.rst * Remove ordering attempts of 'unorderable types' * Fix 'hacking' unit tests for py3 compatibility * Skip unit tests for SSL + py3 * Fix string/binary conversions for py34 compatibility * Make 'utils.monkey\_patch' py3 compatible * Decouple some of the Service Instance logic * Wrap iterators and 'dict\_items' for py34 compatibitity * Update Documents to use HDFS Driver * Fix two typos on documentation and one typo on CLI help * Stop using deprecated contextlib.nested * Fix imports for py34 compatibility * Fix exceptions handling for py34 compatibility * Rename from il8n.rst to i18n.rst * Remove copyright from empty file * Fix HP3PAR extra-specs scoping prefix bug * Updated from global requirements * Support manage\_existing in Huawei driver * Fix HP3PAR SMB extra-specs for ABE and CA * Generic: add service instance mgr set up method * Fix Generic driver share extend * Replace py2 xrange with six.moves.range * Fix integer/float conversions for py34 compatibility * Fix dictionary initialization for Python 3 compatibility * Replace (int, long) with six.integer\_types * Fix list creation * Replace dict.iteritems() with six.iteritems() * Add doc share features mapping * Replace 'types.StringTypes' with 'six.string\_types' * Replace '\_\_metaclass\_\_' with '@six.add\_metaclass' * Fix ZFSSA driver for py34 compatibility * Listen on :: instead of 0.0.0.0 by default 1.0.0.0b2 --------- * Fix slow unit tests * Remove Cinder leftover unit tests * Eventlet green threads not released back to pool * Add client\_socket\_timeout option to manila.wsgi.Server * Catch error\_deleting state for more resources than just shares * Updated from global requirements * Make coverage tox job fail when test coverage was reduced * Add test coverage for periodic tasks * Change \_LE to \_LW (at manila/share/manager.py) * Fix 'extend\_share' in generic driver * Fix unit tests for quobyte * Support shrink\_share in Huawei driver * GlusterFS: fix retrieval of management address of GlusterFS volumes * Explicit backend connect call in Quobyte RPCs * Enable multi-process for API service * Updated from global requirements * Make config opt 'enabled\_share\_protocols' verification case insensitive * glusterfs\_native: prefix GlusterFS snap names with "manila-" * glusterfs\_native: delete\_snapshot(): find out real GlusterFS snap name * glusterfs\_native: fix delete share * Reuse 'periodic\_task' from oslo\_service * Implement shrink\_share() method in Generic driver * doc: fix typo s/virutalenv/virtualenv/ * Cleanup DB API unit tests * Add negative tests for admin-only API * Updated from global requirements * HP 3PAR uses scoped extra-specs to influence share creation options * Retry \_unmount\_device in generic driver * Add 'retry' wrapper to manila/utils.py * Huawei driver support storage pools * Updated from global requirements * Modify confusing name in Huawei driver * Use all types of migrations in devstack installation * Close DB migration sessions explicitly for compatibility with PyMySQL * Delete redundant period in ManilaException messages * Use soft\_delete() methods in DB api * Use uuidutils to generate id's in DB api * Add license header to migrations template * Remove models usage from migrations * Huawei manila driver support multi RestURLs * EMC VNX: Fix the total capacity for dynamic Pool * Updated from global requirements * Updated from global requirements * Add access-level support in VNX Manila driver * Enable Manila multi-SVM driver on NetApp cDOT 8.3 * Support for oversubscription in thin provisioning * Fix for SchedulerStatsAdminTest fails on timestamp * Print devstack command traces before executing command * Fix unit tests for compatibility with new mock==1.1.0 * Change "volume" to "share" in filter and weigher * Updated from global requirements * Remove unneeded OS\_TEST\_DBAPI\_ADMIN\_CONNECTION * Remove duplicated options in manila/opts.py * More Manila cDOT qualified specs * Add PoolWeigher for Manila scheduler * Remove unused manila/openstack/common/eventlet\_backdoor.py * Updated from global requirements 1.0.0.0b1 --------- * Use loopingcall from oslo.service * Updated from global requirements * Use new manila-service-image with public-key auth * Allow drivers to ask for additional share\_servers * HP 3PAR driver config has unused username/password * Huawei manila driver support Read-Only share * Override opportunistic database tests to PyMySQL * Support share-server-to-pool mapping in NetApp cDOT driver * Remove unused files from oslo-incubator * Update version for Liberty 1.0.0a0 ------- * Support extend\_share in Huawei driver * Fix incompatiblity issue in VNX manila driver * Updated from global requirements * Updated from global requirements * Reduce amount of tempest threads for no-share-servers jobs * Add retry on volume attach error in Generic driver * HP 3PAR Add version checking and logging * Bump supported tempest version * Share\_server-pool mapping * Replace it.next() with next(it) for py3 compat * Fix tempest ShareUserRules\* tests * Updated from global requirements * Stop using deprecated 'oslo' namespace * Use oslo.utils to get host IP address * Remove deprecated WritableLogger * Make required function arguments explicit * Remove unused contrib/ci files * Fix docstrings in tempest plugin * Updated from global requirements * Add share shrink API * Implement tempest tests for share extend API * Implement extend\_share() method in Generic driver * Huawei manila driver code refactoring * Transform share and share servers statuses to lowercase * Updated from global requirements * Fix policy check for API 'security service update' * Remove unused attr status from models * Drop incubating theme from docs * Make devstack install manila-ui if horizon is enabled * glusterfs: Edit doc and comments * Simplify generic driver with private data storage API * Provide private data storage API for drivers * Remove usage of utils.test\_utils * Remove ServiceClient from share\_client * Switch from MySQL-python to PyMySQL * Add share extend API * Export custom Share model properties with \_extra\_keys * Release Neutron ports after share server deletion using generic driver * Make generic driver use only ipv4 addresses from service instances * Fix share-server resources cleanup in generic driver * ganesha: Add doc * Update Quickstart guide * NetApp cDOT driver fails Tempest cleanup on clone workflows * Updated from global requirements * Add doc for network plugins * Fix 'AllocType' read failure in Huawei driver * Sync tempest plugin with latest tempest * Updated from global requirements * Improve ShareServer DB model * Updated from global requirements * Add multi vm scenario test * Imported Translations from Transifex * Drop use of 'oslo' namespace package * Updated from global requirements * EMC: Remove unnecessary parameter emc\_share\_driver * Add doc with basic deployment steps * Move to the oslo.middleware library * Clean up redundant code and nits from EMC VNX driver * Remove unused oslo-incubator modules * EMC VNX Manila Driver Feature Support * Allow overriding the manila test regex * Updated from global requirements 2015.1.0 -------- * NetApp cDOT driver clones NFS export policy * Add config\_group\_name for NeutronNetworkHelper * Remove ping check from basic scenario test * Sync contrib/tempest to newer state * Fix for the deletion of an error share server * NetApp cDOT driver clones NFS export policy * Sync oslo-incubator code * EMC VNX Driver: Fix typo issues * Remove passing DB reference to drivers in Share Manager * Use oslo\_policy lib instead of oslo-incubator code * Use oslo\_log instead of oslo-incubator code * Use lib lxml for handling of XML request * Updated from global requirements * Remove direct DB calls from glusterfs\_native driver * Release Import of Translations from Transifex * Remove maniladir() and debug() function from utils * Use identity\_uri for keystone\_authtoken in devstack * Switch to new style policy for test policy * Add mount/umount in scenario tests * update .gitreview for stable/kilo * Update doc-strings for snapshot methods in Share Driver * Use openstackclient in devstack plugin * Remove direct DB usage from NetApp driver * Move response code verification to share client * Use entry\_points for manila scripts * Switch to new style policy language 2015.1.0rc1 ----------- * Remove Limited XML API Support from Manila * Prevent hanging share server in 'creating' state * More flexible matching in SSL error test * Imported Translations from Transifex * Mock out base share driver \_\_init\_\_ in EMC driver * Add object caching in manila REST API requests * glusterfs\_native: Fix Gluster command call * glusterfs, glusterfs\_native: perform version checks * Open Liberty development * Add Glossary with basic Manila terms * Restrict access only to vm ip * NetApp cDOT driver is too strict in delete workflows * Adding configuration instructions in huawei\_nas\_driver.rst * Update openstack-common reference in openstack/common/README * Prevent share server creation with unsupported network types with cDOT * Fix log/error message formatting * Updated from global requirements * Add segmentation ID checks for different segmentation types * glusterfs\_native: make {allow,deny}\_access non-destructive * glusterfs\_native: negotiate volumes with glusterd * NetApp cDOT driver uses deprecated APIs for NFS exports * Automatic cleanup of share\_servers * Fix fields 'deleted' in various DB models for PostgreSQL compatibility * Add tempest coverage for share type access operations * Enable developers to see pylint output * Allow overwriting some Manila tempest settings in CI jobs * Set share-type on share created from snapshot * cDOT multi-SVM driver may choose unsuitable physical port for LIFs * cDOT driver should split clone from snapshot after creation * Replace SQL code for ORM analog in DB migration scripts * Delete skipped tempest tests that won't be enabled * NetApp cDOT drivers should not start without aggregates * IBM GPFS Manila Driver Docs - update * Switch to v2 version of novaclient * Backslashify CIFS share export paths for Generic * NetApp cDOT multi-SVM driver should work with non-VLAN networks * NetApp cDOT multi-SVM driver should not start with cDOT 8.3 * Fix CIFS export format in EMC VNX driver * Forbid unmanage operation for shares with snapshots * Fix deletion of export locations * Add initial scenario test for Manila * Fix setting of share name and description with manage API * HP 3PAR driver documentation * Fix setting of extra specs for share types * Huawei NAS driver returns CIFS export locations in wrong format * IBM GPFS Manila Driver Docs * Fix common misspellings * Add share state verification for API 'unmanage' * Updated from global requirements * Sync tempest plugin with latest tempest * Make generic driver update export location after manage operation * Deal with PEP-0476 certificate chaining checking * Fix manage operation in generic driver * Imported Translations from Transifex 2015.1.0b3 ---------- * Implement manage/unmanage support in generic driver * cDOT driver should report all share export locations * Enable bashate during pep8 run * Allow updates to export locations * NFS based driver for Quobyte file storage system * glusterfs\_native: partially implement snapshot * Fix issues with get\_pool scheduler API * Use SoftDeleteMixin from oslo.db * Imported Translations from Transifex * Fix cleanup order for tempest test * Enable downgrade migrations in unit tests * Allow shares to have multiple export locations * Add basic manage/unmanage share functionality * Set proper attr "deleted" for ShareTypes model * Imported Translations from Transifex * EMC Isilon Manila Driver Docs * HP3PAR driver log the SHA1 for driver and mediator correctly * Add public attr for shares * Imported Translations from Transifex * Add ro level of access support to generic driver * Remove CLI tests from tempest plugin * Manila Scheduler should read full driver capabilities * NetApp cDOT driver should not create useless export-policy rule * Manila cDOT driver should use loopingcall for ASUP report timing * EMC Isilon Manila driver * Implement private share\_types * Updated from global requirements * Always allow delete share-network when no shares exist * Imported Translations from Transifex * Add nova network plugin * Manila cDOT qualified specs * Make extra spec driver\_handles\_share\_servers required * Failed to load xml configure file * Updated from global requirements * Allow tempest to skip RO access level tests * Manila cDOT netapp:thin\_provisioned qualified extra spec * Replace TEMPEST\_CONCURRENCY with Manila-specific var * doc: Add glusterfs\_native driver developer doc * Fix example style in admin doc * Imported Translations from Transifex * Improve error handling in GPFS driver * Updated from global requirements * Add doc for hdfs\_native driver * Remove copypasted export\_location field from snapshots * HP 3PAR use one filestore per tenant * Single-SVM Manila driver for NetApp Clustered Data ONTAP * Remove hacking exception for oslo.messaging import * Remove Python 2.6 classifier * Remove obsolete option: enabled\_backends * Manila access-allow API doesn't accept backslash * Add temporary workaround to scheduler * Add doc for Dynamic Storage Pools for Manila scheduler * Fix config opts description for class NeutronSingleNetworkPlugin * Add snapshot gigabytes quota * Use devstack plugin in CI hooks * HP 3PAR driver fix for delete snapshot * Add Nova-network support to service\_instance module * Updated from global requirements * Sync tempest plugin * Manila cDOT storage service catalog * Add devstack plugin * Generic Driver image supported protocols * Updated from global requirements * glusterfs: add NFS-Ganesha based service backend * ganesha utils: allow remote execution as root * Remove left-over modules from Cinder * Add share\_type\_default() method to API * Add support of default share type * Support Manila pools in NetApp Clustered Data ONTAP driver * Move definition of couple of config opts to proper module * Add support of nova network for share-networks API and DB * Make listing of networks compatible for neutron and nova in devstack * ganesha: fix execute call using invalid argument * Imported Translations from Transifex * Rename volume\_type to share\_type * Imported Translations from Transifex * Add possibility to enable/disable some share protocols * Add standalone network plugin * Add possibility to define driver mode within pre\_test\_hook for CI * Skip multisvm tempest tests for singlesvm setup * Correct the share server's db info after its deletion * Add support for HDFS native protocol driver * Fix cinderclient compatibility of list filtering by name * Fix spelling mistake * Fixed spelling mistake in tests * Manila NetApp cDOT driver refactoring * glusterfs: Add doc * Imported Translations from Transifex * fix case sensitivity * Fix generation of config sample * Use oslo\_log lib * unify some messages * HP 3PAR Driver for Manila * Do not instantiate network plugin when not used by driver 2015.1.0b2 ---------- * Pool-aware Scheduler Support * Implement additional test for db migrations * Updated from global requirements * Add share driver for HDS NAS Scale-out Platform * Replace legacy StubOutForTesting class * Add unit test for volume types * Add CI job support for second mode of Generic driver * Implement additional driver mode for Generic driver * ganesha: fix resetting of exports * Remove workaround for Nova VM boot bug * Add tracing facility to NetApp cDOT driver * Remove startswith for share\_proto check * Remove copy-pasted code for fake-share * driver: Fix ganesha config option registry * Workaround Nova VM boot bug * Add access levels for shares * Imported Translations from Transifex * Add factory for NetApp drivers * Updated from global requirements * Search snapshot by ID instead of name in Huawei driver * Fix documentation for some Ganesha config variables * Add Neutron single network plugin * Add unit test for quota remains functionality * Switch to using oslo\_\* instead of oslo.\* * utils: Allow discovery of private key in ~/.ssh * Updated from global requirements * Do not use router for service instance with direct connect * Port cinder EMS and ASUP support to manila * Adapt readme to usual structure * glusterfs: add infrastructure to accommodate NAS helpers * Fix tempest pep8 failures * Release resources in tempest test properly * Replace string driver modes with boolean value * Adding required rootwrap filters for GPFS driver * Add doc for Huawei driver * Fix pep8 error E265 in wsgi * fix typo in config.py * fix typo in nova.py helpline * fix typo in rpc.rst * Fix typo "authogenerate" in manila-manage * Updated from global requirements * Fix searching mechanism of share-networks within tempest * Fix small typo in 70-manila.sh * Change default migration in "manila-manage db downgrade" command * Add manila.conf.sample to .gitignore * Fix deletion of share-server within Generic driver * Fix devstack compatibility * Reuse network resources in share-server creation test * Updated from global requirements * Add share driver for Huawei V3 Storage * Make Tempest tests use networks only from same project * Refactor tempest test 'test\_create\_share\_with\_size\_bigger\_than\_quota' * Sync tempest plugin with latest Tempest * Update message for exception ShareNetworkNotFound * Update documentation for tempest integration * Add error suppressing to isolated creds cleanup in Tempest plugin * Updated from global requirements * Fix handling of share-networks with single\_svm drivers * Set pbr 'warnerrors' option for doc build * Fix nit in tempest naming * Fix documentation build * Imported Translations from Transifex * Fix TypeError in tempest retry functionality * Fix using anyjson in fake\_notifier * Fix typo in db migration test function name * Use Cinder v2 API within Generic driver * Add driver mode attr definition for all drivers * Fix concurrency problem in getting share network in Tempest * Make it possible to update tempest conf in all CI Tempest jobs * Use oslotest.base.BaseTestCase as test base class * Add possibility to create lots of shares in parallel for tempest * Add service id to information provided by API * Raise error immediately for undeletable share in tempest * py3: use function next() instead of next() method on iterator objects * Allow deleting share with invalid share server in generic driver * Rename share driver stats update method * Remove unsed python modules from requirements * Remove unused conf option 'fake\_tests' * Make tempest cleanup errors be suppressed in all CI jobs * Add retries for share creation within Tempest plugin * Remove unused sslutils module * Improve share driver mode setting * py3: use six.moves.range instead of xrange * py3: use six.moves.urllib.parse instead of urlparse * Use lockutils from "oslo concurrency" lib * Remove non-active host from host\_state\_map * Strip exec\_dirs prefix from rootwrap filters * Add possibility to suppress errors in Tempest plugin cleanup * Make Tempest repo stable for Manila * Use uuidutils from oslo.utils * Cleanup manila/utils.py * Remove configs sql\_connection and sql\_connection\_debug * Remove unused configs pybasedir and bindir * Remove unused connection\_type config * Fix tempest test with share server listing with no filters * Improve tempest share server filtering * Increase quotas and number of threads for tempest * Use oslo.context lib * Imported Translations from Transifex * Add missing imports for sample config generation * Fix tempest compatibility for network client * Fix driver mode opt definition * Adds Oracle ZFSSA driver for Manila 2015.1.0b1 ---------- * ganesha: NFS-Ganesha instrumentation * Add driver mode interface * Updated from global requirements * Updated from global requirements * Move networking from share manager to driver interface * Workflow documentation is now in infra-manual * Fix error message in share delete method * glusterfs: create share of specific size * Fix metadata validation in share api * Fix devstack plugin custom config opt setting * Enhance devstack plugin * Update EMC Manila driver framework using stevedore * Alternative way to import emc.plugins.registry * Fix wrong mock assertions in unit tests * Release network resources properly * Updated from global requirements * Imported Translations from Transifex * Add support for volume types with Generic driver * Fix H302 rule after release of oslo.concurrency 0.3.0 * Fix for debugging m-shr in PyCharm * Updated from global requirements * Fix tempest compatibility for cli tests * Fix context.elevated * Updated from global requirements * Updated from global requirements * Remove obsolete methods from tempest service client * Switch to oslo.concurrency for processutils * Updated from global requirements * Use oslo.utils.netutils function to set tcp\_keepalive * Fix couple of nit picks * Use keystonemiddleware and manila.conf for config * Imported Translations from Transifex * Updated from global requirements * Fix share manager to save data after driver error * Adding GPFS Manila driver * Remove object in wsgi LOG.info * Fix share network id in tempest test * Convert files to use \_LE and friends * Imported Translations from Transifex * Fix concurrency issue in security-service tempest test * Sync Tempest plugin with latest Tempest changes * Improve share-network list API filtering * Updated from global requirements * Don't translate LOG messages in testsuite * Add admin doc for multiple backends configuration * Remove gettextutils * Use proper value for osap\_share\_extension * Refactor shares client init in Tempest plugin * Delete unused versionutils module * Sync with oslo-incubator * Updated from global requirements * Use oslo.utils - remove importutils usage * Switch to oslo.config * Use oslo.serialization * Use oslo.utils * Silence tox warning * Add manila specific hacking checks * Remove extra flake8 args * Sync with global requirements * Improve share snapshots list API filtering * Use oslo.i18n * Use six instead of str for exceptions * Add info to cDOT driver doc * Fix tempest compatibility * Add new search options for security service * Fix doc build * Add Admin doc for an Introduction to Manila * Add share server id field in shares detail info * Improve share list API filtering * Fix doc build warnings so docs build clean * Remove extraneous vim editor configuration comments * Add share network id field in share server info * Fix tempest compatibility * Use 'generate\_request\_id' func from common code * Remove vim headers * Add info to generic driver doc * Open Kilo development * Add doc for EMC VNX driver 2014.2 ------ * Fix creation of share from snapshot * Specify the correct Samba share path * Fixes several typos (Manila) * Fix KeyError while creating share from snapshot * Fix references in jenkins.rst * Update translation information * Mention Samba in intro.rst * Add doc for an Introduction to Manila 2014.2.rc1 ---------- * Add support for working with multiple glusterfs volumes * Minor Manila doc change * Make copyrights in docs as comments instead of page content * Update challenges in the developer docs * Update naming from clustered mode to cDOT * Fix doc build errors in db/sqlalchemy/models.py * Improve documentation build * Add doc for netapp cluster mode driver * Add doc for generic driver * Fix using key for ssh * Fix getting ssh key if ssh path is not set * Rename stackforge to openstack in docs * Move from stackforge to openstack * Fix two functional tests within tempest\_plugin * glusterfs: edit config option specifying volume * Change exception thrown by db method * Fix some LOG.debug invocations * Fix Invalid pathname for netapp cmode driver * Make block devices mounts permanent within service instances * Stop using intersphinx * Increase share-network default quota * Don't allow security service to be updated if used * Move db related unittests to proper places * Fix update of backend details in cmode driver * Update shares and snapshot create to show details * Use oslosphinx and remove local copy of doc theme * Move driver unittest modules to proper place * Move unittests related to manila/share/\*.py modules to proper place * Make NFS exports in generic driver permanent * Fix ssh connection recreation in generic driver * Drop a forgotten fragment * warn against sorting requirements * Fix version number to Juno 2014.2.b3 --------- * Add support for glusterfs native protocol driver * Fix some LOG invocations and messages * EMC VNX Manila Plugin * Add support for cert based access type * Make m-shr more stable on start up * Fix scheduled share creation with generic driver * Add "." at end of exceptions * py3: Use six module for StringIO imports * Update share\_network obj after db update * Transform Exception args to strings when exceptions * Fix string concatenation * glusterfs: Fix docstring * Fix concurrent policy issue in unittest * Remove redundant glance config options * Improve help strings * Remove hash seed dependency for unittests * Updated usage of locks * Fix creation of cifs entry in cmode driver * Flake8: Fix and enable H405 * Forbid to attach security services with same type to share network * Flake8: Fix H501 * Flake8: Fix and enable H404 * Flake8: Fix E128 * Fix device mount/umount methods in generic driver * Change service VM connectivity * Use Alembic instead of Sqlalchemy-migrate in Manila * Flake8: Fix H302 * Remove NetApp 7-mode driver as obsolete * Flake8: Fix F841 * Remove bin/manila-rpc-zmq-receiver * Cmode, CIFS shares, fix allowed share access type * Fix obtaining of service VM ip * EMC Manila driver * Add specific docs build option to tox * Flake8: Fix some occurences of F841 * Flake8: Fix E126 and E127 * Flake8: Fix F401 * pep8: Enable H303 and F403 * Sync requirements with global requirements * Remove extra setenv from tox.ini * Enable E121,E122,E123,E124,E125,E129 flake8 tests * Refactor NetApp Cmode driver * Use opportunistic migrations * Add config option for share volume fs type * Fix failing of unittests in one thread * Fix H402 hacking rules * Fix pep8 issues in manila/tests * Clean up devstack plugin after LVM driver removal * Remove LVM driver * Fix pep8 failures in manila/{db,volume} * Handle missing config options for tests gracefully * Add oslo.utils and oslo.i18n libs to requirements * Issue one SQL statement per execute() call * Further pep8 fixes * Fix pep8 F811 and F812 * Rename 'sid' to 'user' in access rules and sec services * Decrease amount of threads for Tempest tests * Flake8 in bin/\* * Remove manila-clear-rabbit-queues * Sync scripts with oslo-incubator * Replace utils.config\_find with CONF.find\_file * Use common code within manila.policy module * Fix bad indentation in manila * Refactor cifs helper for generic driver * Fix share status waiter within tempest * Fix update of share with share-server-id * Use common config generator * Add config module from oslo-incubator * Remove dangerous arguments default * Remove unused imports * Fix F402 pep8 * Make flake8 ignore list more fine granular * Sync common modules from Oslo * Add share\_server\_id filter option to 'get\_all' share API method * Fix tempest compatibility * Fix pep8 F821 * Update requirements file matching global requ * glusterfs: Edit comments and docstrings * glusterfs: Modify interface methods * Fix setting up security-services in Cmode * Update pep8 testing * Added calculating capacity info in Cmode * Added calculating capacity info to 7mode driver * Adds undocumented policies and defaults in policy.json * Add check on eventlet bug #105 (ipv6 support) * Remove reference to 'in-use' state in share manager * Enable check for H237 * Use oslo.rootwrap library instead of local copy * py3.x: Use six.text\_type() instead of unicode() * py3: use six.string\_types instead of basestring * Use oslo.db in manila * Fix compatibility with tempest project * README merge * Refactor test framework * Add interprocess locks to net interfaces handlers * Fix obtaining of service instance ip * Setup for translation * Enabled hacking checks H305 and H307 * Fix service subnet capacity within service\_instance module * Fix metaclasses assignment * Enable hacking check H236 * Add share-server-delete API * Change get\_client\_with\_isolated\_creads() to \*\_creds() * Sync with global requirements * Fix E112 expected an indented block * Fix E713 test for membership should be 'not in' * Fix E131 continuation line unaligned for hanging indent * Address H104 File contains nothing but comments * Fix E251 unexpected spaces around keyword / parameter equals * Fix E265 block comment should start with '# ' * Fix usage of ProcessExecutionError exception * Enabled hacking check H403 * py33: use six.iteritems for item iterations (part2) * Cleanup manila.utils module (part1) * glusterfs: Implement methods to update share stats * glusterfs: Fix issues in backend instrumentation * Enabled hacking check H401 * Use ssh\_execute function from common code * Use execute() and trycmd() functions from common code * Use looping calls for running services from common code * Fix typo in error message for share\_export\_ip * py33: use six.iteritems for item iterations (part1) * Change logging level AUDIT to INFO * Teardown/setup server enhancements * Removed custom synchronized in service\_instance * Migrate to oslo.messaging instead of commom/rpc * Removed redundant methods from singletenant drivers * Replace python print operator with print function (pep H233, py33) * share.manager: Modify allow\_access method call * Delete skipped quota tests as invalid * Add CLI tests for share-server-list API * Added retrieving vserver name from backend details * Update ci scripts * service\_instance: Add lock to creation of security\_group * Enable skipped tests from test\_capacity\_weigher.py * Add using share-server backend details in Generic driver * Fixed passing share\_server to teardown\_network * Fix create\_share\_from\_snapshot method * Added tempest tests * Cleaned up exception module and added unittests * Check share net ids when creating share from snapshot * Update manila's docs * Replace usage of unittest module with manila.test * Fix tempest test's rare concurrent issue * Improved share\_servers db api * Fixed passing share\_server to ensure\_share * Rewrited mox tests to mock (part 2) * Fix lvm driver to be compatible with share manager * Rewrited mox tests to mock (part 1) * Replace json with jsonutils from common code * Removed redundant code for glance * Use testtools module instead unittest module * Cleanup resources with tempest more reliably * Added service\_instance\_locks directory to .gitignore * Added force-delete action to admin actions * Update contrib/ci bash scripts * devstack: strip obsolete part of m-shr instumentation * Sync common modules from Oslo * Several fixies to tempest plugin * Moved exports needed for tempest into post\_test\_hook * Fix some cosmetic issues in README.rst * Fixed ci bash scripts * Remove explicit dependency on amqplib * Added share server api * Removed redundant dependency of hp3parclient * Add multibackend test suite for tempest plugin * Added bash scripts for ci jobs * Added multibackendency to devstack plugin * Switch to Hacking 0.8.x * Use Python 3.x compatible except construct * assertEquals is deprecated, use assertEqual * Share server details * Added locks into service\_instance module * Removed redundant option from devstack plugin * Separated locks for cifs and server operations * Share servers implementation * Made safe get of security\_groups with nova's response * Made service\_instance consider driver's config * Set locks for shared resources in generic driver's cifs helper * change assertEquals to assertEqual * change assert\_ to assertTrue * Added handling of secgroup for service\_instance module * set default auth\_strategy to keystone * Enabled ip rules tests for cifs in tempest * Increase default quota for share networks from 3 to 5 * debug level logs should not be translated * tempest plugin update * Fixed tempest plugin compatibility * Fixed possibility to have more than 25 shares with generic driver * Retrieve share\_backend name from config on get\_share\_stats * Fixed retrieving export ip address in Cmode drv * Made template for service VM unique using generic driver * Fixed usage of config option in generic driver * Replaced manila.conf.sample with README.manila.conf * Added API to manage volume types * Fixed rise of Duplicate exception for DB * Added volume\_types to DB * Removed unused module from unittests * Raise max header size to accommodate large tokens * Added cli tests for service-list request * Allowed devstack not fail if couldn't stop smb service * Removed redundant keystone token usage * Refactored service-list filters * Fixed tempest plugin compatibility with master * Checking security service is not used while deleting * Added creation of secgroup for service vms in devstack plugin * Removed unique constraint for share networks * Added type field to security services index list * Update tempest plugin for latest changes of manila * Made max limit name for snapshots unique * Made limits usages names unique * Fixed ownership for service volumes * Fixed quotas for share-networks * Fixes bug with share network deactivation * Added extension that provides used resources in absolute limits * Fixed detail list for shares * Added quota for share-networks * Teardown share network in Netapp Cmode driver * Fixed detail list for security-services * Fix venv installation for run\_tests.sh * Updated generic\_driver and service\_instance with activation * Added Cmode driver * Fixed race condition in tempest plugin * Fixes bug with simultaneous network modification * Fixes bug with keypair creating * Update tempest plugin, make it more stable * Add exception to tempest plugin * Splits service\_instance module from generic driver * Make functions in manila uniquenamed * Fixed creation of cinder's volumes * Add share network activate and deactivate * Separate action and creation tests in tempest * Add handling of share-networks to tempest plugin * Fix sequence of called functions in devstack plugin * Update policy.json * Enforce function declaration format in bash8 * Switched devstack plugin to use generic driver * DevStack plugin: make source dirs configurable * Fixes bug with getting hostname * Fix DevStack plugin's source collection issue * Let DevStack plugin get python executable path * Removed swiftclient from dependencies * Use uuid instead of uuidutils * Update plugin for tempest * Add detail filter for share-network-list * Add function cidr\_to\_netmask to utils * Fixes bug with path to ssh keys * Fixed detail list for security-services * Removed cinder artifacts in devstack plugin * Added to devstack plugin passwords for services * Generic driver * Fix devstack plugin's usage of RECLONE option * Removes use of timeutils.set\_time\_override * Adds modules for managing network interfaces for generic driver * Extends neutron api with methods needed for generic driver * Adds nova api needed for generic driver implementation * Adds cinder api needed for generic driver implementation * Squash all migrations into one * Add network id verification on share creation * Add policy checks in share networks API * Fix policy.py * Updated from global requirements * Fix bad calls to model\_query() * Change manila DB to have working unique constraint * Change 'deleted' to Boolean in project\_user\_quotas * Fixes handling of duplicate share access rule creation * Fixes empty network\_info for share * Use actual rootwrap option in manila.conf instead deprecated one * Fix xml response for create/update security service * Add 'password' field to the security service * Adds network creation to ShareManager * Checking if access rule exists in share api * Add share's networks API * Add share's networks DB model, API and neutron support * Fix manila's devstack plugin for using Fedora/CentOS/RHEL distro * Add manila's tempest-plugin * Security service API * Add security service DB model and API * Remove redundant options in devstack plugin * Fix bug with full access to reset-state * glusterfs: Add GlusterFS driver * Fix manila's devstack plugin * Adds an ability to reset snapshot state * Adds validation of access rules * Adds admin actions extension to provide reset-state command * Refactoring driver interfaces * Move NetAppApiClient to separate module * Moved netapp.py from drivers to drivers/netapp * Insert validation of losetup duplicates * Remove redundant options for manila * Place devstack files to proper dirs * Fixes inappropriate size of metadata value * Adds 'metadata' key to list of options for xml responses * Adds an ability to manage share metadata * Added Neutron API module * Add consume\_from\_share method to HostState class * Add devstack integration * Update requirements.txt for keystoneclient * Support building wheels (PEP-427) * Update openstack/common/lockutils * Remove unused manila.compute.aggregate\_states * Remove obsolete redhat-eventlet.patch * Added per user-tenant quota support * Change wording of short description * Removing deprecated using of flags module from project * Fixed share size validation while creating from snapshot * Fixed xml response for share snapshot * Added share size checking if creating from snapshot * Fixed values passed to share\_rpcapi.create\_share * Remove d2to1 dependency * Update functionality implementation for manila api * Fixed policy check for manila api * Added XML serialization for access actions * Check policy implementation for shares api * Update README with relevant Manila information * Fix xml response content for share list/show * Add .gitreview file * Unittests failure fix * Fixed snapshot\_id None for share * Quota releasing on snapshot deleting bug fixed * Fixed absolute limits * fixed pep8 * Stubed driver do\_setup in start\_service * Quota tests fixed * removed egg-info * modified conf sample * modified docs * docs * snapshot view, size added * quotas for snapshot * fixed api error * snapshot size * fixed TYPO * Access create empty boy fix * User cannot delete snapshot fix * Can not delete share with error status fixed * response status for share with snapshot delete request - fixed * fixed null value validation for snapshot id * fixed share temaplate name * fixed share snapshots * pep8 fix * License flake8 error fixed * Fixed flake8 errors * Api share-snapshots to snapshots * Removed unused imports * Fixed api tests * Removed v2 api. Moved shares and snapshots from contrib to v1 * quotas exception fix * Quotas fix * Deleted api v2 * Quotas fixed. quotas unittests fixed * Removed ubused unittests * fixed fake flags * Removed volume specific tests * merge * Mass replace osapi\_volume to osapi\_share Removed locale * Update connfig.sample scripts * Update connfig.sample scripts * Removed unused opts from flags.py * removed some volume occurances * removed block specific exceptions * osapi\_volume to osapi\_share * removed volumes from bin scripts * Added help to smb\_config\_path conf * modified fake flags * deleted brick * fixed manila manage * api-paste.ini: osapi\_volume to osapi-share * Replaced cinder with manila * Renamed service api config opts. Set default port to 8786 * removed volumes from scheduler * deleteted .idea, added .gitignore * volume api removed * fixed keystone context * api fix * Removed backups * DB cleaned * Removed SM models and migrations * Modified models * Modified migrations * Removed block-specific from DB api * Deleted manila.volume * Renamed cinder to manila. Fixed setup.py, fixed bin scripts * Initialize from cinder * Initial commit ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8092287 manila-23.0.0.0rc1/HACKING.rst0000664000175000017500000000754515251045254014237 0ustar00zuulzuulManila Style Commandments ========================= - Step 1: Read the OpenStack Style Commandments https://docs.openstack.org/hacking/latest/ - Step 2: Read on Manila Specific Commandments ---------------------------- - [M310] Check for improper use of logging format arguments. - [M313] Use assertTrue(...) rather than assertEqual(True, ...). - [M323] Ensure that the _() function is explicitly imported to ensure proper translations. - [M326] Translated messages cannot be concatenated. String should be included in translated message. - [M336] Must use a dict comprehension instead of a dict constructor with a sequence of key-value pairs. - [M338] Ensure to not use LOG.warn(). - [M354] Use oslo_utils.uuidutils to generate UUID instead of uuid4(). - [M359] Validate that log messages are not translated. LOG Translations ---------------- Beginning with the Pike series, OpenStack no longer supports log translation. It is not useful to add translation instructions to new code, the instructions can be removed from old code, and the hacking checks that enforced use of special translation markers for log messages have been removed. Other user-facing strings, e.g. in exception messages, should be translated using ``_()``. A common pattern is to define a single message object and use it more than once, for the log call and the exception. In that case, ``_()`` must be used because the message is going to appear in an exception that may be presented to the user. For more details about translations, see https://docs.openstack.org/oslo.i18n/latest/user/guidelines.html Creating Unit Tests ------------------- For every new feature, unit tests should be created that both test and (implicitly) document the usage of said feature. If submitting a patch for a bug that had no unit test, a new passing unit test should be added. If a submitted bug fix does have a unit test, be sure to add a new one that fails without the patch and passes with the patch. For more information on creating unit tests and utilizing the testing infrastructure in OpenStack Manila, please read manila/testing/README.rst. Running Tests ------------- The testing system is based on a combination of tox and testr. If you just want to run the whole suite, run `tox` and all will be fine. However, if you'd like to dig in a bit more, you might want to learn some things about testr itself. A basic walkthrough for OpenStack can be found at http://wiki.openstack.org/testr OpenStack Trademark ------------------- OpenStack is a registered trademark of OpenStack, LLC, and uses the following capitalization: OpenStack Commit Messages --------------- Using a common format for commit messages will help keep our git history readable. Follow these guidelines: First, provide a brief summary (it is recommended to keep the commit title under 50 chars). The first line of the commit message should provide an accurate description of the change, not just a reference to a bug or blueprint. It must be followed by a single blank line. If the change relates to a specific driver (libvirt, xenapi, qpid, etc...), begin the first line of the commit message with the driver name, lowercased, followed by a colon. Following your brief summary, provide a more detailed description of the patch, manually wrapping the text at 72 characters. This description should provide enough detail that one does not have to refer to external resources to determine its high-level functionality. Once you use 'git review', two lines will be appended to the commit message: a blank line followed by a 'Change-Id'. This is important to correlate this commit with a specific review in Gerrit, and it should not be modified. For further information on constructing high quality commit messages, and how to split up commits into a series of changes, consult the project wiki: http://wiki.openstack.org/GitCommitMessages ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8102288 manila-23.0.0.0rc1/LICENSE0000664000175000017500000002363715251045254013446 0ustar00zuulzuul Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151966.4131892 manila-23.0.0.0rc1/PKG-INFO0000644000175000017500000000750515251045336013531 0ustar00zuulzuulMetadata-Version: 2.4 Name: manila Version: 23.0.0.0rc1 Summary: OpenStack Shared File System Storage Author-email: OpenStack License: Apache-2.0 Project-URL: Homepage, https://docs.openstack.org/manila Project-URL: Repository, https://opendev.org/openstack/manila Project-URL: Bugs, https://bugs.launchpad.net/manila Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: OpenStack Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators Classifier: License :: OSI Approved :: Apache Software License Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Requires-Python: >=3.10 Description-Content-Type: text/x-rst License-File: LICENSE Requires-Dist: pbr>=5.5.0 Requires-Dist: alembic>=1.4.2 Requires-Dist: castellan>=3.7.0 Requires-Dist: defusedxml>=0.7.1 Requires-Dist: eventlet>=0.27.0 Requires-Dist: greenlet>=0.4.16 Requires-Dist: lxml>=4.5.2 Requires-Dist: netaddr>=0.8.0 Requires-Dist: oslo.config>=9.5.0 Requires-Dist: oslo.context>=4.0.0 Requires-Dist: oslo.db>=17.2.1 Requires-Dist: oslo.i18n>=5.0.1 Requires-Dist: oslo.log>=4.4.0 Requires-Dist: oslo.messaging>=14.1.0 Requires-Dist: oslo.middleware>=4.1.1 Requires-Dist: oslo.policy>=6.0.0 Requires-Dist: oslo.privsep>=2.4.0 Requires-Dist: oslo.reports>=2.2.0 Requires-Dist: oslo.rootwrap>=6.2.0 Requires-Dist: oslo.serialization>=4.0.1 Requires-Dist: oslo.service[threading]>=4.4.1 Requires-Dist: oslo.upgradecheck>=1.3.0 Requires-Dist: oslo.utils>=7.0.0 Requires-Dist: oslo.concurrency>=4.3.0 Requires-Dist: osprofiler>=3.4.0 Requires-Dist: paramiko>=2.7.2 Requires-Dist: Paste>=3.4.3 Requires-Dist: PasteDeploy>=2.1.0 Requires-Dist: pyparsing>=2.4.7 Requires-Dist: python-neutronclient>=6.7.0 Requires-Dist: keystoneauth1>=4.2.1 Requires-Dist: keystonemiddleware>=9.1.0 Requires-Dist: requests>=2.23.0 Requires-Dist: tenacity>=6.3.1 Requires-Dist: Routes>=2.4.1 Requires-Dist: SQLAlchemy>=1.4.0 Requires-Dist: SQLAlchemy-Utils>=0.38.3 Requires-Dist: stevedore>=3.2.2 Requires-Dist: tooz>=2.7.1 Requires-Dist: python-cinderclient>=4.0.1 Requires-Dist: python-novaclient>=17.2.1 Requires-Dist: WebOb>=1.8.6 Requires-Dist: cachetools>=4.2.1 Requires-Dist: packaging>=20.9 Requires-Dist: jsonschema>=4.17 Requires-Dist: openstacksdk>=4.1.0 Dynamic: license-file Dynamic: requires-dist ====== Manila ====== .. image:: https://governance.openstack.org/tc/badges/manila.svg .. Change things from this point on You have come across an OpenStack shared file system service. It has identified itself as "Manila". It was abstracted from the Cinder project. * Wiki: https://wiki.openstack.org/wiki/Manila * Developer docs: https://docs.openstack.org/manila/latest/ Getting Started --------------- If you'd like to run from the master branch, you can clone the git repo: git clone https://opendev.org/openstack/manila For developer information please see `HACKING.rst `_ You can raise bugs here https://bugs.launchpad.net/manila Python client ------------- https://opendev.org/openstack/python-manilaclient * Documentation for the project can be found at: https://docs.openstack.org/manila/latest/ * Release notes for the project can be found at: https://docs.openstack.org/releasenotes/manila/ * Source for the project: https://opendev.org/openstack/manila * Bugs: https://bugs.launchpad.net/manila * Blueprints: https://blueprints.launchpad.net/manila * Design specifications are tracked at: https://specs.openstack.org/openstack/manila-specs/ ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8102288 manila-23.0.0.0rc1/README.rst0000664000175000017500000000234115251045254014115 0ustar00zuulzuul====== Manila ====== .. image:: https://governance.openstack.org/tc/badges/manila.svg .. Change things from this point on You have come across an OpenStack shared file system service. It has identified itself as "Manila". It was abstracted from the Cinder project. * Wiki: https://wiki.openstack.org/wiki/Manila * Developer docs: https://docs.openstack.org/manila/latest/ Getting Started --------------- If you'd like to run from the master branch, you can clone the git repo: git clone https://opendev.org/openstack/manila For developer information please see `HACKING.rst `_ You can raise bugs here https://bugs.launchpad.net/manila Python client ------------- https://opendev.org/openstack/python-manilaclient * Documentation for the project can be found at: https://docs.openstack.org/manila/latest/ * Release notes for the project can be found at: https://docs.openstack.org/releasenotes/manila/ * Source for the project: https://opendev.org/openstack/manila * Bugs: https://bugs.launchpad.net/manila * Blueprints: https://blueprints.launchpad.net/manila * Design specifications are tracked at: https://specs.openstack.org/openstack/manila-specs/ ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151965.8941839 manila-23.0.0.0rc1/api-ref/0000775000175000017500000000000015251045336013752 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151965.9531844 manila-23.0.0.0rc1/api-ref/source/0000775000175000017500000000000015251045336015252 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8102288 manila-23.0.0.0rc1/api-ref/source/availability-zones.inc0000664000175000017500000000176415251045254021562 0ustar00zuulzuul.. -*- rst -*- Availability zones ================== Describes availability zones that the Shared File Systems service is configured with. .. important:: For API versions 2.6 and prior, replace ``availability-zones`` in the URLs with ``os-availability-zone``. List availability zones ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/availability-zones Lists all availability zones. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - availability_zones: availability_zones - id: availability_zone_id - name: availability_zone_name - created_at: created_at - updated_at: updated_at Response example ---------------- .. literalinclude:: samples/availability-zones-list-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151965.9531844 manila-23.0.0.0rc1/api-ref/source/common/0000775000175000017500000000000015251045336016542 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8102288 manila-23.0.0.0rc1/api-ref/source/common/share-network-span-multiple-subnets-note.rst0000664000175000017500000000053015251045254027276 0ustar00zuulzuul.. note:: Since API version 2.51, a share network is allowed to span multiple subnets and the fields ``neutron_net_id``, ``neutron_subnet_id``, ``network_type``, ``cidr``, ``ip_version``, ``gateway``, ``segmentation_id`` and ``mtu`` were moved from the share network to the subnet. The response will look like the below example. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8112292 manila-23.0.0.0rc1/api-ref/source/conf.py0000664000175000017500000002327115251045254016555 0ustar00zuulzuul# Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. # # manila documentation build configuration file, created by # sphinx-quickstart on Sat May 7 13:35:27 2016. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import os import sys html_theme = 'openstackdocs' html_theme_options = { "sidebar_mode": "toc", } extensions = [ 'os_api_ref', 'openstackdocstheme', ] # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('../../')) sys.path.insert(0, os.path.abspath('../')) sys.path.insert(0, os.path.abspath('./')) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. # Add any paths that contain templates here, relative to this directory. # templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The encoding of source files. # source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. copyright = u'2010-present, OpenStack Foundation' # openstackdocstheme options openstackdocs_repo_name = 'openstack/manila' openstackdocs_bug_project = 'manila' openstackdocs_bug_tag = 'api-ref' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. # language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. # today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = [] # The reST default role (used for this markup: `text`) to use for all # documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). add_module_names = False # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'native' # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. # keep_warnings = False # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'alabaster' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] # The name for this set of Sphinx documents. # " v documentation" by default. # html_title = u'Shared File Systems API Reference v2' # A shorter title for the navigation bar. Default is the same as html_title. # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # html_logo = None # The name of an image file (relative to this directory) to use as a favicon of # the docs. This file should be a Windows icon file (.ico) being 16x16 or # 32x32 pixels large. # html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. # html_extra_path = [] # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_domain_indices = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, links to the reST sources are added to the pages. # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Language to be used for generating the HTML full-text search index. # Sphinx supports the following languages: # 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' # 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' # html_search_language = 'en' # A dictionary with options for the search language support, empty by default. # 'ja' uses this config value. # 'zh' user can custom change `jieba` dictionary path. # html_search_options = {'type': 'default'} # The name of a javascript file (relative to the configuration directory) that # implements a search results scorer. If empty, the default will be used. # html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. htmlhelp_basename = 'maniladoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # 'preamble': '', # Latex figure (float) alignment # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'manila.tex', u'OpenStack Shared File Systems API Documentation', u'OpenStack Foundation', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # If true, show page references after internal links. # latex_show_pagerefs = False # If true, show URL addresses after external links. # latex_show_urls = False # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'manila', u'OpenStack Shared File Systems API Documentation', u'Openstack Foundation', 1) ] # If true, show URL addresses after external links. # man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'Manila', u'OpenStack Shared File Systems API Documentation', u'OpenStack Foundation', 'Manila', 'OpenStack Shared File Systems', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. # texinfo_appendices = [] # If false, no module index is generated. # texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. # texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. # texinfo_no_detailmenu = False ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8112292 manila-23.0.0.0rc1/api-ref/source/experimental.inc0000664000175000017500000000073415251045254020445 0ustar00zuulzuul.. -*- rst -*- ================= Experimental APIs ================= .. important:: The following APIs are part of the `experimental feature `_ introduced in version 2.4. The APIs may change or be removed in future versions of the Shared File Systems API. All experimental APIs require the ``X-OpenStack-Manila-API-Experimental: True`` header to be sent in the requests. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8112292 manila-23.0.0.0rc1/api-ref/source/extensions.inc0000664000175000017500000000143115251045254020142 0ustar00zuulzuul.. -*- rst -*- API extensions ============== Lists available Shared File Systems API extensions. List extensions ~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/extensions Lists all extensions. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - name: extension_name - links: extension_links - description: extension_description - alias: extension_alias - updated: updated_at_extensions Response example ---------------- .. literalinclude:: samples/extensions-list-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8122294 manila-23.0.0.0rc1/api-ref/source/index.rst0000664000175000017500000000434615251045254017121 0ustar00zuulzuul:tocdepth: 3 ======================= Shared File Systems API ======================= This is a reference for version 2 of the OpenStack Shared File Systems API which is provided by the Manila project. Manila provides a RESTful HTTP service through which it offers on-demand, scalable, self-service access to shared file system storage resources. .. important:: Prior to the Wallaby release, Shared File System service required the caller to specify their "project_id" in the API URLs. This requirement has been dropped. The API service now behaves the same way whether or not "project_id" is included in the URLs. If your cloud does not yet support version 2.60, all the resource URLs below will require a project ID. For example: GET /v2/{project_id}/shares .. rest_expand_all:: .. include:: versions.inc .. include:: extensions.inc .. include:: limits.inc .. include:: shares.inc .. include:: share-export-locations.inc .. include:: share-export-locations-metadata.inc .. include:: share-metadata.inc .. include:: share-actions.inc .. include:: snapshots.inc .. include:: snapshot-metadata.inc .. include:: snapshot-instances.inc .. include:: share-replicas.inc .. include:: share-replica-export-locations.inc .. include:: share-networks.inc .. include:: share-network-subnets.inc .. include:: share-network-subnets-metadata.inc .. include:: security-services.inc .. include:: share-servers.inc .. include:: share-instances.inc .. include:: share-instance-export-locations.inc .. include:: share-types.inc .. include:: scheduler-stats.inc .. include:: services.inc .. include:: availability-zones.inc .. include:: os-share-manage.inc .. include:: quota-sets.inc .. include:: quota-classes.inc .. include:: user-messages.inc .. include:: share-access-rules.inc .. include:: share-access-rule-metadata.inc .. include:: share-groups.inc .. include:: share-group-types.inc .. include:: share-group-snapshots.inc .. include:: share-transfers.inc .. include:: resource-locks.inc .. include:: share-migration.inc ====================================== Shared File Systems API (EXPERIMENTAL) ====================================== .. rest_expand_all:: .. include:: experimental.inc .. include:: share-server-migration.inc .. include:: share-backups.inc ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8122294 manila-23.0.0.0rc1/api-ref/source/limits.inc0000664000175000017500000000475615251045254017261 0ustar00zuulzuul.. -*- rst -*- Limits ====== Limits are the resource limitations that are allowed for each tenant (project). An administrator can configure limits in the ``manila.conf`` file. Users can query their rate and absolute limits. The absolute limits contain information about: - Total maximum share memory, in GiBs. - Number of share-networks. - Number of share-snapshots. - Number of shares. - Shares and total used memory, in GiBs. - Snapshots and total used memory, in GiBs. - Number of share replicas (since API version 2.53). - Share replicas and total used memory, in GiBs (since API version 2.53). Rate limits control the frequency at which users can issue specific API requests. Administrators use rate limiting to configure limits on the type and number of API calls that can be made in a specific time interval. For example, a rate limit can control the number of GET requests that can be processed during a one-minute period. List share limits ~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/limits Lists share limits. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - maxTotalShareGigabytes: maxTotalShareGigabytes - maxTotalSnapshotGigabytes: maxTotalSnapshotGigabytes - maxTotalShares: maxTotalShares - maxTotalShareSnapshots: maxTotalShareSnapshots - maxTotalShareNetworks: maxTotalShareNetworks - maxTotalShareReplicas: maxTotalShareReplicas - maxTotalReplicaGigabytes: maxTotalReplicaGigabytes - maxTotalShareBackups: maxTotalShareBackups - maxTotalBackupGigabytes: maxTotalBackupGigabytes - totalSharesUsed: totalSharesUsed - totalShareSnapshotsUsed: totalShareSnapshotsUsed - totalShareNetworksUsed: totalShareNetworksUsed - totalShareGigabytesUsed: totalShareGigabytesUsed - totalSnapshotGigabytesUsed: totalSnapshotGigabytesUsed - totalShareReplicasUsed: totalShareReplicasUsed - totalReplicaGigabytesUsed: totalReplicaGigabytesUsed - totalShareBackupsUsed: totalShareBackupsUsed - totalBackupGigabytesUsed: totalBackupGigabytesUsed - uri: uri - regex: regex - value: value - verb: verb - remaining: remaining - unit: unit - next-available: next-available Response example ---------------- .. literalinclude:: samples/limits-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8122294 manila-23.0.0.0rc1/api-ref/source/os-share-manage.inc0000664000175000017500000000710615251045254020717 0ustar00zuulzuul.. -*- rst -*- Manage and unmanage shares (DEPRECATED) ======================================= Allows bringing shared file systems under service management. Manage share (DEPRECATED) ~~~~~~~~~~~~~~~~~~~~~~~~~ .. warning:: This API is deprecated starting with microversion 2.7 and requests to this API will fail with a 404 starting from microversion 2.7. Use `Share Manage API <#manage-share-since-api-v2-7>`_ instead of this API from version 2.7. .. rest_method:: POST /v2/os-share-manage Use this API to bring a share under the management of the Shared File Systems service. In the service, the share will be represented as a resource in the database. It can have a user defined name and description. Administrator only. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share: share - protocol: protocol - name: name_request - display_name: display_name_request - share_type: share_type_request - driver_options: driver_options - export_path: export_path - service_host: service_host - description: description_request - display_description: display_description_request Request example --------------- .. literalinclude:: samples/share-manage-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - share: share - links: links - availability_zone: availability_zone - share_network_id: share_network_id - export_locations: export_locations - share_server_id: share_server_id - snapshot_id: snapshot_id_shares_response - id: share_id_response - size: size_response - share_type: share_type_shares_response - share_type_name: share_type_name - export_location: export_location - project_id: project_id - metadata: metadata - status: share_status_response - description: description - host: host_resource_response - is_public: is_public_shares_response - snapshot_support: snapshot_support - name: name - created_at: created_at - share_proto: share_proto Response example ---------------- .. literalinclude:: samples/share-manage-response.json :language: javascript Unmanage share (DEPRECATED) ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. warning:: This API is deprecated starting with microversion 2.7 and requests to this API will fail with a 404 starting from microversion 2.7. Use `Share Unmanage API <#unmanage-share-since-api-v2-7>`_ instead of this API from version 2.7. .. rest_method:: POST /v2/os-share-unmanage/{share_id}/unmanage Use this API to remove a share from the management of the Shared File Systems service without deleting the share. Administrator only. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Preconditions: - This API does not support unmanaging shares that are created on top of share servers (i.e. created with share networks). - You should remove any snapshots and share replicas before attempting to unmanage a share. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id Response parameters ------------------- There is no body content for the response. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8132298 manila-23.0.0.0rc1/api-ref/source/parameters.yaml0000664000175000017500000037030715251045254020312 0ustar00zuulzuul# variables in header #{} service_token_locks: description: | An auth-token specified via the header ``X-Service-Token``. With the OpenStack Identity (Keystone) context, this token can be obtained by a user that has the ``service`` role. The presence of this header is used by resource lock API methods to set or match the lock user's context. A resource lock created by a service user cannot be manipulated by non-service users. in: header required: false type: string # variables in path access_id_path: description: | The UUID of the access rule to which access is granted. in: path required: true type: string api_version: in: path required: true type: string description: > The API version as returned in the links from the ``GET /`` call. backup_id_request_path: description: | The UUID of the share backup. in: path required: true type: string export_location_id_path: description: | The UUID of the export location. in: path required: true type: string extra_spec_key_path: description: | The extra specification key in: path required: true type: string group_snapshot_id_path: description: | The group snapshot ID. in: path required: true type: string message_id: description: | The UUID of the message. in: path required: false type: string metadata_key_path: description: | The key of a metadata item. For example, if the metadata on an existing share or access rule is as follows: ``"project": "my_test", "aim": "testing"``, the keys are "project" and "aim". in: path required: false type: string project_id_path: description: | The project ID of the user or service making the API request. This parameter is optional if the service supports API version 2.60. If the service doesn't yet support API version 2.60, ensure that the service catalog endpoint obtained for the service has the user's project_id after the "/v2/" component, for example, the API to retrieve shares is *GET /v2/{project_id}/shares*. If the service doesn't yet support API version 2.60, and the project_id is omitted from the API URL, a Malformed Request error is returned (HTTP 400). in: path required: false type: string project_id_quota_request_path: description: | The ID of the project whose quotas must be acted upon by the API. This is optional, and if it is not specified, the project ID is derived from the caller's API token. System/Domain scoped users interacting with this API *must* specify the project ID for the project whose quotas they need to query or manipulate. Note that this ID can be different from the project ID that precedes the resource name "quota-sets". For example, in a multi-tenant cloud, the first ID in the URL is typically the project ID of a privileged user (such as a cloud administrator) that can create, query or delete quotas of other projects in the cloud. If a server supports API version 2.60, URLs no longer need the privileged user's project ID prior to the resource name. in: path required: false type: string qos_type_id_path: description: | The UUID of the qos type. in: path required: true type: string qos_type_spec_key_path: description: | The specification key for qos type. in: path required: true type: string quota_class_name: description: The name of the quota class for which to set quotas. in: path required: true type: string resource_lock_id_path: description: | The UUID of the resource lock. in: path required: true type: string security_service_id_path: description: | The UUID of the security service. in: path required: true type: string share_group_id_path: description: | The UUID of the share group. in: path required: true type: string share_group_type_id_path: description: | The UUID of the share group type. in: path required: true type: string share_id: description: | The UUID of the share. in: path required: true type: string share_instance_id: description: | The UUID of the share instance. in: path required: true type: string share_network_id_path: description: | The UUID of the share network. in: path required: true type: string share_network_subnet_id_path: description: | The UUID of the share network subnet. in: path required: true type: string share_replica_id_path: description: | The UUID of the share replica. in: path required: true type: string share_server_id_path: description: | The UUID of the share server. in: path required: true type: string share_type_id: description: | The UUID of the share type. in: path required: true type: string snapshot_id_path: description: | The UUID of the snapshot. in: path required: true type: string snapshot_instance_id_path: description: | The UUID of the share snapshot instance. in: path required: true type: string transfer_id: description: | The unique identifier for a transfer. in: path required: true type: string # variables in query action_id: in: query required: false type: string description: > The ID of the action during which the message was created. all_tenants_query: description: | (Admin only). Defines whether to list the requested resources for all projects. Set to ``1`` to list resources for all projects. Set to ``0`` to list resources only for the current project. Examples of resources include shares, snapshots, share networks, security services and share groups. in: query required: false type: boolean availability_zone_query: description: | The name of the availability zone that can be used to filter shares. in: query required: false type: string min_version: 2.97 backend_capabilities_query: description: | The capabilities for the storage back end. in: query required: false type: string backend_host_query: description: | The host name for the back end. in: query required: false type: string backend_pool_query: description: | The pool name for the back end. in: query required: false type: string backend_query: description: | The name of the back end. in: query required: false type: string backup_host_query: description: | The host name of the backup to query with. Querying by hostname is a privileged operation. If restricted by API policy, this query parameter may be silently ignored by the server. in: query required: false type: string backup_share_id_query: description: | The UUID of the share that the backup pertains to. in: query required: false type: string backup_status_query: description: | Filters by a backup status. A valid filter value can be one of 'creating', 'error', 'available', 'restoring'. in: query required: false type: string backup_topic_query: description: | Filters by a backup topic. A valid filter value can be one of 'manila-data', 'manila-share'. in: query required: false type: string cidr_query: description: | The CIDR to filter share networks. in: query required: false type: string created_before: description: | The date and time stamp when the query operation, only return user messages before it. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm The ``±hh:mm`` value, if included, returns the time zone as an offset from UTC. For example, ``2021-11-10T09:49:58+08:00``. in: query required: false type: string min_version: 2.52 created_before_query: description: | Search for the list of resources that were created prior to the specified date. The date is in 'yyyy-mm-dd' format. in: query required: false type: string created_since: description: | The date and time stamp when the query operation, only return user messages since it. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm The ``±hh:mm`` value, if included, returns the time zone as an offset from UTC. For example, ``2021-11-10T09:49:58+08:00``. in: query required: false type: string min_version: 2.52 created_since_query: description: | Search for the list of resources that were created after the specified date. The date is in 'yyyy-mm-dd' format. in: query required: false type: string description_inexact_query: description: | The description pattern that can be used to filter shares, share snapshots, share networks or share groups. in: query required: false type: string min_version: 2.36 description_inexact_query_versionless: description: | The description pattern that can be used to filter share backups. in: query required: false type: string description_query: description: | The user defined description text that can be used to filter resources. in: query required: false type: string detail_id: in: query required: false type: string description: > The ID of the message detail. encryption_key_ref_query: description: | The encryption key ref that can be used to filter shares or share instances. in: query required: false type: string min_version: 2.90 export_location_id_query: description: | The export location UUID that can be used to filter shares or share instances. in: query required: false type: string min_version: 2.35 export_location_path_query: description: | The export location path that can be used to filter shares or share instances. in: query required: false type: string min_version: 2.35 extra_specs_query: description: | The extra specifications as a set of one or more key-value pairs. In each pair, the key is the name of the extra specification and the value is the share type that was used to filter search share type list. The query must be a “percent-encoded� string, for example, the following query parameters: {'extra-specs': {'snapshot_support': 'true', 'availability_zones': 'az1'}} is encoded as 'extra_specs=%7B%27snapshot_support%27%3A+%27true%27%2C+%27availability_zones%27%3A+%27az1%27%7D' in: query required: false type: string min_version: 2.43 group_snapshot_status_query: description: | Filters by a share group snapshot status. A valid value is ``creating``, ``error``, ``available``, ``deleting``, ``error_deleting``. in: query required: false type: string group_specs_query: description: | The group specifications as a set of one or more key-value pairs. In each pair, the key is the name of the group specification and the value is the share group type that was used to filter search share group type list. The query must be a “percent-encoded� string, for example, the following query parameters: {'group-specs': {'consistent_snapshot_support': 'true'}} is encoded as 'group_specs=%7B%27consistent_snapshot_support%27%3A+%27True%27%7D' in: query required: false type: string min_version: 2.66 host_query: description: | The host name of the resource to query with. Querying by hostname is a privileged operation. If restricted by API policy, this query parameter may be silently ignored by the server. in: query required: false type: string ip_version_query: description: | The IP version to filter share networks. in: query required: false type: string is_public_query: description: | A boolean query parameter that, when set to true, allows retrieving public resources that belong to all projects. in: query required: false type: boolean is_soft_deleted_query: description: | A boolean query parameter that, when set to True, will return all shares in recycle bin. Default is False, will return all shares not in recycle bin. in: query required: false type: boolean min_version: 2.69 limit: description: | The maximum number of resource records to return. in: query required: false type: integer limit_query: description: | The maximum number of share groups members to return. in: query required: false type: integer message_level: in: query required: false type: string description: > The message level. metadata_query: in: query required: false type: object description: | One or more metadata key and value pairs as a url encoded dictionary of strings. name_inexact_query: description: | The name pattern that can be used to filter shares, share snapshots, share networks, transfers or share groups. in: query required: false type: string min_version: 2.36 name_inexact_query_versionless: description: | The name pattern that can be used to filter share backups. in: query required: false type: string name_query: description: | The user defined name of the resource to filter resources by. in: query required: false type: string network_type_query: description: | The network type to filter out share networks. in: query required: false type: string neutron_net_id_query: description: | The neutron network id to filter out share networks. in: query required: false type: string neutron_subnet_id_query: description: | The neutron network subnet id to filter out share networks. in: query required: false type: string nova_net_id_query: description: | The ID of a Nova network to filter out share networks. in: query required: false type: string max_version: 2.26 offset: description: | The offset to define start point of resource listing. in: query required: false type: integer project_id_messages: description: | The ID of the project for which the message was created. in: query required: false type: string project_id_query: description: | The ID of the project that owns the resource. This query parameter is useful in conjunction with the ``all_tenants`` parameter. in: query required: false type: string request_id: description: | The ID of the request during which the message was created. in: query required: false type: string resource_id: description: | The UUID of the resource for which the message was created. in: query required: false type: string resource_lock_all_projects_query: description: | Set this parameter to True to get resource locks across all project namespaces. in: query required: false type: string resource_lock_id_query: description: | The ID of the resource lock to filter resource locks by. in: query required: false type: string resource_lock_lock_context_query: description: | The lock creator's context to filter locks by. in: query required: false type: string resource_lock_lock_reason_inexact_query: description: | The lock reason pattern that can be used to filter resource locks. in: query required: false type: string resource_lock_lock_reason_query: description: | The lock reason that can be used to filter resource locks. in: query required: false type: string resource_lock_project_id_query: description: | The ID of a project to filter resource locks by. in: query required: false type: string resource_lock_resource_action_query: description: | The ``action`` prevented by the filtered resource locks. in: query required: false type: string resource_lock_resource_id_query: description: | The ID of the resource that the locks pertain to to filter resource locks by. in: query required: false type: string resource_lock_resource_type_query: description: | The type of the resource that the locks pertain to to filter resource locks by. in: query required: false type: string resource_lock_user_id_query: description: | The ID of a user to filter resource locks by. in: query required: false type: string resource_type: description: | The type of the resource for which the message was created. in: query required: false type: string resource_type_query: description: | The type of the resource for which the transfer was created. in: query required: false type: string security_service_query: description: | The security service ID to filter out share networks. in: query required: false type: string segmentation_id_query: description: | The segmentation id to filter out share networks. in: query required: false type: string service_binary_query: description: | The service binary name. Default is the base name of the executable. in: query required: false type: string service_ensuring_query: description: | Filter services by whether they are currently running ensure shares or not. A valid value is ``true`` or ``false``. in: query required: false type: boolean min_version: 2.93 service_host_query: description: | The service host name. in: query required: false type: string service_state_query: description: | The current state of the service. A valid value is ``up`` or ``down``. in: query required: false type: string service_status_query: description: | The service status, which is ``enabled`` or ``disabled``. in: query required: false type: string service_zone_query: description: | The availability zone. in: query required: false type: string share_group_id_query: description: | The UUID of a share group to filter resource. in: query required: false type: string min_version: 2.31 share_group_status_query: description: | Filters by a share group status. A valid value is ``creating``, ``error``, ``available``, ``deleting``, ``error_deleting``. in: query required: false type: string share_group_type_id_query: description: | The share group type ID to filter share groups. in: query required: false type: string share_id_access_rules_query: description: | The share ID to filter share access rules with. in: query required: true type: string share_id_replicas_query: description: | The share ID to filter share replicas with. in: query required: false type: string share_network_id_query: description: | The UUID of the share network to filter resources by. in: query required: false type: string share_replica_metadata_query: description: | Filters the list of share replicas by metadata. The value must be a string representation of a key-value mapping that can be parsed by the API. For example: ``{"env": "prod"}`` or ``{"key": "value"}``. If the value cannot be parsed, the API responds with ``400 Bad Request``. in: query required: false type: string min_version: 2.95 share_server_id_query: description: | The UUID of the share server. in: query required: false type: string share_type_for_quota: description: | The name or UUID of the share type. If you specify this parameter in the URI, you show, update, or delete quotas for this share type. This parameter is mutually exclusive with the "user_id" query parameter. in: query required: false type: string min_version: 2.39 share_type_id_query: description: | The UUID of a share type to query resources by. in: query required: false type: string share_type_query: description: | The share type name or UUID. Allows filtering back end pools based on the extra-specs in the share type. in: query required: false type: string min_version: 2.23 share_types_query: description: | A list of one or more share type IDs. Allows filtering share groups. in: query required: false type: array snapshot_id_query: description: | The UUID of the share's base snapshot to filter the request based on. in: query required: false type: string snapshot_metadata_query: description: | Filters the list of snapshots by metadata. The value must be a string representation of a key-value mapping that can be parsed by the API. For example: ``{"env": "prod"}`` or ``{"key": "value"}``. If the value cannot be parsed, the API responds with ``400 Bad Request``. in: query required: false type: string min_version: 2.73 snapshot_status_query: description: | The snapshot status, which can be ``available``, ``error``, ``creating``, ``deleting``, ``manage_starting``, ``manage_error``, ``unmanage_starting``, ``unmanage_error``, ``error_deleting``, ``migrating``, ``migrating_to`` or ``restoring``. in: query required: false type: string sort_dir: description: | The direction to sort a list of resources. A valid value is ``asc``, or ``desc``. in: query required: false type: string sort_key: description: | The key to sort a list of shares. A valid value is ``id``, ``status``, ``size``, ``host``, ``share_proto``, ``export_location``, ``availability_zone``, ``user_id``, ``project_id``, ``created_at``, ``updated_at``, ``display_name``, ``name``, ``share_type_id``, ``share_type``, ``share_network_id``, ``share_network``, ``snapshot_id``, or ``snapshot``. in: query required: false type: string sort_key_backup: description: | The key to sort a list of share backups. A valid value is ``id``, ``status``, ``size``, ``host``, ``share_id``, ``availability_zone``, ``created_at``, ``updated_at``, ``display_name``, ``topic``, ``progress`` and ``restore_progress`` in: query required: false type: string sort_key_messages: description: | The key to sort a list of messages. A valid value is ``id``, ``project_id``, ``request_id``, ``resource_type``, ``action_id``, ``detail_id``, ``resource_id``, ``message_level``, ``expires_at``, ``created_at``. in: query required: false type: string sort_key_resource_locks: description: | The key to sort a list of resource locks. A valid value is ``id``, ``resource_id``, ``resource_type``, ``resource_action``, ``user_id``, ``project_id``, ``created_at``, ``updated_at``, ``lock_context``. in: query required: false type: string sort_key_transfer: description: | The key to sort a list of transfers. A valid value is ``id``, ``name``, ``resource_type``, ``resource_id``, ``source_project_id``, ``destination_project_id``, ``created_at``, ``expires_at``. in: query required: false type: string source_backup_id_query: description: | The UUID of the share's backup to filter the request based on. in: query required: false type: string source_share_group_snapshot_id_query: description: | The source share group snapshot ID to list the share group. in: query required: false type: string min_version: 2.31 status_query: description: | Filters by a share status. For valid statuses, see the `section above <#shares>`_. in: query required: false type: string user_id_query: description: | The ID of the user. If you specify this query parameter, you retrieve or update the quotas for this user in the project. If you omit this parameter, you query or update the quotas for the whole project. This parameter is mutually exclusive with the "share_type" parameter. in: query required: false type: string with_count_query: description: | Whether to show ``count`` in share list API response or not, default is ``False``. This query parameter is useful with pagination. in: query required: false type: boolean min_version: 2.42 with_count_query_without_min_version: description: | Whether to show ``count`` in API response or not, default is ``False``. This query parameter is useful with pagination. in: query required: false type: boolean with_count_snapshot_query: description: | Whether to show ``count`` in share snapshot list API response or not, default is ``False``. This query parameter is useful with pagination. in: query required: false type: boolean min_version: 2.79 # variables in body accepted: description: | Whether the transfer has been accepted. in: body required: true type: boolean access: description: | The ``access`` object. in: body required: true type: object access_id: description: | The UUID of the access rule to which access is granted. in: body required: true type: string access_key: description: | The access credential of the entity granted share access. in: body required: true type: string min_version: 2.21 access_key_share_access_rules: description: | The access credential of the entity granted share access. in: body required: true type: string access_level: description: | The access level to the share. To grant or deny access to a share, you specify one of the following share access levels: - ``rw``. Read and write (RW) access. - ``ro``. Read-only (RO) access. in: body required: true type: string access_list: description: | The object of the access rule. To list access rules, set this value to ``null``. in: body required: true type: string access_metadata: description: | One or more access rule metadata key and value pairs as a dictionary of strings. in: body required: true type: object access_metadata_grant_access: description: | One or more access rule metadata key and value pairs as a dictionary of strings. in: body required: true type: object min_version: 2.45 access_rule_id: description: | The access rule ID. in: body required: true type: string access_rules_status: description: | The share instance access rules status. A valid value is ``active``, ``error``, or ``syncing``. In versions prior to 2.28, ``syncing`` was represented with status ``out_of_sync``. in: body required: true type: string min_version: 2.10 access_share_id: description: | The UUID of the share to which you are granted or denied access. in: body required: true type: string access_to: description: | The value that defines the access. The back end grants or denies the access to it. A valid value is one of these values: - ``ip``: Authenticates a client through its IP address, that can be IPv4 or IPv6. You may specify a single client IP address or a range of IP addresses in CIDR notation. For example ``0.0.0.0/0`` for IPv4 or ``::/0`` for IPv6. - ``cert``: Authenticates an instance through a TLS certificate. Specify the TLS identity as the IDENTKEY. A valid value is any string up to 64 characters long in the common name (CN) of the certificate. The meaning of a string depends on its interpretation. - ``user``: Authenticates by a user or group name. A valid value is an alphanumeric string that can contain some special characters and is from 4 to 32 characters long. in: body required: true type: string access_type: in: body required: true type: string description: | The access rule type. A valid value for the share access rule type is one of the following values: - ``ip``: Authenticates a client through its IP address, that can be IPv4 or IPv6. You may specify a single client IP address or a range of IP addresses in CIDR notation. For example ``0.0.0.0/0`` for IPv4 or ``::/0`` for IPv6. - ``cert``: Authenticates a client through a TLS certificate. Specify the TLS identity as the IDENTKEY. A valid value is any string up to 64 characters long in the common name (CN) of the certificate. The meaning of a string depends on its interpretation. - ``user``: Authenticates by a user or group name. A valid value is an alphanumeric string that can contain some special characters and is from 4 to 32 characters long. action_id_body: in: body required: true type: string description: > The ID of the action during which the message was created. add_project_access: description: | An object representing the project resource that access should be granted to. in: body required: true type: object allow_access: description: | The object of grant access. in: body required: true type: object auth_key: description: | The authentication key for the transfer. in: body required: true type: string availability_zone: description: | The name of the availability zone the share exists within. in: body required: true type: string availability_zone_id: description: | The availability zone ID the resource exists within. in: body required: true type: string availability_zone_id_share_group: description: | The availability zone ID that the share group exists within. in: body required: true type: string min_version: 2.34 availability_zone_name: description: | The name of the availability zone. in: body required: true type: string availability_zone_request: description: | The UUID or name of an availability zone for resource to be created within. in: body required: false type: string availability_zones: description: | Top level response body element. in: body required: true type: string backend: description: | The name of the back end. in: body required: true type: string backend_details: description: | The back-end details for a server. Each back end can store any key-value information that it requires. For example, the generic back-end driver might store the router ID. in: body required: true type: object backend_host: description: | The host name for the back end. in: body required: true type: string backend_name: description: | The name of the back end in this format: ``host@backend#POOL``: - ``host``. The host name for the back end. - ``backend``. The name of the back end. - ``POOL``. The pool name for the back end. in: body required: true type: string backup_az: description: | The availability zone. in: body required: true type: string backup_id_response: description: | The UUID of the share backup. in: body required: true type: string backup_options_request: description: | One or more backup options key and value pairs as a url encoded dictionary of strings. in: body required: false type: object backup_progress: description: | The progress of the backup creation in percentage. in: body required: true type: string backup_restore_progress: description: | The progress of the backup restoration in percentage. in: body required: true type: string backup_share_id: description: | The UUID of the share that the backup pertains to. in: body required: true type: string backup_size: description: | The share backup size, in GiBs. in: body required: true type: integer backup_status: description: | The status of backup which can be one of ``creating``, ``error``, ``available``, ``restoring``. in: body required: true type: string backup_status_request: description: | The backup status, which can be ``available``, ``error``, ``creating``, ``deleting``, ``restoring``. in: body required: false type: string capabilities: description: | The back end capabilities which include ``qos``, ``total_capacity_gb``, etc. in: body required: true type: object capability_driver_handles_share_servers: description: | Share server is usually a storage virtual machine or a lightweight container that is used to export shared file systems. Storage backends may be able to work with configured share servers or allow the share driver to create and manage the lifecycle of share servers. This capability specifies whether the pool's associated share driver is responsible to create and manage the lifecycle of share servers. If ``false``, the administrator of the shared file systems service has configured the share server as necessary for the given back end. in: body required: true type: boolean capability_driver_version: description: | The driver version of the back end. in: body required: true type: string capability_free_capacity_gb: description: | The amount of free capacity for the back end, in GiBs. A valid value is a string, such as ``unknown``, or an integer. in: body required: true type: string capability_qos: description: | The quality of service (QoS) support. in: body required: true type: boolean capability_replication_domain: description: | The back end replication domain. in: body required: true type: string capability_reserved_percentage: description: | The percentage of the total capacity that is reserved for the internal use by the back end. in: body required: true type: integer capability_server_pools_mapping: description: | The mapping between servers and pools. in: body required: true type: object capability_share_backend_name: description: | The name of the share back end. in: body required: true type: string capability_snapshot_support: description: | The specification that filters back ends by whether they do or do not support share snapshots. in: body required: true type: boolean capability_storage_protocol: description: | The storage protocol for the back end. For example, ``NFS_CIFS``, ``glusterfs``, ``HDFS``, etc. in: body required: true type: string capability_total_capacity_gb: description: | The total capacity for the back end, in GiBs. A valid value is a string, such as ``unknown``, or an integer. in: body required: true type: string capability_vendor_name: description: | The name of the vendor for the back end. in: body required: true type: string cidr: description: | The IP block from which to allocate the network, in CIDR notation. For example, ``172.16.0.0/24`` or ``2001:DB8::/64``. This parameter is automatically set to a value determined by the network provider. in: body required: true type: string max_version: 2.50 clear_access_rules: description: | Whether clear all access rules when accept share. in: body required: false type: boolean compatible: description: | Whether the destination backend can or can't handle the share server migration considering the received entries for ``share_network_id``, ``host``, ``nondisruptive``, ``writable`` and ``preserve_snapshots`` matched with the driver supported capabilities. in: body required: true type: boolean consistent_snapshot_support: description: | The consistency snapshot support. in: body required: true type: string min_version: 2.34 count: description: | The total count of requested resource before pagination is applied. This parameter is only present in the API response if "with_count=True" is supplied in the query. in: body required: false type: integer min_version: 2.42 count_without_min_version: description: | The total count of requested resource before pagination is applied. This parameter is only present in the API response if "with_count=True" is supplied in the query. in: body required: false type: integer create_share_from_snapshot_support: description: | Boolean extra spec used for filtering of back ends by their capability to create shares from snapshots. in: body required: false type: boolean min_version: 2.24 create_share_from_snapshot_support_body: description: | Boolean extra spec used for filtering of back ends by their capability to create shares from snapshots. in: body required: false type: boolean create_share_from_snapshot_support_share_capability: description: | Whether or not this share supports snapshots that can be cloned into new shares. Inconsequential if the share doesn't support snapshots. (see capability "snapshot_support") in: body required: true type: boolean min_version: 2.24 created_at: description: | The date and time stamp when the resource was created within the service's database. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm The ``±hh:mm`` value, if included, returns the time zone as an offset from UTC. For example, ``2019-03-27T09:49:58-05:00``. in: body required: true type: string current_share_network_security_service_id: description: | The ID of a security service that is currently attached to a share network. in: body required: true type: string deny_access: description: | The ``deny_access`` object. in: body required: true type: object description: description: | The user defined description of the resource. in: body required: true type: string description_request: description: | The user defined description of the resource. The value of this field is limited to 255 characters. in: body required: false type: string destination_project_id: description: | UUID of the destination project to accept transfer resource. in: body required: true type: string destination_share_server_id: description: | UUID of the share server that was created in the destination backend during a share server migration operation. in: body required: true type: string detail_id_body: in: body required: true type: string description: > The ID of the message detail. display_description_request: description: | The user defined description of the resource. This field sets the ``description`` parameter. in: body required: false type: string display_name_request: description: | The user defined name of the resource. This field sets the ``name`` parameter. in: body required: false type: string driver_handles_share_servers: description: | An extra specification that defines the driver mode for share server, or storage, life cycle management. The Shared File Systems service creates a share server for the export of shares. This value is ``true`` when the share driver manages, or handles, the share server life cycle. This value is ``false`` when an administrator rather than a share driver manages the storage life cycle. in: body required: true type: boolean driver_options: description: | A set of one or more key and value pairs, as a dictionary of strings, that describe driver options. Details for driver options should be taken from `appropriate share driver documentation `_. in: body required: false type: object encryption_key_ref_request: description: | The encryption key ref is valid barbican secret UUID that will be used to get encryption key by the storage drivers. in: body required: false type: object min_version: 2.90 encryption_key_ref_response: description: | The encryption key ref is valid barbican secret UUID that will be used to get encryption key by the storage drivers. in: body required: true type: object export_location: description: | The export location. For newer API versions it is available in separate APIs. See sections `Share export locations <#share-share-export-locations>`_ and `Share instance export locations <#share-share-instance-export-locations>`_. in: body required: true type: string max_version: 2.8 export_location_availability_zone: description: | The name of the availability zone that the export location belongs to. in: body required: true type: string export_location_id: description: | The share export location UUID. in: body required: true type: string export_location_is_admin_only: description: | Defines purpose of an export location. If set to ``true``, then it is expected to be used for service needs and by administrators only. If it is set to ``false``, then this export location can be used by end users. This parameter is only available to users with an "administrator" role, and cannot be controlled via policy .json. in: body required: true type: boolean export_location_path: description: | The export location path that should be used for mount operation. in: body required: true type: string export_location_preferred: description: | Drivers may use this field to identify which export locations are most efficient and should be used preferentially by clients. By default it is set to ``false`` value. in: body required: true type: boolean min_version: 2.14 export_location_preferred_replicas: description: | Drivers may use this field to identify which export locations are most efficient and should be used preferentially by clients. By default it is set to ``false`` value. in: body required: true type: boolean export_location_share_instance_id: description: | The UUID of the share instance that this export location belongs to. This parameter is only available to users with an "administrator" role, and cannot be controlled via policy.yaml. in: body required: true type: string export_locations: description: | A list of export locations. For example, when a share server has more than one network interface, it can have multiple export locations. For newer API versions it is available in separate APIs. See sections `Share export locations <#share-share-export-locations>`_ and `Share instance export locations <#share-share-instance- export-locations>`_. in: body required: true type: array max_version: 2.8 export_path: description: | The share export path in the format appropriate for the protocol: - NFS protocol. ``10.0.0.1:/foo_path``. For example, ``10.254.0 .5:/shares/share-42033c24-0261-424f-abda-4fef2f6dbfd5``. - CIFS protocol. For example, ``\\10.0.0.1\foo_name_of_cifs_share``. in: body required: true type: string extend: description: | The ``extend`` object. in: body required: true type: object extension_alias: description: | The alias for the extension. For example, "FOXNSOX", "os-availability-zone", "os-extended-quotas", "os- share-unmanage", or "os-used-limits". in: body required: true type: string extension_description: description: | The description of the extension API. in: body required: true type: string extension_links: description: | The extension links. in: body required: true type: array extension_name: description: | The name of the extension. For example, "Fox In Socks." in: body required: true type: string extra_spec_key: description: | The extra specification key in: body required: true type: string extra_specs: description: | Extra specifications of the share type. These are key=value pairs of capabilities that the shares of this type are expected to possess. For more information, see `Share Types `_. Some examples include: ``driver_handles_share_servers``, ``replication_type``, ``snapshot_support``, ``mount_snapshot_support``, ``revert_to_snapshot_support``, ``create_share_from_snapshot_support`` in: body required: true type: object extra_specs_request_body: description: | Extra specifications of the share type. These are key=value pairs of capabilities that the shares of this type are expected to possess. For more information, see `Share Types `_. When creating a new share type, required extra-specifications **must** be provided. ``driver_handles_share_servers`` is a required extra-specification, and ``snapshot_support`` was considered a required extra-specification until API version 2.24. When updating extra-specs of a share type, there's no need to provide required extra specifications unless they need to be updated. Some examples of extra-specifications include: ``replication_type``, ``snapshot_support``, ``mount_snapshot_support``, ``revert_to_snapshot_support``, ``create_share_from_snapshot_support`` in: body required: true type: object force: description: | Indicates whether to permit or deny the force- update of a quota that is already used and the requested value exceeds the configured quota. Set to ``True`` to permit the force-update of the quota. Set to ``False`` to deny the force- update of the quota. in: body required: false type: boolean force_delete_2: description: | To force-delete a share instance, set this value to ``null``. The force-delete action, unlike the delete action, ignores the share instance status. in: body required: true type: string force_host_assisted_migration: description: | Forces the host-assisted mechanism to be used, thus using the Data Service to copy data across back ends. This parameter value defaults to ``False``. When set to ``True``, it skips the driver-assisted approach which would otherwise be attempted first. If this option is set to ``True``, all driver-assisted options must be set to ``False``. in: body required: false type: boolean force_snapshot_request: description: | Indicates whether snapshot creation must be attempted when a share's status is not ``available``. Set to ``true`` to force snapshot creation when the share is busy performing other operations. Default is ``false``. in: body required: false type: boolean group_snapshot_id: description: | The share group snapshot ID. in: body required: true type: string group_snapshot_links: description: | The share group snapshot links. in: body required: true type: array group_snapshot_members: description: | The share group snapshot members. in: body required: true type: array group_snapshot_status_required: description: | Filters by a share group snapshot status. A valid value is ``creating``, ``error``, ``available``, ``deleting``, ``error_deleting``. in: body required: true type: string group_spec_key: description: | The extra specification key for the share group type. in: body required: true type: string group_specs: description: | The extra specifications for the share group type. in: body required: false type: object group_specs_required: description: | The extra specifications for the share group type. in: body required: true type: object has_replicas: description: | Indicates whether a share has replicas or not. in: body required: true type: boolean min_version: 2.11 host: description: | The target pool to which the share should be migrated to, in format ``host@backend#pool``. E.g. ``ubuntu@generic1#GENERIC1``. in: body required: true type: string host_resource_response: description: | The host name of the service back end that the resource is contained within. This parameter is always present in the response schema, but the value may be represented as "null" to non-admin users. in: body required: true type: string host_share_server_body: description: | The share server host name or IP address. in: body required: true type: string host_share_server_migration: description: | The target backend to which the share server should be migrated to, in format ``host@backend``. E.g. ``ubuntu@generic1``. in: body required: true type: string hosts_check_result: description: | (Admin only). Result received from each host in a security service update check operation. in: body required: true type: object id_13: description: | The share instance ID. in: body required: true type: string identifier: description: | The identifier of the share server in the back-end storage system. in: body required: true type: string ip_version: description: | The IP version of the network. A valid value is ``4`` or ``6``. This parameter is automatically set to a value determined by the network provider. in: body required: true type: integer max_version: 2.50 is_auto_deletable: description: | Defines if a share server can be deleted automatically by the service. Share server deletion can be automated with configuration. However, Share servers that have ever had a share removed from service management cannot be automatically deleted by the service. in: body required: true type: boolean is_default_type: description: | Defines the share type created is default or not. If the returning value is true, then it is the default share type, otherwise, it is not default. in: body required: true type: boolean min_version: 2.46 is_default_type_body: description: | Defines the share type created is default or not. If the returning value is true, then it is the default share type, otherwise, it is not default. in: body required: true type: boolean is_group_type_default: description: | Defines the share group type created is default or not. If the returning value is true, then it is the default share group type, otherwise, it is not default. in: body required: true type: boolean min_version: 2.46 is_public_manage_request: description: | The level of visibility for the share. Set to ``true`` to make share visible to all projects in the cloud. Set to ``false`` to make it private to your project. Default value is ``false``. in: body required: false type: boolean min_version: 2.8 is_public_request: description: | The level of visibility for the share. Set to ``true`` to make share visible to all projects in the cloud. Set to ``false`` to make it private to your project. Default value is ``false``. in: body required: false type: boolean is_public_shares_response: description: | Whether the share is visible publicly (by all projects in the cloud) or not. in: body required: true type: boolean is_soft_deleted_response: description: | Whether the share has been soft deleted to recycle bin or not. in: body required: false type: boolean min_version: 2.69 links: description: | Pagination and bookmark links for the resource. in: body required: true type: array lock_deletion: description: | Whether the resource should have its deletion locked or not. in: body required: false type: string min_version: 2.82 lock_visibility: description: | Whether the resource should have its sensitive fields restricted or not. When enabled, other users will see the "access_to" and "access_key" fields set to ****** in: body required: false type: string min_version: 2.82 manage_host: description: | The host of the destination back end, in this format: ``host@backend``. - ``host``: The host name for the destination back end. - ``backend``: The name of the destination back end. in: body required: true type: string manage_share_server_id: description: | The UUID of the share server. in: body required: true type: string min_version: 2.49 managed_share_user_id: description: | ID of the user who brought the share under manila management. in: body required: true type: string min_version: 2.16 maxTotalBackupGigabytes: description: | The total maximum number of backup gigabytes that are allowed in a project. in: body required: true type: integer min_version: 2.80 maxTotalBackupGigabytesOptional: description: | The total maximum number of backup gigabytes that are allowed in a project. in: body required: false type: integer min_version: 2.80 maxTotalEncryptionKeys: description: | The number of encryption keys allowed in a project. in: body required: true type: integer min_version: 2.90 maxTotalEncryptionKeysOptional: description: | The number of encryption keys allowed in a project. in: body required: false type: integer min_version: 2.90 maxTotalReplicaGigabytes: description: | The maximum number of replica gigabytes that are allowed in a project. You cannot create a share, share replica, manage a share or extend a share if it is going to exceed the allowed replica gigabytes quota. in: body required: true type: integer min_version: 2.53 maxTotalReplicaGigabytesOptional: description: | The maximum number of replica gigabytes that are allowed in a project. You cannot create a share, share replica, manage a share or extend a share if it is going to exceed the allowed replica gigabytes quota. in: body required: false type: integer min_version: 2.53 maxTotalShareBackups: description: | The total maximum number of share backups that are allowed in a project. in: body required: true type: integer min_version: 2.80 maxTotalShareBackupsOptional: description: | The total maximum number of share backups that are allowed in a project. in: body required: false type: integer min_version: 2.80 maxTotalShareGigabytes: description: | The total maximum number of share gigabytes that are allowed in a project. You cannot request a share that exceeds the allowed gigabytes quota. in: body required: true type: integer maxTotalShareGigabytesOptional: description: | The total maximum number of share gigabytes that are allowed in a project. You cannot request a share that exceeds the allowed gigabytes quota. in: body required: false type: integer maxTotalShareGroups: description: | The maximum number of share groups. in: body required: true type: integer min_version: 2.40 maxTotalShareGroupSnapshots: description: | The maximum number of share group snapshots. in: body required: true type: integer min_version: 2.40 maxTotalShareNetworks: description: | The total maximum number of share-networks that are allowed in a project. in: body required: true type: integer maxTotalShareNetworksOptional: description: | The total maximum number of share-networks that are allowed in a project. in: body required: false type: integer maxTotalShareReplicas: description: | The maximum number of share replicas that is allowed. in: body required: true type: integer min_version: 2.53 maxTotalShareReplicasOptional: description: | The maximum number of share replicas that is allowed. in: body required: false type: integer min_version: 2.53 maxTotalShares: description: | The total maximum number of shares that are allowed in a project. in: body required: true type: integer maxTotalShareSnapshots: description: | The total maximum number of share snapshots that are allowed in a project. in: body required: true type: integer maxTotalShareSnapshotsOptional: description: | The total maximum number of share snapshots that are allowed in a project. in: body required: false type: integer maxTotalSharesOptional: description: | The total maximum number of shares that are allowed in a project. in: body required: false type: integer maxTotalSnapshotGigabytes: description: | The total maximum number of snapshot gigabytes that are allowed in a project. in: body required: true type: integer maxTotalSnapshotGigabytesOptional: description: | The total maximum number of snapshot gigabytes that are allowed in a project. in: body required: false type: integer message_expires_at_body: description: | The date and time stamp when the resource message will expire within the service's database. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm The ``±hh:mm`` value, if included, returns the time zone as an offset from UTC. For example, ``2016-12-31T13:14:15-05:00``. in: body required: true type: string message_id_body: description: | The UUID of the message. in: body required: true type: string message_level_body: in: body required: true type: string description: > The message level. message_links: description: | The message links. in: body required: true type: array message_members_links: description: | The message member links. in: body required: true type: array metadata: description: | One or more metadata key and value pairs as a dictionary of strings. in: body required: true type: object metadata_item: description: | A single metadata key and value pair. in: body required: true type: object metadata_key_request: description: | The key of a metadata item. For example, if the metadata on an existing resource is as follows: ``"project": "my_test", "aim": "testing"``, the keys are "project" and "aim". in: body required: true type: object metadata_request: description: | One or more metadata key-value pairs, as a dictionary of strings. For example, ``"project": "my_test", "aim": "testing"``. The share server does not respect case-sensitive key names. For example, ``"key": "v1"`` and ``"KEY": "V1"`` are equivalent. If you specify both key-value pairs, the server sets and returns only the ``"KEY": "V1"`` key-value pair. in: body required: true type: object migrate-start: description: | The ``migrate-start`` object. in: body required: true type: object migrate_share: description: | The ``migrate_share`` object. in: body required: true type: object migration_complete: description: | The ``migration_complete`` object. in: body required: true type: object migration_progress_details: description: | Additional driver specific details of the migration progress. in: body required: true type: object min_version: 2.59 mount_point_name_manage_request: description: | The user defined export location of the managed share. in: body required: false type: string min_version: 2.92 mount_point_name_request: description: | The user defined export location of the share. in: body required: false type: string min_version: 2.84 mount_snapshot_support: description: | Boolean extra spec used for filtering of back ends by their capability to mount share snapshots. in: body required: false type: boolean min_version: 2.32 mount_snapshot_support_body: description: | Boolean extra spec used for filtering of back ends by their capability to mount share snapshots. in: body required: false type: boolean mount_snapshot_support_share_capability: description: | Whether or not this share supports snapshots that can be mounted and access controlled independently of the share. Inconsequential if the share doesn't support snapshots (see capability "snapshot_support"). in: body required: true type: boolean min_version: 2.32 name: description: | The user defined name of the resource. in: body required: true type: string name_request: description: | The user defined name of the resource. The value of this field is limited to 255 characters. in: body required: false type: string network_allocation_update_support: description: | Indicates whether the share server supports network allocation updates. in: body required: false type: boolean min_version: 2.70 network_type: description: | The network type. A valid value is ``VLAN``, ``VXLAN``, ``GRE``, or ``flat``. This parameter is automatically set to a value determined by the network provider. in: body required: true type: string max_version: 2.50 neutron_net_id: description: | The neutron network ID. in: body required: true type: string max_version: 2.50 neutron_net_id_request: description: | The UUID of a neutron network when setting up or updating a share network subnet with neutron. Specify both a neutron network and a neutron subnet that belongs to that neutron network. in: body required: false type: string neutron_subnet_id: description: | The neutron subnet ID. in: body required: true type: string max_version: 2.50 neutron_subnet_id_request: description: | The UUID of the neutron subnet when setting up or updating a share network subnet with neutron. Specify both a neutron network and a neutron subnet that belongs to that neutron network. in: body required: false type: string new_share_network_id: description: | If willing to change the share’s share-network so it can be allocated in the desired destination pool, the invoker may supply a new share network to be used. This is often suited when the share is to be migrated to a pool which operates in a different availability zone or managed by a driver that handles share servers. in: body required: false type: string new_share_network_id_server_migration: description: | If willing to change the share server’s share-network so it can be allocated in the desired destination backend, the invoker may supply a new share network to be used. in: body required: false type: string new_share_network_security_service_id: description: | The ID of a security service that must be attached to a share network after a share network security service update operation. in: body required: true type: string new_share_type_id: description: | If willing to retype the share so it can be allocated in the desired destination pool, the invoker may supply a new share type to be used. This is often suited when the share is to be migrated to a pool which operates in the opposite driver mode. in: body required: false type: string next-available: description: | The date and time stamp when next issues are available. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm The ``±hh:mm`` value, if included, returns the time zone as an offset from UTC. For example, ``2015-08-27T09:49:58-05:00``. in: body required: false type: string nondisruptive: description: | Specifies whether migration should only be performed without disrupting clients during migration. For such, it is also expected that the export location does not change. When set to ``True`` and drivers are not capable of allowing the share to remain accessible through the two phases of the migration, migration will result in an error status. As of Ocata release, host-assisted migration cannot provide this capability. in: body required: true type: boolean nondisruptive_server_migration: description: | Specifies whether share server migration should only be performed without disrupting clients during migration. For such, it is also expected that the export location does not change. When set to ``True`` and drivers are not capable of allowing the share server to remain accessible through the two phases of the migration, migration will result in an error status. in: body required: true type: boolean operation_is_compatible: description: | Indicates the result of a check operation. If ``True`` indicates that the addition/update of security service is possible. in: body required: true type: boolean os-share-type-access:is_public: description: | Indicates whether a share type is publicly accessible. Default is ``true``, or publicly accessible. in: body required: false type: boolean max_version: 2.6 perShareGigabytes: description: | The number of gigabytes per share allowed in a project. in: body required: true type: integer min_version: 2.62 perShareGigabytesOptional: description: | The number of gigabytes per share allowed in a project. in: body required: false type: integer min_version: 2.62 pool: description: | The pool name for the back end. in: body required: true type: string pools: description: | The pools for the back end. This value is either ``null`` or a string value that indicates the capabilities for each pool. For example, ``pool_name``, ``total_capacity_gb``, ``qos``, and so on. in: body required: true type: string preserve_metadata: description: | Specifies whether migration should enforce the preservation of all file system metadata. When set to ``True`` and drivers are not capable of ensuring preservation of file system metadata, migration will result in an error status. As of Ocata release, host-assisted migration cannot provide any guarantees of preserving file system metadata. in: body required: true type: boolean preserve_snapshots: description: | Specifies whether migration should enforce the preservation of all existing snapshots at the destination. When set to ``True`` and drivers are not capable of migrating the snapshots, migration will result in an error status. As of Ocata release, host-assisted migration cannot provide this capability. in: body required: true type: boolean preserve_snapshots_server_migration: description: | Specifies whether migration should enforce the preservation of all existing snapshots at the destination. When set to ``True`` and drivers are not capable of migrating the snapshots, migration will result in an error status. in: body required: true type: boolean progress: description: | The progress of the snapshot creation. in: body required: true type: string progress_share_instance: description: | The progress of the share creation. in: body min_version: 2.54 required: true type: string project: description: | The UUID of the project to which access to the share type is granted. in: body required: true type: string project_id: description: | The ID of the project that owns the resource. in: body required: true type: string project_id_messages_body: description: | The ID of the project for which the message was created. in: body required: true type: string project_id_type_access: description: | The ID of the project that has been granted access to the type resource. in: body required: true type: string project_id_type_access_grant_request: description: | The ID of the project that needs to have access to the type resource. in: body required: true type: string project_id_type_access_revoke_request: description: | The ID of the project whose access to the type resource must be revoked. in: body required: true type: string protocol: description: | The Shared File Systems protocol of the share to manage. A valid value is ``NFS``, ``CIFS``, ``GlusterFS``, ``CEPHFS``, ``HDFS`` or ``MAPRFS``. in: body required: true type: string qos_type_description: description: | The description of the qos type. in: body required: true type: string min_version: 2.94 qos_type_description_body: description: | The description of the qos type. in: body required: true type: string qos_type_description_request: description: | The description of the qos type. in: body required: false type: string min_version: 2.94 qos_type_description_update_request: description: | New description for the qos type. in: body required: false type: string qos_type_id_body: description: | The UUID of the qos type. in: body required: true type: string qos_type_name: description: | Name of the qos type. in: body required: true type: string qos_type_name_request: description: | Name of the qos type. in: body required: false type: string qos_type_specs: description: | Specifications of the qos type. These are key=value pairs of parameters that the shares of this qos type are expected to possess. in: body required: true type: object qos_type_specs_request_body: description: | Specifications of the qos type. These are key=value pairs of parameters that the shares of this qos type are expected to possess. in: body required: false type: object quota_backup_gigabytes: description: | The number of gigabytes for the backups allowed for each project. in: body min_version: 2.80 required: true type: integer quota_backup_gigabytes_detail: description: | The limit, in_use, reserved number of gigabytes for the backups allowed for each project. in: body min_version: 2.80 required: true type: object quota_backup_gigabytes_request: description: | The number of gigabytes for the backups for the project. in: body min_version: 2.80 required: false type: integer quota_backups: description: | The number of backups allowed for each project. in: body min_version: 2.80 required: true type: integer quota_backups_detail: description: | The limit, in_use, reserved number of backups allowed for each project. in: body min_version: 2.80 required: true type: object quota_backups_request: description: | The number of backups for the project. in: body min_version: 2.80 required: false type: integer quota_class_id: description: | A ``quota_class_set`` id. in: body required: true type: string quota_class_set: description: | A ``quota_class_set`` object. in: body required: true type: object quota_encryption_keys: description: | The number of encryption keys allowed for each project. in: body required: true min_version: 2.90 type: integer quota_encryption_keys_detail: description: | The limit, in_use, reserved number of encryption keys for each project. in: body min_version: 2.90 required: true type: object quota_encryption_keys_request: description: | The number of encryption keys allowed for each project. in: body min_version: 2.90 required: false type: integer quota_gigabytes: description: | The number of gigabytes allowed for each project. in: body required: true type: integer quota_gigabytes_detail: description: | The limit, in_use, reserved number of gigabytes allowed for each project. in: body min_version: 2.25 required: true type: object quota_gigabytes_request: description: | The number of gigabytes for the project. in: body required: false type: integer quota_per_share_gigabytes: description: | The number of gigabytes per share allowed for each project. in: body required: true min_version: 2.62 type: integer quota_per_share_gigabytes_detail: description: | The limit, in_use, reserved number of per share gigabytes for each project. in: body min_version: 2.62 required: true type: object quota_per_share_gigabytes_request: description: | The number of gigabytes per share allowed for each project. in: body min_version: 2.62 required: false type: integer quota_project_id: description: | The ID of the project the quota pertains to. in: body required: true type: string quota_replica_gigabytes: description: | The number of gigabytes for the share replicas allowed for each project. in: body required: true min_version: 2.53 type: integer quota_replica_gigabytes_detail: description: | The limit, in_use, reserved number of replica gigabytes for each project. in: body min_version: 2.53 required: true type: object quota_replica_gigabytes_request: description: | The number of gigabytes for share replicas for the project. in: body min_version: 2.53 required: false type: integer quota_set: description: | The ``quota_set`` object. in: body required: true type: object quota_share_group_snapshots: description: | The number of share group snapshots allowed for each project or user. in: body min_version: 2.40 required: true type: integer quota_share_group_snapshots_detail: description: | The limit, in_use, reserved number of share group snapshots for each project or user. in: body min_version: 2.40 required: true type: object quota_share_group_snapshots_request: description: | The number of share group snapshots allowed for each project or user. in: body min_version: 2.40 required: false type: integer quota_share_groups: description: | The number of share groups allowed for each project or user. in: body min_version: 2.40 required: true type: integer quota_share_groups_detail: description: | The limit, in_use, reserved number of share groups for each project or user. in: body min_version: 2.40 required: true type: object quota_share_groups_request: description: | The number of share groups allowed for each project or user. in: body min_version: 2.40 required: false type: integer quota_share_networks: description: | The number of share networks allowed for user and project, but not share type. in: body required: false type: integer quota_share_networks_default: description: | The number of share networks allowed for each project. in: body required: true type: integer quota_share_networks_detail: description: | The limit, in_use, reserved number of share networks allowed for user and project, but not share type. in: body min_version: 2.25 required: false type: object quota_share_networks_request: description: | The number of share networks for the project. in: body required: false type: integer quota_share_replicas: description: | The number of share replicas allowed for each project. in: body required: true min_version: 2.53 type: integer quota_share_replicas_detail: description: | The limit, in_use, reserved number of share replicas for each project. in: body min_version: 2.53 required: true type: object quota_share_replicas_request: description: | The number of share replicas allowed for each project or user. in: body min_version: 2.53 required: false type: integer quota_shares: description: | The number of shares allowed for each project. in: body required: true type: integer quota_shares_detail: description: | The limit, in_use, reserved number of shares allowed for each project. in: body min_version: 2.25 required: true type: object quota_shares_request: description: | The number of shares for the project. in: body required: false type: integer quota_snapshot_gigabytes: description: | The number of gigabytes for the snapshots allowed for each project. in: body required: true type: integer quota_snapshot_gigabytes_detail: description: | The limit, in_use, reserved number of gigabytes for the snapshots allowed for each project. in: body min_version: 2.25 required: true type: object quota_snapshot_gigabytes_request: description: | The number of gigabytes for the snapshots for the project. in: body required: false type: integer quota_snapshots: description: | The number of snapshots allowed for each project. in: body required: true type: integer quota_snapshots_detail: description: | The limit, in_use, reserved number of snapshots allowed for each project. in: body min_version: 2.25 required: true type: object quota_snapshots_request: description: | The number of snapshots for the project. in: body required: false type: integer regex: description: | An API regular expression. For example, ``^/shares`` for the ``/shares`` API URI or ``.*`` for any URI. in: body required: false type: string remaining: description: | The remaining number of allowed requests. in: body required: false type: integer remove_project_access: description: | An object representing the project resource that access should be revoked from. in: body required: true type: object replica_state: description: | The share replica state. Has set value only when replication is used. List of possible values: ``active``, ``in_sync``, ``out_of_sync``, and ``error``. in: body required: true type: string min_version: 2.11 replication_type: description: | Type of replication supported for shares of this type. Valid values are: - ``null``: replication is not supported - ``readable``: users can create replicas of the share that are read-only until they are promoted, - ``writable``: users can create read/write replicas - ``dr``: users can create replicas that are not exported until they are promoted. in: body required: false type: string replication_type_share_capability: description: | The share replication type. The value can be: - ``null``, if the share cannot be replicated. - ``readable``, if one or more read-only replicas of the share can be created - ``writable``, if one or more active replicas of the share can be created - ``dr``, if one or more replicas of the share can be created that will remain inaccessible until they are promoted. in: body required: true type: string min_version: 2.11 request_id_body: description: | The UUID of the request during which the message was created. in: body required: true type: string requested_capabilities: description: | The parameters that were sent to the server in order to check if the destination host can handle the share server migration. This object contains the following attributes: ``writable``, ``nondisruptive``, ``preserve_snapshots``, ``share_network_id`` and ``host``. in: body required: true type: object requested_check_operation: description: | Information about the requested operation. in: body required: true type: object requested_operation: description: | Data about the operation that was requested. in: body required: true type: object requested_operation_name: description: | The name of the check operation that was triggered, being ``add_security_service`` or ``update_security_service``. in: body required: true type: string required_extra_specs: description: | The required extra specifications for the share type: ``driver_handles_share_servers``. ``snapshot_support`` was treated as a required extra-specification until api version 2.24. in: body required: true type: object reset_operation: description: | Whether a share network security service check update or add operation for a given share network should ignore previous check results, and check the operation's compatibility again. in: body required: true type: boolean reset_status: description: | The ``reset_status`` object. in: body required: true type: object resource_id_body: description: | The UUID of the resource for which the message was created. in: body required: true type: string resource_lock_id: description: | The UUID identifying the specific resource lock. in: body required: true type: string resource_lock_lock_context: description: | The lock creator's context. Resource locks can be created by users with different roles. If a user with ``admin`` role creates the lock, the value of this field is ``admin``. If a user with ``service`` role creates the lock, the value of this field is ``service``. For all other contexts, the value of this field is ``user``. This field also determines the user's role that is required to unlock or manipulate a lock by virtue of the service's default RBAC. in: body required: true type: string resource_lock_lock_reason: description: | A blob of text representing the reason for the specific resource lock. in: body required: true type: string resource_lock_lock_reason_optional: description: | A blob of text representing the reason for the specific resource lock. in: body required: false type: string resource_lock_object: description: | A resource lock object when making resource lock requests. All other parameters are included in this object. in: body required: true type: object resource_lock_project_id: description: | The ID of the project that the resource lock was created for. in: body required: true type: string resource_lock_resource_action: description: | The action pertaining to a resource that the resource lock prevents. For example, if a resource lock prevents deletion of a share, the value of ``resource_action`` is ``delete``. Resource locks are not supported for all API actions. in: body required: true type: string resource_lock_resource_action_create_optional: description: | The action pertaining to a resource that the resource lock prevents. For example, if a resource lock prevents deletion of a share, the value of ``resource_action`` is ``delete``. Resource locks are not supported for all API actions. Currently support only exists for ``delete``, and for specific resources. If not provided, the value of this parameter defaults to ``delete``. in: body required: false type: string resource_lock_resource_action_optional: description: | The action pertaining to a resource that the resource lock prevents. For example, if a resource lock prevents deletion of a share, the value of ``resource_action`` is ``delete``. Resource locks are not supported for all API actions. in: body required: false type: string resource_lock_resource_id: description: | The UUID of the resource that the lock pertains to. For example, this can be the ID of the share that is locked from deletion. in: body required: true type: string resource_lock_resource_type: description: | The type of resource that the ID in ``resource_id`` denotes. For example, ``share`` is the resource type that is specified when the resource lock pertains to a share being locked from deletion. Resource locks are not supported for all resources. Currently support only exists for ``share``. in: body required: true type: string resource_lock_user_id: description: | The ID of the user the resource lock was created for. in: body required: true type: string resource_locks_object: description: | A resource locks object containing a collection or list of resource locks. in: body required: true type: object resource_type_body: description: | The type of the resource for which the message was created. in: body required: true type: string revert_to_snapshot_support: description: | Boolean extra spec used for filtering of back ends by their capability to revert shares to snapshots. in: body required: false type: boolean min_version: 2.27 revert_to_snapshot_support_body: description: | Boolean extra spec used for filtering of back ends by their capability to revert shares to snapshots. in: body required: false type: boolean revert_to_snapshot_support_share_capability: description: | Whether or not this share supports being reverted to its latest snapshot. Inconsequential if the share doesn't support snapshots (see capability "snapshot_support"). in: body required: true type: boolean min_version: 2.27 scheduled_to_be_deleted_at_response: description: | Estimated time at which the share in the recycle bin will be deleted automatically. in: body required: false type: string min_version: 2.69 scheduler_hints: description: | One or more scheduler_hints key and value pairs as a dictionary of strings. Accepted hints are: - ``same_host`` or ``different_host``: values must be a comma separated list of Share IDs - ``only_host``: value must be a manage-share service host in ``host@backend#POOL`` format (admin only). Only available in and beyond API version 2.67 in: body required: false type: object min_version: 2.65 security_service_default_ad_site: description: | The security service default AD site. in: body required: true type: string min_version: 2.76 security_service_default_ad_site_request: description: | The security service default AD site. in: body required: false type: string min_version: 2.76 security_service_dns_ip: description: | The DNS IP address that is used inside the project network. in: body required: true type: string security_service_dns_ip_request: description: | The DNS IP address that is used inside the project network. in: body required: false type: string security_service_domain: description: | The security service domain. in: body required: true type: string security_service_domain_request: description: | The security service domain. in: body required: false type: string security_service_id: description: | The security service ID. in: body required: true type: string security_service_ou: description: | The security service ou. in: body required: true type: string min_version: 2.44 security_service_ou_request: description: | The security service ou. An organizational unit can be added to specify where the share ends up. in: body required: false type: string min_version: 2.44 security_service_password: description: | The user password, if you specify a ``user``. in: body required: true type: string security_service_password_request: description: | The user password, if you specify a ``user``. in: body required: false type: string security_service_server: description: | The security service host name or IP address. in: body required: true type: string security_service_server_request: description: | The security service host name or IP address. in: body required: false type: string security_service_status: description: | The security service status. in: body required: true type: string security_service_type: description: | The security service type. A valid value is ``ldap``, ``kerberos``, or ``active_directory``. in: body required: true type: string security_service_type_request: description: | The security service type. A valid value is ``ldap``, ``kerberos``, or ``active_directory``. in: body required: false type: string security_service_update_support: description: | Whether a share network or server supports security service updates or not. in: body required: true type: boolean min_version: 2.63 security_service_user: description: | The security service user or group name that is used by the project. in: body required: true type: string security_service_user_request: description: | The security service user or group name that is used by the project. in: body required: false type: string segmentation_id: description: | The segmentation ID. This parameter is automatically set to a value determined by the network provider. For VLAN, this value is an integer from 1 to 4094. For VXLAN, this value is an integer from 1 to 16777215. For GRE, this value is an integer from 1 to 4294967295. in: body required: true type: integer max_version: 2.50 service_binary_response: description: | The service binary name. Default is the base name of the executable. in: body required: true type: string service_disable_binary_request: description: | The name of the service binary that you want to disable. Typically, this name is the base name of the executable. in: body required: true type: string service_disable_binary_response: description: | The name of the disabled service binary. Typically, this name is the base name of the executable. in: body required: true type: string service_disable_host_request: description: | The host name of the service that you want to disable. in: body required: true type: string service_disable_host_response: description: | The host name of the disabled service. in: body required: true type: string service_disable_reason_request: description: | A reason for the service being disabled. in: body required: false type: string min_version: 2.83 service_disable_reason_response: description: | A reason for the service being disabled. in: body required: true type: string min_version: 2.83 service_disabled_response: description: | Indicates whether the service is disabled. in: body required: true type: boolean max_version: 2.82 service_enable_binary_request: description: | The name of the service binary that you want to enable. Typically, this name is the base name of the executable. in: body required: true type: string service_enable_host_request: description: | The host name of the service that you want to enable. in: body required: true type: string service_enable_host_response: description: | The host name of the enabled service. in: body required: true type: string service_ensure_shares_host_request: description: | The host name of the manila-share binary that you want to start the ensure shares procedure in the ``host@backend`` format. in: body required: true type: string service_ensuring_response: description: | Whether the service is currently running ensure shares or not. in: body required: true type: boolean min_version: 2.86 service_host: description: | The manage-share service host in this format: ``host@backend#POOL``: - ``host``. The host name for the back end. - ``backend``. The name of the back end. - ``POOL``. The pool name for the back end. in: body required: true type: string service_host_response: description: | The service host name. in: body required: true type: string service_id_response: description: | The service ID. in: body required: true type: integer service_state_response: description: | The current state of the service. A valid value is ``up`` or ``down``. in: body required: true type: string service_status_new_response: description: | The service status, which is ``enabled`` or ``disabled``. in: body required: true type: string min_version: 2.83 service_status_response: description: | The service status, which is ``enabled`` or ``disabled``. in: body required: true type: string service_zone_response: description: | The service availability zone. in: body required: true type: string services: description: | Top element in the response body. in: body required: true type: string share: description: | A ``share`` object. in: body required: true type: object share_force_delete: description: | To force-delete a share or share group, set this value to ``null``. The force-delete action, unlike the delete action, ignores the share or share group status. in: body required: true type: string share_force_extend: description: | (Admin only). Defines whether to go through scheduler, Set to `True` will extend share directly. Set to `False` will go through scheduler, default is `False`. in: body required: false type: boolean min_version: 2.64 share_group_host: description: | The share group host name. in: body required: false type: string share_group_id: description: | The UUID of the share group. in: body required: true type: string min_version: 2.31 share_group_id_request: description: | The UUID of the share group. in: body required: false type: string min_version: 2.31 share_group_links: description: | The share group links. in: body required: true type: string share_group_status: description: | The share group status, which is ``available``, ``error``, ``creating``, or ``deleting``. in: body required: true type: string share_group_type_id: description: | The share group type ID to create a share group. in: body required: false type: string share_group_type_id_required: description: | The share group type ID. in: body required: true type: string share_group_type_is_public: description: | The level of visibility for the share group type. Set to ``true`` to make share group type public. Set to ``false`` to make it private. Default value is ``true``. in: body required: true type: boolean share_group_type_is_public_request: description: | The level of visibility for the share group type. Set to ``true`` to make share group type public. Set to ``false`` to make it private. Default value is ``false``. in: body required: false type: boolean share_group_type_name: description: | The share group type name. in: body required: true type: string share_group_type_name_request: description: | The name of the share group type resource. The value of this field is limited to 255 characters. in: body required: false type: string share_id_request: description: | The UUID of the share. in: body required: true type: string share_id_response: description: | The UUID of the share. in: body required: true type: string share_id_share_instances_response: description: | The UUID of the share to which the share instance belongs to. in: body required: true type: string share_instance_cast_rules_to_readonly: description: | If the share instance has its ``cast_rules_to_readonly`` attribute set to True, all existing access rules will be cast to read/only. in: body required: true type: boolean min_version: 2.30 share_instance_id_1: description: | The UUID of the share instance. in: body required: true type: string share_network_availability_zone_request: description: | The UUID or name of an availability zone for the share network subnet. in: body required: false type: string min_version: 2.51 share_network_gateway: description: | The gateway of a share network. in: body required: true type: string min_version: 2.18 max_version: 2.50 share_network_id: description: | The share network ID where the resource is exported to. in: body required: true type: string share_network_id_manage_server_request: description: | The UUID of the share network that the share server will pertain to. in: body required: true type: string share_network_id_request: description: | The ID of a share network that the resource must be exported to. Note that when using a share type with the ``driver_handles_share_servers`` extra spec as ``False``, you should not provide a ``share_network_id``. in: body required: false type: string share_network_id_share_networks_response: description: | The UUID of a share network resource. in: body required: true type: string share_network_id_share_servers_response: description: | The UUID of a share network that is associated with the share server. in: body required: true type: string share_network_mtu: description: The MTU value of a share network. in: body required: true type: integer min_version: 2.20 max_version: 2.50 share_network_name: description: | The name of a share network that is associated with the share server. in: body required: true type: string share_network_security_service_id: description: | The UUID of the security service to remove from the share network. For details, see the security service section. in: body required: true type: string share_network_security_service_update_support: description: | Whether the share network supports its security services being updated when it is already being used. in: body required: true type: boolean min_version: 2.63 share_network_share_network_subnets: description: | A list of share network subnets that pertain to the related share network. in: body required: true type: array min_version: 2.51 share_network_status: description: | The status of a share network. Possible values are: ``active``, ``error`` or ``network_change``. in: body required: true type: string min_version: 2.63 share_network_subnet_availability_zone: description: | The name of the availability zone that the share network subnet belongs to. in: body required: true type: string share_network_subnet_cidr: description: | The IP block from which to allocate the network, in CIDR notation. For example, ``172.16.0.0/24`` or ``2001:DB8::/64``. This parameter is automatically set to a value determined by the network provider. in: body required: true type: string share_network_subnet_gateway: description: | The gateway of a share network subnet. in: body required: true type: string share_network_subnet_id: description: | The UUID of the share network subnet. in: body required: true type: string share_network_subnet_id_manage_server_body: description: | The UUID of the share network subnet that the share server pertain to. in: body required: true type: string min_version: 2.51 share_network_subnet_id_manage_server_request: description: | The UUID of the share network subnet that the share server will pertain to. If not specified, the share network's default subnet UUID will be used. in: body required: false type: string min_version: 2.51 share_network_subnet_id_share_server_body: description: | The UUID of the share network subnet that the share server pertains to. in: body required: true type: string min_version: 2.51 share_network_subnet_ids: description: | The list of share network subnet IDs associated with the share server. in: body required: false type: array min_version: 2.70 share_network_subnet_ip_version: description: | The IP version of the network. A valid value is ``4`` or ``6``. This parameter is automatically set to a value determined by the network provider. in: body required: true type: integer share_network_subnet_metadata: description: | One or more metadata key and value pairs as a dictionary of strings. in: body required: false type: object min_version: 2.78 share_network_subnet_mtu: description: | The MTU of a share network subnet. in: body required: true type: integer share_network_subnet_network_type: description: | The network type. A valid value is ``VLAN``, ``VXLAN``, ``GRE``, or ``flat``. This parameter is automatically set to a value determined by the network provider. in: body required: true type: string share_network_subnet_neutron_net_id: description: | The neutron network ID. in: body required: true type: string share_network_subnet_neutron_subnet_id: description: | The neutron subnet ID. in: body required: true type: string share_network_subnet_segmentation_id: description: | The segmentation ID. This parameter is automatically set to a value determined by the network provider. For VLAN, this value is an integer from 1 to 4094. For VXLAN, this value is an integer from 1 to 16777215. For GRE, this value is an integer from 1 to 4294967295. in: body required: true type: integer share_network_subnet_share_network_id: description: | The UUID of the share network that the share network subnet belongs to. in: body required: true type: string share_network_subnet_share_network_name: description: | The name of the share network that the share network subnet belongs to. in: body required: true type: string share_new_size: description: | New size of the share, in GiBs. in: body required: true type: integer share_proto: description: | The Shared File Systems protocol. A valid value is ``NFS``, ``CIFS``, ``GlusterFS``, ``HDFS``, ``CephFS`` (supported starting with API v2.13), or ``MAPRFS``. in: body required: true type: string share_replica_az: description: | The availability zone. in: body required: false type: string share_replica_az_response: description: | The availability zone of the share replica. in: body required: true type: string share_replica_cast_rules_to_readonly: description: | If the share replica has its ``cast_rules_to_readonly`` attribute set to True, all existing access rules will be cast to read/only. in: body required: true type: boolean min_version: 2.30 share_replica_force_delete: description: | To force-delete a share replica, set this value to ``null``. The force-delete action, unlike the delete action, ignores the share replica status. in: body required: true type: string share_replica_host: description: | The host name of the share replica. in: body required: true type: string share_replica_id: description: | The UUID of the share replica. in: body required: true type: string share_replica_metadata_request: description: | One or more metadata key and value pairs for the replica. in: body required: false type: object min_version: 2.95 share_replica_metadata_response: description: | One or more metadata key and value pairs for the replica. in: body required: true type: object min_version: 2.95 share_replica_quiesce_wait_time: description: | The quiesce wait time in seconds used during replica promote. in: body required: false type: integer min_version: 2.75 share_replica_replica_state: description: | The replica state of a share replica. List of possible values: ``active``, ``in_sync``, ``out_of_sync``, and ``error``. in: body required: true type: string share_replica_reset_replica_state: description: | The ``reset_replica_state`` object. in: body required: true type: object share_replica_scheduler_hints: description: | One or more scheduler_hints key and value pairs as a dictionary of strings. Accepted hints are: - ``only_host``: value must be a share manager service host in ``host@backend#POOL`` format (admin only) in: body required: false type: object min_version: 2.67 share_replica_share_id: description: | The UUID of the share from which to create a share replica. in: body required: true type: string share_replica_share_network_id: description: | The UUID of the share network. in: body required: false type: string share_replica_status: description: | The status of a share replica. List of possible values: ``available``, ``error``, ``creating``, ``deleting``, or ``error_deleting``. in: body required: true type: string share_server_id: description: | The UUID of the share server. in: body required: true type: string share_server_security_service_update_support: description: | Whether the share server supports its security services being updated after its creation. in: body required: true type: boolean min_version: 2.63 share_server_show_identifier: description: | The identifier of the share server in the back-end storage system. in: body required: true type: string min_version: 2.49 share_server_show_is_auto_deletable: description: | Defines if a share server can be deleted automatically by the service. Share server deletion can be automated with configuration. However, Share servers that have ever had a share removed from service management cannot be automatically deleted by the service. in: body required: true type: boolean min_version: 2.49 share_server_status: description: | The share server status, which can be ``active``, ``error``, ``creating``, ``deleting``, ``manage_starting``, ``manage_error``, ``unmanage_starting``, ``unmanage_error`` or ``error_deleting``. in: body required: true type: string share_server_unmanage: description: | To unmanage a share server, either set this value to ``null`` or {}. Optionally, the ``force`` attribute can be included in this object. in: body required: true type: object share_share_type_name: description: | Name of the share type. in: body required: true type: string min_version: 2.6 share_status_request: description: | The share or share instance status to be set. Possible values are listed in the `section above <#shares>`_. in: body required: true type: string share_status_response: description: | The share or share instance status. Possible values are listed in the `section above <#shares>`_. in: body required: true type: string share_type_access:is_public: description: | Indicates whether a share type is publicly accessible. Default is ``true``, or publicly accessible. in: body required: false type: boolean min_version: 2.7 share_type_access:is_public_body: description: | Indicates whether a share type is accessible by all projects (tenants) in the cloud. in: body required: true type: boolean share_type_access:is_public_update_request: description: | Indicates whether the share type should be accessible by all projects (tenants) in the cloud. If not specified, the visibility of the share type is not altered. in: body required: false type: boolean share_type_description: description: | The description of the share type. in: body required: true type: string min_version: 2.41 share_type_description_body: description: | The description of the share type. in: body required: true type: string share_type_description_request: description: | The description of the share type. The value of this field is limited to 255 characters. in: body required: false type: string min_version: 2.41 share_type_description_update_request: description: | New description for the share type. in: body required: false type: string share_type_id_body: description: | The UUID of the share type. in: body required: true type: string share_type_name: description: | Name of the share type. in: body required: true type: string share_type_name_request: description: | Name of the share type. The value of this field is limited to 255 characters. in: body required: false type: string share_type_request: description: | The name or ID of the share type to be used to create the resource. If you omit this parameter, the default share type is used. To view the default share type set by the administrator, issue a list default share types request. in: body required: false type: string share_type_shares_response: description: | The UUID of the share type that the share belongs to. Prior to API version 2.6, this parameter resolved to the name of the share type. In API version 2.6 and beyond, this parameter holds the share type ID instead of the name. in: body required: true type: string share_types: description: | A list of one or more share type IDs. in: body required: false type: array share_types_1: description: | A list of share type IDs. in: body required: true type: array share_unmanage: description: | To unmanage a share, set this value to ``null``. in: body required: true type: string share_user_id: description: | ID of the user that the share was created by. in: body required: true type: string min_version: 2.16 shrink: description: | The ``shrink`` object. in: body required: true type: object size_request: description: | The share size, in GiBs. The requested share size cannot be greater than the allowed GiB quota. To view the allowed quota, issue a get limits request. in: body required: true type: integer size_response: description: | The share size, in GiBs. in: body required: true type: integer snapshot_force_delete: description: | To force-delete a snapshot, include this param and set its value to ``null``. The force-delete action, unlike the delete action, ignores the snapshot status. in: body required: true type: string snapshot_id: description: | The UUID of the snapshot. in: body required: true type: string snapshot_id_request: description: | The UUID of the share's base snapshot. in: body required: false type: string snapshot_id_shares_response: description: | The UUID of the snapshot that was used to create the share. in: body required: true type: string snapshot_inherit_share_access_support_share_capability: description: | Whether or not the mountable snapshots of this share inherit the access rules of the share. If enabled, access rules cannot be managed on the snapshots directly. Inconsequential if the share doesn't support mounting its snapshots (see capability "mount_snapshot_support"). in: body required: true type: boolean min_version: 2.99 snapshot_instance_id: description: | The UUID of the share snapshot instance. in: body required: false type: string snapshot_instance_id_response: description: | The UUID of the share snapshot instance. in: body required: true type: string snapshot_instance_status: description: | The snapshot instance status. A valid value is ``available``, ``error``, ``creating``, ``deleting``, and ``error_deleting``, ``restoring``, ``unmanage_starting``, ``unmanage_error``, ``manage_starting``, ``manage_error``. in: body required: true type: string snapshot_manage_share_id: description: | The UUID of the share that has snapshot which should be managed. in: body required: true type: string snapshot_manage_status: description: | The snapshot status, which could be ``manage_starting``, ``manage_error``, ``unmanage_starting``, or ``unmanage_error``. in: body required: true type: string snapshot_metadata: description: | One or more metadata key and value pairs as a dictionary of strings to associate with the snapshot. in: body required: false type: object min_version: 2.73 snapshot_project_id: description: | ID of the project that the snapshot belongs to. in: body required: true type: string min_version: 2.17 snapshot_provider_location: description: | Provider location of the snapshot on the backend. in: body required: true type: string snapshot_provider_location_optional: description: | Provider location of the snapshot on the backend. This parameter is only available to users with an "administrator" role by virtue of default RBAC. This behavior can be modified by overriding the ``context_is_admin`` policy via a custom ``policy.yaml``. in: body required: false type: string min_version: 2.12 snapshot_provider_location_request: description: | Provider location of the snapshot on the backend. in: body required: true type: string snapshot_share_id: description: | The UUID of the source share that was used to create the snapshot. in: body required: true type: string snapshot_share_id_request: description: | The UUID of the share from which to create a snapshot. in: body required: true type: string snapshot_share_protocol: description: | The file system protocol of a share snapshot. A valid value is ``NFS``, ``CIFS``, ``GlusterFS``, ``HDFS``, ``CephFS`` or ``MAPRFS``. ``CephFS`` is supported starting with API v2.13. in: body required: true type: string snapshot_share_size: description: | The share snapshot size, in GiBs. in: body required: true type: integer snapshot_size: description: | The snapshot size, in GiBs. in: body required: true type: integer snapshot_status: description: | The snapshot status, which can be ``available``, ``error``, ``creating``, ``deleting``, ``manage_starting``, ``manage_error``, ``unmanage_starting``, ``unmanage_error``, ``error_deleting``, ``migrating``, ``migrating_to`` or ``restoring``. in: body required: true type: string snapshot_status_request: description: | The snapshot status, which can be ``available``, ``error``, ``creating``, ``deleting``, ``manage_starting``, ``manage_error``, ``unmanage_starting``, ``unmanage_error``, ``error_deleting``, ``migrating``, ``migrating_to`` or ``restoring``. in: body required: false type: string snapshot_support: description: | An extra specification that filters back ends by whether they do or do not support share snapshots. in: body required: true type: boolean min_version: 2.2 snapshot_support_share_capability: description: | Whether or not this share supports snapshots. Snapshots are point in time backups of the share. in: body required: true type: boolean min_version: 2.2 snapshot_unmanage: description: | To unmanage a share snapshot, include this parameter and set its value to ``null``. in: body required: true type: string snapshot_user_id: description: | ID of the user that the snapshot was created by. in: body required: true type: string min_version: 2.17 source_backup_id_shares_response: description: | The UUID of the backup that was restored in the share. in: body required: true type: string min_version: 2.80 source_share_group_snapshot_id: description: | The source share group snapshot ID to create the share group. in: body required: false type: string source_share_group_snapshot_id_response: description: | The source share group snapshot ID to create the share group. in: body required: true type: string source_share_group_snapshot_member_id: description: | ID of the group snapshot instance that was the source of this share. in: body required: true type: string min_version: 2.31 source_share_server_id: description: | The ID of the source share server. in: body required: false type: string min_version: 2.57 state: description: | Prior to versions 2.28, the state of all access rules of a given share is the same at all times. This could be ``new``, ``active`` or ``error``. Since 2.28, the state of each access rule of a share is independent of the others and can be ``queued_to_apply``, ``applying``, ``active``, ``error``, ``queued_to_deny`` or ``denying``. A new rule starts out in ``queued_to_apply`` state and is successfully applied if it transitions to ``active`` state. in: body required: true type: string status_share_server_body: description: | The share server status, which is ``active``, ``error``, ``creating``, or ``deleting``. in: body required: true type: string supported_capabilities: description: | The driver's supported attributes for a share server migration. It will contain the following items: ``writable``, ``nondisruptive``, ``preserve_snapshots`` and ``share_network_id``. Drivers will also report if they can perform ``migration_cancel`` and ``migration_get_progress`` operations. All of the mentioned parameters will be present in this object. All parameters but the ``share_network_id`` are boolean values. in: body required: true type: object task_state: description: | For the share migration, the migration task state. A valid value is ``null``, ``migration_starting``, ``migration_error``, ``migration_success``, ``migration_completing``, or ``migrating``. The ``task_state`` is ``null`` unless the share is migrated from one back-end to another. in: body required: true type: string min_version: 2.5 task_state_server_migration: description: For the share server migration, the migration task state. A valid value is ``null``, ``migration_in_progress``, ``migration_cancel_in_progress``, ``migration_cancelled``, ``migration_driver_starting``, ``migration_driver_in_progress``, or ``migration_phase_1_done``. in: body required: true type: string task_state_share_server: description: | For the share server migration, the migration task state. A valid value is ``null``, ``migration_starting``, ``migration_in_progress``, ``migration_completing``, ``migration_success``, ``migration_error``, ``migration_cancel_in_progress``, ``migration_cancelled``, ``migration_driver_in_progress``, or ``migration_driver_phase1_done``. in: body required: false type: string min_version: 2.57 timestamp: description: | The date and time stamp when the API request was issued. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm The ``±hh:mm`` value, if included, returns the time zone as an offset from UTC. For example, ``2015-08-27T09:49:58-05:00``. in: body required: true type: string total_progress: description: | Defines a total progress of share migration. in: body required: true type: integer total_progress_server_migration: description: | Defines a total progress of share server migration. in: body required: true type: integer totalBackupGigabytesUsed: description: | The total number of gigabytes used in a project by backups. in: body required: true type: integer totalReplicaGigabytesUsed: description: | The total number of replica gigabytes used in a project by share replicas. in: body required: true type: integer totalShareBackupsUsed: description: | The total number of created share backups in a project. in: body required: true type: integer totalShareGigabytesUsed: description: | The total number of gigabytes used in a project by shares. in: body required: true type: integer totalShareNetworksUsed: description: | The total number of created share-networks in a project. in: body required: true type: integer totalShareReplicasUsed: description: | The total number of created share replicas in a project. in: body required: true type: integer totalShareSnapshotsUsed: description: | The total number of created share snapshots in a project. in: body required: true type: integer totalSharesUsed: description: | The total number of created shares in a project. in: body required: true type: integer totalSnapshotGigabytesUsed: description: | The total number of gigabytes used in a project by snapshots. in: body required: true type: integer transfer: description: | The transfer object. in: body required: true type: object transfer_expires_at_body: description: | The date and time stamp when the resource transfer will expire. After transfer expired, will be automatically deleted. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm The ``±hh:mm`` value, if included, returns the time zone as an offset from UTC. For example, ``2016-12-31T13:14:15-05:00``. in: body required: true type: string transfer_id_in_body: description: | The transfer UUID. in: body required: true type: string transfer_name: description: | The transfer display name. in: body required: false type: string transfer_resource_id: description: | The UUID of the resource for the transfer. in: body required: true type: string transfer_resource_type: description: | The type of the resource for the transfer. in: body required: true type: string transfers: description: | List of transfers. in: body required: true type: array unit: description: | The time interval during which a number of API requests are allowed. A valid value is ``SECOND``, ``MINUTE``, ``HOUR``, or ``DAY``. Used in conjunction with the ``value`` parameter, expressed as ``value`` per ``unit``. For example, 120 requests are allowed per minute. in: body required: false type: string unrestrict_access: description: | Whether the service should attempt to remove deletion restrictions during the access rule deletion or not. in: body required: false type: string min_version: 2.82 updated_at: description: | The date and time stamp when the resource was last updated within the service's database. If a resource was never updated after it was created, the value of this parameter is set to ``null``. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm The ``±hh:mm`` value, if included, returns the time zone as an offset from UTC. For example, ``2016-12-31T13:14:15-05:00``. in: body required: true type: string updated_at_extensions: description: | The date and time stamp when the extension API was last updated. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm The ``±hh:mm`` value, if included, returns the time zone as an offset from UTC. For example, ``2015-08-27T09:49:58-05:00``. in: body required: true type: string uri: description: | A human-readable URI of a rate limit. format: uri in: body required: false type: string user_id: description: | ID of the user that is part of a given project. in: body required: false type: string value: description: | The number of API requests that are allowed during a time interval. Used in conjunction with the ``unit`` parameter, expressed as ``value`` per ``unit``. For example, 120 requests are allowed per minute. in: body required: false type: integer verb: description: | The HTTP method for the API request. For example, ``GET``, ``POST``, ``DELETE``, and so on. in: body required: false type: string version: description: | The version. in: body required: true type: string version_id: type: string in: body required: true description: > A common name for the version in question. Informative only, it has no real semantic meaning. version_max: type: string in: body required: true description: > If this version of the API supports microversions, the maximum microversion that is supported. This will be the empty string if microversions are not supported. version_media_types: description: | Media types supported by the API. in: body required: true type: object version_min: type: string in: body required: true description: > If this version of the API supports microversions, the minimum microversion that is supported. This will be the empty string if microversions are not supported. version_status: type: string in: body required: true description: | The status of this API version. This can be one of: - ``CURRENT``: this is the preferred version of the API to use - ``SUPPORTED``: this is an older, but still supported version of the API - ``DEPRECATED``: a deprecated version of the API that is slated for removal version_updated: description: | A date and time stamp for API versions. This field presents no meaningful information. in: body required: true type: string versions: type: array in: body required: true description: > A list of version objects that describe the API versions available. volume_type: description: | The volume type. The use of the ``volume_type`` object is deprecated but supported. It is recommended that you use the ``share_type`` object when you create a share type. When you issue a create a share type request, you can submit a request body with either a ``share_type`` or ``volume_type`` object. No matter which object type you include in the request, the API creates both a ``volume_type`` object and a ``share_type`` object. Both objects have the same ID. When you issue a list share types request, the response shows both ``share_types`` and ``volume_types`` objects. in: body required: false type: string volume_type_shares_response: description: | The share type ID. This is a legacy parameter that contains the same value as the ``share_type`` parameter. Do not rely on this parameter as it may be removed in a future API revision. in: body required: true type: string writable: description: | Specifies whether migration should only be performed if the share can remain writable. When this behavior is set to ``True`` and drivers are not capable of allowing the share to remain writable, migration will result in an error status. If drivers are not capable of performing a nondisruptive migration, manila will ensure that the share will remain writable through the data copy phase of migration. However, during the switchover phase the share will be re-exported at the destination, causing the share to be rendered inaccessible for the duration of this phase. As of Ocata release, host-assisted migration cannot provide this capability. in: body required: true type: boolean writable_server_migration: description: | Specifies whether migration should only be performed if the shares can remain writable. When this behavior is set to ``True`` and drivers are not capable of allowing the shares to remain writable, migration will result in an error status. If drivers are not capable of performing a nondisruptive migration, manila will ensure that the shares will remain writable through the data copy phase of migration. However, during the switchover phase all shares will be re-exported at the destination, causing the shares to be rendered inaccessible for the duration of this phase. in: body required: true type: boolean ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8132298 manila-23.0.0.0rc1/api-ref/source/qos-types.inc0000664000175000017500000001463215251045254017716 0ustar00zuulzuul.. -*- rst -*- QoS types ========= A qos-type provides information to backend storage drivers for implementing quality of service(QoS) on resources like shares or share-servers. It contains specifications that act as parameters needed to define QoS policies. Administrators can create qos-type along-with specs. These two, in combination will represent QoS policy. All users within the cloud can then access QoS types. When you create a QoS Type, you can submit a request body with a ``qos_type`` object. In order to create a share with particular QoS type, the user needs to select a valid share-type having reference of QoS type. The share-type extra specification called ``default_qos_type`` should have value as a name of ``qos_type`` object. The scheduler uses the special ``capabilities`` prefix for filtering. The scheduler can only create a share on a back end that reports capabilities that match the un-scoped extra-spec keys for the share type. For details, see `Capabilities and Extra-Specs `_. In case of qos-type, the capability would be ``default_qos_type``. List QoS types ~~~~~~~~~~~~~~ .. rest_method:: GET /v2/qos-types Lists all QoS types. Response codes -------------- .. rest_status_code:: success status.yaml - 200 Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: qos_type_id_body - name: qos_type_name - description: qos_type_description - specs: qos_type_specs - created_at: created_at - updated_at: updated_at Response example ---------------- .. literalinclude:: samples/qos-types-list-response.json :language: javascript Show QoS type detail ~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/qos-types/{qos_type_id} Shows details for a specified QoS type. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - qos_type_id: qos_type_id_path Response Parameters ------------------- .. rest_parameters:: parameters.yaml - id: qos_type_id_body - name: qos_type_name - description: qos_type_description - specs: qos_type_specs - created_at: created_at - updated_at: updated_at Response Example ---------------- .. literalinclude:: ./samples/qos-type-show-response.json :language: javascript List specs ~~~~~~~~~~ .. rest_method:: GET /v2/qos-types/{qos_type_id}/specs Lists the specifications for a QoS type. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - qos_type_id: qos_type_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - specs: qos_type_specs Response example ---------------- .. literalinclude:: samples/qos-types-specs-list-response.json :language: javascript Create QoS type ~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/qos-types Creates a QoS type. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - name: qos_type_name_request - description: qos_type_description_request - specs: qos_type_specs_request_body Request example --------------- .. literalinclude:: samples/qos-type-create-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: qos_type_id_body - name: qos_type_name - description: qos_type_description - specs: qos_type_specs - created_at: created_at - updated_at: updated_at Response example ---------------- .. literalinclude:: samples/qos-type-create-response.json :language: javascript Set spec for QoS type ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/qos-types/{qos_type_id}/specs Sets a specification for the QoS type. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - qos_type_id: qos_type_id_path - specs: qos_type_specs_request_body Request example --------------- .. literalinclude:: samples/qos-type-set-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - specs: qos_type_specs Response example ---------------- .. literalinclude:: samples/qos-type-set-response.json :language: javascript Unset an extra spec ~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/qos-types/{qos_type_id}/specs/{spec-key} Unsets an specification for the QoS type. Response codes -------------- .. rest_status_code:: success status.yaml - 204 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - qos_type_id: qos_type_id_path - spec-key: qos_type_spec_key_path Delete QoS type ~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/qos-types/{qos_type_id} Deletes a QoS type. Response codes -------------- .. rest_status_code:: success status.yaml - 204 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - qos_type_id: qos_type_id_path Update QoS type ~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/qos-types/{qos_type_id} Update a QoS type. QoS type specs cannot be updated with this API. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - qos_type_id: qos_type_id_path - description: qos_type_description_update_request Request example --------------- .. literalinclude:: samples/qos-type-update-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: qos_type_id_body - name: qos_type_name - description: qos_type_description - specs: qos_type_specs - created_at: created_at - updated_at: updated_at Response example ---------------- .. literalinclude:: samples/qos-type-update-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8132298 manila-23.0.0.0rc1/api-ref/source/quota-classes.inc0000664000175000017500000000742315251045254020536 0ustar00zuulzuul.. -*- rst -*- Quota class set =============== Quota classes can be shown and updated for a project. .. important:: Share replicas and replica gigabytes were added to quota management APIs in API version 2.53. Per share gigabytes was added to quota management APIs in API version 2.62. Share backups and backup gigabytes were added to quota management APIs in API version 2.80. Encryption keys was added to quota management APIs in API version 2.90. Show quota classes for a project ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/quota-class-sets/{quota_class_name} Shows quota class set for a project. If no specific value for the quota class resource exists, then the default value will be reported. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - quota_class_name: quota_class_name Response Parameters ------------------- .. rest_parameters:: parameters.yaml - quota_class_set: quota_class_set - share_groups: maxTotalShareGroups - gigabytes: maxTotalShareGigabytes - share_group_snapshots: maxTotalShareGroupSnapshots - snapshots: maxTotalShareSnapshots - snapshot_gigabytes: maxTotalSnapshotGigabytes - shares: maxTotalShares - id: quota_class_id - share_networks: maxTotalShareNetworks - share_replicas: maxTotalShareReplicas - replica_gigabytes: maxTotalReplicaGigabytes - per_share_gigabytes: perShareGigabytes - backups: maxTotalShareBackups - backup_gigabytes: maxTotalBackupGigabytes - encryption_keys: maxTotalEncryptionKeys Response Example ---------------- .. literalinclude:: ./samples/quota-classes-show-response.json :language: javascript Update quota classes for a project ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/quota-class-sets/{quota_class_name} Updates quota class set for a project. If the ``quota_class_name`` key does not exist, then the API will create one. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - quota_class_name: quota_class_name - shares: maxTotalSharesOptional - snapshots: maxTotalShareSnapshotsOptional - gigabytes: maxTotalShareGigabytesOptional - snapshot-gigabytes: maxTotalSnapshotGigabytesOptional - share-networks: maxTotalShareNetworksOptional - share-replicas: maxTotalShareReplicasOptional - replica-gigabytes: maxTotalReplicaGigabytesOptional - per-share-gigabytes: perShareGigabytesOptional - backups: maxTotalShareBackupsOptional - backup-gigabytes: maxTotalBackupGigabytesOptional - encryption_keys: maxTotalEncryptionKeysOptional Request Example --------------- .. literalinclude:: ./samples/quota-classes-update-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - quota_class_set: quota_class_set - share_groups: maxTotalShareGroups - gigabytes: maxTotalShareGigabytes - share_group_snapshots: maxTotalShareGroupSnapshots - snapshots: maxTotalShareSnapshots - snapshot_gigabytes: maxTotalSnapshotGigabytes - shares: maxTotalShares - share_networks: maxTotalShareNetworks - share_replicas: maxTotalShareReplicas - replica_gigabytes: maxTotalReplicaGigabytes - per_share_gigabytes: perShareGigabytes - backups: maxTotalShareBackups - backup_gigabytes: maxTotalBackupGigabytes - encryption_keys: maxTotalEncryptionKeys Response Example ---------------- .. literalinclude:: ./samples/quota-classes-update-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1789151915.81423 manila-23.0.0.0rc1/api-ref/source/quota-sets.inc0000664000175000017500000002147515251045254020062 0ustar00zuulzuul.. -*- rst -*- Quota sets ========== Provides quotas management support. .. important:: For API versions 2.6 and prior, replace ``quota-sets`` in the URLs with ``os-quota-sets``. Share type quotas were added in API version 2.39. It is possible to set quotas per share type for the following quota resources: - ``gigabytes`` - ``snapshots`` - ``shares`` - ``snapshot_gigabytes`` - ``share_groups`` (since API version 2.40) - ``share_group_snapshots`` (since API version 2.40) - ``share_replicas`` (since API version 2.53) - ``replica_gigabytes`` (since API version 2.53) - ``per_share_gigabytes`` (since API version 2.62) - ``backups`` (since API version 2.80) - ``backup_gigabytes`` (since API version 2.80) - ``encryption_keys`` (since API version 2.90) In order to manipulate share type quotas, the requests will be similar to the examples below, except that the ``user_id={user_id}`` must be replaced by ``share_type={share_type_name_or_id}`` in the request path. Share groups and share group snapshots were added to quota management APIs in API version 2.40. Share replicas and replica gigabytes were added to quota management APIs in API version 2.53. Per share gigabytes was added to quota management APIs in API version 2.62. Share backups and backup gigabytes were added to quota management APIs in API version 2.80. Encryption keys was added to quota management APIs in API version 2.90. Show default quota set ~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/quota-sets/{project_id_quota_request_path}/defaults Shows default quotas for a given project. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - project_id_quota_request_path: project_id_quota_request_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - quota_set: quota_set - id: quota_project_id - gigabytes: quota_gigabytes - snapshots: quota_snapshots - shares: quota_shares - snapshot_gigabytes: quota_snapshot_gigabytes - share_networks: quota_share_networks - share_groups: quota_share_groups - share_group_snapshots: quota_share_group_snapshots - share_networks: quota_share_networks_default - share_replicas: quota_share_replicas - replica_gigabytes: quota_replica_gigabytes - per_share_gigabytes: quota_per_share_gigabytes - backups: quota_backups - backup_gigabytes: quota_backup_gigabytes - encryption_keys: quota_encryption_keys Response example ---------------- .. literalinclude:: samples/quota-show-response.json :language: javascript Show quota set ~~~~~~~~~~~~~~ .. rest_method:: GET /v2/quota-sets/{project_id_quota_request_path}?user_id={user_id} Shows quotas for a given project.. If you specify the optional ``user_id`` query parameter, you get the quotas for this user in the project. If you omit this parameter, you get the quotas for the project. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - project_id_quota_request_path: project_id_quota_request_path - user_id: user_id_query - share_type: share_type_for_quota Response parameters ------------------- .. rest_parameters:: parameters.yaml - quota_set: quota_set - id: quota_project_id - gigabytes: quota_gigabytes - snapshots: quota_snapshots - shares: quota_shares - snapshot_gigabytes: quota_snapshot_gigabytes - share_networks: quota_share_networks - share_groups: quota_share_groups - share_group_snapshots: quota_share_group_snapshots - share_replicas: quota_share_replicas - replica_gigabytes: quota_replica_gigabytes - per_share_gigabytes: quota_per_share_gigabytes - backups: quota_backups - backup_gigabytes: quota_backup_gigabytes - encryption_keys: quota_encryption_keys Response example ---------------- .. literalinclude:: samples/quota-show-response.json :language: javascript Show quota set in detail (since API v2.25) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/quota-sets/{project_id_quota_request_path}/detail?user_id={user_id} .. versionadded:: 2.25 Shows quotas for a project in detail. If you specify the optional ``user_id`` query parameter, you get the quotas for this user in the project. If you omit this parameter, you get the quotas for the project. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - project_id_quota_request_path: project_id_quota_request_path - user_id: user_id_query - share_type: share_type_for_quota Response parameters ------------------- .. rest_parameters:: parameters.yaml - quota_set: quota_set - id: quota_project_id - gigabytes: quota_gigabytes_detail - snapshots: quota_snapshots_detail - shares: quota_shares_detail - snapshot_gigabytes: quota_snapshot_gigabytes_detail - share_networks: quota_share_networks_detail - share_groups: quota_share_groups_detail - share_group_snapshots: quota_share_group_snapshots_detail - share_replicas: quota_share_replicas_detail - replica_gigabytes: quota_replica_gigabytes_detail - per_share_gigabytes: quota_per_share_gigabytes_detail - backups: quota_backups_detail - backup_gigabytes: quota_backup_gigabytes_detail - encryption_keys: quota_encryption_keys_detail Response example ---------------- .. literalinclude:: samples/quota-show-detail-response.json :language: javascript Update quota set ~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/quota-sets/{project_id_quota_request_path}?user_id={user_id} Updates quotas for a project. If you specify the optional ``user_id`` query parameter, you update the quotas for this user in the project. If you omit this parameter, you update the quotas for the project. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - project_id_quota_request_path: project_id_quota_request_path - user_id: user_id_query - share_type: share_type_for_quota - quota_set: quota_set - force: force - gigabytes: quota_gigabytes_request - snapshots: quota_snapshots_request - snapshot_gigabytes: quota_snapshot_gigabytes_request - shares: quota_shares_request - share_networks: quota_share_networks_request - share_groups: quota_share_groups_request - share_group_snapshots: quota_share_group_snapshots_request - share_replicas: quota_share_replicas_request - replica_gigabytes: quota_replica_gigabytes_request - per_share_gigabytes: quota_per_share_gigabytes_request - backups: quota_backups_request - backup_gigabytes: quota_backup_gigabytes_request - encryption_keys: quota_encryption_keys_request Request example --------------- .. literalinclude:: samples/quota-update-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - quota_set: quota_set - id: quota_project_id - gigabytes: quota_gigabytes - snapshots: quota_snapshots - shares: quota_shares - snapshot_gigabytes: quota_snapshot_gigabytes - share_networks: quota_share_networks - share_groups: quota_share_groups - share_group_snapshots: quota_share_group_snapshots - share_replicas: quota_share_replicas - replica_gigabytes: quota_replica_gigabytes - per_share_gigabytes: quota_per_share_gigabytes - backups: quota_backups - backup_gigabytes: quota_backup_gigabytes - encryption_keys: quota_encryption_keys Response example ---------------- .. literalinclude:: samples/quota-update-response.json :language: javascript Delete quota set ~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/quota-sets/{project_id_quota_request_path}?user_id={user_id} Deletes quotas for a project. The quota reverts to the default quota. If you specify the optional ``user_id`` query parameter, you delete the quotas for this user in the project. If you omit this parameter, you delete the quotas for the project. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - project_id_quota_request_path: project_id_quota_request_path - user_id: user_id_query - share_type: share_type_for_quota ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1789151915.81423 manila-23.0.0.0rc1/api-ref/source/resource-locks.inc0000664000175000017500000001701515251045254020710 0ustar00zuulzuul.. -*- rst -*- Resource Locks (since API v2.81) ================================ Create, list, update and delete locks on user actions on resources. Create a resource lock ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/resource-locks .. versionadded:: 2.81 Lock a specific action on a given resource. Not all resources are supported, and not actions on supported resources can be prevented with this mechanism. A lock can only be removed or manipulated by the user that created it, or by a more privileged user. The cloud administrator can use a ``policy.yaml`` file to tweak permissions on who can manipulate and delete locks created by other users. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - service_token: service_token_locks - resource_lock: resource_lock_object - resource_id: resource_lock_resource_id - resource_type: resource_lock_resource_type - resource_action: resource_lock_resource_action_create_optional - lock_reason: resource_lock_lock_reason_optional Request Example --------------- .. literalinclude:: ./samples/resource-lock-create-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - resource_lock: resource_lock_object - id: resource_lock_id - user_id: resource_lock_user_id - project_id: resource_lock_project_id - lock_context: resource_lock_lock_context - resource_type: resource_lock_resource_type - resource_id: resource_lock_resource_id - resource_action: resource_lock_resource_action - lock_reason: resource_lock_lock_reason - created_at: created_at - updated_at: updated_at - links: links Response Example ---------------- .. literalinclude:: ./samples/resource-lock-create-response.json :language: javascript List resource locks ~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/resource-locks .. versionadded:: 2.81 Retrieve resource locks with filters Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - service_token: service_token_locks - id: resource_lock_id_query - resource_id: resource_lock_resource_id_query - resource_action: resource_lock_resource_action_query - resource_type: resource_lock_resource_type_query - user_id: resource_lock_user_id_query - project_id: resource_lock_project_id_query - all_projects: resource_lock_all_projects_query - lock_context: resource_lock_lock_context_query - created_since: created_since_query - created_before: created_before_query - lock_reason: resource_lock_lock_reason_query - lock_reason~: resource_lock_lock_reason_inexact_query - sort_key: sort_key_resource_locks - sort_dir: sort_dir - offset: offset - with_count: with_count_query_without_min_version Response Parameters ------------------- .. rest_parameters:: parameters.yaml - resource_locks: resource_locks_object - id: resource_lock_id - user_id: resource_lock_user_id - project_id: resource_lock_project_id - lock_context: resource_lock_lock_context - resource_type: resource_lock_resource_type - resource_id: resource_lock_resource_id - resource_action: resource_lock_resource_action - lock_reason: resource_lock_lock_reason - created_at: created_at - updated_at: updated_at - links: links - count: count_without_min_version Response Example ---------------- .. literalinclude:: ./samples/resource-lock-get-all-response.json :language: javascript Get a resource lock ~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/resource-locks/{resource-lock-id} .. versionadded:: 2.81 Retrieve a specific resource lock By default, resource locks can be viewed by all users within a project that owns the locks. The cloud administrator can use a ``policy.yaml`` file to tweak this behavior. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - service_token: service_token_locks - resource_lock_id: resource_lock_id_path Response Parameters ------------------- .. rest_parameters:: parameters.yaml - resource_lock: resource_lock_object - id: resource_lock_id - user_id: resource_lock_user_id - project_id: resource_lock_project_id - lock_context: resource_lock_lock_context - resource_type: resource_lock_resource_type - resource_id: resource_lock_resource_id - resource_action: resource_lock_resource_action - lock_reason: resource_lock_lock_reason - created_at: created_at - updated_at: updated_at - links: links Response Example ---------------- .. literalinclude:: ./samples/resource-lock-get-response.json :language: javascript Update a resource lock ~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/resource-locks/{resource-lock-id} .. versionadded:: 2.81 Update a specific resource lock By default, resource locks can be updated by the user that created the lock unless the ``lock_context`` is set to ``admin`` or ``service``. A user with ``service`` role is required to manipulate locks that have a ``lock_context`` set to ``service``. Users with ``admin`` role can manipulate all locks. Administrators can use ``policy.yaml`` to tweak this behavior. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - service_token: service_token_locks - resource_lock_id: resource_lock_id_path - resource_lock: resource_lock_object - resource_action: resource_lock_resource_action_optional - lock_reason: resource_lock_lock_reason_optional Request Example ---------------- .. literalinclude:: ./samples/resource-lock-update-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - resource_lock: resource_lock_object - id: resource_lock_id - user_id: resource_lock_user_id - project_id: resource_lock_project_id - lock_context: resource_lock_lock_context - resource_type: resource_lock_resource_type - resource_id: resource_lock_resource_id - resource_action: resource_lock_resource_action - lock_reason: resource_lock_lock_reason - created_at: created_at - updated_at: updated_at - links: links Response Example ---------------- .. literalinclude:: ./samples/resource-lock-update-response.json :language: javascript Delete a resource lock ~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/resource-locks/{resource-lock-id} .. versionadded:: 2.81 Delete a specific resource lock By default, resource locks can be deleted by the user that created the lock unless the ``lock_context`` is set to ``admin`` or ``service``. A user with ``service`` role is required to delete locks that have a ``lock_context`` set to ``service``. Users with ``admin`` role can delete any lock. Administrators can use ``policy.yaml`` to tweak this behavior. This request provides no response body. Response codes -------------- .. rest_status_code:: success status.yaml - 204 .. rest_status_code:: error status.yaml - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - service_token: service_token_locks - resource_lock_id: resource_lock_id_path ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.006185 manila-23.0.0.0rc1/api-ref/source/samples/0000775000175000017500000000000015251045336016716 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1789151915.81423 manila-23.0.0.0rc1/api-ref/source/samples/availability-zones-list-response.json0000664000175000017500000000034715251045254026227 0ustar00zuulzuul{ "availability_zones": [ { "name": "nova", "created_at": "2015-09-18T09:50:55.000000", "updated_at": null, "id": "388c983d-258e-4a0e-b1ba-10da37d766db" } ] } ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1789151915.81423 manila-23.0.0.0rc1/api-ref/source/samples/export-location-list-response.json0000664000175000017500000000120015251045254025535 0ustar00zuulzuul{ "export_locations": [ { "path": "10.254.0.3:/shares/share-e1c2d35e-fe67-4028-ad7a-45f668732b1d", "share_instance_id": "e1c2d35e-fe67-4028-ad7a-45f668732b1d", "is_admin_only": false, "id": "b6bd76ce-12a2-42a9-a30a-8a43b503867d", "preferred": false }, { "path": "10.0.0.3:/shares/share-e1c2d35e-fe67-4028-ad7a-45f668732b1d", "share_instance_id": "e1c2d35e-fe67-4028-ad7a-45f668732b1d", "is_admin_only": true, "id": "6921e862-88bc-49a5-a2df-efeed9acd583", "preferred": false } ] } ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1789151915.81423 manila-23.0.0.0rc1/api-ref/source/samples/export-location-set-metadata-request.json0000664000175000017500000000026715251045254027001 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "key1": "value1", "new_metadata_key": "new_information", "key": "value" } } ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1789151915.81423 manila-23.0.0.0rc1/api-ref/source/samples/export-location-set-metadata-response.json0000664000175000017500000000027015251045254027141 0ustar00zuulzuul { "metadata": { "aim": "changed_doc", "project": "my_app", "key1": "value1", "new_metadata_key": "new_information", "key": "value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/export-location-show-metadata-item-request.json0000664000175000017500000000006415251045254030115 0ustar00zuulzuul{ "meta": { "project": "my_app" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/export-location-show-metadata-item-response.json0000664000175000017500000000006415251045254030263 0ustar00zuulzuul{ "meta": { "project": "my_app" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/export-location-show-metadata-response.json0000664000175000017500000000011615251045254027325 0ustar00zuulzuul{ "metadata": { "project": "my_app", "aim": "doc" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/export-location-show-response.json0000664000175000017500000000061715251045254025555 0ustar00zuulzuul{ "export_location": { "created_at": "2016-03-24T14:20:47.000000", "updated_at": "2016-03-24T14:20:47.000000", "preferred": false, "is_admin_only": true, "share_instance_id": "e1c2d35e-fe67-4028-ad7a-45f668732b1d", "path": "10.0.0.3:/shares/share-e1c2d35e-fe67-4028-ad7a-45f668732b1d", "id": "6921e862-88bc-49a5-a2df-efeed9acd583" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/export-location-update-metadata-request.json0000664000175000017500000000020515251045254027460 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/export-location-update-metadata-response.json0000664000175000017500000000020515251045254027626 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/export-location-update-null-metadata-request.json0000664000175000017500000000003115251045254030425 0ustar00zuulzuul{ "metadata": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/export-location-update-null-metadata-response.json0000664000175000017500000000003115251045254030573 0ustar00zuulzuul{ "metadata": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/extensions-list-response.json0000664000175000017500000000645515251045254024626 0ustar00zuulzuul{ "extensions": [ { "alias": "os-extended-quotas", "updated": "2013-06-09T00:00:00+00:00", "name": "ExtendedQuotas", "links": [], "description": "Extend quotas. Adds ability for admins to delete quota and optionally force the update Quota command." }, { "alias": "os-quota-sets", "updated": "2011-08-08T00:00:00+00:00", "name": "Quotas", "links": [], "description": "Quotas management support." }, { "alias": "os-quota-class-sets", "updated": "2012-03-12T00:00:00+00:00", "name": "QuotaClasses", "links": [], "description": "Quota classes management support." }, { "alias": "os-share-unmanage", "updated": "2015-02-17T00:00:00+00:00", "name": "ShareUnmanage", "links": [], "description": "Enable share unmanage operation." }, { "alias": "os-types-manage", "updated": "2011-08-24T00:00:00+00:00", "name": "TypesManage", "links": [], "description": "Types manage support." }, { "alias": "share-actions", "updated": "2012-08-14T00:00:00+00:00", "name": "ShareActions", "links": [], "description": "Enable share actions." }, { "alias": "os-availability-zone", "updated": "2015-07-28T00:00:00+00:00", "name": "AvailabilityZones", "links": [], "description": "Describe Availability Zones." }, { "alias": "os-user-quotas", "updated": "2013-07-18T00:00:00+00:00", "name": "UserQuotas", "links": [], "description": "Project user quota support." }, { "alias": "os-share-type-access", "updated": "2015-03-02T00:00:00Z", "name": "ShareTypeAccess", "links": [], "description": "share type access support." }, { "alias": "os-types-extra-specs", "updated": "2011-08-24T00:00:00+00:00", "name": "TypesExtraSpecs", "links": [], "description": "Type extra specs support." }, { "alias": "os-admin-actions", "updated": "2015-08-03T00:00:00+00:00", "name": "AdminActions", "links": [], "description": "Enable admin actions." }, { "alias": "os-used-limits", "updated": "2014-03-27T00:00:00+00:00", "name": "UsedLimits", "links": [], "description": "Provide data on limited resources that are being used." }, { "alias": "os-services", "updated": "2012-10-28T00:00:00-00:00", "name": "Services", "links": [], "description": "Services support." }, { "alias": "os-share-manage", "updated": "2015-02-17T00:00:00+00:00", "name": "ShareManage", "links": [], "description": "Allows existing share to be 'managed' by Manila." } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/limits-response.json0000664000175000017500000000147715251045254022756 0ustar00zuulzuul{ "limits": { "rate": [], "absolute": { "totalShareNetworksUsed": 0, "maxTotalShareGigabytes": 1000, "maxTotalShareNetworks": 10, "totalSharesUsed": 0, "totalShareGigabytesUsed": 0, "totalShareSnapshotsUsed": 0, "maxTotalShares": 50, "totalSnapshotGigabytesUsed": 0, "maxTotalSnapshotGigabytes": 1000, "maxTotalShareSnapshots": 50, "maxTotalShareReplicas": 100, "maxTotalReplicaGigabytes": 1000, "totalShareReplicasUsed": 0, "totalReplicaGigabytesUsed": 0, "maxTotalShareBackups": 100, "maxTotalBackupGigabytes": 1000, "totalShareBackupsUsed": 0, "totalBackupGigabytesUsed": 0 } } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/pools-list-detailed-response.json0000664000175000017500000000752115251045254025327 0ustar00zuulzuul{ "pools": [ { "name": "opencloud@alpha#ALPHA_pool", "host": "opencloud", "backend": "alpha", "pool": "ALPHA_pool", "capabilities": { "pool_name": "ALPHA_pool", "total_capacity_gb": 1230.0, "free_capacity_gb": 1210.0, "reserved_percentage": 0, "share_backend_name": "ALPHA", "storage_protocol": "NFS_CIFS", "vendor_name": "Open Source", "driver_version": "1.0", "timestamp": "2019-05-07T00:28:02.935569", "driver_handles_share_servers": true, "snapshot_support": true, "create_share_from_snapshot_support": true, "revert_to_snapshot_support": true, "mount_snapshot_support": true, "dedupe": false, "compression": false, "replication_type": null, "replication_domain": null, "sg_consistent_snapshot_support": "pool", "ipv4_support": true, "ipv6_support": false } }, { "name": "opencloud@beta#BETA_pool", "host": "opencloud", "backend": "beta", "pool": "BETA_pool", "capabilities": { "pool_name": "BETA_pool", "total_capacity_gb": 1230.0, "free_capacity_gb": 1210.0, "reserved_percentage": 0, "share_backend_name": "BETA", "storage_protocol": "NFS_CIFS", "vendor_name": "Open Source", "driver_version": "1.0", "timestamp": "2019-05-07T00:28:02.817309", "driver_handles_share_servers": true, "snapshot_support": true, "create_share_from_snapshot_support": true, "revert_to_snapshot_support": true, "mount_snapshot_support": true, "dedupe": false, "compression": false, "replication_type": null, "replication_domain": null, "sg_consistent_snapshot_support": "pool", "ipv4_support": true, "ipv6_support": false } }, { "name": "opencloud@gamma#GAMMA_pool", "host": "opencloud", "backend": "gamma", "pool": "GAMMA_pool", "capabilities": { "pool_name": "GAMMA_pool", "total_capacity_gb": 1230.0, "free_capacity_gb": 1210.0, "reserved_percentage": 0, "replication_type": "readable", "share_backend_name": "GAMMA", "storage_protocol": "NFS_CIFS", "vendor_name": "Open Source", "driver_version": "1.0", "timestamp": "2019-05-07T00:28:02.899888", "driver_handles_share_servers": false, "snapshot_support": true, "create_share_from_snapshot_support": true, "revert_to_snapshot_support": true, "mount_snapshot_support": true, "dedupe": false, "compression": false, "replication_domain": "replica_domain_store1", "sg_consistent_snapshot_support": "pool", "ipv4_support": true, "ipv6_support": false } }, { "name": "opencloud@delta#DELTA_pool", "host": "opencloud", "backend": "delta", "pool": "DELTA_pool", "capabilities": { "pool_name": "DELTA_pool", "total_capacity_gb": 1230.0, "free_capacity_gb": 1210.0, "reserved_percentage": 0, "replication_type": "readable", "share_backend_name": "DELTA", "storage_protocol": "NFS_CIFS", "vendor_name": "Open Source", "driver_version": "1.0", "timestamp": "2019-05-07T00:28:02.963660", "driver_handles_share_servers": false, "snapshot_support": true, "create_share_from_snapshot_support": true, "revert_to_snapshot_support": true, "mount_snapshot_support": true, "dedupe": false, "compression": false, "replication_domain": "replica_domain_store1", "sg_consistent_snapshot_support": "pool", "ipv4_support": true, "ipv6_support": false } } ] }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8152304 manila-23.0.0.0rc1/api-ref/source/samples/pools-list-response.json0000664000175000017500000000106315251045254023551 0ustar00zuulzuul{ "pools": [ { "name": "opencloud@alpha#ALPHA_pool", "host": "opencloud", "backend": "alpha", "pool": "ALPHA_pool" }, { "name": "opencloud@beta#BETA_pool", "host": "opencloud", "backend": "beta", "pool": "BETA_pool" }, { "name": "opencloud@gamma#GAMMA_pool", "host": "opencloud", "backend": "gamma", "pool": "GAMMA_pool" }, { "name": "opencloud@delta#DELTA_pool", "host": "opencloud", "backend": "delta", "pool": "DELTA_pool" } ] }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/qos-type-create-request.json0000664000175000017500000000035315251045254024321 0ustar00zuulzuul{ "qos_type": { "specs": { "policy_type": "adaptive", "peak_iops": 5000, "expected_iops": 2000 }, "name": "testing", "description": "qos type description" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/qos-type-create-response.json0000664000175000017500000000056115251045254024470 0ustar00zuulzuul{ "qos_type": { "id": "1fa1342b-de9d-4d89-bdc8-af67795c0e52", "specs": { "policy_type": "adaptive", "peak_iops": 5000, "expected_iops": 2000 }, "name": "testing", "description": "qos type description", "created_at": "2026-02-18T05:09:54.000000", "updated_at": null } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/qos-type-set-request.json0000664000175000017500000000006615251045254023652 0ustar00zuulzuul{ "specs": { "my_key": "my_value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/qos-type-set-response.json0000664000175000017500000000006615251045254024020 0ustar00zuulzuul{ "specs": { "my_key": "my_value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/qos-type-show-response.json0000664000175000017500000000056115251045254024205 0ustar00zuulzuul{ "qos_type": { "id": "1fa1342b-de9d-4d89-bdc8-af67795c0e52", "specs": { "policy_type": "adaptive", "peak_iops": 5000, "expected_iops": 2000 }, "name": "testing", "description": "qos type description", "created_at": "2026-02-18T05:09:54.000000", "updated_at": null } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/qos-type-update-request.json0000664000175000017500000000011315251045254024332 0ustar00zuulzuul{ "qos_type": { "description": "qos type description2" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/qos-type-update-response.json0000664000175000017500000000061215251045254024504 0ustar00zuulzuul{ "qos_type": { "id": "1fa1342b-de9d-4d89-bdc8-af67795c0e52", "specs": { "policy_type": "adaptive", "peak_iops": 5000, "expected_iops": 2000 }, "name": "testing", "description": "qos type description2", "created_at": "2026-02-18T05:09:54.000000", "updated_at": "2026-02-18T06:12:33.000000" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/qos-types-list-response.json0000664000175000017500000000151015251045254024356 0ustar00zuulzuul{ "qos_types": [ { "id": "1fa1342b-de9d-4d89-bdc8-af67795c0e52", "specs": { "policy_type": "adaptive", "peak_iops": 5000, "expected_iops": 2000 }, "name": "testing", "description": "qos type description", "created_at": "2026-02-18T05:09:54.000000", "updated_at": null }, { "id": "2fa1342b-de9d-4d89-bdc8-af67795c0e52", "specs": { "policy_type": "adaptive", "peak_iops": 3000, "expected_iops": 1000 }, "name": "testing2", "description": "qos type description2", "created_at": "2026-02-18T05:10:12.000000", "updated_at": null } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/qos-types-specs-list-response.json0000664000175000017500000000016515251045254025476 0ustar00zuulzuul{ "specs": { "policy_type": "adaptive", "peak_iops": 5000, "expected_iops": 2000 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/quota-classes-show-response.json0000664000175000017500000000064615251045254025214 0ustar00zuulzuul{ "quota_class_set": { "share_groups": 50, "gigabytes": 1000, "share_group_snapshots": 50, "snapshots": 50, "snapshot_gigabytes": 1000, "shares": 50, "id": "default", "share_networks": 10, "share_replicas": 100, "replica_gigabytes": 1000, "per_share_gigabytes": -1, "backups": 50, "backup_gigabytes": 1000 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/quota-classes-update-request.json0000664000175000017500000000015415251045254025342 0ustar00zuulzuul{ "quota_class_set": { "class_name": "test-qupta-class-update", "gigabytes": 20 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/quota-classes-update-response.json0000664000175000017500000000061315251045254025510 0ustar00zuulzuul{ "quota_class_set": { "share_groups": 50, "gigabytes": 20, "share_group_snapshots": 50, "snapshots": 50, "snapshot_gigabytes": 1000, "shares": 50, "share_networks": 10, "share_replicas": 100, "replica_gigabytes": 1000, "per_share_gigabytes": -1, "backups": 50, "backup_gigabytes": 1000 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/quota-show-detail-response.json0000664000175000017500000000301115251045254025006 0ustar00zuulzuul{ "quota_set": { "id": "16e1ab15c35a457e9c2b2aa189f544e1", "gigabytes": {"in_use": 0, "limit": 1000, "reserved": 0}, "shares": {"in_use": 0, "limit": 50, "reserved": 0}, "snapshot_gigabytes": {"in_use": 0, "limit": 1000, "reserved": 0}, "snapshots": {"in_use": 0, "limit": 50, "reserved": 0}, "share_networks": {"in_use": 0, "limit": 10, "reserved": 0}, "share_groups": {"in_use": 0, "limit": 10, "reserved": 0}, "share_group_snapshots": {"in_use": 0, "limit": 10, "reserved": 0}, "share_replicas": {"in_use": 0, "limit": 100, "reserved": 0}, "replica_gigabytes": {"in_use": 0, "limit": 1000, "reserved": 0}, "per_share_gigabytes": {"in_use": 0, "limit": -1, "reserved": 0}, "backup_gigabytes": {"in_use": 0, "limit": 1000, "reserved": 0}, "backups": {"in_use": 0, "limit": 50, "reserved": 0} } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/quota-show-response.json0000664000175000017500000000067115251045254023557 0ustar00zuulzuul{ "quota_set": { "gigabytes": 1000, "shares": 50, "snapshot_gigabytes": 1000, "snapshots": 50, "id": "16e1ab15c35a457e9c2b2aa189f544e1", "share_networks": 10, "share_groups": 10, "share_group_snapshots": 10, "share_replicas": 100, "replica_gigabytes": 1000, "per_share_gigabytes": -1, "backups": 50, "backup_gigabytes": 1000 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/quota-update-request.json0000664000175000017500000000026515251045254023712 0ustar00zuulzuul{ "quota_set": { "snapshot_gigabytes": 999, "snapshots": 49, "share_networks": 9, "share_replicas": 89, "per_share_gigabytes": 5 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/quota-update-response.json0000664000175000017500000000060315251045254024054 0ustar00zuulzuul{ "quota_set": { "gigabytes": 1000, "snapshot_gigabytes": 999, "shares": 50, "snapshots": 49, "share_networks": 9, "share_groups": 12, "share_group_snapshots": 12, "share_replicas": 89, "replica_gigabytes": 1000, "per_share_gigabytes": -1, "backups": 40, "backup_gigabytes": 500 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/resource-lock-create-request.json0000664000175000017500000000035215251045254025314 0ustar00zuulzuul{ "resource_lock": { "resource_id": "5a313549-d346-44b6-9650-738ce08a9fee", "resource_type": "share", "resource_action": "delete", "lock_reason": "Locked for deletion until year end audit." } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8162305 manila-23.0.0.0rc1/api-ref/source/samples/resource-lock-create-response.json0000664000175000017500000000140115251045254025456 0ustar00zuulzuul{ "resource_lock": { "id": "713dc92d-bf5e-4b04-875b-2b2d284d8f94", "user_id": "89de351d3b5744b9853ec4829aa0e714", "project_id": "db2e72fef7864bbbbf210f22da7f1158", "lock_context": "user", "resource_type": "share", "resource_id": "5a313549-d346-44b6-9650-738ce08a9fee", "resource_action": "delete", "lock_reason": "Locked for deletion until year end audit.", "created_at": "2023-07-17T22:11:48.144302", "updated_at": null, "links": [ { "rel": "self", "href": "http://203.0.113.30/share/v2/resource_locks/713dc92d-bf5e-4b04-875b-2b2d284d8f94" }, { "rel": "bookmark", "href": "http://203.0.113.30/share/resource_locks/713dc92d-bf5e-4b04-875b-2b2d284d8f94" } ] } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/resource-lock-get-all-response.json0000664000175000017500000000305015251045254025542 0ustar00zuulzuul{ "resource_locks": [ { "id": "118750ee-b62b-4cae-9a94-7da29a4f831f", "user_id": "89de351d3b5744b9853ec4829aa0e714", "project_id": "db2e72fef7864bbbbf210f22da7f1158", "lock_context": "user", "resource_type": "share", "resource_id": "4c0b4d35-4ea8-4811-a1e2-a065c64225a8", "resource_action": "delete", "lock_reason": null, "created_at": "2023-07-17T22:53:18.894553", "updated_at": null, "links": [ { "rel": "self", "href": "http://203.0.113.30/share/v2/resource_locks/118750ee-b62b-4cae-9a94-7da29a4f831f" }, { "rel": "bookmark", "href": "http://203.0.113.30/share/resource_locks/118750ee-b62b-4cae-9a94-7da29a4f831f" } ] }, { "id": "713dc92d-bf5e-4b04-875b-2b2d284d8f94", "user_id": "89de351d3b5744b9853ec4829aa0e714", "project_id": "db2e72fef7864bbbbf210f22da7f1158", "lock_context": "user", "resource_type": "share", "resource_id": "5a313549-d346-44b6-9650-738ce08a9fee", "resource_action": "delete", "lock_reason": "Locked for deletion until year end audit.", "created_at": "2023-07-17T22:11:48.144302", "updated_at": null, "links": [ { "rel": "self", "href": "http://203.0.113.30/share/v2/resource_locks/713dc92d-bf5e-4b04-875b-2b2d284d8f94" }, { "rel": "bookmark", "href": "http://203.0.113.30/share/resource_locks/713dc92d-bf5e-4b04-875b-2b2d284d8f94" } ] } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/resource-lock-get-response.json0000664000175000017500000000140115251045254024772 0ustar00zuulzuul{ "resource_lock": { "id": "713dc92d-bf5e-4b04-875b-2b2d284d8f94", "user_id": "89de351d3b5744b9853ec4829aa0e714", "project_id": "db2e72fef7864bbbbf210f22da7f1158", "lock_context": "user", "resource_type": "share", "resource_id": "5a313549-d346-44b6-9650-738ce08a9fee", "resource_action": "delete", "lock_reason": "Locked for deletion until year end audit.", "created_at": "2023-07-17T22:11:48.144302", "updated_at": null, "links": [ { "rel": "self", "href": "http://203.0.113.30/share/v2/resource_locks/713dc92d-bf5e-4b04-875b-2b2d284d8f94" }, { "rel": "bookmark", "href": "http://203.0.113.30/share/resource_locks/713dc92d-bf5e-4b04-875b-2b2d284d8f94" } ] } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/resource-lock-update-request.json0000664000175000017500000000012415251045254025330 0ustar00zuulzuul{ "resource_lock": { "lock_reason": "This is a protected share" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/resource-lock-update-response.json0000664000175000017500000000141115251045254025476 0ustar00zuulzuul{ "resource_lock": { "id": "118750ee-b62b-4cae-9a94-7da29a4f831f", "user_id": "89de351d3b5744b9853ec4829aa0e714", "project_id": "db2e72fef7864bbbbf210f22da7f1158", "lock_context": "user", "resource_type": "share", "resource_id": "4c0b4d35-4ea8-4811-a1e2-a065c64225a8", "resource_action": "delete", "lock_reason": "This is a protected share", "created_at": "2023-07-17T22:53:18.894553", "updated_at": "2023-07-17T23:18:44.284565", "links": [ { "rel": "self", "href": "http://203.0.113.30/share/v2/resource_locks/118750ee-b62b-4cae-9a94-7da29a4f831f" }, { "rel": "bookmark", "href": "http://203.0.113.30/share/resource_locks/118750ee-b62b-4cae-9a94-7da29a4f831f" } ] } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/security-service-create-request.json0000664000175000017500000000035415251045254026046 0ustar00zuulzuul{ "security_service": { "description": "Creating my first Security Service", "dns_ip": "10.0.0.0/24", "user": "demo", "password": "***", "type": "kerberos", "name": "SecServ1" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/security-service-create-response.json0000664000175000017500000000106215251045254026211 0ustar00zuulzuul{ "security_service": { "status": "new", "domain": null, "ou": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "name": "SecServ1", "created_at": "2015-09-07T12:19:10.695211", "updated_at": null, "server": null, "default_ad_site": null, "dns_ip": "10.0.0.0/24", "user": "demo", "password": "supersecret", "type": "kerberos", "id": "3c829734-0679-4c17-9637-801da48c0d5f", "description": "Creating my first Security Service" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/security-service-show-response.json0000664000175000017500000000106215251045254025726 0ustar00zuulzuul{ "security_service": { "status": "new", "domain": null, "ou": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "name": "SecServ1", "created_at": "2015-09-07T12:19:10.000000", "updated_at": null, "server": null, "default_ad_site": null, "dns_ip": "10.0.0.0/24", "user": "demo", "password": "supersecret", "type": "kerberos", "id": "3c829734-0679-4c17-9637-801da48c0d5f", "description": "Creating my first Security Service" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/security-service-update-request.json0000664000175000017500000000030615251045254026062 0ustar00zuulzuul{ "security_service": { "domain": "my_domain", "ou": "CN=Computers", "password": "***", "user": "new_user", "description": "Adding a description" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/security-service-update-response.json0000664000175000017500000000105115251045254026226 0ustar00zuulzuul{ "security_service": { "status": "new", "domain": "my_domain", "ou": "CN=Computers", "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "name": "SecServ1", "created_at": "2015-09-07T12:19:10.000000", "updated_at": "2015-09-07T12:47:21.858737", "server": null, "dns_ip": "10.0.0.0/24", "user": "new_user", "password": "pass", "type": "kerberos", "id": "3c829734-0679-4c17-9637-801da48c0d5f", "description": "Adding a description" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/security-services-list-detailed-response.json0000664000175000017500000000243015251045254027655 0ustar00zuulzuul{ "security_services": [ { "status": "new", "domain": null, "ou": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "name": "SecServ1", "created_at": "2015-09-07T12:19:10.000000", "description": "Creating my first Security Service", "updated_at": null, "server": null, "default_ad_site": null, "dns_ip": "10.0.0.0/24", "user": "demo", "password": "supersecret", "type": "kerberos", "id": "3c829734-0679-4c17-9637-801da48c0d5f", "share_networks": [] }, { "status": "new", "domain": null, "ou": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "name": "SecServ2", "created_at": "2015-09-07T12:25:03.000000", "description": "Creating my second Security Service", "updated_at": null, "server": null, "default_ad_site": null, "dns_ip": "10.0.0.0/24", "user": null, "password": null, "type": "ldap", "id": "5a1d3a12-34a7-4087-8983-50e9ed03509a", "share_networks": [] } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/security-services-list-for-share-network-response.json0000664000175000017500000000264015251045254031462 0ustar00zuulzuul{ "security_services": [ { "status": "new", "domain": null, "ou": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "name": "SecServ1", "created_at": "2015-09-07T12:19:10.000000", "description": "Creating my first Security Service", "updated_at": null, "server": null, "default_ad_site": null, "dns_ip": "10.0.0.0/24", "user": "demo", "password": "supersecret", "type": "kerberos", "id": "3c829734-0679-4c17-9637-801da48c0d5f", "share_networks": [ "d8ae6799-2567-4a89-aafb-fa4424350d2b" ] }, { "status": "new", "domain": null, "ou": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "name": "SecServ2", "created_at": "2015-09-07T12:25:03.000000", "description": "Creating my second Security Service", "updated_at": null, "server": null, "default_ad_site": null, "dns_ip": "10.0.0.0/24", "user": null, "password": null, "type": "ldap", "id": "5a1d3a12-34a7-4087-8983-50e9ed03509a", "share_networks": [ "d8ae6799-2567-4a89-aafb-fa4424350d2b" ] } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/security-services-list-response.json0000664000175000017500000000056615251045254026114 0ustar00zuulzuul{ "security_services": [ { "status": "new", "type": "kerberos", "id": "3c829734-0679-4c17-9637-801da48c0d5f", "name": "SecServ1" }, { "status": "new", "type": "ldap", "id": "5a1d3a12-34a7-4087-8983-50e9ed03509a", "name": "SecServ2" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/service-disable-request.json0000664000175000017500000000022415251045254024335 0ustar00zuulzuul{ "binary": "manila-share", "host": "openstackhost@generic#pool_0", "disabled_reason": "Service taken down for maintenance until May" } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/service-disable-response.json0000664000175000017500000000025615251045254024510 0ustar00zuulzuul{ "binary": "manila-share", "host": "openstackhost@generic#pool_0", "status": "disabled", "disabled_reason": "Service taken down for maintenance until May" } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/service-enable-request.json0000664000175000017500000000011515251045254024157 0ustar00zuulzuul{ "binary": "manila-share", "host": "openstackhost@generic#pool_0" } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/service-enable-response.json0000664000175000017500000000020115251045254024321 0ustar00zuulzuul{ "binary": "manila-share", "host": "openstackhost@generic#pool_0", "status": "enabled", "disabled_reason": "" } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8172307 manila-23.0.0.0rc1/api-ref/source/samples/service-ensure-shares-request.json0000664000175000017500000000005715251045254025522 0ustar00zuulzuul{ "host": "openstackhost@storagebackend" } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/services-list-response.json0000664000175000017500000000104415251045254024237 0ustar00zuulzuul{ "services": [ { "status": "enabled", "binary": "manila-share", "zone": "nova", "host": "manila2@generic1", "updated_at": "2015-09-07T13:03:57.000000", "state": "up", "id": 1 }, { "status": "enabled", "binary": "manila-scheduler", "zone": "nova", "host": "manila2", "updated_at": "2015-09-07T13:03:57.000000", "state": "up", "id": 2 } ] } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/services-list-with-filters-response.json0000664000175000017500000000044215251045254026657 0ustar00zuulzuul{ "services": [ { "status": "enabled", "binary": "manila-share", "zone": "nova", "host": "manila2@generic1", "updated_at": "2015-09-07T13:14:27.000000", "state": "up", "id": 1 } ] } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-access-rules-list-response.json0000664000175000017500000000170515251045254026111 0ustar00zuulzuul{ "access_list": [ { "access_level": "rw", "state": "error", "id": "507bf114-36f2-4f56-8cf4-857985ca87c1", "access_type": "cert", "access_to": "example.com", "access_key": null, "created_at": "2018-07-17T02:01:04.000000", "updated_at": "2018-07-17T02:01:04.000000", "metadata": { "key1": "value1", "key2": "value2" } }, { "access_level": "rw", "state": "active", "id": "a25b2df3-90bd-4add-afa6-5f0dbbd50452", "access_type": "ip", "access_to": "0.0.0.0/0", "access_key": null, "created_at": "2018-07-16T01:03:21.000000", "updated_at": "2018-07-16T01:03:21.000000", "metadata": { "key3": "value3", "key4": "value4" } } ] } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-access-rules-show-response.json0000664000175000017500000000074615251045254026122 0ustar00zuulzuul{ "access": { "access_level": "rw", "state": "error", "id": "507bf114-36f2-4f56-8cf4-857985ca87c1", "share_id": "fb213952-2352-41b4-ad7b-2c4c69d13eef", "access_type": "cert", "access_to": "example.com", "access_key": null, "created_at": "2018-07-17T02:01:04.000000", "updated_at": "2018-07-17T02:01:04.000000", "metadata": { "key1": "value1", "key2": "value2" } } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-access-rules-update-metadata-request.json0000664000175000017500000000021315251045254030021 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "speed": "my_fast_access", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-access-rules-update-metadata-response.json0000664000175000017500000000021315251045254030167 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "speed": "my_fast_access", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-access-rules-update-request.json0000664000175000017500000000007615251045254026252 0ustar00zuulzuul{ "update_access": { "access_level": "ro" } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-access-rules-update-response.json0000664000175000017500000000074215251045254026420 0ustar00zuulzuul{ "access": { "access_level": "ro", "state": "error", "id": "507bf114-36f2-4f56-8cf4-857985ca87c1", "share_id": "fb213952-2352-41b4-ad7b-2c4c69d13eef", "access_type": "ip", "access_to": "0.0.0.0/0", "access_key": null, "created_at": "2024-12-17T02:01:04.000000", "updated_at": "2024-12-17T02:01:04.000000", "metadata": { "key1": "value1", "key2": "value2" } } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-extend-request.json0000664000175000017500000000011115251045254025314 0ustar00zuulzuul{ "extend": { "new_size": 2, "force": "true" } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-force-delete-request.json0000664000175000017500000000003515251045254026370 0ustar00zuulzuul{ "force_delete": null } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-grant-access-request.json0000664000175000017500000000053415251045254026410 0ustar00zuulzuul{ "allow_access": { "access_level": "rw", "access_type": "ip", "access_to": "0.0.0.0/0", "metadata":{ "key1": "value1", "key2": "value2" }, "lock_visibility": false, "lock_deletion": true, "lock_reason": "Locked for deletion until year end audit." } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-grant-access-response.json0000664000175000017500000000065715251045254026564 0ustar00zuulzuul{ "access": { "share_id": "406ea93b-32e9-4907-a117-148b3945749f", "created_at": "2015-09-07T09:14:48.000000", "updated_at": null, "access_type": "ip", "access_to": "0.0.0.0/0", "access_level": "rw", "access_key": null, "id": "a25b2df3-90bd-4add-afa6-5f0dbbd50452", "metadata":{ "key1": "value1", "key2": "value2" } } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-list-access-rules-request.json0000664000175000017500000000003415251045254027373 0ustar00zuulzuul{ "access_list": null } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-list-access-rules-response.json0000664000175000017500000000101515251045254027541 0ustar00zuulzuul{ "access_list": [ { "access_level": "rw", "state": "error", "id": "507bf114-36f2-4f56-8cf4-857985ca87c1", "access_type": "cert", "access_to": "example.com", "access_key": null }, { "access_level": "rw", "state": "active", "id": "a25b2df3-90bd-4add-afa6-5f0dbbd50452", "access_type": "ip", "access_to": "0.0.0.0/0", "access_key": null } ] } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-reset-state-request.json0000664000175000017500000000007215251045254026273 0ustar00zuulzuul{ "reset_status": { "status": "error" } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.818231 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-restore-request.json0000664000175000017500000000003015251045254025510 0ustar00zuulzuul{ "restore": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-revert-to-snapshot-request.json0000664000175000017500000000013015251045254027612 0ustar00zuulzuul{ "revert": { "snapshot_id": "6020af24-a305-4155-9a29-55e20efcb0e8" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-revoke-access-request.json0000664000175000017500000000016715251045254026572 0ustar00zuulzuul{ "deny_access": { "access_id": "a25b2df3-90bd-4add-afa6-5f0dbbd50452", "unrestrict": true } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-shrink-request.json0000664000175000017500000000006015251045254025326 0ustar00zuulzuul{ "shrink": { "new_size": 1 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-soft-delete-request.json0000664000175000017500000000003415251045254026244 0ustar00zuulzuul{ "soft_delete": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-actions-unmanage-request.json0000664000175000017500000000003115251045254025621 0ustar00zuulzuul{ "unmanage": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-backup-create-request.json0000664000175000017500000000026115251045254025103 0ustar00zuulzuul{ "share_backup": { "share_id": "7b11dd53-546e-43cd-af0e-875434238c30", "backup_options": {}, "description": null, "name": "backup1" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-backup-create-response.json0000664000175000017500000000067715251045254025264 0ustar00zuulzuul{ "share_backup": { "id": "c1cdc0ce-4ddc-4018-9796-505d2e26fcc7", "share_id": "7b11dd53-546e-43cd-af0e-875434238c30", "status": "creating", "name": "backup1", "description": null, "size": 1, "created_at": "2023-08-16T13:03:59.020692", "updated_at": "2023-08-16T13:03:59.020692", "availability_zone": null, "progress": "0", "restore_progress": "0" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-backup-reset-status-request.json0000664000175000017500000000007215251045254026303 0ustar00zuulzuul{ "reset_status": { "status": "error" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-backup-restore-request.json0000664000175000017500000000003015251045254025315 0ustar00zuulzuul{ "restore": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-backup-restore-response.json0000664000175000017500000000022315251045254025467 0ustar00zuulzuul{ "restore": { "backup_id": "c1cdc0ce-4ddc-4018-9796-505d2e26fcc7", "share_id": "7b11dd53-546e-43cd-af0e-875434238c30" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-backup-show-response.json0000664000175000017500000000070215251045254024766 0ustar00zuulzuul{ "share_backup": { "id": "c1cdc0ce-4ddc-4018-9796-505d2e26fcc7", "share_id": "7b11dd53-546e-43cd-af0e-875434238c30", "status": "available", "name": "backup1", "description": null, "size": 1, "created_at": "2023-08-16T13:03:59.000000", "updated_at": "2023-08-16T13:04:15.000000", "availability_zone": null, "progress": "100", "restore_progress": "0" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-backup-update-request.json0000664000175000017500000000022715251045254025124 0ustar00zuulzuul{ "share_backup": { "display_name": "backup2", "display_description": "I am changing a description also. Here is a backup" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-backup-update-response.json0000664000175000017500000000076215251045254025276 0ustar00zuulzuul{ "share_backup": { "id": "fa32a89f-ed0f-4906-b1d7-92eedf98fbb5", "share_id": "7b11dd53-546e-43cd-af0e-875434238c30", "status": "available", "name": "backup2", "description": "I am changing a description also. Here is a backup", "size": 1, "created_at": "2023-08-16T13:18:55.000000", "updated_at": "2023-08-16T13:33:15.000000", "availability_zone": null, "progress": "100", "restore_progress": "0" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-backups-list-detailed-response.json0000664000175000017500000000174215251045254026722 0ustar00zuulzuul{ "share_backups": [ { "id": "1125c47a-0216-4ee0-a517-0460d63301a6", "share_id": "112dffd-f033-4248-a315-319ca2bd70c8", "status": "available", "name": "backup3", "description": null, "size": 1, "created_at": "2023-08-16T12:34:57.000000", "updated_at": "2023-08-17T12:14:15.000000", "availability_zone": null, "progress": "100", "restore_progress": "0" }, { "id": "c1cdc0ce-4ddc-4018-9796-505d2e26fcc7", "share_id": "7b11dd53-546e-43cd-af0e-875434238c30", "status": "creating", "name": "backup1", "description": null, "size": 1, "created_at": "2023-08-16T13:03:59.020692", "updated_at": "2023-08-16T13:13:15.000002", "availability_zone": null, "progress": "0", "restore_progress": "0" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8192313 manila-23.0.0.0rc1/api-ref/source/samples/share-backups-list-response.json0000664000175000017500000000067615251045254025156 0ustar00zuulzuul{ "share_backups": [ { "id": "1125c47a-0216-4ee0-a517-0460d63301a6", "name": "backup3", "share_id": "112dffd-f033-4248-a315-319ca2bd70c8", "status": "available" }, { "id": "c1cdc0ce-4ddc-4018-9796-505d2e26fcc7", "name": "backup1", "share_id": "7b11dd53-546e-43cd-af0e-875434238c30", "status": "creating" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8202317 manila-23.0.0.0rc1/api-ref/source/samples/share-create-request.json0000664000175000017500000000136515251045254023646 0ustar00zuulzuul{ "share": { "description": "My custom share London", "share_type": null, "share_proto": "nfs", "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "share_group_id": null, "name": "share_London", "snapshot_id": null, "is_public": true, "size": 1, "metadata": { "project": "my_app", "aim": "doc" }, "scheduler_hints": { "same_host": "d9c66489-cf02-4156-b0f2-527f3211b243,4ffee55f-ba98-42d2-a8ce-e7cecb169182", "different_host": "903685eb-f242-4105-903d-4bef2db94be4" }, "mount_point_name": "my_share_London", "encryption_key_ref": "86babe9b-7277-4c3a-a081-6eb3eac9231d" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8202317 manila-23.0.0.0rc1/api-ref/source/samples/share-create-response.json0000664000175000017500000000276215251045254024016 0ustar00zuulzuul{ "share": { "status": null, "progress": null, "share_server_id": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "name": "share_London", "share_type": "25747776-08e5-494f-ab40-a64b9d20d8f7", "share_type_name": "default", "availability_zone": null, "created_at": "2015-09-18T10:25:24.533287", "export_location": null, "links": [ { "href": "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264", "rel": "bookmark" } ], "share_network_id": null, "share_group_id": null, "export_locations": [], "share_proto": "NFS", "host": null, "access_rules_status": "active", "has_replicas": false, "replication_type": null, "task_state": null, "snapshot_support": true, "volume_type": "default", "snapshot_id": null, "is_public": true, "metadata": { "project": "my_app", "aim": "doc" }, "id": "011d21e2-fbc3-4e4a-9993-9ea223f73264", "size": 1, "description": "My custom share London", "encryption_key_ref": "86babe9b-7277-4c3a-a081-6eb3eac9231d" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8202317 manila-23.0.0.0rc1/api-ref/source/samples/share-group-create-request.json0000664000175000017500000000064015251045254024773 0ustar00zuulzuul{ "share_group": { "share_types": ["ecd11f4c-d811-4471-b656-c755c77e02ba"], "name": "my_group", "description": "for_test", "share_group_type_id": "89861c2a-10bf-4013-bdd4-3d020466aee4", "availability_zone": "nova", "share_network_id": "82168c2a-10bf-4013-bcc4-3d984136aee3", "source_share_group_snapshot_id": "69861c2a-10bf-4013-bcc4-3d020466aee3" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8202317 manila-23.0.0.0rc1/api-ref/source/samples/share-group-create-response.json0000664000175000017500000000204115251045254025136 0ustar00zuulzuul{ "share_groups": { "status": "creating", "description": null, "links": [ { "href": "http://192.168.98.191:8786/v2/e23850eeb91d4fa3866af634223e454c/share_groups/f9c1f80c-2392-4e34-bd90-fc89cdc5bf93", "rel": "self" }, { "href": "http://192.168.98.191:8786/e23850eeb91d4fa3866af634223e454c/share_groups/f9c1f80c-2392-4e34-bd90-fc89cdc5bf93", "rel": "bookmark" } ], "availability_zone": null, "source_share_group_snapshot_id": null, "share_network_id": null, "share_server_id": null, "host": null, "share_group_type_id": "89861c2a-10bf-4013-bdd4-3d020466aee4", "consistent_snapshot_support": null, "id": "f9c1f80c-2392-4e34-bd90-fc89cdc5bf93", "name": null, "created_at": "2017-08-03T19:20:33.974421", "project_id": "e23850eeb91d4fa3866af634223e454c", "share_types": ["ecd11f4c-d811-4471-b656-c755c77e02ba"] } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8202317 manila-23.0.0.0rc1/api-ref/source/samples/share-group-reset-state-request.json0000664000175000017500000000007215251045254025767 0ustar00zuulzuul{ "reset_status": { "status": "error" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8202317 manila-23.0.0.0rc1/api-ref/source/samples/share-group-show-response.json0000664000175000017500000000213015251045254024652 0ustar00zuulzuul{ "share_groups": { "links": [ { "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/share_groups/011d21e2-fbc3-4e4a-9993-9ea223f73264", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/share_groups/011d21e2-fbc3-4e4a-9993-9ea223f73264", "rel": "bookmark" } ], "availability_zone": "nova", "consistent_snapshot_support": true, "share_group_type_id": "313df749-aac0-1a54-af52-10f6c991e80c", "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "id": "011d21e2-fbc3-4e4a-9993-9ea223f73264", "share_types": ["25747776-08e5-494f-ab40-a64b9d20d8f7"], "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "status": "available", "description": "My custom share London", "host": "manila2@generic1#GENERIC1", "source_share_group_snapshot_id": null, "name": "share_London", "created_at": "2015-09-18T10:25:24.000000" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8202317 manila-23.0.0.0rc1/api-ref/source/samples/share-group-snapshot-actions-reset-state-request.json0000664000175000017500000000007215251045254031262 0ustar00zuulzuul{ "reset_status": { "status": "error" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8202317 manila-23.0.0.0rc1/api-ref/source/samples/share-group-snapshot-create-request.json0000664000175000017500000000025415251045254026631 0ustar00zuulzuul{ "share_group_snapshot": { "share_group_id": "cd7a3d06-23b3-4d05-b4ca-7c9a20faa95f", "name": "test", "description": "test description" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-snapshot-create-response.json0000664000175000017500000000146115251045254027000 0ustar00zuulzuul{ "share_group_snapshot": { "status": "creating", "share_group_id": "cd7a3d06-23b3-4d05-b4ca-7c9a20faa95f", "links": [ { "href": "http://192.168.98.191:8786/v2/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/46bf5875-58d6-4816-948f-8828423b0b9f", "rel": "self" }, { "href": "http://192.168.98.191:8786/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/46bf5875-58d6-4816-948f-8828423b0b9f", "rel": "bookmark" } ], "name": null, "members": [], "created_at": "2017-08-10T03:01:39.442509", "project_id": "e23850eeb91d4fa3866af634223e454c", "id": "46bf5875-58d6-4816-948f-8828423b0b9f", "description": null } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-snapshot-show-response.json0000664000175000017500000000146115251045254026515 0ustar00zuulzuul{ "share_group_snapshot": { "status": "creating", "share_group_id": "cd7a3d06-23b3-4d05-b4ca-7c9a20faa95f", "links": [ { "href": "http://192.168.98.191:8786/v2/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/46bf5875-58d6-4816-948f-8828423b0b9f", "rel": "self" }, { "href": "http://192.168.98.191:8786/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/46bf5875-58d6-4816-948f-8828423b0b9f", "rel": "bookmark" } ], "name": null, "members": [], "created_at": "2017-08-10T03:01:39.442509", "project_id": "e23850eeb91d4fa3866af634223e454c", "id": "46bf5875-58d6-4816-948f-8828423b0b9f", "description": null } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-snapshot-update-request.json0000664000175000017500000000016315251045254026647 0ustar00zuulzuul{ "share_group_snapshot": { "name": "update name", "description": "update description" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-snapshot-update-response.json0000664000175000017500000000146115251045254027017 0ustar00zuulzuul{ "share_group_snapshot": { "status": "creating", "share_group_id": "cd7a3d06-23b3-4d05-b4ca-7c9a20faa95f", "links": [ { "href": "http://192.168.98.191:8786/v2/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/46bf5875-58d6-4816-948f-8828423b0b9f", "rel": "self" }, { "href": "http://192.168.98.191:8786/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/46bf5875-58d6-4816-948f-8828423b0b9f", "rel": "bookmark" } ], "name": null, "members": [], "created_at": "2017-08-10T03:01:39.442509", "project_id": "e23850eeb91d4fa3866af634223e454c", "id": "46bf5875-58d6-4816-948f-8828423b0b9f", "description": null } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-snapshots-list-detailed-response.json0000664000175000017500000000336615251045254030452 0ustar00zuulzuul{ "share_group_snapshots": [ { "status": "available", "share_group_id": "cd7a3d06-23b3-4d05-b4ca-7c9a20faa95f", "links": [ { "href": "http://192.168.98.191:8786/v2/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/46bf5875-58d6-4816-948f-8828423b0b9f", "rel": "self" }, { "href": "http://192.168.98.191:8786/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/46bf5875-58d6-4816-948f-8828423b0b9f", "rel": "bookmark" } ], "name": null, "members": [], "created_at": "2017-08-10T03:01:39.000000", "project_id": "e23850eeb91d4fa3866af634223e454c", "id": "46bf5875-58d6-4816-948f-8828423b0b9f", "description": null }, { "status": "available", "share_group_id": "cd7a3d06-23b3-4d05-b4ca-7c9a20faa95f", "links": [ { "href": "http://192.168.98.191:8786/v2/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/9d8ed9be-4454-4df0-b0ae-8360b623d93d", "rel": "self" }, { "href": "http://192.168.98.191:8786/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/9d8ed9be-4454-4df0-b0ae-8360b623d93d", "rel": "bookmark" } ], "name": null, "members": [], "created_at": "2017-08-10T03:01:28.000000", "project_id": "e23850eeb91d4fa3866af634223e454c", "id": "9d8ed9be-4454-4df0-b0ae-8360b623d93d", "description": null } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-snapshots-list-members-response.json0000664000175000017500000000125515251045254030324 0ustar00zuulzuul{ "share_group_snapshot_members": [ { "status": "available", "share_id": "406ea93b-32e9-4907-a117-148b3945749f", "created_at": "2017-09-07T11:50:39.000000", "share_proto": "NFS", "share_size": 1, "id": "6d221c1d-0200-461e-8d20-24b4776b9ddb", "size": 1 }, { "status": "available", "share_id": "406ea93b-32e9-4907-a117-148b3945749f", "created_at": "2015-09-07T11:50:39.000000", "share_proto": "NFS", "share_size": 1, "id": "6d221c1d-0200-461e-8d20-24b4776b9ddb", "size": 1 } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-snapshots-list-response.json0000664000175000017500000000116315251045254026672 0ustar00zuulzuul{ "share_group_snapshot": [ { "links": [ { "href": "http://192.168.98.191:8786/v2/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/46bf5875-58d6-4816-948f-8828423b0b9f", "rel": "self" }, { "href": "http://192.168.98.191:8786/e23850eeb91d4fa3866af634223e454c/share_group_snapshot/46bf5875-58d6-4816-948f-8828423b0b9f", "rel": "bookmark" } ], "name": null, "id": "46bf5875-58d6-4816-948f-8828423b0b9f" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-type-create-request.json0000664000175000017500000000035515251045254025755 0ustar00zuulzuul{ "share_group_type": { "is_public": true, "group_specs": { "snapshot_support": true }, "share_types": ["ecd11f4c-d811-4471-b656-c755c77e02ba"], "name": "my_new_group_type" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-type-create-response.json0000664000175000017500000000042015251045254026114 0ustar00zuulzuul{ "share_group_type": { "is_public": true, "group_specs": {}, "share_types": ["ecd11f4c-d811-4471-b656-c755c77e02ba"], "id": "89861c2a-10bf-4013-bdd4-3d020466aee4", "name": "test_group_type", "is_default": false } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-type-grant-access-request.json0000664000175000017500000000013215251045254027055 0ustar00zuulzuul{ "addProjectAccess": { "project": "e1284adea3ee4d2482af5ed214f3ad90" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-type-revoke-access-request.json0000664000175000017500000000013515251045254027240 0ustar00zuulzuul{ "removeProjectAccess": { "project": "818a3f48dcd644909b3fa2e45a399a27" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-type-set-request.json0000664000175000017500000000011015251045254025272 0ustar00zuulzuul{ "group_specs": { "my_group_key": "my_group_value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8212318 manila-23.0.0.0rc1/api-ref/source/samples/share-group-type-set-response.json0000664000175000017500000000011015251045254025440 0ustar00zuulzuul{ "group_specs": { "my_group_key": "my_group_value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-group-types-default-list-response.json0000664000175000017500000000041715251045254027437 0ustar00zuulzuul{ "share_group_type": { "is_public": true, "group_specs": {}, "share_types": ["ecd11f4c-d811-4471-b656-c755c77e02ba"], "id": "89861c2a-10bf-4013-bdd4-3d020466aee4", "name": "test_group_type", "is_default": true } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-group-types-group-specs-list-response.json0000664000175000017500000000010215251045254030251 0ustar00zuulzuul{ "group_specs": { "snapshot_support": "True" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-group-types-list-access-response.json0000664000175000017500000000054415251045254027255 0ustar00zuulzuul{ "share_group_type_access": [ { "share_group_type_id": "1732f284-401d-41d9-a494-425451e8b4b8", "project_id": "818a3f48dcd644909b3fa2e45a399a27" }, { "share_group_type_id": "1732f284-401d-41d9-a494-425451e8b4b8", "project_id": "e1284adea3ee4d2482af5ed214f3ad90" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-group-types-list-response.json0000664000175000017500000000047515251045254026021 0ustar00zuulzuul{ "share_group_types": [ { "is_public": true, "group_specs": {}, "share_types": ["ecd11f4c-d811-4471-b656-c755c77e02ba"], "id": "89861c2a-10bf-4013-bdd4-3d020466aee4", "name": "test_group_type", "is_default": false } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-group-update-request.json0000664000175000017500000000017215251045254025012 0ustar00zuulzuul{ "share_group": { "name": "new name", "description": "Changing the share group description." } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-group-update-response.json0000664000175000017500000000211215251045254025154 0ustar00zuulzuul{ "share_groups": { "status": "creating", "description": "Changing the share group description.", "links": [ { "href": "http://192.168.98.191:8786/v2/e23850eeb91d4fa3866af634223e454c/share_groups/f9c1f80c-2392-4e34-bd90-fc89cdc5bf93", "rel": "self" }, { "href": "http://192.168.98.191:8786/e23850eeb91d4fa3866af634223e454c/share_groups/f9c1f80c-2392-4e34-bd90-fc89cdc5bf93", "rel": "bookmark" } ], "availability_zone": null, "source_share_group_snapshot_id": null, "share_network_id": null, "share_server_id": null, "host": null, "share_group_type_id": "89861c2a-10bf-4013-bdd4-3d020466aee4", "consistent_snapshot_support": null, "id": "f9c1f80c-2392-4e34-bd90-fc89cdc5bf93", "name": "new name", "created_at": "2017-08-03T19:20:33.974421", "project_id": "e23850eeb91d4fa3866af634223e454c", "share_types": ["ecd11f4c-d811-4471-b656-c755c77e02ba"] } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-groups-list-detailed-response.json0000664000175000017500000000455115251045254026612 0ustar00zuulzuul{ "share_groups": [ { "id": "b94a8548-2079-4be0-b21c-0a887acd31ca", "links": [ { "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/share_groups/b94a8548-2079-4be0-b21c-0a887acd31ca", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/share_groups/b94a8548-2079-4be0-b21c-0a887acd31ca", "rel": "bookmark" } ], "name": "My_share_group", "availability_zone": "nova", "consistent_snapshot_support": true, "share_group_type_id": "313df749-aac0-1a54-af52-10f6c991e80c", "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "share_types": ["25747776-08e5-494f-ab40-a64b9d20d8f7"], "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "status": "available", "description": "My share group", "host": "manila2@generic1#GENERIC1", "source_share_group_snapshot_id": null, "created_at": "2015-09-18T10:25:24.000000" }, { "id": "306ea93c-32e9-4907-a117-148b3945749f", "links": [ { "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/share_groups/306ea93c-32e9-4907-a117-148b3945749f", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/share_groups/306ea93c-32e9-4907-a117-148b3945749f", "rel": "bookmark" } ], "name": "Test_Share_group", "availability_zone": "nova", "consistent_snapshot_support": true, "share_group_type_id": "313df749-aac0-1a54-af52-10f6c991e80c", "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "share_types": ["25747776-08e5-494f-ab40-a64b9d20d8f7"], "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "status": "available", "description": "Test share group", "host": "manila2@generic1#GENERIC1", "source_share_group_snapshot_id": null, "created_at": "2015-09-18T10:25:24.000000" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-groups-list-response.json0000664000175000017500000000225515251045254025040 0ustar00zuulzuul{ "share_groups": [ { "id": "b94a8548-2079-4be0-b21c-0a887acd31ca", "links": [ { "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/share_groups/b94a8548-2079-4be0-b21c-0a887acd31ca", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/share_groups/b94a8548-2079-4be0-b21c-0a887acd31ca", "rel": "bookmark" } ], "name": "My_share_group" }, { "id": "306ea93c-32e9-4907-a117-148b3945749f", "links": [ { "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/share_groups/306ea93c-32e9-4907-a117-148b3945749f", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/share_groups/306ea93c-32e9-4907-a117-148b3945749f", "rel": "bookmark" } ], "name": "Test_Share_group" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-instance-actions-force-delete-request.json0000664000175000017500000000003515251045254030172 0ustar00zuulzuul{ "force_delete": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-instance-actions-reset-state-request.json0000664000175000017500000000007615251045254030101 0ustar00zuulzuul{ "reset_status": { "status": "available" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-instances-list-response.json0000664000175000017500000000435415251045254025512 0ustar00zuulzuul{ "share_instances": [ { "status": "error", "progress": null, "share_id": "406ea93b-32e9-4907-a117-148b3945749f", "availability_zone": "nova", "replica_state": null, "created_at": "2015-09-07T08:41:20.000000", "updated_at": "2015-09-07T08:43:10.000000", "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "cast_rules_to_readonly": false, "share_server_id": "ba11930a-bf1a-4aa7-bae4-a8dfbaa3cc73", "host": "manila2@generic1#GENERIC1", "access_rules_status": "active", "share_type_id": "78dee8a9-1ee6-4a29-9081-14e6596fbb96", "id": "081f7030-c54f-42f5-98ee-93a37393e0f2" }, { "status": "available", "progress": "100%", "share_id": "d94a8548-2079-4be0-b21c-0a887acd31ca", "availability_zone": "nova", "replica_state": null, "created_at": "2015-09-07T08:51:34.000000", "updated_at": "2015-09-10T02:01:22.000000", "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "cast_rules_to_readonly": false, "share_server_id": "ba11930a-bf1a-4aa7-bae4-a8dfbaa3cc73", "host": "manila2@generic1#GENERIC1", "access_rules_status": "active", "share_type_id": "78dee8a9-1ee6-4a29-9081-14e6596fbb96", "id": "75559a8b-c90c-42a7-bda2-edbe86acfb7b" }, { "status": "creating_from_snapshot", "progress": "30%", "share_id": "9bb15af4-27e5-4174-ae15-dc549d4a3b51", "availability_zone": "nova", "replica_state": null, "created_at": "2015-09-07T09:01:15.000000", "updated_at": "2015-09-07T09:02:30.000000", "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "cast_rules_to_readonly": false, "share_server_id": "ba11930a-bf1a-4aa7-bae4-a8dfbaa3cc73", "host": "manila2@generic1#GENERIC1", "access_rules_status": "active", "share_type_id": "78dee8a9-1ee6-4a29-9081-14e6596fbb96", "id": "48155648-2fd3-480d-b02b-44b995c24bab" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-manage-request.json0000664000175000017500000000120215251045254023621 0ustar00zuulzuul{ "share": { "protocol": "nfs", "name": "accounting_p8787", "share_type": "gold", "driver_options": { "opt1": "opt1", "opt2": "opt2" }, "export_path": "192.162.10.6:/shares/share-accounting_p8787", "service_host": "manila2@openstackstor01#accountingpool", "is_public": true, "description": "Common storage for spreadsheets and presentations. Please contact John Accessman to be added to the users of this drive.", "share_server_id": "00137b40-ca06-4ae8-83a3-2c5989eebcce", "mount_point_name": "share-accounting_p8787" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8222322 manila-23.0.0.0rc1/api-ref/source/samples/share-manage-response.json0000664000175000017500000000336115251045254023777 0ustar00zuulzuul{ "share": { "links": [ { "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/shares/00137b40-ca06-4ae8-83a3-2c5989eebcce", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/00137b40-ca06-4ae8-83a3-2c5989eebcce", "rel": "bookmark" } ], "availability_zone": null, "share_network_id": null, "share_server_id": "00137b40-ca06-4ae8-83a3-2c5989eebcce", "share_group_id": null, "source_share_group_snapshot_member_id": null, "snapshot_id": null, "id": "00137b40-ca06-4ae8-83a3-2c5989eebcce", "size": null, "share_type": "14747856-08e5-494f-ab40-a64b9d20d8f7", "task_state": null, "share_type_name": "d", "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "metadata": {}, "status": "manage_starting", "description": "Lets manage share.", "user_id": "66ffd308757e44b9a8bec381322b0b88", "create_share_from_snapshot_support": false, "revert_to_snapshot_support": false, "mount_snapshot_support": false, "progress": null, "is_soft_deleted": false, "scheduled_to_be_deleted_at": null, "source_backup_id": null, "encryption_key_ref": null, "host": "manila2@unmanage1#UNMANAGE1", "access_rules_status": "active", "has_replicas": false, "replication_type": null, "is_public": false, "snapshot_support": true, "name": "share_texas1", "created_at": "2019-03-05T10:00:00.000000", "share_proto": "NFS", "volume_type": "d" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-migration-cancel-request.json0000664000175000017500000000016015251045254025607 0ustar00zuulzuul{ "migration_cancel": { "share_id": "406ea93b-32e9-4907-a117-148b3945749f" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-migration-complete-request.json0000664000175000017500000000016115251045254026173 0ustar00zuulzuul{ "migration_complete": { "share_id": "406ea93b-32e9-4907-a117-148b3945749f" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-migration-get-progress-request.json0000664000175000017500000000014515251045254027006 0ustar00zuulzuul{ "migration_get_progress": { "share_id": "406ea93b-32e9-4907-a117-148b3945749f" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-migration-get-progress-response.json0000664000175000017500000000012015251045254027145 0ustar00zuulzuul{ "total_progress": 100, "task_state": "migration_driver_phase1_done" } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-migration-start-request.json0000664000175000017500000000072415251045254025525 0ustar00zuulzuul{ "migration_start": { "share_id": "406ea93b-32e9-4907-a117-148b3945749f", "writable": true, "preserve_snapshots": true, "preserve_metadata": true, "nondisruptive": true, "host": "ubuntu@generic2#GENERIC2", "new_share_type_id": "foo_share_type_id", "new_share_network_id": "bar_share_network_id", "force_host_assisted_migration": false } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-network-add-security-service-check-request.json0000664000175000017500000000022515251045254031172 0ustar00zuulzuul{ "add_security_service_check": { "security_service_id": "8971c5f6-52ec-4c53-bf6a-3fae38a9221e", "reset_operation": false } }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-network-add-security-service-check-response.json0000664000175000017500000000043515251045254031343 0ustar00zuulzuul{ "compatible": true, "requested_operation": { "operation": "add_security_service", "current_security_service": null, "new_security_service": "8971c5f6-52ec-4c53-bf6a-3fae38a9221e" }, "hosts_check_result": { "ubuntu@dummy2": true } }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-network-add-security-service-request.json0000664000175000017500000000015615251045254030122 0ustar00zuulzuul{ "add_security_service": { "security_service_id": "3c829734-0679-4c17-9637-801da48c0d5f" } } ././@PaxHeader0000000000000000000000000000021500000000000010213 xustar00113 path=manila-23.0.0.0rc1/api-ref/source/samples/share-network-add-security-service-response-with-subnets.json 28 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-network-add-security-service-response-with-subnets.j0000664000175000017500000000174715251045254032211 0ustar00zuulzuul{ "share_network": { "name": "net2", "created_at": "2019-11-10T12:31:12.000000", "updated_at": null, "id": "d8ae6799-2567-4a89-aafb-fa4424350d2b", "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "description": null, "share_network_subnets": [ { "id": "e4db03dc-6041-4c6a-a8f9-80bb4141a1eb", "availability_zone": null, "created_at": "2019-11-10T12:31:12.000000", "updated_at": "2019-11-10T12:31:12.000000", "segmentation_id": null, "neutron_net_id": "62187648-6617-4509-a780-ffc973a7fe43", "neutron_subnet_id": "2276888a-27c1-47c2-82a0-ea33050128b5", "ip_version": 4, "cidr": "172.24.5.0/24", "network_type": "flat", "mtu": 1500, "gateway": "172.24.5.1", "metadata": {"key1": "value1"} } ] } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-network-add-security-service-response.json0000664000175000017500000000110415251045254030262 0ustar00zuulzuul{ "share_network": { "name": "net2", "segmentation_id": null, "created_at": "2015-09-07T12:31:12.000000", "neutron_subnet_id": null, "updated_at": null, "id": "d8ae6799-2567-4a89-aafb-fa4424350d2b", "neutron_net_id": null, "ip_version": null, "cidr": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "network_type": null, "description": null, "gateway": null, "mtu": null, "security_service_update_support": true, "status": "active" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-network-create-request.json0000664000175000017500000000044615251045254025334 0ustar00zuulzuul{ "share_network": { "neutron_net_id": "998b42ee-2cee-4d36-8b95-67b5ca1f2109", "neutron_subnet_id": "53482b62-2c84-4a53-b6ab-30d9d9800d06", "name": "my_network", "description": "This is my share network", "availability_zone": "manila-zone-0" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-network-create-response-with-subnets.json0000664000175000017500000000206115251045254030127 0ustar00zuulzuul{ "share_network": { "name": "my_network", "created_at": "2019-09-07T14:37:00.583656", "updated_at": null, "id": "77eb3421-4549-4789-ac39-0d5185d68c29", "project_id": "e10a683c20da41248cfd5e1ab3d88c62", "description": "This is my share network", "security_service_update_support": true, "status": "active", "share_network_subnets": [ { "id": "91cc63b5-6c61-4078-b054-560923709654", "availability_zone": "manila-zone-0", "created_at": "2019-10-04T20:49:11.000000", "updated_at": null, "segmentation_id": null, "neutron_net_id": "998b42ee-2cee-4d36-8b95-67b5ca1f2109", "neutron_subnet_id": "53482b62-2c84-4a53-b6ab-30d9d9800d06", "ip_version": null, "cidr": null, "network_type": null, "mtu": null, "gateway": null, "metadata": {"key1": "value1"} } ] } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-network-create-response.json0000664000175000017500000000124415251045254025477 0ustar00zuulzuul{ "share_network": { "name": "my_network", "segmentation_id": null, "created_at": "2015-09-07T14:37:00.583656", "neutron_subnet_id": "53482b62-2c84-4a53-b6ab-30d9d9800d06", "updated_at": null, "id": "77eb3421-4549-4789-ac39-0d5185d68c29", "neutron_net_id": "998b42ee-2cee-4d36-8b95-67b5ca1f2109", "ip_version": null, "cidr": null, "project_id": "e10a683c20da41248cfd5e1ab3d88c62", "network_type": null, "description": "This is my share network", "gateway": null, "mtu": null, "security_service_update_support": true, "status": "active" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-network-remove-security-service-request.json0000664000175000017500000000016115251045254030663 0ustar00zuulzuul{ "remove_security_service": { "security_service_id": "3c829734-0679-4c17-9637-801da48c0d5f" } } ././@PaxHeader0000000000000000000000000000022000000000000010207 xustar00116 path=manila-23.0.0.0rc1/api-ref/source/samples/share-network-remove-security-service-response-with-subnets.json 28 mtime=1789151915.8232324 manila-23.0.0.0rc1/api-ref/source/samples/share-network-remove-security-service-response-with-subnet0000664000175000017500000000206415251045254032334 0ustar00zuulzuul{ "share_network": { "name": "net2", "created_at": "2019-11-07T12:31:12.000000", "updated_at": null, "id": "d8ae6799-2567-4a89-aafb-fa4424350d2b", "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "description": null, "security_service_update_support": true, "status": "active", "share_network_subnets": [ { "id": "e4db03dc-6041-4c6a-a8f9-80bb4141a1eb", "availability_zone": null, "created_at": "2019-11-07T12:31:12.000000", "updated_at": "2019-12-12T12:31:12.000000", "segmentation_id": null, "neutron_net_id": "62187648-6617-4509-a780-ffc973a7fe43", "neutron_subnet_id": "2276888a-27c1-47c2-82a0-ea33050128b5", "ip_version": 4, "cidr": "172.24.5.0/24", "network_type": "flat", "mtu": 1500, "gateway": "172.24.5.1", "metadata": {"key1": "value1"} } ] } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-remove-security-service-response.json0000664000175000017500000000110415251045254031027 0ustar00zuulzuul{ "share_network": { "name": "net2", "segmentation_id": null, "created_at": "2015-09-07T12:31:12.000000", "neutron_subnet_id": null, "updated_at": null, "id": "d8ae6799-2567-4a89-aafb-fa4424350d2b", "neutron_net_id": null, "ip_version": null, "cidr": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "network_type": null, "description": null, "gateway": null, "mtu": null, "security_service_update_support": true, "status": "active" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-reset-state-request.json0000664000175000017500000000007215251045254026324 0ustar00zuulzuul{ "reset_status": { "status": "active" } }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-show-response-with-subnets.json0000664000175000017500000000203315251045254027643 0ustar00zuulzuul{ "share_network": { "id": "1324e7d3-fba8-45e4-bb37-b59c12eb06dc", "name": "net_my1", "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "created_at": "2019-10-02T17:49:43.000000", "description": null, "security_service_update_support": true, "status": "active", "share_network_subnets": [ { "id": "e4db03dc-6041-4c6a-a8f9-80bb4141a1eb", "availability_zone": null, "created_at": "2019-10-02T17:49:43.000000", "updated_at": "2019-10-03T12:17:39.000000", "segmentation_id": null, "neutron_net_id": "62187648-6617-4509-a780-ffc973a7fe43", "neutron_subnet_id": "2276888a-27c1-47c2-82a0-ea33050128b5", "ip_version": 4, "cidr": "172.24.5.0/24", "network_type": "flat", "mtu": 1500, "gateway": "172.24.5.1", "metadata": {"key1": "value1"} } ] } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-show-response.json0000664000175000017500000000121615251045254025213 0ustar00zuulzuul{ "share_network": { "name": "net_my1", "segmentation_id": null, "created_at": "2015-09-04T14:56:45.000000", "neutron_subnet_id": "53482b62-2c84-4a53-b6ab-30d9d9800d06", "updated_at": null, "id": "7f950b52-6141-4a08-bbb5-bb7ffa3ea5fd", "neutron_net_id": "998b42ee-2cee-4d36-8b95-67b5ca1f2109", "ip_version": null, "cidr": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "network_type": null, "description": "descr", "gateway": null, "mtu": null, "security_service_update_support": true, "status": "active" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-subnet-create-request.json0000664000175000017500000000033415251045254026626 0ustar00zuulzuul{ "share-network-subnet": { "neutron_net_id": "62187648-6617-4509-a780-ffc973a7fe43", "neutron_subnet_id": "2276888a-27c1-47c2-82a0-ea33050128b5", "availability_zone": "manila-zone-0" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-subnet-create-response.json0000664000175000017500000000122615251045254026775 0ustar00zuulzuul{ "share_network_subnet": { "id": "8ebe964d-ac48-4e43-93ed-b1768148f8f4", "availability_zone": "manila-zone-0", "share_network_id": "1324e7d3-fba8-45e4-bb37-b59c12eb06dc", "share_network_name": "net_my1", "created_at": "2019-10-03T02:25:12.000000", "segmentation_id": null, "neutron_subnet_id": "2276888a-27c1-47c2-82a0-ea33050128b5", "updated_at": null, "neutron_net_id": "62187648-6617-4509-a780-ffc973a7fe43", "ip_version": null, "cidr": null, "network_type": null, "mtu": null, "gateway": null, "metadata": {"key1": "value1"} } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-subnet-list-response.json0000664000175000017500000000246715251045254026515 0ustar00zuulzuul{ "share_network_subnets": [ { "id": "a7507a16-98bb-476c-ba90-487e4b4775fa", "availability_zone": null, "share_network_id": "8bc488d8-52f7-46cb-91b1-89dd92cae972", "share_network_name": "sn_test", "created_at": "2019-10-03T18:30:15.000000", "segmentation_id": null, "neutron_subnet_id": "dc0a37f0-81b0-4eb5-aad8-deffda5ff4ca", "updated_at": null, "neutron_net_id": "70bc8f03-525c-4334-a51b-261a024681c5", "ip_version": 4, "cidr": "10.190.5.0/24", "network_type": "flat", "mtu": 1500, "gateway": "10.190.5.1", "metadata": {"key1": "value1"} }, { "id": "8ebe964d-ac48-4e43-93ed-b1768148f8f4", "availability_zone": "manila-zone-0", "share_network_id": "8bc488d8-52f7-46cb-91b1-89dd92cae972", "share_network_name": "sn_test", "created_at": "2019-10-02T01:35:10.000000", "segmentation_id": null, "neutron_subnet_id": "2276888a-27c1-47c2-82a0-ea33050128b5", "updated_at": null, "neutron_net_id": "62187648-6617-4509-a780-ffc973a7fe43", "ip_version": 4, "cidr": "172.24.5.0/24", "network_type": "flat", "mtu": 1500, "gateway": "172.24.5.1", "metadata": {"key1": "value1"} } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-subnet-set-metadata-request.json0000664000175000017500000000006515251045254027735 0ustar00zuulzuul{ "metadata": { "key1": "value1" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-subnet-set-metadata-response.json0000664000175000017500000000026715251045254030107 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "key1": "value1", "new_metadata_key": "new_information", "key": "value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-subnet-show-metadata-response.json0000664000175000017500000000012015251045254030260 0ustar00zuulzuul{ "metadata": { "project": "my_app", "key": "value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-subnet-show-response.json0000664000175000017500000000126415251045254026514 0ustar00zuulzuul{ "share_network_subnet": { "id": "e4db03dc-6041-4c6a-a8f9-80bb4141a1eb", "availability_zone": null, "share_network_id":"1324e7d3-fba8-45e4-bb37-b59c12eb06dc", "share_network_name": "net_my1", "created_at": "2019-10-01T17:49:43.000000", "segmentation_id": null, "neutron_subnet_id": "2276888a-27c1-47c2-82a0-ea33050128b5", "updated_at": "2019-11-02T12:17:39.000000", "neutron_net_id": "62187648-6617-4509-a780-ffc973a7fe43", "ip_version": 4, "cidr": "172.24.5.0/24", "network_type": "flat", "mtu": 1500, "gateway": "172.24.5.1", "metadata": {"key1": "value1"} } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-subnet-update-metadata-request.json0000664000175000017500000000020515251045254030420 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-subnet-update-metadata-response.json0000664000175000017500000000020515251045254030566 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-subnet-update-null-metadata-request.json0000664000175000017500000000003115251045254031365 0ustar00zuulzuul{ "metadata": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8242328 manila-23.0.0.0rc1/api-ref/source/samples/share-network-subnet-update-null-metadata-response.json0000664000175000017500000000003115251045254031533 0ustar00zuulzuul{ "metadata": null } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.825233 manila-23.0.0.0rc1/api-ref/source/samples/share-network-update-request.json0000664000175000017500000000037715251045254025356 0ustar00zuulzuul{ "share_network": { "neutron_net_id": "998b42ee-2cee-4d36-8b95-67b5ca1f2109", "neutron_subnet_id": "53482b62-2c84-4a53-b6ab-30d9d9800d06", "name": "update my network", "description": "i'm adding a description" } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.825233 manila-23.0.0.0rc1/api-ref/source/samples/share-network-update-response-with-subnets.json0000664000175000017500000000212615251045254030150 0ustar00zuulzuul{ "share_network":{ "id": "2b33cd3a-3049-4f36-a2fd-f7a211eb9202", "name": "update my network", "project_id": "79ed3be75dbb4d03afd687b758fcc2c0", "created_at": "2019-11-12T17:18:10.000000", "updated_at": null, "description": "i'm adding a description", "security_service_update_support": true, "status": "active", "share_network_subnets": [ { "id": "687ab361-5c40-406e-945c-6326254782d4", "availability_zone": null, "created_at": "2019-11-13T17:18:10.000000", "updated_at": "2019-11-13T17:18:56.000000", "segmentation_id": null, "neutron_net_id": "998b42ee-2cee-4d36-8b95-67b5ca1f2109", "neutron_subnet_id": "53482b62-2c84-4a53-b6ab-30d9d9800d06", "ip_version": 4, "cidr": "172.24.5.0/24", "network_type": "flat", "mtu": 1500, "gateway": "172.24.5.1", "metadata": {"key1": "value1"} } ] } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.825233 manila-23.0.0.0rc1/api-ref/source/samples/share-network-update-response.json0000664000175000017500000000126715251045254025523 0ustar00zuulzuul{ "share_network": { "name": "net_my", "segmentation_id": null, "created_at": "2015-09-04T14:54:25.000000", "neutron_subnet_id": "53482b62-2c84-4a53-b6ab-30d9d9800d06", "updated_at": "2015-09-07T08:02:53.512184", "id": "713df749-aac0-4a54-af52-10f6c991e80c", "neutron_net_id": "998b42ee-2cee-4d36-8b95-67b5ca1f2109", "ip_version": "4", "cidr": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "network_type": null, "description": "i'm adding a description", "gateway": null, "mtu": null, "security_service_update_support": true, "status": "active" } } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.825233 manila-23.0.0.0rc1/api-ref/source/samples/share-network-update-security-service-check-request.json0000664000175000017500000000033115251045254031722 0ustar00zuulzuul{ "update_security_service_check": { "current_service_id": "8971c5f6-52ec-4c53-bf6a-3fae38a9221e", "new_service_id": "6cff8d33-f73b-483f-88af-e5429ad9daef", "reset_operation": false } }././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.825233 manila-23.0.0.0rc1/api-ref/source/samples/share-network-update-security-service-check-response.json0000664000175000017500000000050215251045254032070 0ustar00zuulzuul{ "compatible": true, "requested_operation": { "operation": "update_security_service", "current_security_service": "8971c5f6-52ec-4c53-bf6a-3fae38a9221e", "new_security_service": "6cff8d33-f73b-483f-88af-e5429ad9daef" }, "hosts_check_result": { "ubuntu@dummy2": true } }././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.825233 manila-23.0.0.0rc1/api-ref/source/samples/share-network-update-security-service-request.json0000664000175000017500000000026115251045254030651 0ustar00zuulzuul{ "update_security_service": { "current_service_id": "8971c5f6-52ec-4c53-bf6a-3fae38a9221e", "new_service_id": "6cff8d33-f73b-483f-88af-e5429ad9daef" } }././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.825233 manila-23.0.0.0rc1/api-ref/source/samples/share-network-update-security-service-response.json0000664000175000017500000000175715251045254031032 0ustar00zuulzuul{ "share_network": { "id": "1e3f43b2-2290-4fb8-bdc3-fb741c336c2a", "name": "my_share_network", "project_id": "838f27f65c1d43baa37743c6884958ce", "created_at": "2021-03-25T17: 48: 51.925433", "updated_at": "2021-03-29T15: 06: 19.464021", "description": null, "share_network_subnets": [ { "id": "14f7f4f6-b6b6-4b7e-a89c-1040700f3166", "availability_zone": null, "created_at": "2021-03-25T17: 48: 52.014525", "updated_at": "2021-03-29T14: 50: 56.993391", "segmentation_id": 1010, "neutron_net_id": null, "neutron_subnet_id": null, "ip_version": 4, "cidr": "10.0.0.0/24", "network_type": "vlan", "mtu": 1500, "gateway": "10.0.0.1" } ], "status": "network_change", "security_service_update_support": true } }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-networks-list-detailed-response-with-subnets.json0000664000175000017500000000533215251045254031577 0ustar00zuulzuul{ "share_networks": [ { "id": "03987b5f-cb79-4f5f-a590-f6936b91b49e", "name": "net_my1", "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "created_at": "2019-10-02T12:33:36.000000", "updated_at": null, "description": null, "share_network_subnets": [ { "id": "022aa495-845e-42a6-9d83-a38f164053c9", "availability_zone": null, "created_at": "2019-10-02T12:33:36.000000", "updated_at": null, "segmentation_id": null, "neutron_net_id": "f00732aa-7721-455d-ba14-ec37619ea13f", "neutron_subnet_id": "eb7adcf8-ce71-43e3-b4c2-cf81da9f89a", "ip_version": null, "cidr": null, "network_type": null, "mtu": null, "gateway": null, "metadata": {"key1": "value1"} } ] }, { "id": "1324e7d3-fba8-45e4-bb37-b59c12eb06dc", "name": "net_my2", "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "created_at": "2019-07-01T17:49:43.000000", "updated_at": "2019-07-02T12:17:39.000000", "description": null, "share_network_subnets": [ { "id": "8ebe964d-ac48-4e43-93ed-b1768148f8f4", "availability_zone": "manila-zone-0", "created_at": "2019-10-03T02:25:12.000000", "updated_at": null, "segmentation_id": null, "neutron_net_id": "62187648-6617-4509-a780-ffc973a7fe43", "neutron_subnet_id": "2276888a-27c1-47c2-82a0-ea3050128b5", "ip_version": null, "cidr": null, "network_type": null, "mtu": null, "gateway": null }, { "id": "e4db03dc-6041-4c6a-a8f9-80bb4141a1eb", "availability_zone": null, "created_at": "2019-07-01T17:49:43.000000", "updated_at": "2019-07-02T12:17:39.000000", "segmentation_id": null, "neutron_net_id": "62187648-6617-4509-a780-ffc973a7fe43", "neutron_subnet_id": "2276888a-27c1-47c2-820-ea33050128b5", "ip_version": 4, "cidr": "172.24.5.0/24", "network_type": "flat", "mtu": 1500, "gateway": "172.24.5.1" } ] } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-networks-list-detailed-response.json0000664000175000017500000000343415251045254027146 0ustar00zuulzuul{ "share_networks": [ { "name": "net_my1", "segmentation_id": null, "created_at": "2015-09-04T14:57:13.000000", "neutron_subnet_id": "53482b62-2c84-4a53-b6ab-30d9d9800d06", "updated_at": null, "id": "32763294-e3d4-456a-998d-60047677c2fb", "neutron_net_id": "998b42ee-2cee-4d36-8b95-67b5ca1f2109", "ip_version": null, "cidr": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "network_type": null, "description": "descr", "gateway": null, "mtu": null }, { "name": "net_my", "segmentation_id": null, "created_at": "2015-09-04T14:54:25.000000", "neutron_subnet_id": "53482b62-2c84-4a53-b6ab-30d9d9800d06", "updated_at": null, "id": "713df749-aac0-4a54-af52-10f6c991e80c", "neutron_net_id": "998b42ee-2cee-4d36-8b95-67b5ca1f2109", "ip_version": null, "cidr": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "network_type": null, "description": "desecr", "gateway": null, "mtu": null }, { "name": null, "segmentation_id": null, "created_at": "2015-09-04T14:51:41.000000", "neutron_subnet_id": null, "updated_at": null, "id": "fa158a3d-6d9f-4187-9ca5-abbb82646eb2", "neutron_net_id": null, "ip_version": null, "cidr": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "network_type": null, "description": null, "gateway": null, "mtu": null } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-networks-list-response.json0000664000175000017500000000054215251045254025372 0ustar00zuulzuul{ "share_networks": [ { "id": "32763294-e3d4-456a-998d-60047677c2fb", "name": "net_my1" }, { "id": "713df749-aac0-4a54-af52-10f6c991e80c", "name": "net_my" }, { "id": "fa158a3d-6d9f-4187-9ca5-abbb82646eb2", "name": null } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-create-request.json0000664000175000017500000000046715251045254025265 0ustar00zuulzuul{ "share_replica": { "share_id": "50a6a566-6bac-475c-ad69-5035c86696c0", "availability_zone": "nova", "scheduler_hints": { "only_host": "host1@generic1#GENERIC1" }, "metadata": { "project": "my_app", "aim": "doc" } } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-create-response.json0000664000175000017500000000103415251045254025422 0ustar00zuulzuul{ "share_replica": { "status": "creating", "share_id": "5043dffd-f033-4248-a315-319ca2bd70c8", "availability_zone": null, "cast_rules_to_readonly": true, "updated_at": null, "share_network_id": null, "share_server_id": null, "host": "", "id": "c9f52e33-d780-41d8-89ba-fc06869f465f", "replica_state": null, "created_at": "2017-08-15T20:21:43.493731", "metadata": { "project": "my_app", "aim": "doc" } } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-export-location-list-response.json0000664000175000017500000000144415251045254030264 0ustar00zuulzuul{ "export_locations": [ { "path": "10.254.0.3:/shares/share-e1c2d35e-fe67-4028-ad7a-45f668732b1d", "share_instance_id": "e1c2d35e-fe67-4028-ad7a-45f668732b1d", "is_admin_only": false, "id": "b6bd76ce-12a2-42a9-a30a-8a43b503867d", "preferred": false, "replica_state": "in_sync", "availability_zone": "paris" }, { "path": "10.0.0.3:/shares/share-e1c2d35e-fe67-4028-ad7a-45f668732b1d", "share_instance_id": "e1c2d35e-fe67-4028-ad7a-45f668732b1d", "is_admin_only": true, "id": "6921e862-88bc-49a5-a2df-efeed9acd583", "preferred": false, "replica_state": "in_sync", "availability_zone": "paris" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-export-location-show-response.json0000664000175000017500000000073115251045254030267 0ustar00zuulzuul{ "export_location": { "created_at": "2016-03-24T14:20:47.000000", "updated_at": "2016-03-24T14:20:47.000000", "preferred": false, "is_admin_only": true, "share_instance_id": "e1c2d35e-fe67-4028-ad7a-45f668732b1d", "path": "10.0.0.3:/shares/share-e1c2d35e-fe67-4028-ad7a-45f668732b1d", "id": "6921e862-88bc-49a5-a2df-efeed9acd583", "replica_state": "in_sync", "availability_zone": "paris" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-promote-request.json0000664000175000017500000000007315251045254025500 0ustar00zuulzuul{ "promote": { "quiesce_wait_time": 30 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-resync-request.json0000664000175000017500000000002715251045254025315 0ustar00zuulzuul{ "resync": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-set-metadata-request.json0000664000175000017500000000026715251045254026371 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "key1": "value1", "new_metadata_key": "new_information", "key": "value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-set-metadata-response.json0000664000175000017500000000026715251045254026537 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "key1": "value1", "new_metadata_key": "new_information", "key": "value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-show-metadata-item-response.json0000664000175000017500000000006415251045254027653 0ustar00zuulzuul{ "meta": { "project": "my_app" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-show-metadata-response.json0000664000175000017500000000011615251045254026715 0ustar00zuulzuul{ "metadata": { "project": "my_app", "aim": "doc" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-update-metadata-request.json0000664000175000017500000000020515251045254027050 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-update-metadata-response.json0000664000175000017500000000020515251045254027216 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-update-null-metadata-request.json0000664000175000017500000000003115251045254030015 0ustar00zuulzuul{ "metadata": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replica-update-null-metadata-response.json0000664000175000017500000000003115251045254030163 0ustar00zuulzuul{ "metadata": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8262331 manila-23.0.0.0rc1/api-ref/source/samples/share-replicas-force-delete-request.json0000664000175000017500000000003515251045254026532 0ustar00zuulzuul{ "force_delete": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-replicas-list-detail-response.json0000664000175000017500000000251315251045254026560 0ustar00zuulzuul{ "share_replicas": [ { "status": "available", "share_id": "5043dffd-f033-4248-a315-319ca2bd70c8", "availability_zone": "nova", "cast_rules_to_readonly": false, "updated_at": "2017-08-15T20:20:50.000000", "share_network_id": null, "share_server_id": null, "host": "ubuntu@generic3#fake_pool_for_DummyDriver", "id": "57f5c47a-0216-4ee0-a517-0460d63301a6", "replica_state": "active", "created_at": "2017-08-15T20:20:45.000000", "metadata": { "project": "my_app", "aim": "doc" } }, { "status": "available", "share_id": "5043dffd-f033-4248-a315-319ca2bd70c8", "availability_zone": "nova", "cast_rules_to_readonly": true, "updated_at": "2017-08-15T20:21:49.000000", "share_network_id": null, "share_server_id": null, "host": "ubuntu@generic2#fake_pool_for_DummyDriver", "id": "c9f52e33-d780-41d8-89ba-fc06869f465f", "replica_state": "in_sync", "created_at": "2017-08-15T20:21:43.000000", "metadata": { "project": "my_app", "aim": "doc" } } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-replicas-list-response.json0000664000175000017500000000072215251045254025320 0ustar00zuulzuul{ "share_replicas": [ { "status": "available", "share_id": "5043dffd-f033-4248-a315-319ca2bd70c8", "id": "57f5c47a-0216-4ee0-a517-0460d63301a6", "replica_state": "active" }, { "status": "available", "share_id": "5043dffd-f033-4248-a315-319ca2bd70c8", "id": "c9f52e33-d780-41d8-89ba-fc06869f465f", "replica_state": "in_sync" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-replicas-reset-replica-state-request.json0000664000175000017500000000011615251045254030051 0ustar00zuulzuul{ "reset_replica_state": { "replica_state": "out_of_sync" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-replicas-reset-state-request.json0000664000175000017500000000007615251045254026441 0ustar00zuulzuul{ "reset_status": { "status": "available" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-replicas-show-response.json0000664000175000017500000000114415251045254025324 0ustar00zuulzuul{ "share_replica": { "status": "available", "share_id": "5043dffd-f033-4248-a315-319ca2bd70c8", "availability_zone": "nova", "cast_rules_to_readonly": false, "updated_at": "2017-08-15T20:20:50.000000", "share_network_id": null, "share_server_id": null, "host": "ubuntu@generic3#fake_pool_for_DummyDriver", "id": "57f5c47a-0216-4ee0-a517-0460d63301a6", "replica_state": "active", "created_at": "2017-08-15T20:20:45.000000", "metadata": { "project": "my_app", "aim": "doc" } } }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-manage-request.json0000664000175000017500000000052715251045254025136 0ustar00zuulzuul{ "share_server": { "host": "myhost@mybackend", "share_network_id": "78cef6eb-648a-4bbd-9ae1-d2eaaf594cc0", "share_network_subnet_id": "f53252f0-c2a9-4d7c-af41-1c6f3cfb3af3", "identifier": "4ef3507e-0513-4140-beda-f619ab30d424", "driver_options": { "opt1": "opt1_value" } } }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-manage-response.json0000664000175000017500000000123015251045254025274 0ustar00zuulzuul{ "share_server": { "id": "dd218d97-6b16-45b7-9b23-19681ccdec3a", "project_id": "5b23075b4b504261a5987b18588f86cf", "updated_at": null, "status": "manage_starting", "host": "myhost@mybackend", "share_network_name": "share-net-name", "share_network_id": "78cef6eb-648a-4bbd-9ae1-d2eaaf594cc0", "share_network_subnet_id": "f53252f0-c2a9-4d7c-af41-1c6f3cfb3af3", "created_at": "2019-03-06T11:59:41.000000", "backend_details": {}, "is_auto_deletable": false, "identifier": "4ef3507e-0513-4140-beda-f619ab30d424", "security_service_update_support": true } }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-migration-cancel-request.json0000664000175000017500000000004015251045254027110 0ustar00zuulzuul{ "migration_cancel":null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-migration-check-compatibility-request.json0000664000175000017500000000032015251045254031610 0ustar00zuulzuul{ "migration_check": { "host": "foohost2@backend2", "preserve_snapshots": "True", "writable": "True", "nondisruptive": "True", "new_share_network_id": null } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-migration-check-compatibility-response.json0000664000175000017500000000077615251045254031775 0ustar00zuulzuul{ "compatible": false, "requested_capabilities": { "writable": "True", "nondisruptive": "True", "preserve_snapshots": "True", "share_network_id": null, "host": "foohost2@backend2" }, "supported_capabilities": { "writable": true, "nondisruptive": false, "preserve_snapshots": true, "share_network_id": "1d04b755-649f-46a4-964c-be9f0395af13", "migration_cancel": true, "migration_get_progress": true } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-migration-complete-request.json0000664000175000017500000000004315251045254027476 0ustar00zuulzuul{ "migration_complete": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-migration-complete-response.json0000664000175000017500000000011615251045254027645 0ustar00zuulzuul{ "destination_share_server_id": "c2f71561-85e2-4ccb-a91a-e44f9ff6f7ef" } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-migration-get-progress-request.json0000664000175000017500000000004715251045254030313 0ustar00zuulzuul{ "migration_get_progress": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-migration-get-progress-response.json0000664000175000017500000000023215251045254030455 0ustar00zuulzuul{ "total_progress": 50, "task_state": "migration_driver_in_progress", "destination_share_server_id": "c2f71561-85e2-4ccb-a91a-e44f9ff6f7ef" } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-migration-start-request.json0000664000175000017500000000032115251045254027022 0ustar00zuulzuul{ "migration_start": { "host": "foohost2@backend2", "preserve_snapshots": "True", "writable": "True", "nondisruptive": "False", "new_share_network_id": null } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-reset-state-request.json0000664000175000017500000000007215251045254026141 0ustar00zuulzuul{ "reset_status": { "status": "active" } }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-show-details-response.json0000664000175000017500000000064515251045254026460 0ustar00zuulzuul{ "details": { "username": "manila", "router_id": "4b62ce91-56c5-45c1-b0ef-8cbbe5dd34f4", "pk_path": "/opt/stack/.ssh/id_rsa", "subnet_id": "16e99ad6-5191-461c-9f34-ac84a39c3adb", "ip": "10.254.0.3", "instance_id": "75f2f282-af65-49ba-a7b1-525705b1bf1a", "public_address": "10.254.0.3", "service_port_id": "8ff21760-961e-4b83-a032-03fd559bb1d3" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-show-response.json0000664000175000017500000000176115251045254025035 0ustar00zuulzuul{ "share_server": { "status": "active", "backend_details": { "username": "manila", "router_id": "4b62ce91-56c5-45c1-b0ef-8cbbe5dd34f4", "pk_path": "/opt/stack/.ssh/id_rsa", "subnet_id": "16e99ad6-5191-461c-9f34-ac84a39c3adb", "ip": "10.254.0.3", "instance_id": "75f2f282-af65-49ba-a7b1-525705b1bf1a", "public_address": "10.254.0.3", "service_port_id": "8ff21760-961e-4b83-a032-03fd559bb1d3" }, "created_at": "2015-09-07T08:37:19.000000", "updated_at": "2015-09-07T08:52:15.000000", "share_network_name": "net_my", "host": "manila2@generic1", "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "share_network_subnet_id": "f53252f0-c2a9-4d7c-af41-1c6f3cfb3af3", "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "id": "ba11930a-bf1a-4aa7-bae4-a8dfbaa3cc73", "security_service_update_support": true } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-server-unmanage-request.json0000664000175000017500000000005415251045254025474 0ustar00zuulzuul{ "unmanage": { "force": "false" } }././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8272336 manila-23.0.0.0rc1/api-ref/source/samples/share-servers-list-response.json0000664000175000017500000000165115251045254025211 0ustar00zuulzuul{ "share_servers": [ { "status": "active", "updated_at": "2015-09-07T08:52:15.000000", "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "host": "manila2@generic1", "share_network_name": "net_my", "share_network_subnet_id": "f53252f0-c2a9-4d7c-af41-1c6f3cfb3af3", "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "id": "ba11930a-bf1a-4aa7-bae4-a8dfbaa3cc73", "security_service_update_support": true, "is_auto_deletable": true, "identifier": "ba11930a-bf1a-4aa7-bae4-a8dfbaa3cc73", "task_state": null, "source_share_server_id": null, "share_network_subnet_ids": [ "f53252f0-c2a9-4d7c-af41-1c6f3cfb3af3" ], "network_allocation_update_support": false, "encryption_key_ref": null } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-set-metadata-request.json0000664000175000017500000000006515251045254024750 0ustar00zuulzuul{ "metadata": { "key1": "value1" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-set-metadata-response.json0000664000175000017500000000026715251045254025122 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "key1": "value1", "new_metadata_key": "new_information", "key": "value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-show-instance-response.json0000664000175000017500000000120015251045254025317 0ustar00zuulzuul{ "share_instance": { "status": "available", "progress": "100%", "share_id": "d94a8548-2079-4be0-b21c-0a887acd31ca", "availability_zone": "nova", "replica_state": null, "created_at": "2015-09-07T08:51:34.000000", "updated_at": "2015-09-07T08:52:20.000000", "cast_rules_to_readonly": false, "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "share_server_id": "ba11930a-bf1a-4aa7-bae4-a8dfbaa3cc73", "host": "manila2@generic1#GENERIC1", "access_rules_status": "active", "id": "75559a8b-c90c-42a7-bda2-edbe86acfb7b" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-show-metadata-item-response.json0000664000175000017500000000006415251045254026236 0ustar00zuulzuul{ "meta": { "project": "my_app" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-show-metadata-response.json0000664000175000017500000000011615251045254025300 0ustar00zuulzuul{ "metadata": { "project": "my_app", "aim": "doc" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-show-network-subnet-metadata-item-response.json0000664000175000017500000000006415251045254031223 0ustar00zuulzuul{ "meta": { "project": "my_app" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-show-response.json0000664000175000017500000000311115251045254023520 0ustar00zuulzuul{ "share": { "links": [ { "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264", "rel": "bookmark" } ], "availability_zone": "nova", "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "export_locations": [], "share_server_id": "e268f4aa-d571-43dd-9ab3-f49ad06ffaef", "share_group_id": null, "snapshot_id": null, "id": "011d21e2-fbc3-4e4a-9993-9ea223f73264", "size": 1, "share_type": "25747776-08e5-494f-ab40-a64b9d20d8f7", "share_type_name": "default", "export_location": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "metadata": { "project": "my_app", "aim": "doc" }, "status": "available", "progress": "100%", "description": "My custom share London", "host": "manila2@generic1#GENERIC1", "user_id": "66ffd308757e44b9a8bec381322b0b88", "access_rules_status": "active", "has_replicas": false, "replication_type": null, "task_state": null, "is_public": true, "snapshot_support": true, "name": "share_London", "created_at": "2015-09-18T10:25:24.000000", "share_proto": "NFS", "volume_type": "default" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-transfer-accept-request.json0000664000175000017500000000014515251045254025457 0ustar00zuulzuul{ "accept": { "auth_key": "d7ef426932068a33", "clear_access_rules": true } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-transfer-create-request.json0000664000175000017500000000017015251045254025461 0ustar00zuulzuul{ "transfer": { "share_id": "29476819-28a9-4b1a-a21d-3b2d203025a0", "name": "test_transfer" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-transfer-create-response.json0000664000175000017500000000152515251045254025634 0ustar00zuulzuul{ "transfer": { "id": "f21c72c4-2b77-445b-aa12-e8d1b44163a2", "created_at": "2022-09-06T08:17:43.629495", "name": "test_transfer", "resource_type": "share", "resource_id": "29476819-28a9-4b1a-a21d-3b2d203025a0", "auth_key": "406a2d67cdb09afe", "source_project_id": "714198c7ac5e45a4b785de732ea4695d", "destination_project_id": null, "accepted": false, "expires_at": "2022-09-06T08:22:43.629495", "links": [ { "rel": "self", "href": "http://192.168.48.129/shar/v2/share-transfer/f21c72c4-2b77-445b-aa12-e8d1b44163a2" }, { "rel": "bookmark", "href": "http://192.168.48.129/shar/share-transfer/f21c72c4-2b77-445b-aa12-e8d1b44163a2" } ] } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-transfer-show-response.json0000664000175000017500000000145115251045254025347 0ustar00zuulzuul{ "transfer": { "id": "d2035732-d0c0-4380-a44c-f978a264ab1a", "created_at": "2022-09-07T01:12:29.000000", "name": "transfer1", "resource_type": "share", "resource_id": "29476819-28a9-4b1a-a21d-3b2d203025a0", "source_project_id": "714198c7ac5e45a4b785de732ea4695d", "destination_project_id": null, "accepted": false, "expires_at": "2022-09-07T01:17:29.000000", "links": [ { "rel": "self", "href": "http://192.168.48.129/shar/v2/share-transfer/d2035732-d0c0-4380-a44c-f978a264ab1a" }, { "rel": "bookmark", "href": "http://192.168.48.129/shar/share-transfer/d2035732-d0c0-4380-a44c-f978a264ab1a" } ] } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-transfers-list-detailed-response.json0000664000175000017500000000337015251045254027300 0ustar00zuulzuul{ "transfers": [ { "id": "42b0fab4-df77-4f25-a958-5370e1c95ed2", "created_at": "2022-09-07T01:52:39.000000", "name": "transfer2", "resource_type": "share", "resource_id": "0fe7cf64-b879-4902-9d86-f80aeff12b06", "source_project_id": "714198c7ac5e45a4b785de732ea4695d", "destination_project_id": null, "accepted": false, "expires_at": "2022-09-07T01:57:39.000000", "links": [ { "rel": "self", "href": "http://192.168.48.129/shar/v2/share-transfer/42b0fab4-df77-4f25-a958-5370e1c95ed2" }, { "rel": "bookmark", "href": "http://192.168.48.129/shar/share-transfer/42b0fab4-df77-4f25-a958-5370e1c95ed2" } ] }, { "id": "506a7e77-42e7-4f33-ac36-1d1dd7f2b9af", "created_at": "2022-09-07T01:52:30.000000", "name": "transfer1", "resource_type": "share", "resource_id": "29476819-28a9-4b1a-a21d-3b2d203025a0", "source_project_id": "714198c7ac5e45a4b785de732ea4695d", "destination_project_id": null, "accepted": false, "expires_at": "2022-09-07T01:57:30.000000", "links": [ { "rel": "self", "href": "http://192.168.48.129/shar/v2/share-transfer/506a7e77-42e7-4f33-ac36-1d1dd7f2b9af" }, { "rel": "bookmark", "href": "http://192.168.48.129/shar/share-transfer/506a7e77-42e7-4f33-ac36-1d1dd7f2b9af" } ] } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-transfers-list-response.json0000664000175000017500000000237015251045254025526 0ustar00zuulzuul{ "transfers": [ { "id": "02a948b4-671b-4c62-b13a-18d613cb4576", "resource_type": "share", "resource_id": "0fe7cf64-b879-4902-9d86-f80aeff12b06", "name": "transfer2", "links": [ { "rel": "self", "href": "http://192.168.48.129/shar/v2/share-transfer/02a948b4-671b-4c62-b13a-18d613cb4576" }, { "rel": "bookmark", "href": "http://192.168.48.129/shar/share-transfer/02a948b4-671b-4c62-b13a-18d613cb4576" } ] }, { "id": "a10209ff-b55d-4fed-9f63-abea53b6f107", "resource_type": "share", "resource_id": "29476819-28a9-4b1a-a21d-3b2d203025a0", "name": "transfer1", "links": [ { "rel": "self", "href": "http://192.168.48.129/shar/v2/share-transfer/a10209ff-b55d-4fed-9f63-abea53b6f107" }, { "rel": "bookmark", "href": "http://192.168.48.129/shar/share-transfer/a10209ff-b55d-4fed-9f63-abea53b6f107" } ] } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-type-create-request.json0000664000175000017500000000072315251045254024622 0ustar00zuulzuul{ "share_type": { "extra_specs": { "replication_type": "readable", "driver_handles_share_servers": true, "mount_snapshot_support": false, "revert_to_snapshot_support": false, "create_share_from_snapshot_support": true, "snapshot_support": true }, "share_type_access:is_public": true, "name": "testing", "description": "share type description" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-type-create-response.json0000664000175000017500000000243215251045254024767 0ustar00zuulzuul{ "share_type": { "required_extra_specs": { "driver_handles_share_servers": true }, "share_type_access:is_public": true, "extra_specs": { "replication_type": "readable", "driver_handles_share_servers": "True", "mount_snapshot_support": "False", "revert_to_snapshot_support": "False", "create_share_from_snapshot_support": "True", "snapshot_support": "True" }, "id": "7fa1342b-de9d-4d89-bdc8-af67795c0e52", "name": "testing", "is_default": false, "description": "share type description" }, "volume_type": { "required_extra_specs": { "driver_handles_share_servers": true }, "share_type_access:is_public": true, "extra_specs": { "replication_type": "readable", "driver_handles_share_servers": "True", "mount_snapshot_support": "False", "revert_to_snapshot_support": "False", "create_share_from_snapshot_support": "True", "snapshot_support": "True" }, "id": "7fa1342b-de9d-4d89-bdc8-af67795c0e52", "name": "testing", "is_default": false, "description": "share type description" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-type-grant-access-request.json0000664000175000017500000000013215251045254025723 0ustar00zuulzuul{ "addProjectAccess": { "project": "e1284adea3ee4d2482af5ed214f3ad90" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-type-revoke-access-request.json0000664000175000017500000000013515251045254026106 0ustar00zuulzuul{ "removeProjectAccess": { "project": "818a3f48dcd644909b3fa2e45a399a27" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-type-set-request.json0000664000175000017500000000007415251045254024151 0ustar00zuulzuul{ "extra_specs": { "my_key": "my_value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-type-set-response.json0000664000175000017500000000007415251045254024317 0ustar00zuulzuul{ "extra_specs": { "my_key": "my_value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-type-show-response.json0000664000175000017500000000151015251045254024500 0ustar00zuulzuul{ "share_type": { "required_extra_specs": { "driver_handles_share_servers": "True" }, "share_type_access:is_public": true, "extra_specs": { "driver_handles_share_servers": "True" }, "id": "2780fc88-526b-464a-a72c-ecb83f0e3929", "name": "default-share-type", "is_default": true, "description": "manila share type" }, "volume_type": { "required_extra_specs": { "driver_handles_share_servers": "True" }, "share_type_access:is_public": true, "extra_specs": { "driver_handles_share_servers": "True" }, "id": "2780fc88-526b-464a-a72c-ecb83f0e3929", "name": "default-share-type", "is_default": true, "description": "manila share type" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-type-update-request.json0000664000175000017500000000021015251045254024630 0ustar00zuulzuul{ "share_type": { "share_type_access:is_public": true, "name": "testing", "description": "share type description" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-type-update-response.json0000664000175000017500000000243215251045254025006 0ustar00zuulzuul{ "share_type": { "required_extra_specs": { "driver_handles_share_servers": true }, "share_type_access:is_public": true, "extra_specs": { "replication_type": "readable", "driver_handles_share_servers": "True", "mount_snapshot_support": "False", "revert_to_snapshot_support": "False", "create_share_from_snapshot_support": "True", "snapshot_support": "True" }, "id": "7fa1342b-de9d-4d89-bdc8-af67795c0e52", "name": "testing", "is_default": false, "description": "share type description" }, "volume_type": { "required_extra_specs": { "driver_handles_share_servers": true }, "share_type_access:is_public": true, "extra_specs": { "replication_type": "readable", "driver_handles_share_servers": "True", "mount_snapshot_support": "False", "revert_to_snapshot_support": "False", "create_share_from_snapshot_support": "True", "snapshot_support": "True" }, "id": "7fa1342b-de9d-4d89-bdc8-af67795c0e52", "name": "testing", "is_default": false, "description": "share type description" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-types-default-list-response.json0000664000175000017500000000147415251045254026311 0ustar00zuulzuul{ "share_type": { "required_extra_specs": { "driver_handles_share_servers": "True" }, "share_type_access:is_public": true, "extra_specs": { "driver_handles_share_servers": "True" }, "id": "420e6a31-3f3d-4ed7-9d11-59450372182a", "name": "default", "is_default": true, "description": "share type description" }, "volume_type": { "required_extra_specs": { "driver_handles_share_servers": "True" }, "share_type_access:is_public": true, "extra_specs": { "driver_handles_share_servers": "True" }, "id": "420e6a31-3f3d-4ed7-9d11-59450372182a", "name": "default", "is_default": true, "description": "share type description" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-types-extra-specs-list-response.json0000664000175000017500000000045215251045254027116 0ustar00zuulzuul{ "extra_specs": { "replication_type": "readable", "driver_handles_share_servers": "True", "create_share_from_snapshot_support": "True", "revert_to_snapshot_support": "False", "mount_snapshot_support": "False", "snapshot_support": "True" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8282337 manila-23.0.0.0rc1/api-ref/source/samples/share-types-list-access-response.json0000664000175000017500000000052215251045254026117 0ustar00zuulzuul{ "share_type_access": [ { "share_type_id": "1732f284-401d-41d9-a494-425451e8b4b8", "project_id": "818a3f48dcd644909b3fa2e45a399a27" }, { "share_type_id": "1732f284-401d-41d9-a494-425451e8b4b8", "project_id": "e1284adea3ee4d2482af5ed214f3ad90" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/share-types-list-response.json0000664000175000017500000000451415251045254024665 0ustar00zuulzuul{ "volume_types": [ { "required_extra_specs": { "driver_handles_share_servers": "True" }, "share_type_access:is_public": true, "extra_specs": { "driver_handles_share_servers": "True" }, "id": "420e6a31-3f3d-4ed7-9d11-59450372182a", "name": "default", "is_default": true, "description": "share type description" }, { "required_extra_specs": { "driver_handles_share_servers": "True" }, "share_type_access:is_public": true, "extra_specs": { "replication_type": "readable", "driver_handles_share_servers": "True", "mount_snapshot_support": "False", "revert_to_snapshot_support": "False", "create_share_from_snapshot_support": "True", "snapshot_support": "True" }, "id": "7fa1342b-de9d-4d89-bdc8-af67795c0e52", "name": "testing", "is_default": false, "description": "share type description" } ], "share_types": [ { "required_extra_specs": { "driver_handles_share_servers": "True" }, "share_type_access:is_public": true, "extra_specs": { "driver_handles_share_servers": "True" }, "id": "420e6a31-3f3d-4ed7-9d11-59450372182a", "name": "default", "is_default": true, "description": "share type description" }, { "required_extra_specs": { "driver_handles_share_servers": "True" }, "share_type_access:is_public": true, "extra_specs": { "replication_type": "readable", "driver_handles_share_servers": "True", "mount_snapshot_support": "False", "revert_to_snapshot_support": "False", "create_share_from_snapshot_support": "True", "snapshot_support": "True" }, "id": "7fa1342b-de9d-4d89-bdc8-af67795c0e52", "name": "testing", "is_default": false, "description": "share type description" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/share-update-metadata-request.json0000664000175000017500000000020515251045254025433 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/share-update-metadata-response.json0000664000175000017500000000020515251045254025601 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/share-update-null-metadata-request.json0000664000175000017500000000003115251045254026400 0ustar00zuulzuul{ "metadata": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/share-update-null-metadata-response.json0000664000175000017500000000003115251045254026546 0ustar00zuulzuul{ "metadata": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/share-update-request.json0000664000175000017500000000016515251045254023662 0ustar00zuulzuul{ "share": { "is_public": true, "display_description": "Changing the share description." } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/share-update-response.json0000664000175000017500000000271015251045254024026 0ustar00zuulzuul{ "share": { "links": [ { "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264", "rel": "bookmark" } ], "availability_zone": "nova", "share_network_id": "713df749-aac0-4a54-af52-10f6c991e80c", "export_locations": [], "share_server_id": "e268f4aa-d571-43dd-9ab3-f49ad06ffaef", "share_group_id": null, "snapshot_id": null, "id": "011d21e2-fbc3-4e4a-9993-9ea223f73264", "size": 1, "share_type": "25747776-08e5-494f-ab40-a64b9d20d8f7", "share_type_name": "default", "export_location": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "metadata": { "project": "my_app", "aim": "doc" }, "status": "error", "description": "Changing the share description.", "host": "manila2@generic1#GENERIC1", "task_state": null, "is_public": true, "snapshot_support": true, "name": "share_London", "created_at": "2015-09-18T10:25:24.000000", "share_proto": "NFS", "volume_type": "default", "user_id": "66ffd308757e44b9a8bec381322b0b88" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/shares-list-detailed-response.json0000664000175000017500000000702715251045254025461 0ustar00zuulzuul{ "shares": [ { "links": [ { "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/shares/f45cc5b2-d1bb-4a3e-ba5b-5c4125613adc", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/f45cc5b2-d1bb-4a3e-ba5b-5c4125613adc", "rel": "bookmark" } ], "availability_zone": "nova", "share_network_id": "f9b2e754-ac01-4466-86e1-5c569424754e", "export_locations": [], "share_server_id": "87d8943a-f5da-47a4-b2f2-ddfa6794aa82", "share_group_id": null, "snapshot_id": null, "source_backup_id": null, "id": "f45cc5b2-d1bb-4a3e-ba5b-5c4125613adc", "size": 1, "share_type": "25747776-08e5-494f-ab40-a64b9d20d8f7", "share_type_name": "default", "export_location": null, "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "metadata": {}, "status": "error", "progress": null, "access_rules_status": "active", "description": "There is a share description.", "host": "manila2@generic1#GENERIC1", "task_state": null, "is_public": true, "snapshot_support": true, "user_id": "66ffd308757e44b9a8bec381322b0b88", "name": "my_share4", "has_replicas": false, "replication_type": null, "created_at": "2015-09-16T18:19:50.000000", "share_proto": "NFS", "volume_type": "default" }, { "links": [ { "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/shares/c4a2ced4-2c9f-4ae1-adaa-6171833e64df", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/c4a2ced4-2c9f-4ae1-adaa-6171833e64df", "rel": "bookmark" } ], "availability_zone": "nova", "share_network_id": "f9b2e754-ac01-4466-86e1-5c569424754e", "export_locations": [ "10.254.0.5:/shares/share-50ad5e7b-f6f1-4b78-a651-0812cef2bb67" ], "share_server_id": "87d8943a-f5da-47a4-b2f2-ddfa6794aa82", "snapshot_id": null, "source_backup_id": null, "id": "c4a2ced4-2c9f-4ae1-adaa-6171833e64df", "size": 1, "share_type": "25747776-08e5-494f-ab40-a64b9d20d8f7", "share_type_name": "default", "export_location": "10.254.0.5:/shares/share-50ad5e7b-f6f1-4b78-a651-0812cef2bb67", "project_id": "16e1ab15c35a457e9c2b2aa189f544e1", "metadata": {}, "status": "available", "progress": "100%", "access_rules_status": "active", "description": "Changed description.", "host": "manila2@generic1#GENERIC1", "task_state": null, "is_public": true, "snapshot_support": true, "name": "my_share4", "has_replicas": false, "replication_type": null, "created_at": "2015-09-16T17:26:28.000000", "user_id": "66ffd308757e44b9a8bec381322b0b88", "share_proto": "NFS", "volume_type": "default" } ], "count": 10 } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/shares-list-response.json0000664000175000017500000000222015251045254023676 0ustar00zuulzuul{ "shares": [ { "id": "d94a8548-2079-4be0-b21c-0a887acd31ca", "links": [ { "href": "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/shares/d94a8548-2079-4be0-b21c-0a887acd31ca", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/d94a8548-2079-4be0-b21c-0a887acd31ca", "rel": "bookmark" } ], "name": "My_share" }, { "id": "406ea93b-32e9-4907-a117-148b3945749f", "links": [ { "href": "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/shares/406ea93b-32e9-4907-a117-148b3945749f", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/406ea93b-32e9-4907-a117-148b3945749f", "rel": "bookmark" } ], "name": "Share1" } ], "count": 10 } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-actions-force-delete-request.json0000664000175000017500000000003515251045254027125 0ustar00zuulzuul{ "force_delete": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-actions-reset-state-request.json0000664000175000017500000000007215251045254027030 0ustar00zuulzuul{ "reset_status": { "status": "error" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-actions-unmanage-request.json0000664000175000017500000000003115251045254026356 0ustar00zuulzuul{ "unmanage": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-create-request.json0000664000175000017500000000032015251045254024371 0ustar00zuulzuul{ "snapshot": { "share_id": "406ea93b-32e9-4907-a117-148b3945749f", "force": "True", "name": "snapshot_share1", "description": "Here is a snapshot of share Share1" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-create-response.json0000664000175000017500000000163615251045254024552 0ustar00zuulzuul{ "snapshot": { "status": "creating", "share_id": "406ea93b-32e9-4907-a117-148b3945749f", "user_id": "5c7bdb6eb0504d54a619acf8375c08ce", "name": "snapshot_share1", "links": [ { "href": "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/6d221c1d-0200-461e-8d20-24b4776b9ddb", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/6d221c1d-0200-461e-8d20-24b4776b9ddb", "rel": "bookmark" } ], "created_at": "2015-09-07T11:50:39.756808", "description": "Here is a snapshot of share Share1", "share_proto": "NFS", "share_size": 1, "id": "6d221c1d-0200-461e-8d20-24b4776b9ddb", "project_id": "cadd7139bc3148b8973df097c0911016", "size": 1 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-instance-actions-reset-state-request.json0000664000175000017500000000007615251045254030636 0ustar00zuulzuul{ "reset_status": { "status": "available" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-instance-show-response.json0000664000175000017500000000111315251045254026057 0ustar00zuulzuul{ "snapshot_instance": { "status": "available", "share_id": "618599ab-09a1-432d-973a-c102564c7fec", "share_instance_id": "8edff0cb-e5ce-4bab-aa99-afe02ed6a76a", "snapshot_id": "d447de19-a6d3-40b3-ae9f-895c86798924", "progress": "100%", "created_at": "2017-08-04T00:44:52.000000", "id": "275516e8-c998-4e78-a41e-7dd3a03e71cd", "provider_location": "/path/to/fake/snapshot/snapshot_d447de19_a6d3_40b3_ae9f_895c86798924_275516e8_c998_4e78_a41e_7dd3a03e71cd", "updated_at": "2017-08-04T00:44:54.000000" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-instances-list-response.json0000664000175000017500000000033115251045254026236 0ustar00zuulzuul{ "snapshot_instances": [ { "status": "available", "snapshot_id": "d447de19-a6d3-40b3-ae9f-895c86798924", "id": "275516e8-c998-4e78-a41e-7dd3a03e71cd" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-instances-list-with-detail-response.json0000664000175000017500000000120015251045254030443 0ustar00zuulzuul{ "snapshot_instances": [ { "status": "available", "share_id": "618599ab-09a1-432d-973a-c102564c7fec", "share_instance_id": "8edff0cb-e5ce-4bab-aa99-afe02ed6a76a", "snapshot_id": "d447de19-a6d3-40b3-ae9f-895c86798924", "progress": "100%", "created_at": "2017-08-04T00:44:52.000000", "id": "275516e8-c998-4e78-a41e-7dd3a03e71cd", "provider_location": "/path/to/fake/snapshot/snapshot_d447de19_a6d3_40b3_ae9f_895c86798924_275516e8_c998_4e78_a41e_7dd3a03e71cd", "updated_at": "2017-08-04T00:44:54.000000" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-manage-request.json0000664000175000017500000000062615251045254024367 0ustar00zuulzuul{ "snapshot": { "share_id": "dd6c5d35-9db1-4662-a7ae-8b52f880aeba", "provider_location": "4045fee5-4e0e-408e-97f3-15e25239dbc9", "name": "managed_snapshot", "description": "description_of_managed_snapshot", "driver_options": { "opt1": "opt1", "opt2": "opt2" }, "metadata": { "key1": "value1" } } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-manage-response.json0000664000175000017500000000203615251045254024532 0ustar00zuulzuul{ "snapshot": { "id": "22de7000-3a32-4fe1-bd0c-38d03f93dec3", "share_id": "dd6c5d35-9db1-4662-a7ae-8b52f880aeba", "share_size": 1, "created_at": "2016-04-01T15:16:17.000000", "status": "manage_starting", "name": "managed_snapshot", "description": "description_of_managed_snapshot", "size": 1, "share_proto": "NFS", "user_id": "5c7bdb6eb0504d54a619acf8375c08ce", "project_id": "cadd7139bc3148b8973df097c0911016", "links": [ { "href": "http://127.0.0.1:8786/v2/907004508ef4447397ce6741a8f037c1/snapshots/22de7000-3a32-4fe1-bd0c-38d03f93dec3", "rel": "self" }, { "href": "http://127.0.0.1:8786/907004508ef4447397ce6741a8f037c1/snapshots/22de7000-3a32-4fe1-bd0c-38d03f93dec3", "rel": "bookmark" } ], "provider_location": "4045fee5-4e0e-408e-97f3-15e25239dbc9", "metadata": { "key1": "value1" } } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-set-metadata-request.json0000664000175000017500000000026715251045254025511 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "key1": "value1", "new_metadata_key": "new_information", "key": "value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-set-metadata-response.json0000664000175000017500000000026715251045254025657 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "key1": "value1", "new_metadata_key": "new_information", "key": "value" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-show-metadata-item-response.json0000664000175000017500000000006415251045254026773 0ustar00zuulzuul{ "meta": { "project": "my_app" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-show-metadata-response.json0000664000175000017500000000011615251045254026035 0ustar00zuulzuul{ "metadata": { "project": "my_app", "aim": "doc" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-show-response.json0000664000175000017500000000163715251045254024270 0ustar00zuulzuul{ "snapshot": { "status": "available", "share_id": "406ea93b-32e9-4907-a117-148b3945749f", "user_id": "5c7bdb6eb0504d54a619acf8375c08ce", "name": "snapshot_share1", "links": [ { "href": "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/6d221c1d-0200-461e-8d20-24b4776b9ddb", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/6d221c1d-0200-461e-8d20-24b4776b9ddb", "rel": "bookmark" } ], "created_at": "2015-09-07T11:50:39.000000", "description": "Here is a snapshot of share Share1", "share_proto": "NFS", "share_size": 1, "id": "6d221c1d-0200-461e-8d20-24b4776b9ddb", "project_id": "cadd7139bc3148b8973df097c0911016", "size": 1 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-update-metadata-request.json0000664000175000017500000000020515251045254026170 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8292341 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-update-metadata-response.json0000664000175000017500000000020515251045254026336 0ustar00zuulzuul{ "metadata": { "aim": "changed_doc", "project": "my_app", "new_metadata_key": "new_information" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-update-null-metadata-request.json0000664000175000017500000000003115251045254027135 0ustar00zuulzuul{ "metadata": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-update-null-metadata-response.json0000664000175000017500000000003115251045254027303 0ustar00zuulzuul{ "metadata": null } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-update-request.json0000664000175000017500000000025515251045254024417 0ustar00zuulzuul{ "snapshot": { "display_name": "snapshot_Share1", "display_description": "I am changing a description also. Here is a snapshot of share Share1" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/samples/snapshot-update-response.json0000664000175000017500000000170115251045254024562 0ustar00zuulzuul{ "snapshot": { "status": "available", "share_id": "406ea93b-32e9-4907-a117-148b3945749f", "name": "snapshot_Share1", "user_id": "5c7bdb6eb0504d54a619acf8375c08ce", "project_id": "cadd7139bc3148b8973df097c0911016", "links": [ { "href": "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/6d221c1d-0200-461e-8d20-24b4776b9ddb", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/6d221c1d-0200-461e-8d20-24b4776b9ddb", "rel": "bookmark" } ], "created_at": "2015-09-07T11:50:39.000000", "description": "I am changing a description also. Here is a snapshot of share Share1", "share_proto": "NFS", "share_size": 1, "id": "6d221c1d-0200-461e-8d20-24b4776b9ddb", "size": 1 } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/samples/snapshots-list-detailed-response.json0000664000175000017500000000376715251045254026225 0ustar00zuulzuul{ "snapshots": [ { "status": "creating", "share_id": "d94a8548-2079-4be0-b21c-0a887acd31ca", "user_id": "5c7bdb6eb0504d54a619acf8375c08ce", "name": "snapshot_My_share", "links": [ { "href": "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", "rel": "bookmark" } ], "created_at": "2015-09-07T11:55:09.000000", "description": "Here is a snapshot of share My_share", "share_proto": "NFS", "share_size": 1, "id": "086a1aa6-c425-4ecd-9612-391a3b1b9375", "project_id": "cadd7139bc3148b8973df097c0911016", "size": 1 }, { "status": "available", "share_id": "406ea93b-32e9-4907-a117-148b3945749f", "user_id": "5c7bdb6eb0504d54a619acf8375c08ce", "name": "snapshot_share1", "links": [ { "href": "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/6d221c1d-0200-461e-8d20-24b4776b9ddb", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/6d221c1d-0200-461e-8d20-24b4776b9ddb", "rel": "bookmark" } ], "created_at": "2015-09-07T11:50:39.000000", "description": "Here is a snapshot of share Share1", "share_proto": "NFS", "share_size": 1, "id": "6d221c1d-0200-461e-8d20-24b4776b9ddb", "project_id": "cadd7139bc3148b8973df097c0911016", "size": 1 } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/samples/snapshots-list-response.json0000664000175000017500000000224015251045254024435 0ustar00zuulzuul{ "snapshots": [ { "id": "086a1aa6-c425-4ecd-9612-391a3b1b9375", "links": [ { "href": "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", "rel": "bookmark" } ], "name": "snapshot_My_share" }, { "id": "6d221c1d-0200-461e-8d20-24b4776b9ddb", "links": [ { "href": "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/6d221c1d-0200-461e-8d20-24b4776b9ddb", "rel": "self" }, { "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/6d221c1d-0200-461e-8d20-24b4776b9ddb", "rel": "bookmark" } ], "name": "snapshot_share1" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/samples/user-message-show-response.json0000664000175000017500000000206315251045254025023 0ustar00zuulzuul{ "message": { "links": [ { "href": "http://192.168.122.180:8786/v2/2e3de76b49b444fd9dc7ca9f7048ce6b/messages/4b319d29-d5b7-4b6e-8e7c-8d6e53f3c3d5", "rel": "self" }, { "href": "http://192.168.122.180:8786/2e3de76b49b444fd9dc7ca9f7048ce6b/messages/4b319d29-d5b7-4b6e-8e7c-8d6e53f3c3d5", "rel": "bookmark" } ], "resource_id": "351cc796-2d79-4a08-b878-a8ed933b6b68", "message_level": "ERROR", "user_message": "allocate host: No storage could be allocated for this share request. Trying again with a different size or share type may succeed.", "expires_at": "2017-07-10T10:27:43.000000", "id": "4b319d29-d5b7-4b6e-8e7c-8d6e53f3c3d5", "created_at": "2017-07-10T10:26:43.000000", "detail_id": "002", "request_id": "req-24e7ccb6-a7d5-4ddd-a8e4-d8f72a4509c8", "project_id": "2e3de76b49b444fd9dc7ca9f7048ce6b", "resource_type": "SHARE", "action_id": "001" } } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/samples/user-messages-list-response.json0000664000175000017500000000223415251045254025201 0ustar00zuulzuul{ "messages": [ { "links": [ { "href": "http://192.168.122.180:8786/v2/2e3de76b49b444fd9dc7ca9f7048ce6b/messages/4b319d29-d5b7-4b6e-8e7c-8d6e53f3c3d5", "rel": "self" }, { "href": "http://192.168.122.180:8786/2e3de76b49b444fd9dc7ca9f7048ce6b/messages/4b319d29-d5b7-4b6e-8e7c-8d6e53f3c3d5", "rel": "bookmark" } ], "id": "4b319d29-d5b7-4b6e-8e7c-8d6e53f3c3d5", "resource_id": "351cc796-2d79-4a08-b878-a8ed933b6b68", "message_level": "ERROR", "user_message": "allocate host: No storage could be allocated for this share request. Trying again with a different size or share type may succeed.", "expires_at": "2017-07-10T10:27:43.000000", "created_at": "2017-07-10T10:26:43.000000", "detail_id": "002", "request_id": "req-24e7ccb6-a7d5-4ddd-a8e4-d8f72a4509c8", "project_id": "2e3de76b49b444fd9dc7ca9f7048ce6b", "resource_type": "SHARE", "action_id": "001" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/samples/versions-get-version-response.json0000664000175000017500000000140115251045254025550 0ustar00zuulzuul{ "versions": [ { "status": "CURRENT", "updated": "2015-08-27T11:33:21Z", "links": [ { "href": "http://docs.openstack.org/", "type": "text/html", "rel": "describedby" }, { "href": "http://172.18.198.54:8786/v2/", "rel": "self" } ], "min_version": "2.0", "version": "2.15", "media-types": [ { "base": "application/json", "type": "application/vnd.openstack.share+json;version=1" } ], "id": "v2.0" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/samples/versions-index-response.json0000664000175000017500000000274315251045254024427 0ustar00zuulzuul{ "versions": [ { "status": "DEPRECATED", "updated": "2015-08-27T11:33:21Z", "links": [ { "href": "http://docs.openstack.org/", "type": "text/html", "rel": "describedby" }, { "href": "http://172.18.198.54:8786/v1/", "rel": "self" } ], "min_version": "", "version": "", "media-types": [ { "base": "application/json", "type": "application/vnd.openstack.share+json;version=1" } ], "id": "v1.0" }, { "status": "CURRENT", "updated": "2015-08-27T11:33:21Z", "links": [ { "href": "http://docs.openstack.org/", "type": "text/html", "rel": "describedby" }, { "href": "http://172.18.198.54:8786/v2/", "rel": "self" } ], "min_version": "2.0", "version": "2.15", "media-types": [ { "base": "application/json", "type": "application/vnd.openstack.share+json;version=1" } ], "id": "v2.0" } ] } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/scheduler-stats.inc0000664000175000017500000000572415251045254021066 0ustar00zuulzuul.. -*- rst -*- Scheduler Stats - Storage Pools =============================== An administrator can list all back-end storage pools that are known to the scheduler service. List back-end storage pools ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/scheduler-stats/pools?pool={pool_name}&host={host_name}&backend={backend_name}&capabilities={capabilities}&share_type={share_type} Lists all back-end storage pools. If search options are provided, the pool list that is returned is filtered with these options. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - pool_name: backend_pool_query - host_name: backend_host_query - backend_name: backend_query - capabilities: backend_capabilities_query - share_type: share_type_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - backend: backend - host: backend_host - pool: pool - name: backend_name Response example ---------------- .. literalinclude:: samples/pools-list-response.json :language: javascript List back-end storage pools with details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/scheduler-stats/pools/detail?pool={pool_name}&host={host_name}&backend={backend_name}&capabilities={capabilities}&share_type={share_type} Lists all back-end storage pools with details. If search options are provided, the pool list that is returned is filtered with these options. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - pool_name: backend_pool_query - host_name: backend_host_query - backend_name: backend_query - capabilities: backend_capabilities_query - share_type: share_type_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - pools: pools - name: backend_name - backend: backend - pool: pool - host: backend_host - capabilities: capabilities - qos: capability_qos - timestamp: timestamp - share_backend_name: capability_share_backend_name - server_pools_mapping: capability_server_pools_mapping - driver_handles_share_servers: capability_driver_handles_share_servers - driver_version: capability_driver_version - total_capacity_gb: capability_total_capacity_gb - free_capacity_gb: capability_free_capacity_gb - reserved_percentage: capability_reserved_percentage - vendor_name: capability_vendor_name - snapshot_support: capability_snapshot_support - replication_domain: capability_replication_domain - storage_protocol: capability_storage_protocol Response example ---------------- .. literalinclude:: samples/pools-list-detailed-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/security-services.inc0000664000175000017500000001770515251045254021446 0ustar00zuulzuul.. -*- rst -*- Security services ================= You can create, update, view, and delete security services. A security service resource represents configuration information for clients for authentication and authorization (AuthN/AuthZ). For example, a share server will be the client for an existing security service such as LDAP, Kerberos, or Microsoft Active Directory. The Shared File Systems service supports three security service types: - ``ldap``. LDAP. - ``kerberos``. Kerberos. - ``active_directory``. Microsoft Active Directory. You can configure a security service with these options: - A DNS IP address. Some drivers may allow a comma separated list of multiple addresses, e.g. NetApp ONTAP. - An IP address or host name. - A domain. - An ou, the organizational unit. (available starting with API version 2.44) - A user or group name. - The password for the user, if you specify a user name. - A default AD site, optional (available starting with API version 2.76) A security service resource can also be given a user defined name and description. List security services ~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/security-services Lists all security services. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - status: security_service_status - type: security_service_type - id: security_service_id - name: name Response example ---------------- .. literalinclude:: samples/security-services-list-response.json :language: javascript List security services with details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/security-services/detail Lists all security services with details. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - status: security_service_status - id: security_service_id - project_id: project_id - type: security_service_type - name: name - description: description - dns_ip: security_service_dns_ip - user: security_service_user - password: security_service_password - domain: security_service_domain - ou: security_service_ou - server: security_service_server - default_ad_site: security_service_default_ad_site - updated_at: updated_at - created_at: created_at Response example ---------------- .. literalinclude:: samples/security-services-list-detailed-response.json :language: javascript Show security service details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/security-services/{security_service_id} Shows details for a security service. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - security_service_id: security_service_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - status: security_service_status - id: security_service_id - project_id: project_id - type: security_service_type - name: name - description: description - dns_ip: security_service_dns_ip - user: security_service_user - password: security_service_password - domain: security_service_domain - ou: security_service_ou - server: security_service_server - default_ad_site: security_service_default_ad_site - updated_at: updated_at - created_at: created_at Response example ---------------- .. literalinclude:: samples/security-service-show-response.json :language: javascript Create security service ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/security-services Creates a security service. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - type: security_service_type - name: name_request - description: description_request - dns_ip: security_service_dns_ip_request - user: security_service_user_request - password: security_service_password_request - domain: security_service_domain_request - ou: security_service_ou_request - server: security_service_server_request - default_ad_site: security_service_default_ad_site_request Request example --------------- .. literalinclude:: samples/security-service-create-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - status: security_service_status - id: security_service_id - project_id: project_id - type: security_service_type - name: name - description: description - dns_ip: security_service_dns_ip - user: security_service_user - password: security_service_password - domain: security_service_domain - ou: security_service_ou - server: security_service_server - default_ad_site: security_service_default_ad_site - updated_at: updated_at - created_at: created_at Response example ---------------- .. literalinclude:: samples/security-service-create-response.json :language: javascript Update security service ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/security-services/{security_service_id} Updates a security service. If the security service is in ``active`` state, you can update only the ``name`` and ``description`` attributes. A security service in ``active`` state is attached to a share network with an associated share server. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - security_service_id: security_service_id_path - type: security_service_type - name: name_request - description: description_request - dns_ip: security_service_dns_ip_request - user: security_service_user_request - password: security_service_password_request - domain: security_service_domain_request - ou: security_service_ou_request - server: security_service_server_request - default_ad_site: security_service_default_ad_site_request Request example --------------- .. literalinclude:: samples/security-service-update-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - status: security_service_status - id: security_service_id - project_id: project_id - type: security_service_type - name: name - description: description - dns_ip: security_service_dns_ip - user: security_service_user - password: security_service_password - domain: security_service_domain - ou: security_service_ou - server: security_service_server - default_ad_site: security_service_default_ad_site - updated_at: updated_at - created_at: created_at Response example ---------------- .. literalinclude:: samples/security-service-update-response.json :language: javascript Delete security service ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/security-services/{security_service_id} Deletes a security service. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - security_service_id: security_service_id_path ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/services.inc0000664000175000017500000001047415251045254017575 0ustar00zuulzuul.. -*- rst -*- Services ======== These APIs help in interacting with the Shared File Systems services, ``manila-scheduler``, ``manila-share`` and ``manila-data``. .. important:: For API versions 2.6 and prior, replace ``services`` in the URLs with ``os-services``. .. note:: Starting from API version 2.83, ``disabled`` field will be replaced by ``status`` field in response of enable or disable service request. Re-enabling a disabled service will automatically clear ``disable reason``. List services ~~~~~~~~~~~~~ .. rest_method:: GET /v2/services?host={host}&binary={binary}&zone={zone}&state={state}&status={status}&ensuring={ensuring} Lists all services optionally filtered with the specified search options. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - host: service_host_query - binary: service_binary_query - zone: service_zone_query - state: service_state_query - status: service_status_query - ensuring: service_ensuring_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - services: services - id: service_id_response - status: service_status_response - binary: service_binary_response - zone: service_zone_response - host: service_host_response - state: service_state_response - updated_at: updated_at - disabled_reason: service_disable_reason_response - ensuring: service_ensuring_response Response example ---------------- .. literalinclude:: samples/services-list-response.json :language: javascript Enable service ~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/services/enable Enables a service. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - binary: service_enable_binary_request - host: service_enable_host_request Request example --------------- .. literalinclude:: samples/service-enable-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - host: service_enable_host_response - binary: service_binary_response - disabled: service_disabled_response - status: service_status_new_response - disabled_reason: service_disable_reason_response Response example ---------------- .. literalinclude:: samples/service-enable-response.json :language: javascript Disable service ~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/services/disable Disables a service. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - binary: service_disable_binary_request - host: service_disable_host_request - disabled_reason: service_disable_reason_request Request example --------------- .. literalinclude:: samples/service-disable-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - host: service_disable_host_response - binary: service_disable_binary_response - disabled: service_disabled_response - status: service_status_new_response - disabled_reason: service_disable_reason_response Response example ---------------- .. literalinclude:: samples/service-disable-response.json :language: javascript Ensure shares (Since API Version 2.86) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/services/ensure-shares Starts the ensure shares procedure for a manila-share binary. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - host: service_ensure_shares_host_request Request example --------------- .. literalinclude:: samples/service-ensure-shares-request.json :language: javascript Response parameters ------------------- There is no body content for the response. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/share-access-rule-metadata.inc0000664000175000017500000000316615251045254023036 0ustar00zuulzuul.. -*- rst -*- Share access rule metadata (since API v2.45) ============================================ Updates, and unsets share access rule metadata. Update share access rule metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/share-access-rules/{access_id}/metadata .. versionadded:: 2.45 Updates the metadata for a share access rule. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - access_id: access_id_path - metadata: access_metadata Request example --------------- .. literalinclude:: samples/share-access-rules-update-metadata-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: access_metadata Response example ---------------- .. literalinclude:: samples/share-access-rules-update-metadata-response.json :language: javascript Unset share access rule metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-access-rules/{access_id}/metadata/{key} .. versionadded:: 2.45 Un-sets the metadata on a share access rule. To unset a metadata key value, specify only the key name in the URI. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - access_id: access_id_path - key: metadata_key_path ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8302343 manila-23.0.0.0rc1/api-ref/source/share-access-rules.inc0000664000175000017500000000763415251045254021447 0ustar00zuulzuul.. -*- rst -*- .. _get-access-rules-after-2-45: Share access rules (since API v2.45) ==================================== Retrieve details about access rules .. note:: Starting from API version 2.82, access rule visibility can be restricted by a project user, or any user with "service" or "admin" roles. When restricted, the access_to and access_key fields will be redacted to other users. This redaction applies irrespective of the API version. Describe share access rule ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-access-rules/{access_id} .. versionadded:: 2.45 Retrieve details about a specified access rule. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - access_id: access_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - share_id: access_share_id - created_at: created_at - updated_at: updated_at - access_type: access_type - access_to: access_to - access_key: access_key_share_access_rules - state: state - access_level: access_level - id: access_rule_id - metadata: access_metadata Response example ---------------- .. literalinclude:: samples/share-access-rules-show-response.json :language: javascript List share access rules ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-access-rules?share_id={share-id} .. versionadded:: 2.45 Lists the share access rules on a share. .. note:: This API replaces the older :ref:`List share access rules ` API from version 2.45. .. note:: Starting from API version 2.82, access rule visibility can be restricted by a project user, or any user with "service" or "admin" roles. When restricted, the access_to and access_key fields will be redacted to other users. This redaction applies irrespective of the API version. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id_access_rules_query - metadata: metadata Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: access_metadata - access_type: access_type - access_key: access_key_share_access_rules - access_to: access_to - access_level: access_level - state: state - access_list: access_list - id: access_rule_id - created_at: created_at - updated_at: updated_at Response example ---------------- .. literalinclude:: samples/share-access-rules-list-response.json :language: javascript Update share access rule ~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/share-access-rules/{access_id} .. versionadded:: 2.88 Update ``access_level`` of a specified access rule. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - access_id: access_id_path - access_level: access_level Request example --------------- .. literalinclude:: samples/share-access-rules-update-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - share_id: access_share_id - created_at: created_at - updated_at: updated_at - access_type: access_type - access_to: access_to - access_key: access_key_share_access_rules - state: state - access_level: access_level - id: access_rule_id - metadata: access_metadata Response example ---------------- .. literalinclude:: samples/share-access-rules-update-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8312347 manila-23.0.0.0rc1/api-ref/source/share-actions.inc0000664000175000017500000002706215251045254020513 0ustar00zuulzuul.. -*- rst -*- .. _get-access-rules-before-2-45: Share actions ============= Share actions include granting or revoking share access, listing the available access rules for a share, explicitly updating the state of a share, resizing a share and un-managing a share. As administrator, you can reset the state of a share and force- delete a share in any state. Use the ``policy.yaml`` file to grant permissions for this action to other roles. You can set the state of a share to one of these supported states: - ``available`` - ``error`` - ``creating`` - ``deleting`` - ``error_deleting`` If API version 1.0-2.6 is used then all share actions, defined below, should include prefix ``os-`` in top element of request JSON's body. For example: {"access_list": null} is valid for v2.7+. And {"os- access_list": null} is valid for v1.0-2.6 Grant access ~~~~~~~~~~~~ All manila shares begin with no access. Clients must be provided with explicit access via this API. To grant access, specify one of these supported share access levels: - ``rw``. Read and write (RW) access. - ``ro``. Read-only (RO) access. You must also specify one of these supported authentication methods: - ``ip``. Authenticates an instance through its IP address. The value specified should be a valid IPv4 or an IPv6 address, or a subnet in CIDR notation. A valid format is ``X:X:X:X:X:X:X:X``, ``X:X:X:X:X:X:X:X/XX``, ``XX.XX.XX.XX``, or ``XX.XX.XX.XX/XX``, etc. For example ``0.0.0.0/0`` or ``::/0``. .. important:: IPv6 based access is only supported with API version 2.38 and beyond. .. note:: Starting from API version 2.82, it is possible to lock the deletion, restrict the visibility of sensible fields of the access rules, and specify a reason for such locks while invoking the grant access API through the parameters ``lock_deletion``, ``lock_visibility`` and ``lock_reason`` respectively. - ``cert``. Authenticates an instance through a TLS certificate. Specify the TLS identity as the IDENTKEY. A valid value is any string up to 64 characters long in the common name (CN) of the certificate. The meaning of a string depends on its interpretation. - ``user``. Authenticates by a user or group name. A valid value is an alphanumeric string that can contain some special characters and is from 4 to 255 characters long. .. rest_method:: POST /v2/shares/{share_id}/action Grants access to a share. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - allow_access: allow_access - access_level: access_level - access_type: access_type - access_to: access_to - metadata: access_metadata_grant_access - lock_visibility: lock_visibility - lock_deletion: lock_deletion - lock_reason: resource_lock_lock_reason Request example --------------- .. literalinclude:: samples/share-actions-grant-access-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - share_id: access_share_id - created_at: created_at - updated_at: updated_at - access_type: access_type - access_to: access_to - access_key: access_key - access: access - access_level: access_level - id: access_rule_id - metadata: access_metadata Response example ---------------- .. literalinclude:: samples/share-actions-grant-access-response.json :language: javascript Revoke access ~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action The shared file systems service stores each access rule in its database and assigns it a unique ID. This ID can be used to revoke access after access has been requested. .. note:: In case the access rule had its deletion locked, it will be necessary to provide the ``unrestrict`` parameter in the revoke access request. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - deny_access: deny_access - access_id: access_id - unrestrict: unrestrict_access Request example --------------- .. literalinclude:: samples/share-actions-revoke-access-request.json :language: javascript List access rules (DEPRECATED) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. warning:: This API is deprecated starting with microversion 2.45 and requests to this API will fail with a 404 starting from microversion 2.45. Use :ref:`List share access rules ` API instead of this API from version 2.45. .. rest_method:: POST /v2/shares/{share_id}/action Lists access rules for a share. The Access ID returned is necessary to deny access. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - access_list: access_list Request example --------------- .. literalinclude:: samples/share-actions-list-access-rules-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - access_type: access_type - access_key: access_key - access_to: access_to - access_level: access_level - state: state - access_list: access_list - id: access_rule_id - created_at: created_at - updated_at: updated_at Response example ---------------- .. literalinclude:: samples/share-actions-list-access-rules-response.json :language: javascript Reset share state ~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action Administrator only. Explicitly updates the state of a share. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - reset_status: reset_status - status: share_status_request Request example --------------- .. literalinclude:: samples/share-actions-reset-state-request.json :language: javascript Force-delete share ~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action Administrator only. Force-deletes a share in any state. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - force_delete: share_force_delete Request example --------------- .. literalinclude:: samples/share-actions-force-delete-request.json :language: javascript Extend share ~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action Increases the size of a share. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - extend: extend - new_size: share_new_size - force: share_force_extend Request example --------------- .. literalinclude:: samples/share-actions-extend-request.json :language: javascript Shrink share ~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action Shrinks the size of a share. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - shrink: shrink - new_size: share_new_size Request example --------------- .. literalinclude:: samples/share-actions-shrink-request.json :language: javascript Unmanage share (since API v2.7) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action .. versionadded:: 2.7 Use this API to remove a share from the management of the Shared File Systems service without deleting the share. Administrator only. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Preconditions: - You should remove any snapshots and share replicas before attempting to unmanage a share. .. note:: Unmanaging shares that are created on top of share servers (i.e. created with share networks) is not supported prior to API version 2.49. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - unmanage: share_unmanage Request example --------------- .. literalinclude:: samples/share-actions-unmanage-request.json :language: javascript Response parameters ------------------- There is no body content for the response. Revert share to snapshot (since API v2.27) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action .. versionadded:: 2.27 Reverts a share to the specified snapshot, which must be the most recent one known to manila. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - snapshot_id: snapshot_id Request example --------------- .. literalinclude:: samples/share-actions-revert-to-snapshot-request.json :language: javascript Soft delete share (since API v2.69) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action .. versionadded:: 2.69 Soft delete a share to recycle bin. Preconditions - Share status must be ``available``, ``error`` or ``inactive`` - Share can't have any snapshot. - Share can't have a share group snapshot. - Share can't have dependent replicas. - You cannot soft delete share that already is in the Recycle Bin.. - You cannot soft delete a share that doesn't belong to your project. - You cannot soft delete a share is busy with an active task. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id Request example --------------- .. literalinclude:: samples/share-actions-soft-delete-request.json :language: javascript Restore share (since API v2.69) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action .. versionadded:: 2.69 Restore a share from recycle bin. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id Request example --------------- .. literalinclude:: samples/share-actions-restore-request.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8312347 manila-23.0.0.0rc1/api-ref/source/share-backups.inc0000664000175000017500000002125415251045254020500 0ustar00zuulzuul.. -*- rst -*- Share backups (since API v2.80) =============================== Use the Shared File Systems service to make backups of shares. A share backup is a point-in-time, read-only copy of the data that is contained in a share. The APIs below allow controlling share backups. They are represented by a "backup" resource in the Shared File Systems service, and they can have user-defined metadata such as a name and description. You can create, restore, update, list and delete share backups. After you create a share backup, you can access backup and use it. You can also restore a backup into a share as long as certain criteria are met e.g. size. You can update a share backup to change its name or description. As administrator, you can also reset the state of a backup. Backup can be in one of the following states: - ``available`` - ``error`` - ``creating`` - ``deleting`` - ``restoring`` During a backup or restore operation, share can be in one of the following states: - ``available`` - ``backup_creating`` - ``backup_restoring`` - ``backup_restoring_error`` List share backups ~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-backups .. versionadded:: 2.80 Lists all share backups. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 Request ------- .. rest_parameters:: parameters.yaml - share_id: backup_share_id_query - name~: name_inexact_query_versionless - description~: description_inexact_query_versionless - limit: limit - offset: offset - sort_key: sort_key_backup - sort_dir: sort_dir - status: backup_status_query - host: backup_host_query - topic: backup_topic_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: backup_id_response - share_id: backup_share_id - status: backup_status Response example ---------------- .. literalinclude:: samples/share-backups-list-response.json :language: javascript List share backups with details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-backups/detail .. versionadded:: 2.80 Lists all share backups with details. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 Request ------- .. rest_parameters:: parameters.yaml - share_id: backup_share_id_query - name~: name_inexact_query_versionless - description~: description_inexact_query_versionless - limit: limit - offset: offset - sort_key: sort_key_backup - sort_dir: sort_dir - status: backup_status_query - host: backup_host_query - topic: backup_topic_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: backup_id_response - share_id: backup_share_id - status: backup_status - size: backup_size - availability_zone: backup_az - name: name - description: description - created_at: created_at - updated_at: updated_at - progress: backup_progress - restore_progress: backup_restore_progress Response example ---------------- .. literalinclude:: samples/share-backups-list-detailed-response.json :language: javascript Show share backup details ~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-backups/{backup_id} .. versionadded:: 2.80 Shows details for a share backup. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request ------- .. rest_parameters:: parameters.yaml - backup_id: backup_id_request_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: backup_id_response - share_id: backup_share_id - status: backup_status - size: backup_size - availability_zone: backup_az - name: name - description: description - created_at: created_at - updated_at: updated_at - progress: backup_progress - restore_progress: backup_restore_progress Response example ---------------- .. literalinclude:: samples/share-backup-show-response.json :language: javascript Create share backup ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-backups .. versionadded:: 2.80 Creates a backup from a share. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 - 422 Request ------- .. rest_parameters:: parameters.yaml - share_id: backup_share_id - name: name_request - description: description_request - backup_options: backup_options_request Request example --------------- .. literalinclude:: samples/share-backup-create-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: backup_id_response - share_id: backup_share_id - status: backup_status - size: backup_size - availability_zone: backup_az - name: name - description: description - created_at: created_at - updated_at: updated_at - progress: backup_progress - restore_progress: backup_restore_progress Response example ---------------- .. literalinclude:: samples/share-backup-create-response.json :language: javascript Update share backup ~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/share-backups/{backup_id} .. versionadded:: 2.80 Updates a share backup. You can update these attributes: - ``display_name``, which changes the ``name`` of the share backup. - ``display_description``, which changes the ``description`` of the share backup. If you try to update other attributes, they retain their previous values. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - backup_id: backup_id_request_path - display_name: display_name_request - display_description: display_description_request Request example --------------- .. literalinclude:: samples/share-backup-update-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: backup_id_response - share_id: backup_share_id - status: backup_status - size: backup_size - availability_zone: backup_az - name: name - description: description - created_at: created_at - updated_at: updated_at - progress: backup_progress - restore_progress: backup_restore_progress Response example ---------------- .. literalinclude:: samples/share-backup-update-response.json :language: javascript Delete share backup ~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-backups/{backup_id} .. versionadded:: 2.80 Deletes a share backup. Preconditions - Share backup status must be ``available`` or ``error``. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - backup_id: backup_id_request_path Restore a share backup ~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-backups/{backup_id}/action .. versionadded:: 2.80 Restores a share backup into original share. Preconditions - Share backup status must be ``available``. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - backup_id: backup_id_request_path Request example --------------- .. literalinclude:: samples/share-backup-restore-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - backup_id: backup_id_response - share_id: backup_share_id Response example ---------------- .. literalinclude:: samples/share-backup-restore-response.json :language: javascript Reset share backup status ~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-backups/{backup_id}/action .. versionadded:: 2.80 Administrator only. Explicitly updates the state of a share backup. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - backup_id: backup_id_request_path - status: backup_status_request Request example --------------- .. literalinclude:: samples/share-backup-reset-status-request.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8312347 manila-23.0.0.0rc1/api-ref/source/share-export-locations-metadata.inc0000664000175000017500000001241415251045254024136 0ustar00zuulzuul.. -*- rst -*- Export Location metadata (Since API v2.87) ========================================== Shows, sets, updates, and unsets export location metadata. Show all export location metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/shares/{share_id}/export_locations/{export_location_id}/metadata .. versionadded:: 2.87 Shows all the metadata for a export location, as key and value pairs. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - export_location_id: export_location_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/export-location-show-metadata-response.json :language: javascript Show export location metadata item ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/shares/{share_id}/export_locations/{export_location_id}/metadata/{key} .. versionadded:: 2.87 Retrieves a specific metadata item from a export location's metadata by its key. If the specified key does not represent a valid metadata item, the API will respond with HTTP 404. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - export_location_id: export_location_id_path - key: metadata_key_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata_item Response example ---------------- .. literalinclude:: samples/export-location-show-metadata-item-response.json :language: javascript Set export location metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/export_locations/{export_location_id}/metadata .. versionadded:: 2.87 Allows adding new metadata items as key-value pairs. This API will not delete pre-existing metadata items. If the request object contains metadata items that already exist, they will be updated with new values as specified in the request object. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - export_location_id: export_location_id_path - metadata: metadata_request Request example --------------- .. literalinclude:: samples/export-location-set-metadata-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/export-location-set-metadata-response.json :language: javascript Update export location metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/shares/{share_id}/export_locations/{export_location_id}/metadata .. versionadded:: 2.87 Replaces the metadata for a given export location with the metadata (specified as key-value pairs) in the request object. All pre-existing metadata of the export location will be deleted and replaced with the new metadata supplied. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - export_location_id: export_location_id_path - metadata: metadata_request Request example --------------- .. literalinclude:: samples/export-location-update-metadata-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/export-location-update-metadata-response.json :language: javascript To delete all existing metadata items on a given export location, the request object needs to specify an empty metadata object: Request example --------------- .. literalinclude:: samples/export-location-update-null-metadata-request.json :language: javascript Response example ---------------- .. literalinclude:: samples/export-location-update-null-metadata-response.json :language: javascript Delete export location metadata item ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/shares/{share_id}/export_locations/{export_location_id}/metadata/{key} .. versionadded:: 2.87 Deletes a single metadata item on a export location, identified by its key. If the specified key does not represent a valid metadata item, the API will respond with HTTP 404. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - export_location_id: export_location_id_path - key: metadata_key_path ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8322349 manila-23.0.0.0rc1/api-ref/source/share-export-locations.inc0000664000175000017500000000446715251045254022371 0ustar00zuulzuul.. -*- rst -*- Share export locations (since API v2.9) ======================================= Set of APIs used for viewing export locations of shares. These APIs allow retrieval of export locations belonging to non-active share replicas until API version 2.46. In and beyond API version 2.47, export locations of non-active share replicas can only be retrieved using the :ref:`Share Replica Export Locations APIs `. List export locations ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/shares/{share_id}/export_locations .. versionadded:: 2.9 Lists all export locations for a share. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: export_location_id - share_instance_id: export_location_share_instance_id - path: export_location_path - is_admin_only: export_location_is_admin_only - preferred: export_location_preferred Response example ---------------- .. literalinclude:: samples/export-location-list-response.json :language: javascript Show single export location ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/shares/{share_id}/export_locations/​{export_location_id}​ .. versionadded:: 2.9 Show details of an export location belonging to a share. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - export_location_id: export_location_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: export_location_id - share_instance_id: export_location_share_instance_id - path: export_location_path - is_admin_only: export_location_is_admin_only - preferred: export_location_preferred - created_at: created_at - updated_at: updated_at - metadata: metadata Response example ---------------- .. literalinclude:: samples/export-location-show-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8322349 manila-23.0.0.0rc1/api-ref/source/share-group-snapshots.inc0000664000175000017500000002041615251045254022223 0ustar00zuulzuul.. -*- rst -*- Share group snapshots (since API v2.31) ======================================= Use the Shared File Systems Service to make snapshots of share groups. A share group snapshot is a point-in-time, read-only copy of the data that is contained in a share group. You can create, update, and delete share group snapshots. After you create a share group snapshot, you can create a share group from it. You can update a share group snapshot to rename it, change its description, or update its state. As administrator, you can also reset the state of a group snapshot. Use the ``policy.yaml`` file to grant permissions for these actions to other roles. .. note:: Share Group Snapshot APIs are no longer considered experimental since API version 2.55. List share group snapshots ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-group-snapshots .. versionadded:: 2.31 Lists all share group snapshots. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query - name: name_query - description: description_query - status: group_snapshot_status_query - share_group_id: share_group_id_query - limit: limit_query - offset: offset - sort_key: sort_key - sort_dir: sort_dir Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: group_snapshot_id - name: name - links: group_snapshot_links Response example ---------------- .. literalinclude:: samples/share-group-snapshots-list-response.json :language: javascript List share group snapshots with details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-group-snapshots/detail .. versionadded:: 2.31 Lists all share group snapshots with details. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query - name: name_query - description: description_query - status: group_snapshot_status_query - share_group_id: share_group_id_query - limit: limit_query - offset: offset - sort_key: sort_key - sort_dir: sort_dir Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: group_snapshot_id - project_id: project_id - status: group_snapshot_status_required - share_group_id: share_group_id - name: name - description: description - created_at: created_at - members: group_snapshot_members - links: group_snapshot_links Response example ---------------- .. literalinclude:: samples/share-group-snapshots-list-detailed-response.json :language: javascript List share group snapshots members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-group-snapshots/{group_snapshot_id}/members .. versionadded:: 2.31 Lists all share group snapshots members. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - group_snapshot_id: group_snapshot_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: group_snapshot_id - created_at: created_at - project_id: project_id - size: snapshot_size - share_protocol: snapshot_share_protocol - name: name - share_group_snapshot_id: group_snapshot_id - share_id: snapshot_share_id Response example ---------------- .. literalinclude:: samples/share-group-snapshots-list-members-response.json :language: javascript Show share group snapshot details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-group-snapshots/{group_snapshot_id} .. versionadded:: 2.31 Shows details for a share group snapshot. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - group_snapshot_id: group_snapshot_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: group_snapshot_id - project_id: project_id - status: group_snapshot_status_required - share_group_id: share_group_id - name: name - description: description - created_at: created_at - members: group_snapshot_members - links: group_snapshot_links Response example ---------------- .. literalinclude:: samples/share-group-snapshot-show-response.json :language: javascript Create share group snapshot ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-group-snapshots .. versionadded:: 2.31 Creates a snapshot from a share. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - name: name_request - description: description_request - share_group_id: share_group_id Request example --------------- .. literalinclude:: samples/share-group-snapshot-create-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: group_snapshot_id - project_id: project_id - status: group_snapshot_status_required - share_group_id: share_group_id - name: name - description: description - created_at: created_at - members: group_snapshot_members - links: group_snapshot_links Response example ---------------- .. literalinclude:: samples/share-group-snapshot-create-response.json :language: javascript Reset share group snapshot state ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-group-snapshots/{group_snapshot_id}/action .. versionadded:: 2.31 Administrator only. Explicitly updates the state of a share group snapshot. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - group_snapshot_id: group_snapshot_id_path - status: group_snapshot_status_required Request example --------------- .. literalinclude:: samples/snapshot-actions-reset-state-request.json :language: javascript Update share group snapshot ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/share-group-snapshots/{group_snapshot_id} .. versionadded:: 2.31 Updates a share group snapshot. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - group_snapshot_id: group_snapshot_id_path - name: name_request - description: description_request Request example --------------- .. literalinclude:: samples/snapshot-update-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: group_snapshot_id - project_id: project_id - status: group_snapshot_status_required - share_group_id: share_group_id - name: name - description: description - created_at: created_at - members: group_snapshot_members - links: group_snapshot_links Response example ---------------- .. literalinclude:: samples/share-group-snapshot-update-response.json :language: javascript Delete share group snapshot ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-group-snapshots/{group_snapshot_id} .. versionadded:: 2.31 Deletes a share group snapshot. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - group_snapshot_id: group_snapshot_id_path ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8322349 manila-23.0.0.0rc1/api-ref/source/share-group-types.inc0000664000175000017500000002244015251045254021344 0ustar00zuulzuul.. -*- rst -*- Share group types (since API v2.31) =================================== A share group type enables you to filter or choose back ends before you create a share group. You can set share group types as either public or private. By default a share group type is created as publicly accessible. Set ``share_group_type_access:is_public`` to ``False`` to make a share group type private. You can manage access to the private share group types for different projects. You can add access, remove access, and get information about access for a private share group type. Administrators can specify which `share type(s) <#experimental-apis>`_ a given group type may contain. If Administrators do not explicitly associate share types with a given share group type, the service will associate the share type configured as the ``default_share_type`` with the share group type. When creating a share group, the scheduler picks one of the back ends that match a combination of the extra specs in the specified share type(s) and share group type. Administrators can also set additional group extra specifications for a share group type for the following purposes: - Filter back ends by group scheduler. Specify these group extras specifications in this format: ``group_specs=value``. For example, ``consistent_snapshot_support=true``. .. note:: Share Group Type APIs are no longer considered experimental since API version 2.55. List share group types ~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-group-types .. versionadded:: 2.31 Lists all share group types. Response codes -------------- .. rest_status_code:: success status.yaml - 200 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - is_public: is_public_query - group_specs: group_specs_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_group_type_id_required - is_public: share_group_type_is_public - share_types: share_types_1 - name: share_group_type_name - group_specs: group_specs_required - is_default: is_group_type_default Response example ---------------- .. literalinclude:: samples/share-group-types-list-response.json :language: javascript List default share group types ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-group-types/default .. versionadded:: 2.31 Lists default share group types. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_group_type_id_required - is_public: share_group_type_is_public - share_types: share_types_1 - name: share_group_type_name - group_specs: group_specs_required - is_default: is_group_type_default Response example ---------------- .. literalinclude:: samples/share-group-types-default-list-response.json :language: javascript List share group types extra specs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-group-types/{share_group_type_id}/group-specs .. versionadded:: 2.31 Lists the extra specifications for a share group type. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_group_type_id: share_group_type_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - group_specs: group_specs_required Response example ---------------- .. literalinclude:: samples/share-group-types-group-specs-list-response.json :language: javascript Create share group type ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-group-types .. versionadded:: 2.31 Creates a share group type. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_types: share_types_1 - name: share_group_type_name_request - group_specs: group_specs - is_public: share_group_type_is_public_request Request example --------------- .. literalinclude:: samples/share-group-type-create-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_group_type_id_required - group_specs: group_specs_required - name: share_group_type_name - share_types: share_types_1 - is_public: share_group_type_is_public - is_default: is_group_type_default Response example ---------------- .. literalinclude:: samples/share-group-type-create-response.json :language: javascript Show share group type access details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-group-types/{share_group_type_id}/access .. versionadded:: 2.31 Shows access details for a share group type. You can view access details for private share group types only. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_group_type_id: share_group_type_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - share_group_type_id: share_group_type_id_required - project_id: project_id_type_access Response example ---------------- .. literalinclude:: samples/share-group-types-list-access-response.json :language: javascript Set extra spec for share group type ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-group-types/{share_group_type_id}/group-specs .. versionadded:: 2.31 Sets an extra specification for the share group type. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_group_type_id: share_group_type_id_path - group_specs: group_specs_required Request example --------------- .. literalinclude:: samples/share-group-type-set-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - group_specs: group_specs_required Response example ---------------- .. literalinclude:: samples/share-group-type-set-response.json :language: javascript Unset an group spec ~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-group-types/{share_group_type_id}/group-specs/{group_spec_key} .. versionadded:: 2.31 Unsets an extra specification for the share type. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_group_type_id: share_group_type_id_path - group_spec_key: group_spec_key Add share group type access ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-group-types/{share_group_type_id}/action .. versionadded:: 2.31 Adds share group type access for a project. You can add access to private share group types only. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_group_type_id: share_group_type_id_path - addProjectAccess: add_project_access - project: project_id_type_access_grant_request Request example --------------- .. literalinclude:: samples/share-group-type-grant-access-request.json :language: javascript Remove share group type access ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-group-types/{share_group_type_id}/action .. versionadded:: 2.31 Removes share group type access from a project. You can remove access from private share group types only. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_group_type_id: share_group_type_id_path - removeProjectAccess: remove_project_access - project: project_id_type_access_revoke_request Request example --------------- .. literalinclude:: samples/share-group-type-revoke-access-request.json :language: javascript Delete share group type ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-group-types/{share_group_type_id} .. versionadded:: 2.31 Deletes a share group type. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_group_type_id: share_group_type_id_path ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8322349 manila-23.0.0.0rc1/api-ref/source/share-groups.inc0000664000175000017500000002221315251045254020363 0ustar00zuulzuul.. -*- rst -*- Share groups (since API v2.31) ============================== The share groups enable you to create a group of volumes and manage them together. A project can put shares be used in the same application together in a share group, such as consistency group snapshot, clone, backup, migrate, replicate, retype, etc. Shares should be able to become a part of a share group only on share creation step. If share was created without provided ``share_group_id`` then this share won't be able to become a part of any share group. You can create a share group and associate it with multiple shares, list share groups, and show information for delete a share group. .. note:: Share Group APIs are no longer considered experimental since API version 2.55. The ``availability_zone_id`` and ``consistent_snapshot_support`` fields were added to ``share_group`` object since version 2.34. List share groups ~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-groups .. versionadded:: 2.31 Lists all share groups. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query - name: name_query - description: description_query - status: share_group_status_query - share_server_id: share_server_id_query - snapshot_id: snapshot_id_query - host: backend_host_query - share_network_id: share_network_id_query - share_group_type_id: share_group_type_id_query - share_group_snapshot_id: source_share_group_snapshot_id_query - share_types: share_types_query - limit: limit_query - offset: offset - sort_key: sort_key - sort_dir: sort_dir - name~: name_inexact_query - description~: description_inexact_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_group_id - links: share_group_links - name: name - status: share_group_status - description: description Response example ---------------- .. literalinclude:: samples/share-groups-list-response.json :language: javascript List share groups with details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-groups/detail .. versionadded:: 2.31 Lists all share groups with details. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query - name: name_query - description: description_query - status: share_group_status_query - share_server_id: share_server_id_query - snapshot_id: snapshot_id_query - host: backend_host_query - share_network_id: share_network_id_query - share_group_type_id: share_group_type_id_query - share_group_snapshot_id: source_share_group_snapshot_id_query - share_types: share_types_query - limit: limit_query - offset: offset - sort_key: sort_key - sort_dir: sort_dir - name~: name_inexact_query - description~: description_inexact_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_group_id - name: name - created_at: created_at - status: share_group_status - description: description - project_id: project_id - host: backend_host - share_group_type_id: share_group_type_id_required - source_share_group_snapshot_id: source_share_group_snapshot_id_response - share_network_id: share_network_id - share_types: share_types_1 - links: share_group_links - availability_zone: availability_zone_id_share_group - consistent_snapshot_support: consistent_snapshot_support Response example ---------------- .. literalinclude:: samples/share-groups-list-detailed-response.json :language: javascript Show share group details ~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-groups/{share_group_id} .. versionadded:: 2.31 Shows details for a share group. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_group_id: share_group_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_group_id - name: name - created_at: created_at - status: share_group_status - description: description - project_id: project_id - host: backend_host - share_group_type_id: share_group_type_id_required - source_share_group_snapshot_id: source_share_group_snapshot_id_response - share_network_id: share_network_id - share_types: share_types_1 - links: share_group_links - availability_zone: availability_zone_id_share_group - consistent_snapshot_support: consistent_snapshot_support Response example ---------------- .. literalinclude:: samples/share-group-show-response.json :language: javascript Create share group ~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-groups .. versionadded:: 2.31 Creates a share group. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - name: name_request - description: description_request - share_types: share_types - share_group_type: share_group_type_id - share_network: share_network_id_request - source_share_group_snapshot: source_share_group_snapshot_id - availability_zone: availability_zone_id_share_group Request example --------------- .. literalinclude:: samples/share-group-create-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_group_id - name: name - created_at: created_at - status: share_group_status - description: description - project_id: project_id - host: share_group_host - share_group_type_id: share_group_type_id_required - source_share_group_snapshot_id: source_share_group_snapshot_id_response - share_network_id: share_network_id - share_types: share_types_1 - links: share_group_links - availability_zone: availability_zone_id_share_group - consistent_snapshot_support: consistent_snapshot_support Response example ---------------- .. literalinclude:: samples/share-group-create-response.json :language: javascript Reset share group state ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-groups/{share_group_id}/action .. versionadded:: 2.31 Administrator only. Explicitly updates the state of a share group. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_group_id: share_group_id_path - reset_status: reset_status - status: share_group_status Request example --------------- .. literalinclude:: samples/share-group-reset-state-request.json :language: javascript Update share group ~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/share-groups/{share_group_id} .. versionadded:: 2.31 Updates a share group. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_group_id: share_group_id_path - name: name_request - description: description_request Request example --------------- .. literalinclude:: samples/share-group-update-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_group_id - name: name - created_at: created_at - status: share_group_status - description: description - project_id: project_id - host: share_group_host - share_group_type_id: share_group_type_id_required - source_share_group_snapshot_id: source_share_group_snapshot_id - share_network_id: share_network_id - share_types: share_types_1 - links: share_group_links - availability_zone: availability_zone_id_share_group - consistent_snapshot_support: consistent_snapshot_support Response example ---------------- .. literalinclude:: samples/share-group-update-response.json :language: javascript Delete share group ~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-groups/{share_group_id} .. versionadded:: 2.31 Deletes a share group. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_group_id: share_group_id_path - force: share_force_delete ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8322349 manila-23.0.0.0rc1/api-ref/source/share-instance-export-locations.inc0000664000175000017500000000433415251045254024164 0ustar00zuulzuul.. -*- rst -*- Share instance export locations (since API v2.9) ================================================ Set of APIs used to view export locations of share instances. By default, these APIs are admin-only. Use the ``policy.yaml`` file to grant permissions for these actions to other roles. Lists all export locations for a share instance. Show details of an export location belonging to a share instance. List export locations ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share_instances/{share_instance_id}/export_locations .. versionadded:: 2.9 Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_instance_id: share_instance_id Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: export_location_id - share_instance_id: export_location_share_instance_id - path: export_location_path - is_admin_only: export_location_is_admin_only - preferred: export_location_preferred Response example ---------------- .. literalinclude:: samples/export-location-list-response.json :language: javascript Show single export location ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share_instances/{share_instance_id}/export_locations/{export_location_id} .. versionadded:: 2.9 Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_instance_id: share_instance_id - export_location_id: export_location_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: export_location_id - share_instance_id: export_location_share_instance_id - path: export_location_path - is_admin_only: export_location_is_admin_only - preferred: export_location_preferred - created_at: created_at - updated_at: updated_at Response example ---------------- .. literalinclude:: samples/export-location-show-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8322349 manila-23.0.0.0rc1/api-ref/source/share-instances.inc0000664000175000017500000001115615251045254021037 0ustar00zuulzuul.. -*- rst -*- Share instances (since API v2.3) ================================ A share instance is an internal representation for a share. A share that is replicated or is in the process of being migrated is physically stored in multiple locations. Each of these individual locations is called an "instance" within the Shared File Systems service. End users need not be concerned with this internal representation. As an administrator, you can list, show information for, explicitly set the state of, and force-delete share instances. Use the ``policy.yaml`` file to grant permissions for these actions to other roles. List share instances ~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share_instances .. versionadded:: 2.3 Lists all share instances. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - export_location_id: export_location_id_query - export_location_path: export_location_path_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - status: share_status_response - access_rules_status: access_rules_status - share_id: share_id_share_instances_response - progress: progress_share_instance - availability_zone: availability_zone - created_at: created_at - updated_at: updated_at - replica_state: replica_state - export_location: export_location - export_locations: export_locations - cast_rules_to_readonly: share_instance_cast_rules_to_readonly - share_network_id: share_network_id - share_server_id: share_server_id - host: host_resource_response - share_type_id: share_type_id - id: id_13 Response example ---------------- .. literalinclude:: samples/share-instances-list-response.json :language: javascript Show share instance details ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share_instances/{share_instance_id} .. versionadded:: 2.3 Shows details for a share instance. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_instance_id: share_instance_id Response parameters ------------------- .. rest_parameters:: parameters.yaml - status: share_status_response - access_rules_status: access_rules_status - share_id: share_id_share_instances_response - progress: progress_share_instance - availability_zone: availability_zone - created_at: created_at - updated_at: updated_at - replica_state: replica_state - export_location: export_location - export_locations: export_locations - cast_rules_to_readonly: share_instance_cast_rules_to_readonly - share_network_id: share_network_id - share_server_id: share_server_id - host: host_resource_response - share_type_id: share_type_id - id: id_13 Response example ---------------- .. literalinclude:: samples/share-show-instance-response.json :language: javascript Reset share instance state ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share_instances/{share_instance_id}/action .. versionadded:: 2.3 Administrator only. Explicitly updates the state of a share instance. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_instance_id: share_instance_id - status: share_status_request Request example --------------- .. literalinclude:: samples/share-instance-actions-reset-state-request.json :language: javascript Force-delete share instance ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share_instances/{share_instance_id}/action .. versionadded:: 2.3 Administrator only. Force-deletes a share instance. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_instance_id: share_instance_id - force_delete: force_delete_2 Request example --------------- .. literalinclude:: samples/share-instance-actions-force-delete-request.json :language: javascript././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.833235 manila-23.0.0.0rc1/api-ref/source/share-metadata.inc0000664000175000017500000001065715251045254020635 0ustar00zuulzuul.. -*- rst -*- Share metadata ============== Shows, sets, updates, and unsets share metadata. Show all share metadata ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/shares/{share_id}/metadata Shows all the metadata for a share, as key and value pairs. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/share-show-metadata-response.json :language: javascript Show share metadata item ~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/shares/{share_id}/metadata/{key} Retrieves a specific metadata item from a share's metadata by its key. If the specified key does not represent a valid metadata item, the API will respond with HTTP 404. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - key: metadata_key_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata_item Response example ---------------- .. literalinclude:: samples/share-show-metadata-item-response.json :language: javascript Set share metadata ~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/metadata Allows adding new metadata items as key-value pairs. This API will not delete pre-existing metadata items. If the request object contains metadata items that already exist, they will be updated with new values as specified in the request object. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - metadata: metadata_request Request example --------------- .. literalinclude:: samples/share-set-metadata-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/share-set-metadata-response.json :language: javascript Update share metadata ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/shares/{share_id}/metadata Replaces the metadata for a given share with the metadata (specified as key-value pairs) in the request object. All pre-existing metadata of the share will be deleted and replaced with the new metadata supplied. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - metadata: metadata_request Request example --------------- .. literalinclude:: samples/share-update-metadata-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/share-update-metadata-response.json :language: javascript To delete all existing metadata items on a given share, the request object needs to specify an empty metadata object: Request example --------------- .. literalinclude:: samples/share-update-null-metadata-request.json :language: javascript Response example ---------------- .. literalinclude:: samples/share-update-null-metadata-response.json :language: javascript Delete share metadata item ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/shares/{share_id}/metadata/{key} Deletes a single metadata item on a share, idetified by its key. If the specified key does not represent a valid metadata item, the API will respond with HTTP 404. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - key: metadata_key_path ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.833235 manila-23.0.0.0rc1/api-ref/source/share-migration.inc0000664000175000017500000001736215251045254021046 0ustar00zuulzuul.. -*- rst -*- Share Migration (since API v2.22) ================================= The Share Migration API is an administrator-only API that allows the invoker to select a destination pool to migrate a share to, while still allowing clients to access the source "share instance" during migration. Share migration is implemented in a 2-phase approach. The first phase of migration is when operations that take the longest are performed, such as data copying or replication. After first phase of data copying is complete, it is up to administrator to trigger the second phase, often referred to as switchover phase, which may perform operations such as final sync and deleting the source share instance. During the data copy phase, user can remain connected to the source, and may have to reconnect after the switchover phase. In order to migrate a share, manila may employ one of two mechanisms which are driver-assisted migration and host-assisted migration. - ``Driver-assisted migration``: This mechanism is intended to make use of driver optimizations to migrate shares between pools of the same storage vendor. This mechanism allows migrating shares nondisruptively while the source remains writable, preserving all filesystem metadata and snapshots. The migration workload is performed in the storage back end. - ``Host-assisted migration``: This mechanism is intended to migrate shares in an agnostic manner between two different pools, regardless of storage vendor. The implementation for this mechanism does not offer the same properties found in driver-assisted migration. In host-assisted migration, the source remains readable, snapshots must be deleted prior to starting the migration, filesystem metadata may be lost, and the clients will get disconnected by the end of migration. The migration workload is performed by the Data Service, which is a dedicated manila service for intensive data operations. These methods provide different capabilities and affect how efficiently the data copy and switchover are achieved. Generally speaking, driver-assisted migration is limited to homogenous storage backends and when available, is expected to be faster and more efficient than host-assisted migration. Driver-assisted migration occurs on the storage backend, while host-assisted migration occurs on the OpenStack nodes running the manila data service. When starting a migration, ``driver-assisted migration`` is attempted first. If the shared file system service detects it is not possible to perform the ``driver-assisted migration``, it proceeds to attempt ``host-assisted migration``. Possible use cases for data migration include: - Migrating shares along with snapshots. - Bring down a physical storage device for maintenance - Free up space in a thinly-provisioned back end. - Load balancing among share servers. - Retyping a share .. note:: Share Migration APIs are no longer considered experimental since API version ``2.96``. Start Migration ~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action .. versionadded:: 2.22 .. versionchanged:: 2.96 Share Migration APIs are no longer experimental since API version ``2.96``. Initiates share migration. This API will initiate the share data copy to the new host. The copy operation is non-disruptive. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id - share_id: share_id - force_host_assisted_migration: force_host_assisted_migration - preserve_snapshots: preserve_snapshots - preserve_metadata: preserve_metadata - nondisruptive: nondisruptive - writable: writable - new_share_type_id: new_share_type_id - new_share_network_id: new_share_network_id - host: host Request example --------------- .. literalinclude:: samples/share-migration-start-request.json :language: javascript Complete Migration ~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action .. versionadded:: 2.22 .. versionchanged:: 2.96 Share Migration APIs are no longer experimental since API version ``2.96``. Completes share migration. This API will initiate the switch-over from the source to destination share. This operation can be disruptive. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id - share_id: share_id Request example --------------- .. literalinclude:: samples/share-migration-complete-request.json :language: javascript .. _migration-get-progress: Migration Get Progress ~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/shares/{share_id}/migration-progress .. versionadded:: 2.98 Obtains progress information of a share migration. .. note:: Prior to API version ``2.98``, this API was only available as the ``migration_get_progress`` action on ``POST /v2/shares/{share_id}/action``. See :ref:`Migration Get Progress (DEPRECATED) `. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - share_id: share_id - project_id: project_id Response parameters ------------------- .. rest_parameters:: parameters.yaml - details: migration_progress_details - total_progress: total_progress - task_state: task_state Response example ---------------- .. literalinclude:: samples/share-migration-get-progress-response.json :language: javascript .. _migration-get-progress-deprecated: Migration Get Progress (DEPRECATED) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. warning:: This API is deprecated starting with microversion ``2.98``. For API version ``2.98`` and later, use the :ref:`Migration Get Progress ` GET endpoint instead. This POST action remains supported for API versions ``2.22`` through ``2.97``. .. rest_method:: POST /v2/shares/{share_id}/action .. versionadded:: 2.22 .. versionchanged:: 2.96 Share Migration APIs are no longer experimental since API version ``2.96``. .. versionremoved:: 2.98 Obtains progress information of a share migration. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - share_id: share_id - project_id: project_id Request example --------------- .. literalinclude:: samples/share-migration-get-progress-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - details: migration_progress_details - total_progress: total_progress - task_state: task_state Response example ---------------- .. literalinclude:: samples/share-migration-get-progress-response.json :language: javascript Cancel Migration ~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/{share_id}/action .. versionadded:: 2.22 .. versionchanged:: 2.96 Share Migration APIs are no longer experimental since API version ``2.96``. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - share_id: share_id - project_id: project_id Request example --------------- .. literalinclude:: samples/share-migration-cancel-request.json :language: javascript ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.833235 manila-23.0.0.0rc1/api-ref/source/share-network-subnets-metadata.inc0000664000175000017500000001275315251045254024004 0ustar00zuulzuul.. -*- rst -*- Share network subnets metadata (since API v2.78) ================================================ Shows, sets, updates, and unsets share network subnets metadata. Show all share network subnets metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-networks/{share_network_id}/subnets/{share_network_subnet_id}/metadata Shows all share network subnet metadata in the given share network subnet. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - share_network_subnet_id: share_network_subnet_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/share-network-subnet-show-metadata-response.json :language: javascript Show share network subnet metadata item ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-networks/{share_network_id}/subnets/{share_network_subnet_id}/metadata/{key} Retrieves a specific metadata item from a share network subnet's metadata by its key. If the specified key does not represent a valid metadata item, the API will respond with HTTP 404. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - share_network_subnet_id: share_network_subnet_id_path - key: metadata_key_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - meta: metadata_item Response example ---------------- .. literalinclude:: samples/share-show-network-subnet-metadata-item-response.json :language: javascript Set share network subnet metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-networks/{share_network_id}/subnets/{share_network_subnet_id}/metadata Allows adding new metadata items as key-value pairs. This API will not delete pre-existing metadata items. If the request object contains metadata items that already exist, they will be updated with new values as specified in the request object. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - share_network_subnet_id: share_network_subnet_id_path - metadata: metadata_request Request example --------------- .. literalinclude:: samples/share-network-subnet-set-metadata-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/share-network-subnet-set-metadata-response.json :language: javascript Update share network subnet metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/share-networks/{share_network_id}/subnets/{share_network_subnet_id}/metadata Replaces the metadata for a given share network subnet with the metadata (specified as key-value pairs) in the request object. All pre-existing metadata of the share network subnet will be deleted and replaced with the new metadata supplied. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - share_network_subnet_id: share_network_subnet_id_path - metadata: metadata_request Request example --------------- .. literalinclude:: samples/share-network-subnet-update-metadata-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/share-network-subnet-update-metadata-response.json :language: javascript To delete all existing metadata items on a given share network subnet, the request object needs to specify an empty metadata object: Request example --------------- .. literalinclude:: samples/share-network-subnet-update-null-metadata-request.json :language: javascript Response example ---------------- .. literalinclude:: samples/share-network-subnet-update-null-metadata-response.json :language: javascript Delete share network subnet metadata item ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-networks/{share_network_id}/subnets/{share_network_subnet_id}/metadata/{key} Deletes a single metadata item on a share network subnet, identified by its key. If the specified key does not represent a valid metadata item, the API will respond with HTTP 404. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - share_network_subnet_id: share_network_subnet_id_path - key: metadata_key_path ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.833235 manila-23.0.0.0rc1/api-ref/source/share-network-subnets.inc0000664000175000017500000001556115251045254022226 0ustar00zuulzuul.. -*- rst -*- Share network subnets (since API v2.51) ======================================= A share network subnet stores network information to create and manage share servers. You can list all subnets that pertain to a share network, also create, delete and view a share network subnet. When you create a share network, you may optionally specify an associated neutron network, subnetwork and an availability zone. If you do not specify an availability zone, the subnet you are creating will have the availability zone field empty and this subnet will be considered default. The default subnet is recognized by the Shared File Systems service as a subnet that spans all the available storage availability zones. .. note:: A share network can have only one default subnet. Likewise, a share network cannot have more than one subnet in a given availability zone. For more information about supported plug-ins for share network subnets, see `Manila Network Plugins `_. A share network subnet resource has these attributes: - The IP block in Classless Inter-Domain Routing (CIDR) notation from which to allocate the network. - The IP version of the network. - The network type, which is ``vlan``, ``vxlan``, ``gre``, or ``flat``. - If the network uses segmentation, a segmentation identifier. For example, VLAN, VXLAN, and GRE networks use segmentation. - The availability zone, when ``null`` signifies that the share network subnet is available across all storage availability zones known to the Shared File Systems Service. List share network subnets ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-networks/{share_network_id}/subnets .. versionadded:: 2.51 Lists all share network subnets in the given share network. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_network_subnet_id - availability_zone: share_network_subnet_availability_zone - share_network_id: share_network_subnet_share_network_id - share_network_name: share_network_subnet_share_network_name - created_at: created_at - updated_at: updated_at - segmentation_id: share_network_subnet_segmentation_id - neutron_net_id: share_network_subnet_neutron_net_id - neutron_subnet_id: share_network_subnet_neutron_subnet_id - ip_version: share_network_subnet_ip_version - cidr: share_network_subnet_cidr - network_type: share_network_subnet_network_type - gateway: share_network_subnet_gateway - mtu: share_network_subnet_mtu - metadata: share_network_subnet_metadata Response example ---------------- .. literalinclude:: samples/share-network-subnet-list-response.json :language: javascript Show share network subnet details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-networks/{share_network_id}/subnets/{share_network_subnet_id} .. versionadded:: 2.51 Shows details of a share network subnet. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - share_network_subnet_id: share_network_subnet_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_network_subnet_id - neutron_net_id: share_network_subnet_neutron_net_id - neutron_subnet_id: share_network_subnet_neutron_subnet_id - network_type: share_network_subnet_network_type - segmentation_id: share_network_subnet_segmentation_id - cidr: share_network_subnet_cidr - ip_version: share_network_subnet_ip_version - created_at: created_at - updated_at: updated_at - gateway: share_network_subnet_gateway - mtu: share_network_subnet_mtu - availability_zone: share_network_subnet_availability_zone - share_network_id: share_network_subnet_share_network_id - share_network_name: share_network_subnet_share_network_name - metadata: share_network_subnet_metadata Response example ---------------- .. literalinclude:: samples/share-network-subnet-show-response.json :language: javascript Create share network subnet ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-networks/{share_network_id}/subnets .. versionadded:: 2.51 Creates a share network subnet in the given share network. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 404 - 409 - 500 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - neutron_net_id: neutron_net_id_request - neutron_subnet_id: neutron_subnet_id_request - availability_zone: availability_zone_request Request example --------------- .. literalinclude:: samples/share-network-subnet-create-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_network_subnet_id - neutron_net_id: share_network_subnet_neutron_net_id - neutron_subnet_id: share_network_subnet_neutron_subnet_id - network_type: share_network_subnet_network_type - segmentation_id: share_network_subnet_segmentation_id - cidr: share_network_subnet_cidr - ip_version: share_network_subnet_ip_version - created_at: created_at - updated_at: updated_at - gateway: share_network_subnet_gateway - mtu: share_network_subnet_mtu - availability_zone: share_network_subnet_availability_zone - share_network_id: share_network_subnet_share_network_id - share_network_name: share_network_subnet_share_network_name - metadata: share_network_subnet_metadata Response example ---------------- .. literalinclude:: samples/share-network-subnet-create-response.json :language: javascript Delete share network subnet ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-networks/{share_network_id}/subnets/{share_network_subnet_id} .. versionadded:: 2.51 Deletes a share network subnet. Preconditions - You cannot delete a share network subnet if it has shares created/exported on it. - You cannot delete a share network subnet if it has share servers with the flag ``is_auto_deletable`` set to False. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - share_network_subnet_id: share_network_subnet_id_path ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.833235 manila-23.0.0.0rc1/api-ref/source/share-networks.inc0000664000175000017500000005067615251045254020736 0ustar00zuulzuul.. -*- rst -*- Share networks ============== A share network resource stores network information to create and manage share servers. Shares created with share networks are exported on these networks with the help of share servers. You can create, update, view, and delete a share network. When you create a share network, you may optionally specify an associated neutron network and subnetwork. For more information about supported plug-ins for share networks, see `Manila Network Plugins `_. A share network resource has these attributes: - The IP block in Classless Inter-Domain Routing (CIDR) notation from which to allocate the network. - The IP version of the network. - The network type, which is ``vlan``, ``vxlan``, ``gre``, or ``flat``. - If the network uses segmentation, a segmentation identifier. For example, VLAN, VXLAN, and GRE networks use segmentation. A share network resource can also have a user defined name and description. .. note:: Since API version 2.51, a share network is allowed to span multiple subnets and the fields ``neutron_net_id``, ``neutron_subnet_id``, ``network_type``, ``cidr``, ``ip_version``, ``gateway``, ``segmentation_id`` and ``mtu`` were moved from the share network to the subnet. The share network subnet also contains a an attribute called ``availability_zone``. List share networks ~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-networks Lists all share networks. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query - name~: name_inexact_query - description~: description_inexact_query - name: name_query - description: description_query - created_since: created_since_query - created_before: created_before_query - security_service_id: security_service_query - nova_net_id: nova_net_id_query - neutron_net_id: neutron_net_id_query - neutron_subnet_id: neutron_subnet_id_query - network_type: network_type_query - segmentation_id: segmentation_id_query - cidr: cidr_query - ip_version: ip_version_query - offset: offset - limit: limit Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_network_id_share_networks_response - name: name Response example ---------------- .. literalinclude:: samples/share-networks-list-response.json :language: javascript List share networks with details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-networks/detail Lists all share networks with details. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query - name~: name_inexact_query - description~: description_inexact_query - created_since: created_since_query - created_before: created_before_query - nova_net_id: nova_net_id_query - neutron_net_id: neutron_net_id_query - neutron_subnet_id: neutron_subnet_id_query - network_type: network_type_query - segmentation_id: segmentation_id_query - cidr: cidr_query - ip_version: ip_version_query - offset: offset - limit: limit - security_service_id: security_service_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_network_id_share_networks_response - project_id: project_id - neutron_net_id: neutron_net_id - neutron_subnet_id: neutron_subnet_id - network_type: network_type - segmentation_id: segmentation_id - cidr: cidr - ip_version: ip_version - name: name - description: description - created_at: created_at - updated_at: updated_at - gateway: share_network_gateway - mtu: share_network_mtu - share_network_subnets: share_network_share_network_subnets - security_service_update_support: share_network_security_service_update_support - status: share_network_status Response example ---------------- .. literalinclude:: samples/share-networks-list-detailed-response.json :language: javascript .. include:: common/share-network-span-multiple-subnets-note.rst .. literalinclude:: samples/share-networks-list-detailed-response-with-subnets.json :language: javascript Show share network details ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-networks/{share_network_id} Shows details for a share network. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_network_id_share_networks_response - project_id: project_id - neutron_net_id: neutron_net_id - neutron_subnet_id: neutron_subnet_id - network_type: network_type - segmentation_id: segmentation_id - cidr: cidr - ip_version: ip_version - name: name - description: description - created_at: created_at - updated_at: updated_at - gateway: share_network_gateway - mtu: share_network_mtu - share_network_subnets: share_network_share_network_subnets - security_service_update_support: share_network_security_service_update_support - status: share_network_status Response example ---------------- .. literalinclude:: samples/share-network-show-response.json :language: javascript .. include:: common/share-network-span-multiple-subnets-note.rst .. literalinclude:: samples/share-network-show-response-with-subnets.json :language: javascript Create share network ~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-networks Creates a share network. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 413 - 422 - 500 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - neutron_net_id: neutron_net_id_request - neutron_subnet_id: neutron_subnet_id_request - name: name_request - description: description_request - availability_zone: share_network_availability_zone_request Request example --------------- .. literalinclude:: samples/share-network-create-request.json :language: javascript .. note:: Since API version 2.51, an ``availability_zone`` can be specified with the share network creation request. In case you do not specify an avaiability zone, this field will be set to null and the subnet created will be considered a ``default`` subnet by the Shared File Systems service. You can have only one default subnet per share network. If you attempt to create another default subnet in a share network that already has a default one, the Shared File Systems Service will deny the operation. Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_network_id_share_networks_response - project_id: project_id - neutron_net_id: neutron_net_id - neutron_subnet_id: neutron_subnet_id - network_type: network_type - segmentation_id: segmentation_id - cidr: cidr - ip_version: ip_version - name: name - description: description - created_at: created_at - updated_at: updated_at - gateway: share_network_gateway - mtu: share_network_mtu - share_network_subnets: share_network_share_network_subnets - security_service_update_support: share_network_security_service_update_support - status: share_network_status Response example ---------------- .. literalinclude:: samples/share-network-create-response.json :language: javascript .. note:: Since API version 2.51, share networks are able to span multiple subnets, so when creating a share network, a new subnet will automatically be created by the Shared File Systems service and attached into the share network. .. literalinclude:: samples/share-network-create-response-with-subnets.json :language: javascript Add security service to share network ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-networks/{share_network_id}/action Adds a security service to a share network. .. note:: As of API version 2.63, manila allows adding security services to share networks that are being used if supported by the share backends. Before requesting to add a security service to a share network that is in use, make sure to use the `check add API `_. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - security_service_id: security_service_id Request example --------------- .. literalinclude:: samples/share-network-add-security-service-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_network_id_share_networks_response - project_id: project_id - neutron_net_id: neutron_net_id - neutron_subnet_id: neutron_subnet_id - network_type: network_type - segmentation_id: segmentation_id - cidr: cidr - ip_version: ip_version - name: name - description: description - created_at: created_at - updated_at: updated_at - gateway: share_network_gateway - mtu: share_network_mtu - share_network_subnets: share_network_share_network_subnets - security_service_update_support: share_network_security_service_update_support - status: share_network_status Response example ---------------- .. literalinclude:: samples/share-network-add-security-service-response.json :language: javascript .. include:: common/share-network-span-multiple-subnets-note.rst .. literalinclude:: samples/share-network-add-security-service-response-with-subnets.json :language: javascript Remove security service from share network ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-networks/{share_network_id}/action Removes a security service from a share network. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - security_service_id: share_network_security_service_id Request example --------------- .. literalinclude:: samples/share-network-remove-security-service-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_network_id_share_networks_response - project_id: project_id - neutron_net_id: neutron_net_id - neutron_subnet_id: neutron_subnet_id - network_type: network_type - segmentation_id: segmentation_id - cidr: cidr - ip_version: ip_version - name: name - description: description - created_at: created_at - updated_at: updated_at - gateway: share_network_gateway - mtu: share_network_mtu - security_service_update_support: share_network_security_service_update_support - status: share_network_status Response example ---------------- .. literalinclude:: samples/share-network-remove-security-service-response.json :language: javascript .. include:: common/share-network-span-multiple-subnets-note.rst .. literalinclude:: samples/share-network-remove-security-service-response-with-subnets.json :language: javascript Update share network ~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/share-networks/{share_network_id} Updates a share network. Note that if the share network is used by any share server, you can update only the ``name`` and ``description`` attributes. .. note:: Since API version 2.51, can only able to update the ``neutron_net_id`` and ``neutron_subnet_id`` of the default subnet. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - name: name_request - description: description_request - neutron_net_id: neutron_net_id_request - neutron_subnet_id: neutron_subnet_id_request Request example --------------- .. literalinclude:: samples/share-network-update-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_network_id_share_networks_response - project_id: project_id - neutron_net_id: neutron_net_id - neutron_subnet_id: neutron_subnet_id - network_type: network_type - segmentation_id: segmentation_id - cidr: cidr - ip_version: ip_version - name: name - description: description - created_at: created_at - updated_at: updated_at - gateway: share_network_gateway - mtu: share_network_mtu - security_service_update_support: share_network_security_service_update_support - status: share_network_status Response example ---------------- .. literalinclude:: samples/share-network-update-response.json :language: javascript .. include:: common/share-network-span-multiple-subnets-note.rst .. literalinclude:: samples/share-network-update-response-with-subnets.json :language: javascript Delete share network ~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-networks/{share_network_id} Deletes a share network. Preconditions - You cannot delete a share network if it has shares created/exported on it. - You cannot delete a share network if it has share groups created on it. - You cannot delete a share network if it has more than one share network subnet on it (since API version 2.51). Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path Update share network security service (since API v2.63) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-networks/{share_network_id}/action .. versionadded:: 2.63 Replaces a security service in a share network. Both current and the new security service must have the same type and must have the ``security_service_update_support`` capability set to ``True``. .. important:: Before calling the update share network security service API, make sure to check if the share backends within the share network can hold the operation, through the `check update API `_. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - current_security_service: current_share_network_security_service_id - new_security_service: new_share_network_security_service_id Request example --------------- .. literalinclude:: samples/share-network-update-security-service-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_network_id - project_id: project_id - neutron_net_id: neutron_net_id - neutron_subnet_id: neutron_subnet_id - network_type: network_type - segmentation_id: segmentation_id - cidr: cidr - ip_version: ip_version - name: name - description: description - created_at: created_at - updated_at: updated_at - gateway: share_network_gateway - mtu: share_network_mtu - share_network_subnets: share_network_share_network_subnets - security_service_update_support: share_network_security_service_update_support - status: share_network_status Response example ---------------- .. literalinclude:: samples/share-network-update-security-service-response.json :language: javascript .. _share-net-sec-service-update-check: Check share network security service update (since API v2.63) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-networks/{share_network_id}/action .. versionadded:: 2.63 Checks if an existing security service can be replaced on a share network that is in use. This operation must be triggered before an actual request to update a share network security service is requested. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - current_service_id: current_share_network_security_service_id - new_service_id: new_share_network_security_service_id - reset_operation: reset_operation Request example --------------- .. literalinclude:: samples/share-network-update-security-service-check-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - operation: requested_operation_name - current_security_service: current_share_network_security_service_id - new_security_service: new_share_network_security_service_id - compatible: operation_is_compatible - requested_operation: requested_check_operation - hosts_check_result: hosts_check_result Response example ---------------- .. literalinclude:: samples/share-network-update-security-service-check-response.json :language: javascript Check share network security service add (since API v2.63) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-networks/{share_network_id}/action .. versionadded:: 2.63 Checks if a new security service can be added to a share network that's already in use. This operation must be triggered before an actual request to add a security service to an in use share network. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - security_service_id: current_share_network_security_service_id - reset_operation: reset_operation Request example --------------- .. literalinclude:: samples/share-network-add-security-service-check-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - operation: requested_operation_name - current_security_service: current_share_network_security_service_id - new_security_service: new_share_network_security_service_id - compatible: operation_is_compatible - requested_operation: requested_operation - hosts_check_result: hosts_check_result Response example ---------------- .. literalinclude:: samples/share-network-add-security-service-check-response.json :language: javascript Reset status (since API v2.63) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-networks/{share_network_id}/action .. versionadded:: 2.63 Resets a share network status. Administrator only. Explicitly updates the state of a share network. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request parameters ------------------ .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_network_id: share_network_id_path - status: share_network_status Request example --------------- .. literalinclude:: samples/share-network-reset-state-request.json :language: javascript Response parameters ------------------- There is no body content for the response. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.833235 manila-23.0.0.0rc1/api-ref/source/share-replica-export-locations.inc0000664000175000017500000000442515251045254024000 0ustar00zuulzuul.. -*- rst -*- .. _share_replica_export_locations: Share replica export locations (since API v2.47) ================================================ Set of APIs used to view export locations of share replicas. List export locations ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-replicas/{share_replica_id}/export-locations .. versionadded:: 2.47 Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: export_location_id - share_instance_id: export_location_share_instance_id - path: export_location_path - is_admin_only: export_location_is_admin_only - preferred: export_location_preferred_replicas - availability_zone: export_location_availability_zone - replica_state: share_replica_replica_state Response example ---------------- .. literalinclude:: samples/share-replica-export-location-list-response.json :language: javascript Show single export location ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-replicas/{share_replica_id}/export-locations/{export-location-id} .. versionadded:: 2.47 Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path - export_location_id: export_location_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: export_location_id - share_instance_id: export_location_share_instance_id - path: export_location_path - is_admin_only: export_location_is_admin_only - preferred: export_location_preferred_replicas - availability_zone: export_location_availability_zone - replica_state: share_replica_replica_state - created_at: created_at - updated_at: updated_at Response example ---------------- .. literalinclude:: samples/share-replica-export-location-show-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.833235 manila-23.0.0.0rc1/api-ref/source/share-replica-metadata.inc0000664000175000017500000001173415251045254022247 0ustar00zuulzuul.. -*- rst -*- Share Replica Metadata (Since API v2.95) ======================================== Shows, sets, updates, and unsets share replica metadata. Show all share replica metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-replicas/{share_replica_id}/metadata .. versionadded:: 2.95 Shows all the metadata for a share replica, as key and value pairs. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/share-replica-show-metadata-response.json :language: javascript Show share replica metadata item ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-replicas/{share_replica_id}/metadata/{key} .. versionadded:: 2.95 Retrieves a specific metadata item from a share replica's metadata by its key. If the specified key does not represent a valid metadata item, the API will respond with HTTP 404. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path - key: metadata_key_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata_item Response example ---------------- .. literalinclude:: samples/share-replica-show-metadata-item-response.json :language: javascript Set share replica metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-replicas/{share_replica_id}/metadata .. versionadded:: 2.95 Allows adding new metadata items as key-value pairs. This API will not delete pre-existing metadata items. If the request object contains metadata items that already exist, they will be updated with new values as specified in the request object. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path - metadata: metadata_request Request example --------------- .. literalinclude:: samples/share-replica-set-metadata-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/share-replica-set-metadata-response.json :language: javascript Update share replica metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/share-replicas/{share_replica_id}/metadata .. versionadded:: 2.95 Replaces the metadata for a given share replica with the metadata (specified as key-value pairs) in the request object. All pre-existing metadata of the share replica will be deleted and replaced with the new metadata supplied. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path - metadata: metadata_request Request example --------------- .. literalinclude:: samples/share-replica-update-metadata-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/share-replica-update-metadata-response.json :language: javascript To delete all existing metadata items on a given share replica, the request object needs to specify an empty metadata object: Request example --------------- .. literalinclude:: samples/share-replica-update-null-metadata-request.json :language: javascript Response example ---------------- .. literalinclude:: samples/share-replica-update-null-metadata-response.json :language: javascript Delete share replica metadata item ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-replicas/{share_replica_id}/metadata/{key} .. versionadded:: 2.95 Deletes a single metadata item on a share replica, identified by its key. If the specified key does not represent a valid metadata item, the API will respond with HTTP 404. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path - key: metadata_key_path ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.833235 manila-23.0.0.0rc1/api-ref/source/share-replicas.inc0000664000175000017500000002614215251045254020653 0ustar00zuulzuul.. -*- rst -*- Share replicas (since API v2.11) ================================ Share replicas are the replicated copies of the existing share. You can use Share Replicas to sync data so that each share replica has an identical copy of the same share. Share replication can be used as a disaster recovery solution or as a load sharing mirroring solution. Manila supports replication of shares between different storage pools. These pools may be on different back-end storage systems or within the same back end, depending upon the replication style chosen, the capability of the driver and the configuration of back ends. To ensure that a secondary copy is scheduled to a distinct back end, you must specify the ``availability_zone`` attribute. .. note:: You can create a replicated share with the help of a share type that has an extra-spec ``replication_type`` specified with a valid replication style. Once a replicated share has been created, it always starts out with an ``active`` replica. You may then create secondary copies of the share. A secondary copy can be "promoted" to fail-over to becoming the ``active`` replica. To create a share that supports replication, the share type must specify one of these supported replication types: - writable Synchronously replicated shares where all replicas are writable. Promotion is not supported and not needed because all copies are already exported and can be accessed simultaneously. - readable Mirror-style replication with a primary (writable) copy and one or more secondary (read-only) copies which can become writable after a promotion. - dr (for Disaster Recovery) Generalized replication with secondary copies that are inaccessible until they are promoted to become the active replica. .. important:: The term active replica refers to the primary share. In writable style of replication, all replicas are active, and there could be no distinction of a primary share. In readable and dr styles of replication, a secondary replica may be referred to as passive, non-active or simply replica. Create share replica ~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-replicas .. versionadded:: 2.11 Create a share replica for the share. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_replica_share_id - availability_zone: share_replica_az - share_network_id: share_replica_share_network_id - scheduler_hints: share_replica_scheduler_hints - metadata: share_replica_metadata_request Request example --------------- .. literalinclude:: samples/share-replica-create-request.json :language: javascript .. note:: Since API version 2.72, the parameter ``share_network_id`` is added which was earlier supported but later deprecated from version 2.51. In case, the parameter is not specified, it will be inherited from its parent share, and the Shared File Systems service will automatically choose which share network subnet your share replica will be placed, according to the specified availability zone. Response parameters ------------------- .. rest_parameters:: parameters.yaml - share_id: share_replica_share_id - status: share_replica_status - availability_zone: share_replica_az_response - cast_rules_to_readonly: share_replica_cast_rules_to_readonly - updated_at: updated_at - share_network_id: share_network_id - share_server_id: share_server_id - host: share_replica_host - id: share_replica_id - replica_state: share_replica_replica_state - created_at: created_at - metadata: share_replica_metadata_response Response example ---------------- .. literalinclude:: samples/share-replica-create-response.json :language: javascript Promote share replica ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-replicas/{share_replica_id}/action .. versionadded:: 2.11 Promotes a replica to ``active`` replica state. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path - quiesce_wait_time: share_replica_quiesce_wait_time Request example --------------- .. literalinclude:: samples/share-replica-promote-request.json :language: javascript Resync share replica ~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-replicas/{share_replica_id}/action .. versionadded:: 2.11 Resync a replica with its ``active`` mirror. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path Request example --------------- .. literalinclude:: samples/share-replica-resync-request.json :language: javascript List share replicas ~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-replicas?share_id={share_id} .. versionadded:: 2.11 Lists share replicas. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id_replicas_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - share_id: share_replica_share_id - status: share_replica_status - id: share_replica_id - replica_state: share_replica_replica_state Response example ---------------- .. literalinclude:: samples/share-replicas-list-response.json :language: javascript List share replicas with details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-replicas/detail?share_id={share_id} .. versionadded:: 2.11 Lists share replicas with details. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id_replicas_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - share_id: share_replica_share_id - status: share_replica_status - availability_zone: share_replica_az_response - cast_rules_to_readonly: share_replica_cast_rules_to_readonly - updated_at: updated_at - share_network_id: share_network_id - share_server_id: share_server_id - host: share_replica_host - id: share_replica_id - replica_state: share_replica_replica_state - created_at: created_at - metadata: share_replica_metadata_response Response example ---------------- .. literalinclude:: samples/share-replicas-list-detail-response.json :language: javascript Show share replica ~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-replicas/{share_replica_id} .. versionadded:: 2.11 Show a share replica. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - share_id: share_replica_share_id - status: share_replica_status - availability_zone: share_replica_az_response - cast_rules_to_readonly: share_replica_cast_rules_to_readonly - updated_at: updated_at - share_network_id: share_network_id - share_server_id: share_server_id - host: share_replica_host - id: share_replica_id - replica_state: share_replica_replica_state - created_at: created_at - metadata: share_replica_metadata_response Response example ---------------- .. literalinclude:: samples/share-replicas-show-response.json :language: javascript Reset status of the share replica ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-replicas/{share_replica_id}/action .. versionadded:: 2.11 Administrator only. Explicitly updates the ``status`` of a share replica. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path - reset_status: reset_status - status: share_replica_status Request example --------------- .. literalinclude:: samples/share-replicas-reset-state-request.json :language: javascript Reset replica_state of the share replica ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-replicas/{share_replica_id}/action .. versionadded:: 2.11 Administrator only. Explicitly updates the ``replica state`` of a share replica. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path - reset_replica_state: share_replica_reset_replica_state - replica_state: share_replica_replica_state Request example --------------- .. literalinclude:: samples/share-replicas-reset-replica-state-request.json :language: javascript Delete share replica ~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-replicas/{share_replica_id} .. versionadded:: 2.11 Deletes a share replica. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 .. note:: The ``active`` replica cannot be deleted with this API. Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path Force-delete share replica ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-replicas/{share_replica_id}/action .. versionadded:: 2.11 Administrator only. Force-deletes a share replica in any state. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 .. note:: The ``active`` replica cannot be deleted with this API. Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_replica_id: share_replica_id_path - force_delete: share_replica_force_delete Request example --------------- .. literalinclude:: samples/share-replicas-force-delete-request.json :language: javascript ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.833235 manila-23.0.0.0rc1/api-ref/source/share-server-migration.inc0000664000175000017500000001531515251045254022346 0ustar00zuulzuul.. -*- rst -*- Share Server Migration (since API v2.57) ======================================== The Share Server Migration API is an administrator-only experimental API that allows the invoker to select a destination backend to migrate a share server to. Share server migration uses a 2-phased approach. In the first phase of the migration, the data copying or replication operations are performed, so it's the longer phase. After the first phase is finished, the administrator can trigger the second phase, which consists in final syncs and making the new share server available to be used and the latter one inactive. During the data copy phase, source shares will remain available and writable if it was required by the administrator and supported by the share driver. After the second phase, users may need to reconnect to the shares affected by the migration. All shares belonging to a share server are migrated and their access rules are preserved through the migration. The share snapshots are going to be copied if specified by the administrator and/or supported by the driver. .. important:: In order to migrate a share server, the administrator must make sure that none of the shares on the server are replicated or in a share group. .. note:: Share Server Migration APIs are `experimental APIs <#experimental-apis>`_ . Possible uses for share server migration include: - Migrating a share server and all its shares and snapshots at once. - Bring down a physical storage device for maintenance. - Free up space in a thinly-provisioned back end. - Load balancing among backends. Share Server Migration Check Compatibility ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/{project_id}/share_servers/{share_server_id}/action .. versionadded:: 2.57 Checks if a share driver can handle a share server migration according to the specified destination host and ``new_share_network_id``, as well as the ``writable``, ``nondisruptive`` and ``preserve_snapshots`` flags. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_server_id: share_server_id_path - preserve_snapshots: preserve_snapshots_server_migration - nondisruptive: nondisruptive_server_migration - writable: writable_server_migration - new_share_network_id: new_share_network_id_server_migration - host: host_share_server_migration Response parameters ------------------- .. rest_parameters:: parameters.yaml - compatible: compatible - requested_capabilities: requested_capabilities - supported_capabilities: supported_capabilities Request example --------------- .. literalinclude:: samples/share-server-migration-check-compatibility-request.json :language: javascript Response example ---------------- .. literalinclude:: samples/share-server-migration-check-compatibility-response.json :language: javascript Start a Share Server Migration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/{project_id}/share_servers/{share_server_id}/action .. versionadded:: 2.57 Triggers a share server migration. This API will initiate the first phase of the share server migration to a new host. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_server_id: share_server_id_path - preserve_snapshots: preserve_snapshots_server_migration - nondisruptive: nondisruptive_server_migration - writable: writable_server_migration - new_share_network_id: new_share_network_id_server_migration - host: host_share_server_migration Request example --------------- .. literalinclude:: samples/share-server-migration-start-request.json :language: javascript Complete Share Server Migration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/{project_id}/share_servers/{share_server_id}/action .. versionadded:: 2.57 Completes share server migration. This API will initiate the switch-over from the source to destination share server. This operation can be disruptive. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_server_id: share_server_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - total_progress: total_progress_server_migration - task_state: task_state_server_migration - destination_share_server_id: destination_share_server_id Request example --------------- .. literalinclude:: samples/share-server-migration-complete-request.json :language: javascript Response example ---------------- .. literalinclude:: samples/share-server-migration-complete-response.json :language: javascript Share Server Migration Get Progress ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/{project_id}/share_servers/{share_server_id}/action .. versionadded:: 2.57 Returns the completed percentage and the destination share server id of an ongoing share server migration. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 409 Request ------- .. rest_parameters:: parameters.yaml - share_server_id: share_server_id_path - project_id: project_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - total_progress: total_progress_server_migration - task_state: task_state_server_migration - destination_share_server_id: destination_share_server_id Request example --------------- .. literalinclude:: samples/share-server-migration-get-progress-request.json :language: javascript Response example ---------------- .. literalinclude:: samples/share-server-migration-get-progress-response.json :language: javascript Cancel Share Server Migration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/{project_id}/share_servers/{share_server_id}/action .. versionadded:: 2.57 Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - share_server_id: share_server_id_path - project_id: project_id_path Request example --------------- .. literalinclude:: samples/share-server-migration-cancel-request.json :language: javascript ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.833235 manila-23.0.0.0rc1/api-ref/source/share-servers.inc0000664000175000017500000002253015251045254020537 0ustar00zuulzuul.. -*- rst -*- Share servers ============= A share server is created by multi-tenant back-end drivers where shares are hosted. For example, with the ``generic`` driver, shares are hosted on Compute VMs. Administrators can perform read and delete actions for share servers. An administrator can delete an active share server only if it contains no dependent shares. If an administrator deletes the share server, the Shared File Systems service creates a share server in response to a subsequent create share request. An administrator can use the ``policy.yaml`` file to grant permissions for share server actions to other roles. The status of a share server indicates its current state. After you successfully set up a share server, its status is ``active``. If errors occur during set up such as when server data is not valid, its status is ``error``. The possible share servers statuses are: **Share server statuses** +--------------+------------------------------------------------------------------+ | Status | Description | +--------------+------------------------------------------------------------------+ | ``active`` | Share server was successfully set up. | +--------------+------------------------------------------------------------------+ | ``error`` | The set up or deletion of the share server failed. | +--------------+------------------------------------------------------------------+ | ``deleting`` | The share server has no dependent shares and is being deleted. | +--------------+------------------------------------------------------------------+ | ``creating`` | The share server is being created on the back end with data from | | | the database. | +--------------+------------------------------------------------------------------+ List share servers ~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-servers Lists all share servers. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_server_id - project_id: project_id - status: status_share_server_body - share_network_id: share_network_id_share_servers_response - share_network_name: share_network_name - host: host_share_server_body - updated_at: updated_at - share_network_subnet_id: share_network_subnet_id_share_server_body - security_service_update_support: share_server_security_service_update_support - is_auto_deletable: share_server_show_is_auto_deletable - identifier: share_server_show_identifier - task_state: task_state_share_server - source_share_server_id: source_share_server_id - share_network_subnet_ids: share_network_subnet_ids - network_allocation_update_support: network_allocation_update_support - encryption_key_ref: encryption_key_ref_response Response example ---------------- .. literalinclude:: samples/share-servers-list-response.json :language: javascript Show share server ~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-servers/{share_server_id} Show a share server's details. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_server_id: share_server_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_server_id - project_id: project_id - status: status_share_server_body - backend_details: backend_details - share_network_id: share_network_id_share_servers_response - share_network_name: share_network_name - host: host_share_server_body - created_at: created_at - updated_at: updated_at - identifier: share_server_show_identifier - is_auto_deletable: share_server_show_is_auto_deletable - share_network_subnet_id: share_network_subnet_id_share_server_body - security_service_update_support: security_service_update_support - encryption_key_ref: encryption_key_ref_response Response example ---------------- .. literalinclude:: samples/share-server-show-response.json :language: javascript Show share server back end details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-servers/{share_server_id}/details Shows back end details of a share server. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_server_id: share_server_id_path Response parameters ------------------- Response parameters can differ based on the back end used. Each back end can store any key-value information that it requires. For example, the generic back end driver might store the router ID. Response example ---------------- .. literalinclude:: samples/share-server-show-details-response.json :language: javascript Delete share server ~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-servers/{share_server_id} Deletes a share server. An administrator can delete an active share server only if it contains no dependent shares. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_server_id: share_server_id_path Manage share server (since API v2.49) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-servers/manage .. versionadded:: 2.49 Manages a share server An administrator can bring a pre-existing share server if the back end driver is operating in ``driver_handles_share_servers=True`` mode. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 403 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - host: manage_host - identifier: identifier - share_network: share_network_id_manage_server_request - driver_options: driver_options - share_network_subnet_id: share_network_subnet_id_manage_server_request Request example --------------- .. literalinclude:: samples/share-server-manage-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_server_id - project_id: project_id - updated_at: updated_at - status: share_server_status - host: manage_host - share_network_name: share_network_name - share_network_id: share_network_id_share_servers_response - created_at: created_at - backend_details: backend_details - is_auto_deletable: is_auto_deletable - identifier: identifier - share_network_subnet_id: share_network_subnet_id_manage_server_body - security_service_update_support: security_service_update_support - encryption_key_ref: encryption_key_ref_response Response examples ----------------- .. literalinclude:: samples/share-server-manage-response.json :language: javascript Unmanage share server (since API v2.49) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-servers/{share_server_id}/action .. versionadded:: 2.49 Unmanages a share server An administrator can remove a share server from the Shared File System service's management if there are no associated shares that the service is aware of. The share server will not be torn down in the back end. Preconditions - Share server status must be either ``error``, ``manage_error``, ``active`` or ``unmanage_error``. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 404 Request parameters ------------------ .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_server_id: share_server_id_path - force: force - unmanage: share_server_unmanage Request example --------------- .. literalinclude:: samples/share-server-unmanage-request.json :language: javascript Response parameters ------------------- There is no body content for the response. Reset status (since API v2.49) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-servers/{share_server_id}/action .. versionadded:: 2.49 Resets a share server status Administrator only. Explicitly updates the state of a share server. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 404 Request parameters ------------------ .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_server_id: share_server_id_path - status: share_server_status Request example --------------- .. literalinclude:: samples/share-server-reset-state-request.json :language: javascript Response parameters ------------------- There is no body content for the response. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.833235 manila-23.0.0.0rc1/api-ref/source/share-transfers.inc0000664000175000017500000001244015251045254021054 0ustar00zuulzuul.. -*- rst -*- Share transfer (since API v2.77) ================================ Transfers a share across projects. Create a share transfer ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-transfers Initiates a share transfer from a source project namespace to a destination project namespace. **Preconditions** * The share ``status`` must be ``available`` * If the share has snapshots, those snapshots must be ``available`` * The share can not belong to share group Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - transfer: transfer - name: transfer_name - share_id: share_id_request Request Example --------------- .. literalinclude:: ./samples/share-transfer-create-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - id: transfer_id_in_body - created_at: created_at - name: transfer_name - resource_type: transfer_resource_type - resource_id: transfer_resource_id - source_project_id: project_id - destination_project_id: destination_project_id - accepted: accepted - expires_at: transfer_expires_at_body - links: links Response Example ---------------- .. literalinclude:: ./samples/share-transfer-create-response.json :language: javascript Accept a share transfer in the destination project namespace ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/share-transfers/{transfer_id}/accept Accepts a share transfer. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 403 - 404 - 413 Request ------- .. rest_parameters:: parameters.yaml - transfer_id: transfer_id - auth_key: auth_key - clear_access_rules: clear_access_rules Request Example --------------- .. literalinclude:: ./samples/share-transfer-accept-request.json :language: javascript List share transfers for a project ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-transfers Lists share transfers. Response codes -------------- .. rest_status_code:: success status.yaml - 200 Request ------- .. rest_parameters:: parameters.yaml - all_tenants: all_tenants_query - limit: limit_query - offset: offset - sort_key: sort_key_transfer - sort_dir: sort_dir - name: name_query - name~: name_inexact_query - resource_type: resource_type_query Response Parameters ------------------- .. rest_parameters:: parameters.yaml - transfers: transfers - id: transfer_id_in_body - created_at: created_at - name: transfer_name - resource_type: transfer_resource_type - resource_id: transfer_resource_id - source_project_id: project_id - destination_project_id: destination_project_id - accepted: accepted - expires_at: transfer_expires_at_body - links: links Response Example ---------------- .. literalinclude:: ./samples/share-transfers-list-response.json :language: javascript List share transfers and details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-transfers/detail Lists share transfers, with details. Response codes -------------- .. rest_status_code:: success status.yaml - 200 Request ------- .. rest_parameters:: parameters.yaml - all_tenants: all_tenants_query - limit: limit_query - offset: offset - sort_key: sort_key_transfer - sort_dir: sort_dir Response Parameters ------------------- .. rest_parameters:: parameters.yaml - transfers: transfers - id: transfer_id_in_body - created_at: created_at - name: transfer_name - resource_type: transfer_resource_type - resource_id: transfer_resource_id - source_project_id: project_id - destination_project_id: destination_project_id - accepted: accepted - expires_at: transfer_expires_at_body - links: links Response Example ---------------- .. literalinclude:: ./samples/share-transfers-list-detailed-response.json :language: javascript Show share transfer detail ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/share-transfers/{transfer_id} Shows details for a share transfer. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 404 Request ------- .. rest_parameters:: parameters.yaml - transfer_id: transfer_id Response Parameters ------------------- .. rest_parameters:: parameters.yaml - id: transfer_id_in_body - created_at: created_at - name: transfer_name - resource_type: transfer_resource_type - resource_id: transfer_resource_id - source_project_id: project_id - destination_project_id: destination_project_id - accepted: accepted - expires_at: transfer_expires_at_body - links: links Response Example ---------------- .. literalinclude:: ./samples/share-transfer-show-response.json :language: javascript Delete a share transfer ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/share-transfers/{transfer_id} Deletes a share transfer. Response codes -------------- .. rest_status_code:: success status.yaml - 202 Request ------- .. rest_parameters:: parameters.yaml - transfer_id: transfer_id././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8342354 manila-23.0.0.0rc1/api-ref/source/share-types.inc0000664000175000017500000003266615251045254020225 0ustar00zuulzuul.. -*- rst -*- Share types =========== A share type provides hints to the scheduler service to aid placement of new workloads. It contains extra specifications that can either match back end storage capabilities or provide instructions to the Shared File Systems service with regard to the workload being requested. A share type behaves in the same way as a Block Storage volume type behaves. See the `administration reference on share types `_ for more information. You can create publicly visible share type that are visible to all projects and users within the cloud, or make them private and control which projects can access them. When you issue a create a share type request, you can submit a request body with either a ``share_type`` or ``volume_type`` object. .. important:: The use of the ``volume_type`` object is deprecated but supported. It is recommended that you use the ``share_type`` object when you create a share type. No matter which object type you include in the request, the API creates both a ``volume_type`` object and a ``share_type`` object. Both objects have the same ID. When you issue a list share types request, the response shows both ``share_type`` and ``volume_type`` objects. You can set share types as either public or private. By default a share type is created as publicly accessible. Set ``share_type_access:is_public`` (``os-share-type-access:is_public`` for API versions 1.0-2.6) to ``False`` to make the share type private. You can manage the access to the private share types for the different projects. You can add access, remove access, and get information about access for a private share type. Administrators can create share types with these extra specifications that are used to filter back ends: - ``driver_handles_share_servers``. Required. Defines the driver mode for share server, or storage, life cycle management. The Shared File Systems service creates a share server for the export of shares. Set to ``True`` when the share driver manages or handles the share server life cycle. Set to ``False`` when an administrator rather than a share driver manages the share server life cycle. - ``snapshot_support``. Filters back ends by whether they do or do not support share snapshots. Set to ``True`` to find back ends that support share snapshots. Set to ``False`` to find back ends that do not support share snapshots. Administrators can also set additional extra specifications for a share type for the following purposes: - Filter back ends. Specify these unqualified extra specifications in this format: ``extra_spec=value``. For example, ``netapp_raid_type=raid4``. - Set data for the driver. Except for the special ``capabilities`` prefix, you specify these qualified extra specifications with its prefix followed by a colon: ``vendor:extra_spec=value``. For example, ``netapp:thin_provisioned=true``. The scheduler uses the special ``capabilities`` prefix for filtering. The scheduler can only create a share on a back end that reports capabilities that match the un-scoped extra-spec keys for the share type. For details, see `Capabilities and Extra-Specs `_. Each driver implementation determines which extra specification keys it uses. For details, see the documentation for the driver. An administrator can use the ``policy.yaml`` file to grant permissions for share type creation with extra specifications to other roles. List share types ~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/types?is_public={is_public}&extra-specs={extra-specs-as-dict} Lists all share types. Response codes -------------- .. rest_status_code:: success status.yaml - 200 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - is_public: is_public_query - extra_specs: extra_specs_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_type_id_body - name: share_type_name - required_extra_specs: required_extra_specs - extra_specs: extra_specs - share_type_access:is_public: share_type_access:is_public_body - description: share_type_description - is_default: is_default_type Response example ---------------- .. literalinclude:: samples/share-types-list-response.json :language: javascript List default share types ~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/types/default Lists default share types. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_type_id_body - required_extra_specs: required_extra_specs - extra_specs: extra_specs - share_type_access:is_public: share_type_access:is_public_body - name: share_type_name - description: share_type_description - is_default: is_default_type Response example ---------------- .. literalinclude:: samples/share-types-default-list-response.json :language: javascript Show share type detail ~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/types/{share_type_id} Shows details for a specified share type. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_type_id: share_type_id Response Parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_type_id_body - required_extra_specs: required_extra_specs - extra_specs: extra_specs - share_type_access:is_public: share_type_access:is_public_body - name: share_type_name - description: share_type_description - is_default: is_default_type Response Example ---------------- .. literalinclude:: ./samples/share-type-show-response.json :language: javascript List extra specs ~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/types/{share_type_id}/extra_specs Lists the extra specifications for a share type. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_type_id: share_type_id Response parameters ------------------- .. rest_parameters:: parameters.yaml - extra_specs: extra_specs Response example ---------------- .. literalinclude:: samples/share-types-extra-specs-list-response.json :language: javascript Create share type ~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/types Creates a share type. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - extra_specs: extra_specs_request_body - os-share-type-access:is_public: os-share-type-access:is_public - name: share_type_name - description: share_type_description_request Request example --------------- .. literalinclude:: samples/share-type-create-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_type_id_body - required_extra_specs: required_extra_specs - extra_specs: extra_specs - os-share-type-access:is_public: os-share-type-access:is_public - share_type_access:is_public: share_type_access:is_public - name: share_type_name - description: share_type_description - is_default: is_default_type Response example ---------------- .. literalinclude:: samples/share-type-create-response.json :language: javascript Show share type access details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/types/{share_type_id}/share_type_access Shows access details for a share type. You can view access details for private share types only. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_type_id: share_type_id Response parameters ------------------- .. rest_parameters:: parameters.yaml - project_id: project_id_type_access - share_type_id: share_type_id_body Response example ---------------- .. literalinclude:: samples/share-types-list-access-response.json :language: javascript Set extra spec for share type ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/types/{share_type_id}/extra_specs Sets an extra specification for the share type. Each driver implementation determines which extra specification keys it uses. For details, see `Capabilities and Extra-Specs `_ and documentation for your driver. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_type_id: share_type_id - extra_specs: extra_specs_request_body Request example --------------- .. literalinclude:: samples/share-type-set-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - extra_specs: extra_specs Response example ---------------- .. literalinclude:: samples/share-type-set-response.json :language: javascript Unset an extra spec ~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/types/{share_type_id}/extra_specs/{extra-spec-key} Unsets an extra specification for the share type. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_type_id: share_type_id - extra-spec-key: extra_spec_key_path Add share type access ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/types/{share_type_id}/action Adds share type access for a project. You can add access to private share types only. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_type_id: share_type_id - addProjectAccess: add_project_access - project: project_id_type_access_grant_request Request example --------------- .. literalinclude:: samples/share-type-grant-access-request.json :language: javascript Remove share type access ~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/types/{share_type_id}/action Removes share type access from a project. You can remove access from private share types only. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_type_id: share_type_id - removeProjectAccess: remove_project_access - project: project_id_type_access_revoke_request Request example --------------- .. literalinclude:: samples/share-type-revoke-access-request.json :language: javascript Delete share type ~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/types/{share_type_id} Deletes a share type. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_type_id: share_type_id Update share type (since API v2.50) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/types/{share_type_id} .. versionadded:: 2.50 Update a share type. Share type extra-specs cannot be updated with this API. Please use the respective APIs to `set extra specs <#set-extra-spec-for-share-type>`_ or `unset extra specs <#unset-an-extra-spec>`_. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_type_id: share_type_id - name: share_type_name_request - share_type_access:is_public: share_type_access:is_public_update_request - description: share_type_description_update_request Request example --------------- .. literalinclude:: samples/share-type-update-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_type_id_body - required_extra_specs: required_extra_specs - extra_specs: extra_specs - share_type_access:is_public: share_type_access:is_public_body - name: share_type_name - description: share_type_description_body - is_default: is_default_type_body Response example ---------------- .. literalinclude:: samples/share-type-update-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8342354 manila-23.0.0.0rc1/api-ref/source/shares.inc0000664000175000017500000006075015251045254017241 0ustar00zuulzuul.. -*- rst -*- Shares ====== A share is a remote, mountable file system. In the APIs below, a share resource is a representation of this remote file system within the Shared File Systems service. This resource representation includes useful metadata, communicating the characteristics of the remote file system as determined by the user and the Shared File Systems service. You can create a share and associate it with a network, list shares, and show information for, update, and delete a share. To create a share, specify one of these supported protocols: - ``NFS``. Network File System (NFS). - ``CIFS``. Common Internet File System (CIFS). - ``GLUSTERFS``. Gluster file system (GlusterFS). - ``HDFS``. Hadoop Distributed File System (HDFS). - ``CEPHFS``. Ceph File System (CephFS). - ``MAPRFS``. MapR File System (MAPRFS). You can also create snapshots of shares. To create a snapshot, you specify the ID of the share that you want to snapshot. A share has one of these status values: **Share statuses** +----------------------------------------+--------------------------------------------------------+ | Status | Description | +----------------------------------------+--------------------------------------------------------+ | ``backup_creating`` | The share is being backed up. | +----------------------------------------+--------------------------------------------------------+ | ``backup_restoring`` | The share is being restored from backup. | +----------------------------------------+--------------------------------------------------------+ | ``backup_restoring_error`` | An error occurred during share backup restore. | +----------------------------------------+--------------------------------------------------------+ | ``creating`` | The share is being created. | +----------------------------------------+--------------------------------------------------------+ | ``creating_from_snapshot`` | The share is being created from a parent snapshot. | +----------------------------------------+--------------------------------------------------------+ | ``deleting`` | The share is being deleted. | +----------------------------------------+--------------------------------------------------------+ | ``deleted`` | The share was deleted. | +----------------------------------------+--------------------------------------------------------+ | ``error`` | An error occurred during share creation. | +----------------------------------------+--------------------------------------------------------+ | ``error_deleting`` | An error occurred during share deletion. | +----------------------------------------+--------------------------------------------------------+ | ``available`` | The share is ready to use. | +----------------------------------------+--------------------------------------------------------+ | ``inactive`` | The share is inactive. | +----------------------------------------+--------------------------------------------------------+ | ``manage_starting`` | Share manage started. | +----------------------------------------+--------------------------------------------------------+ | ``manage_error`` | Share manage failed. | +----------------------------------------+--------------------------------------------------------+ | ``unmanage_starting`` | Share unmanage started. | +----------------------------------------+--------------------------------------------------------+ | ``unmanage_error`` | Share cannot be unmanaged. | +----------------------------------------+--------------------------------------------------------+ | ``unmanaged`` | Share was unmanaged. | +----------------------------------------+--------------------------------------------------------+ | ``extending`` | The extend, or increase, share size request was issued | | | successfully. | +----------------------------------------+--------------------------------------------------------+ | ``extending_error`` | Extend share failed. | +----------------------------------------+--------------------------------------------------------+ | ``shrinking`` | Share is being shrunk. | +----------------------------------------+--------------------------------------------------------+ | ``shrinking_error`` | Failed to update quota on share shrinking. | +----------------------------------------+--------------------------------------------------------+ | ``shrinking_possible_data_loss_error`` | Shrink share failed due to possible data loss. | +----------------------------------------+--------------------------------------------------------+ | ``migrating`` | Share is currently migrating. | +----------------------------------------+--------------------------------------------------------+ | ``migrating_to`` | Share is a migration destination. | +----------------------------------------+--------------------------------------------------------+ | ``replication_change`` | The share is undergoing a replication change. | +----------------------------------------+--------------------------------------------------------+ | ``reverting`` | Share is being reverted to a snapshot. | +----------------------------------------+--------------------------------------------------------+ | ``reverting_error`` | Share revert to snapshot failed. | +----------------------------------------+--------------------------------------------------------+ | ``awaiting_transfer`` | Share is being transferred to a different project's | | | namespace. | +----------------------------------------+--------------------------------------------------------+ List shares ~~~~~~~~~~~ .. rest_method:: GET /v2/shares Lists all shares. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query - name: name_query - status: status_query - share_server_id: share_server_id_query - metadata: metadata_query - extra_specs: extra_specs_query - share_type_id: share_type_id_query - snapshot_id: snapshot_id_query - source_backup_id: source_backup_id_query - host: host_query - share_network_id: share_network_id_query - project_id: project_id_query - is_public: is_public_query - share_group_id: share_group_id_query - export_location_id: export_location_id_query - export_location_path: export_location_path_query - name~: name_inexact_query - description~: description_inexact_query - with_count: with_count_query - is_soft_deleted: is_soft_deleted_query - availability_zone: availability_zone_query - limit: limit - offset: offset - sort_key: sort_key - sort_dir: sort_dir - encryption_key_ref: encryption_key_ref_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_id_response - links: links - name: name - count: count Response example ---------------- .. literalinclude:: samples/shares-list-response.json :language: javascript List shares with details ~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/shares/detail Lists all shares, with details. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query - status: status_query - share_server_id: share_server_id_query - metadata: metadata_query - extra_specs: extra_specs_query - share_type_id: share_type_id_query - name: name_query - snapshot_id: snapshot_id_query - source_backup_id: source_backup_id_query - host: host_query - share_network_id: share_network_id_query - project_id: project_id_query - is_public: is_public_query - share_group_id: share_group_id_query - export_location_id: export_location_id_query - export_location_path: export_location_path_query - name~: name_inexact_query - description~: description_inexact_query - with_count: with_count_query - is_soft_deleted: is_soft_deleted_query - availability_zone: availability_zone_query - limit: limit - offset: offset - sort_key: sort_key - sort_dir: sort_dir - encryption_key_ref: encryption_key_ref_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_id_response - size: size_response - availability_zone: availability_zone - created_at: created_at - status: share_status_response - name: name - description: description - project_id: project_id - snapshot_id: snapshot_id_shares_response - source_backup_id: source_backup_id_shares_response - share_network_id: share_network_id - share_proto: share_proto - metadata: metadata - share_type: share_type_shares_response - links: links - is_public: is_public_shares_response - share_server_id: share_server_id - host: host_resource_response - snapshot_support: snapshot_support_share_capability - task_state: task_state - share_type_name: share_type_name - access_rules_status: access_rules_status - replication_type: replication_type_share_capability - has_replicas: has_replicas - user_id: share_user_id - create_share_from_snapshot_support: create_share_from_snapshot_support_share_capability - revert_to_snapshot_support: revert_to_snapshot_support_share_capability - share_group_id: share_group_id - source_share_group_snapshot_member_id: source_share_group_snapshot_member_id - mount_snapshot_support: mount_snapshot_support_share_capability - snapshot_inherit_share_access_support: snapshot_inherit_share_access_support_share_capability - progress: progress_share_instance - count: count - volume_type: volume_type_shares_response - export_location: export_location - export_locations: export_locations - is_soft_deleted: is_soft_deleted_response - scheduled_to_be_deleted_at: scheduled_to_be_deleted_at_response - encryption_key_ref: encryption_key_ref_response Response example ---------------- .. literalinclude:: samples/shares-list-detailed-response.json :language: javascript Show share details ~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/shares/{share_id} Shows details for a share. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_id_response - size: size_response - availability_zone: availability_zone - created_at: created_at - status: share_status_response - name: name - description: description - project_id: project_id - snapshot_id: snapshot_id_shares_response - share_network_id: share_network_id - share_proto: share_proto - metadata: metadata - share_type: share_type_shares_response - links: links - is_public: is_public_shares_response - share_server_id: share_server_id - host: host_resource_response - snapshot_support: snapshot_support_share_capability - task_state: task_state - share_type_name: share_type_name - access_rules_status: access_rules_status - replication_type: replication_type_share_capability - has_replicas: has_replicas - user_id: share_user_id - create_share_from_snapshot_support: create_share_from_snapshot_support_share_capability - revert_to_snapshot_support: revert_to_snapshot_support_share_capability - share_group_id: share_group_id - source_share_group_snapshot_member_id: source_share_group_snapshot_member_id - mount_snapshot_support: mount_snapshot_support_share_capability - snapshot_inherit_share_access_support: snapshot_inherit_share_access_support_share_capability - progress: progress_share_instance - count: count - volume_type: volume_type_shares_response - export_location: export_location - export_locations: export_locations - is_soft_deleted: is_soft_deleted_response - scheduled_to_be_deleted_at: scheduled_to_be_deleted_at_response - encryption_key_ref: encryption_key_ref_response Response example ---------------- .. literalinclude:: samples/share-show-response.json :language: javascript List share instances ~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/shares/{share_id}/instances .. versionadded:: 2.3 Lists instances of a share. A share instance is an internal representation for a share. A share that is replicated or is in the process of being migrated is physically stored in multiple locations. Each of these individual locations is called an "instance" within the Shared File Systems service. End users need not be concerned with this internal representation. As an administrator, you can list all instances of a share through this endpoint resource. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id Response parameters ------------------- .. rest_parameters:: parameters.yaml - status: share_status_response - access_rules_status: access_rules_status - share_id: share_id_share_instances_response - progress: progress_share_instance - availability_zone: availability_zone - created_at: created_at - replica_state: replica_state - export_location: export_location - export_locations: export_locations - cast_rules_to_readonly: share_instance_cast_rules_to_readonly - share_network_id: share_network_id - share_server_id: share_server_id - host: host_resource_response - access_rules_status: access_rules_status - share_type_id: share_type_id - id: id_13 - encryption_key_ref: encryption_key_ref_response Response example ---------------- .. literalinclude:: samples/share-instances-list-response.json :language: javascript Create share ~~~~~~~~~~~~ .. rest_method:: POST /v2/shares Creates a share. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_proto: share_proto - size: size_request - name: name_request - description: description_request - display_name: display_name_request - display_description: display_description_request - share_type: share_type_request - snapshot_id: snapshot_id_request - is_public: is_public_request - share_group_id: share_group_id_request - metadata: metadata - share_network_id: share_network_id_request - availability_zone: availability_zone_request - scheduler_hints: scheduler_hints - mount_point_name: mount_point_name_request - encryption_key_ref: encryption_key_ref_request Request example --------------- .. literalinclude:: samples/share-create-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_id_response - size: size_response - availability_zone: availability_zone - created_at: created_at - status: share_status_response - name: name - description: description - project_id: project_id - snapshot_id: snapshot_id_shares_response - share_network_id: share_network_id - share_proto: share_proto - metadata: metadata - share_type: share_type_shares_response - links: links - is_public: is_public_shares_response - share_server_id: share_server_id - host: host_resource_response - snapshot_support: snapshot_support_share_capability - task_state: task_state - share_type_name: share_type_name - access_rules_status: access_rules_status - replication_type: replication_type_share_capability - has_replicas: has_replicas - user_id: share_user_id - create_share_from_snapshot_support: create_share_from_snapshot_support_share_capability - revert_to_snapshot_support: revert_to_snapshot_support_share_capability - share_group_id: share_group_id - source_share_group_snapshot_member_id: source_share_group_snapshot_member_id - mount_snapshot_support: mount_snapshot_support_share_capability - snapshot_inherit_share_access_support: snapshot_inherit_share_access_support_share_capability - progress: progress_share_instance - count: count - volume_type: volume_type_shares_response - export_location: export_location - export_locations: export_locations - is_soft_deleted: is_soft_deleted_response - scheduled_to_be_deleted_at: scheduled_to_be_deleted_at_response - encryption_key_ref: encryption_key_ref_response Response example ---------------- .. literalinclude:: samples/share-create-response.json :language: javascript Manage share (since API v2.7) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/shares/manage .. versionadded:: 2.7 Use this API to bring a share under the management of the Shared File Systems service. Administrator only. Use the ``policy.yaml`` file to grant permissions for this action to other roles. .. note:: Managing shares that are created on top of managed share servers (i.e. with parameter ``share_server_id``) is not supported prior to API version 2.49. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share: share - protocol: protocol - name: name_request - share_type: share_type_request - driver_options: driver_options - export_path: export_path - service_host: service_host - share_server_id: manage_share_server_id - is_public: is_public_manage_request - description: description_request - mount_point_name: mount_point_name_manage_request Request example --------------- .. literalinclude:: samples/share-manage-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_id_response - size: size_response - availability_zone: availability_zone - created_at: created_at - status: share_status_response - name: name - description: description - project_id: project_id - snapshot_id: snapshot_id_shares_response - share_network_id: share_network_id - share_proto: share_proto - metadata: metadata - share_type: share_type_shares_response - links: links - is_public: is_public_shares_response - share_server_id: share_server_id - host: host_resource_response - snapshot_support: snapshot_support_share_capability - task_state: task_state - share_type_name: share_type_name - access_rules_status: access_rules_status - replication_type: replication_type_share_capability - has_replicas: has_replicas - user_id: managed_share_user_id - create_share_from_snapshot_support: create_share_from_snapshot_support_share_capability - revert_to_snapshot_support: revert_to_snapshot_support_share_capability - share_group_id: share_group_id - source_share_group_snapshot_member_id: source_share_group_snapshot_member_id - mount_snapshot_support: mount_snapshot_support_share_capability - snapshot_inherit_share_access_support: snapshot_inherit_share_access_support_share_capability - progress: progress_share_instance - volume_type: volume_type_shares_response - is_soft_deleted: is_soft_deleted_response - scheduled_to_be_deleted_at: scheduled_to_be_deleted_at_response - source_backup_id: source_backup_id_shares_response - encryption_key_ref: encryption_key_ref_response Response example ---------------- .. literalinclude:: samples/share-manage-response.json :language: javascript Update share ~~~~~~~~~~~~ .. rest_method:: PUT /v2/shares/{share_id} Updates a share. You can update these attributes: - ``display_name``, which also changes the ``name`` of the share. - ``display_description``, which also changes the ``description`` of the share. - ``is_public``. Changes the level of visibility. If you try to update other attributes, they retain their previous values. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id - is_public: is_public_request - display_name: display_name_request - display_description: display_description_request Request example --------------- .. literalinclude:: samples/share-update-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: share_id_response - size: size_response - availability_zone: availability_zone - created_at: created_at - status: share_status_response - name: name - description: description - project_id: project_id - snapshot_id: snapshot_id_shares_response - share_network_id: share_network_id - share_proto: share_proto - metadata: metadata - share_type: share_type_shares_response - links: links - is_public: is_public_shares_response - share_server_id: share_server_id - host: host_resource_response - snapshot_support: snapshot_support_share_capability - task_state: task_state - share_type_name: share_type_name - access_rules_status: access_rules_status - replication_type: replication_type_share_capability - has_replicas: has_replicas - user_id: share_user_id - create_share_from_snapshot_support: create_share_from_snapshot_support_share_capability - revert_to_snapshot_support: revert_to_snapshot_support_share_capability - share_group_id: share_group_id - source_share_group_snapshot_member_id: source_share_group_snapshot_member_id - mount_snapshot_support: mount_snapshot_support_share_capability - snapshot_inherit_share_access_support: snapshot_inherit_share_access_support_share_capability - progress: progress_share_instance - count: count - volume_type: volume_type_shares_response - export_location: export_location - export_locations: export_locations - is_soft_deleted: is_soft_deleted_response - scheduled_to_be_deleted_at: scheduled_to_be_deleted_at_response - encryption_key_ref: encryption_key_ref_response Response example ---------------- .. literalinclude:: samples/share-update-response.json :language: javascript Delete share ~~~~~~~~~~~~ .. rest_method:: DELETE /v2/shares/{share_id} Deletes a share. Preconditions - Share status must be ``available``, ``error`` or ``inactive`` - You cannot already have a snapshot of the share. - You cannot already have a group snapshot of the share. - You cannot already have a replica of the share. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: share_id ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8342354 manila-23.0.0.0rc1/api-ref/source/snapshot-instances.inc0000664000175000017500000001034015251045254021566 0ustar00zuulzuul.. -*- rst -*- Share snapshot instances (since API v2.19) ========================================== A share snapshot instance is an internal representation for a snapshot of a share. A single snapshot can have multiple snapshot instances if the parent share has multiple ``instances``. When a share is replicated or is in the process of being migrated, it can live in multiple places and each individual location is called an "instance", internally within the Shared File Systems service. By default administrators can list, show information for and explicitly set the state of share snapshot instances. Use the ``policy.yaml`` file to grant permissions for these actions to other roles. List share snapshot instances ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/snapshot-instances .. versionadded:: 2.19 Lists all share snapshot instances. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: snapshot_instance_id_response - snapshot_id: snapshot_id - status: snapshot_instance_status Response example ---------------- .. literalinclude:: samples/snapshot-instances-list-response.json :language: javascript List share snapshot instances with details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/snapshot-instances/detail .. versionadded:: 2.19 Lists all share snapshot instances with details. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: snapshot_instance_id_response - snapshot_id: snapshot_id - created_at: created_at - updated_at: updated_at - status: snapshot_instance_status - share_id: share_id - share_instance_id: share_instance_id_1 - progress: progress - provider_location: snapshot_provider_location Response example ---------------- .. literalinclude:: samples/snapshot-instances-list-with-detail-response.json :language: javascript Show share snapshot instance details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/snapshot-instances/{snapshot_instance_id} .. versionadded:: 2.19 Shows details for a share snapshot instance. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_instance_id: snapshot_instance_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: snapshot_instance_id_response - snapshot_id: snapshot_id - created_at: created_at - updated_at: updated_at - status: snapshot_instance_status - share_id: share_id - share_instance_id: share_instance_id_1 - progress: progress - provider_location: snapshot_provider_location Response example ---------------- .. literalinclude:: samples/snapshot-instance-show-response.json :language: javascript Reset share snapshot instance state ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/snapshot-instances/{snapshot_instance_id}/action .. versionadded:: 2.19 Administrator only. Explicitly updates the state of a share snapshot instance. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_instance_id: snapshot_instance_id_path - status: snapshot_instance_status Request example --------------- .. literalinclude:: samples/snapshot-instance-actions-reset-state-request.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8342354 manila-23.0.0.0rc1/api-ref/source/snapshot-metadata.inc0000664000175000017500000001136015251045254021362 0ustar00zuulzuul.. -*- rst -*- Snapshot metadata (Since API v2.73) =================================== Shows, sets, updates, and unsets snapshot metadata. Show all snapshot metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/snapshots/{snapshot_id}/metadata .. versionadded:: 2.73 Shows all the metadata for a snapshot, as key and value pairs. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/snapshot-show-metadata-response.json :language: javascript Show snapshot metadata item ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/snapshots/{snapshot_id}/metadata/{key} .. versionadded:: 2.73 Retrieves a specific metadata item from a snapshot's metadata by its key. If the specified key does not represent a valid metadata item, the API will respond with HTTP 404. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_path - key: metadata_key_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata_item Response example ---------------- .. literalinclude:: samples/snapshot-show-metadata-item-response.json :language: javascript Set snapshot metadata ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/snapshots/{snapshot_id}/metadata .. versionadded:: 2.73 Allows adding new metadata items as key-value pairs. This API will not delete pre-existing metadata items. If the request object contains metadata items that already exist, they will be updated with new values as specified in the request object. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_path - metadata: metadata_request Request example --------------- .. literalinclude:: samples/snapshot-set-metadata-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/snapshot-set-metadata-response.json :language: javascript Update snapshot metadata ~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/snapshots/{snapshot_id}/metadata .. versionadded:: 2.73 Replaces the metadata for a given snapshot with the metadata (specified as key-value pairs) in the request object. All pre-existing metadata of the snapshot will be deleted and replaced with the new metadata supplied. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_path - metadata: metadata_request Request example --------------- .. literalinclude:: samples/snapshot-update-metadata-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - metadata: metadata Response example ---------------- .. literalinclude:: samples/snapshot-update-metadata-response.json :language: javascript To delete all existing metadata items on a given snapshot, the request object needs to specify an empty metadata object: Request example --------------- .. literalinclude:: samples/snapshot-update-null-metadata-request.json :language: javascript Response example ---------------- .. literalinclude:: samples/snapshot-update-null-metadata-response.json :language: javascript Delete snapshot metadata item ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/snapshots/{snapshot_id}/metadata/{key} .. versionadded:: 2.73 Deletes a single metadata item on a snapshot, idetified by its key. If the specified key does not represent a valid metadata item, the API will respond with HTTP 404. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_path - key: metadata_key_path ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8342354 manila-23.0.0.0rc1/api-ref/source/snapshots.inc0000664000175000017500000002725215251045254017776 0ustar00zuulzuul.. -*- rst -*- Share snapshots =============== Use the Shared File Systems service to make snapshots of shares. A share snapshot is a point-in-time, read-only copy of the data that is contained in a share. The APIs below allow controlling share snapshots. They are represented by a "snapshot" resource in the Shared File Systems service, and they can have user-defined metadata such as a name and description. You can create, manage, update, and delete share snapshots. After you create or manage a share snapshot, you can create a share from it. You can also revert a share to its most recent snapshot. You can update a share snapshot to rename it, change its description, or update its state to one of these supported states: - ``available`` - ``error`` - ``creating`` - ``deleting`` - ``error_deleting`` - ``manage_starting`` - ``manage_error`` - ``unmanage_starting`` - ``unmanage_error`` - ``restoring`` As administrator, you can also reset the state of a snapshot and force-delete a share snapshot in any state. Use the ``policy.yaml`` file to grant permissions for these actions to other roles. List share snapshots ~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/snapshots Lists all share snapshots. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query - limit: limit - offset: offset - sort_key: sort_key - sort_dir: sort_dir - name: name_query - description: description_query - status: snapshot_status_query - share_id: snapshot_share_id - size: snapshot_size - name~: name_inexact_query - description~: description_inexact_query - metadata: snapshot_metadata_query - with_count: with_count_snapshot_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: snapshot_id - name: name Response example ---------------- .. literalinclude:: samples/snapshots-list-response.json :language: javascript List share snapshots with details ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/snapshots/detail Lists all share snapshots with details. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - all_tenants: all_tenants_query - limit: limit - offset: offset - sort_key: sort_key - sort_dir: sort_dir - name: name_query - description: description_query - status: snapshot_status_query - share_id: snapshot_share_id - size: snapshot_size - name~: name_inexact_query - description~: description_inexact_query - metadata: snapshot_metadata_query - with_count: with_count_snapshot_query Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: snapshot_id - status: snapshot_status - share_id: snapshot_share_id - name: name - description: description - created_at: created_at - share_proto: snapshot_share_protocol - share_size: snapshot_share_size - size: snapshot_size - project_id: snapshot_project_id - user_id: snapshot_user_id - provider_location: snapshot_provider_location_optional Response example ---------------- .. literalinclude:: samples/snapshots-list-detailed-response.json :language: javascript Show share snapshot details ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/snapshots/{snapshot_id} Shows details for a share snapshot. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_path Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: snapshot_id - status: snapshot_status - share_id: snapshot_share_id - name: name - description: description - created_at: created_at - share_proto: snapshot_share_protocol - share_size: snapshot_share_size - size: snapshot_size - project_id: snapshot_project_id - user_id: snapshot_user_id - provider_location: snapshot_provider_location_optional Response example ---------------- .. literalinclude:: samples/snapshot-show-response.json :language: javascript Create share snapshot ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/snapshots Creates a snapshot from a share. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: snapshot_share_id_request - force: force_snapshot_request - name: name_request - description: description_request - display_name: display_name_request - display_description: display_description_request - metadata: snapshot_metadata Request example --------------- .. literalinclude:: samples/snapshot-create-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: snapshot_id - share_id: snapshot_share_id - status: snapshot_status - name: name - description: description - created_at: created_at - share_proto: snapshot_share_protocol - share_size: snapshot_share_size - provider_location: snapshot_provider_location_optional - size: snapshot_size - project_id: snapshot_project_id - user_id: snapshot_user_id - metadata: snapshot_metadata Response example ---------------- .. literalinclude:: samples/snapshot-create-response.json :language: javascript Manage share snapshot (since API v2.12) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/snapshots/manage .. versionadded:: 2.12 Configures Shared File Systems to manage a share snapshot. .. note:: Managing snapshots of shares that are created on top of share servers (i.e. created with share networks) is not supported prior to API version 2.49. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - share_id: snapshot_manage_share_id - provider_location: snapshot_provider_location_request - name: name_request - display_name: display_name_request - description: description_request - display_description: display_description_request - driver_options: driver_options - metadata: snapshot_metadata Request example --------------- .. literalinclude:: samples/snapshot-manage-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: snapshot_id - share_id: snapshot_share_id - status: snapshot_manage_status - name: name - description: description - created_at: created_at - share_proto: snapshot_share_protocol - share_size: snapshot_share_size - provider_location: snapshot_provider_location - size: snapshot_size - project_id: snapshot_project_id - user_id: snapshot_user_id - metadata: snapshot_metadata Response example ---------------- .. literalinclude:: samples/snapshot-manage-response.json :language: javascript Unmanage share snapshot (since API v2.12) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/snapshots/{snapshot_id}/action .. versionadded:: 2.12 Configures Shared File Systems to stop managing a share snapshot. .. note:: Unmanaging snapshots of shares that are created on top of share servers (i.e. created with share networks) is not supported prior to API version 2.49. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 409 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_path - unmanage: snapshot_unmanage Request example --------------- .. literalinclude:: samples/snapshot-actions-unmanage-request.json :language: javascript Response parameters ------------------- There is no body content for the response. Reset share snapshot state ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/snapshots/{snapshot_id}/action Administrator only. Explicitly updates the state of a share snapshot. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_path - status: snapshot_status_request Request example --------------- .. literalinclude:: samples/snapshot-actions-reset-state-request.json :language: javascript Force-delete share snapshot ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: POST /v2/snapshots/{snapshot_id}/action Administrator only. Force-deletes a share snapshot in any state. Use the ``policy.yaml`` file to grant permissions for this action to other roles. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_path - force_delete: snapshot_force_delete Request example --------------- .. literalinclude:: samples/snapshot-actions-force-delete-request.json :language: javascript Update share snapshot ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: PUT /v2/snapshots/{snapshot_id} Updates a share snapshot. You can update these attributes: - ``display_name``, which also changes the ``name`` of the share snapshot. - ``display_description``, which also changes the ``description`` of the share snapshot. If you try to update other attributes, they retain their previous values. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 - 422 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_path - display_name: display_name_request - display_description: display_description_request Request example --------------- .. literalinclude:: samples/snapshot-update-request.json :language: javascript Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: snapshot_id - status: snapshot_status - share_id: snapshot_share_id - name: name - description: description - created_at: created_at - share_proto: snapshot_share_protocol - share_size: snapshot_share_size - size: snapshot_size - project_id: snapshot_project_id - user_id: snapshot_user_id Response example ---------------- .. literalinclude:: samples/snapshot-update-response.json :language: javascript Delete share snapshot ~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/snapshots/{snapshot_id} Deletes a share snapshot. Preconditions - Share snapshot status must be ``available`` or ``error``. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - snapshot_id: snapshot_id_path ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8342354 manila-23.0.0.0rc1/api-ref/source/status.yaml0000664000175000017500000000325115251045254017461 0ustar00zuulzuul 200: default: | Request was successful. 201: default: | Request has been fulfilled and new resource created. 202: default: | Request is accepted, but processing may take some time. 203: default: | Returned information is not full set, but a subset. 204: default: | Request fulfilled but service does not return anything. 300: default: | The resource corresponds to more than one representation. 400: default: | Some content in the request was invalid. 401: default: | User must authenticate before making a request. 403: default: | Policy does not allow current user to do this operation. 404: default: | The requested resource could not be found. 405: default: | Method is not valid for this endpoint and resource. 409: default: | This resource has an action in progress that would conflict with this request. 413: default: | This operation cannot be completed. 415: default: | The entity of the request is in a format not supported by the requested resource for the method. 422: default: | The entity of the request is in a format not processable by the requested resource for the method. 500: default: | Something went wrong with the service which prevents it from fulfilling the request. 501: default: | The service does not have the functionality required to fulfill this request. 503: default: | The service cannot handle the request right now. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8342354 manila-23.0.0.0rc1/api-ref/source/user-messages.inc0000664000175000017500000000675615251045254020545 0ustar00zuulzuul.. -*- rst -*- User messages (since API 2.37) ============================== Lists, shows and deletes user messages. User messages are automatically created when an asynchronous action fails on a resource. In such situations an error is logged in the appropriate log file but end users may not have access to the log files. User messages can be used by users to get error details for failed actions. This is handy for example when creating shares - if a share creation fails because a scheduling filter doesn't find suitable back-end host for the share, this share will end up in error state, but from user messages API users can get details about the last executed filter which helps them identify the issue and perhaps re-attempt the creation request with different parameters. List user messages ~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/messages .. versionadded:: 2.37 Lists all user messages. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - limit: limit - offset: offset - sort_key: sort_key_messages - sort_dir: sort_dir - action_id: action_id - detail_id: detail_id - message_level: message_level - project_id: project_id_messages - request_id: request_id - resource_id: resource_id - resource_type: resource_type - created_since: created_since - created_before: created_before Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: message_id_body - action_id: action_id_body - detail_id: detail_id_body - message_level: message_level_body - project_id: project_id_messages_body - request_id: request_id_body - resource_id: resource_id_body - resource_type: resource_type_body - message_members_links: message_members_links - expires_at : message_expires_at_body - created_at : created_at Response example ---------------- .. literalinclude:: samples/user-messages-list-response.json :language: javascript Show user message details ~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /v2/messages/{message_id} .. versionadded:: 2.37 Shows details for a user message. Response codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - message_id: message_id Response parameters ------------------- .. rest_parameters:: parameters.yaml - id: message_id_body - action_id: action_id_body - detail_id: detail_id_body - message_level: message_level_body - project_id: project_id_messages_body - request_id: request_id_body - resource_id: resource_id_body - resource_type: resource_type_body - message_links: message_links - expires_at : message_expires_at_body - created_at : created_at Response example ---------------- .. literalinclude:: samples/user-message-show-response.json :language: javascript Delete message ~~~~~~~~~~~~~~ .. rest_method:: DELETE /v2/messages/{message_id} .. versionadded:: 2.37 Deletes a user message. Response codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 403 - 404 Request ------- .. rest_parameters:: parameters.yaml - project_id: project_id_path - message_id: message_id ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8352356 manila-23.0.0.0rc1/api-ref/source/versions.inc0000664000175000017500000000605715251045254017624 0ustar00zuulzuul.. -*- rst -*- API versions ============ Lists information for all Shared File Systems API versions. Concepts ~~~~~~~~ In order to bring new features to users over time, the Shared File Systems API supports versioning. There are two kinds of versions in the Shared File Systems API: - ''major versions'', which have dedicated URLs - ''microversions'', which can be requested through the use of the ``X-OpenStack-Manila-API-Version`` header Read more about microversion guidelines that the service adheres to `here `_ See `A history of the Shared File Systems API versions `_ to view the evolution of the API and pick an appropriate version for API requests. List All Major Versions ~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET / This fetches all the information about all known major API versions in the deployment. Links to more specific information will be provided for each API version, as well as information about supported min and max microversions. Response codes -------------- .. rest_status_code:: success status.yaml - 300 Response -------- .. rest_parameters:: parameters.yaml - versions: versions - id: version_id - updated: version_updated - status: version_status - links: links - media-types: version_media_types - version: version_max - min_version: version_min .. note:: The ``updated`` and ``media-types`` parameters in the response are vestigial and provide no useful information. They will probably be deprecated and removed in the future. Response Example ---------------- This demonstrates the expected response from a bleeding edge server that supports up to the current microversion. When querying OpenStack environments you will typically find the current microversion on the v2.1 API is lower than listed below. .. literalinclude:: samples/versions-index-response.json :language: javascript Show Details of Specific API Version ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. rest_method:: GET /{api_version}/ This gets the details of a specific API at it's root. Nearly all this information exists at the API root, so this is mostly a redundant operation. Response codes -------------- .. rest_status_code:: success status.yaml - 200 Request ------- .. rest_parameters:: parameters.yaml - api_version: api_version Response -------- .. rest_parameters:: parameters.yaml - version: version - id: version_id - status: version_status - links: links - version: version_max - updated: version_updated - min_version: version_min - media-types: version_media_types .. note:: The ``updated`` and ``media-types`` parameters in the response are vestigial and provide no useful information. They will probably be deprecated and removed in the future. Response Example ---------------- This is an example of a ``GET /v2/`` on a relatively current server. .. literalinclude:: samples/versions-get-version-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8352356 manila-23.0.0.0rc1/bindep.txt0000664000175000017500000000243415251045254014433 0ustar00zuulzuul# This is a cross-platform list tracking distribution packages needed for # install and tests; # see https://docs.openstack.org/infra/bindep/ for additional information. build-essential [platform:dpkg test] gcc [platform:rpm test] # gettext and graphviz are needed by doc builds only. For transition, # have them in both doc and test. # TODO(jaegerandi): Remove test once infra scripts are updated. gettext [!platform:suse doc test] gettext-runtime [platform:suse doc test] graphviz [doc test] libffi-dev [platform:dpkg] libffi-devel [platform:redhat] libffi48-devel [platform:suse] virtual/libffi [platform:gentoo] libssl-dev [platform:dpkg] openssl-devel [platform:rpm !platform:suse] libopenssl-devel [platform:suse !platform:rpm] locales [platform:debian] mariadb [platform:rpm] mariadb-server [platform:redhat platform:debian] mariadb-devel [platform:redhat] libmariadb-dev-compat [platform:debian] libmysqlclient-dev [platform:ubuntu] libmysqlclient-devel [platform:suse] libpq-dev [platform:dpkg] mysql-client [platform:dpkg !platform:debian] mysql-server [platform:dpkg !platform:debian] postgresql postgresql-client [platform:dpkg] postgresql-devel [platform:rpm] postgresql-server [platform:rpm] libxml2-dev [platform:dpkg test] libxslt-devel [platform:rpm test] libxslt1-dev [platform:dpkg test] ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151965.8951838 manila-23.0.0.0rc1/contrib/0000775000175000017500000000000015251045336014067 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.007185 manila-23.0.0.0rc1/contrib/share_driver_hooks/0000775000175000017500000000000015251045336017747 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8352356 manila-23.0.0.0rc1/contrib/share_driver_hooks/README.rst0000664000175000017500000000626715251045254021450 0ustar00zuulzuulManila mount automation example using share driver hooks feature ================================================================ Manila has feature called 'share driver hooks'. Which allows to perform actions before and after driver actions such as 'create share' or 'access allow', also allows to do custom things on periodic basis. Here, we provide example of mount automation using this feature. This example uses OpenStack Zaqar project for sending notifications when operations 'access allow' and 'access deny' are performed. Server side hook will send notifications about changed access for shares after granting and prior to denying access. Possibilities of the mount automation example (consumer) -------------------------------------------------------- - Supports only 'NFS' protocol. - Supports only 'IP' rules. - Supports both levels of access - 'RW' and 'RO'. - Consume interval can be configured. - Allows to choose parent mount directory. Server side setup and run ------------------------- 1. Place files 'zaqarclientwrapper.py' and 'zaqar_notification.py' to dir %manila_dir%/manila/share/hooks. Then update manila configuration file with following options: :: [share_backend_config_group] hook_drivers = manila.share.hooks.zaqar_notification.ZaqarNotification enable_pre_hooks = True enable_post_hooks = True enable_periodic_hooks = False [zaqar] zaqar_auth_url = http://%ip_of_endpoint_with_keystone%:35357/v2.0/ zaqar_region_name = %name_of_region_optional% zaqar_username = foo_user zaqar_password = foo_tenant zaqar_project_name = foo_password zaqar_queues = manila_notification 2. Restart manila-share service. Consumer side setup and run --------------------------- 1. Place files 'zaqarclientwrapper.py' and 'zaqar_notification_example_consumer.py' to any dir on user machine, but they both should be in the same dir. 2. Make sure that following dependencies are installed: - PIP dependencies: - netaddr - oslo_concurrency - oslo_config - oslo_utils - python-zaqarclient - System libs that install 'mount' and 'mount.nfs' apps. 3. Create file with following options: :: [zaqar] # Consumer-related options sleep_between_consume_attempts = 7 mount_dir = "/tmp" expected_ip_addresses = 10.254.0.4 # Common options for consumer and server sides zaqar_auth_url = http://%ip_of_endpoint_with_keystone%:35357/v2.0/ zaqar_region_name = %name_of_region_optional% zaqar_username = foo_user zaqar_password = foo_tenant zaqar_project_name = foo_password zaqar_queues = manila_notification Consumer options descriptions: - 'sleep_between_consume_attempts' - wait interval between consuming notifications from message queue. - 'mount_dir' - parent mount directory that will contain all mounted shares as subdirectories. - 'expected_ip_addresses' - list of IP addresses that are expected to be granted access for. Could be either equal to or be part of a CIDR. Match triggers [un]mount operations. 4. Run consumer with following command: :: $ zaqar_notification_example_consumer.py --config-file path/to/config.conf 5. Now create NFS share and grant IP access to consumer by its IP address. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8352356 manila-23.0.0.0rc1/contrib/share_driver_hooks/zaqar_notification.py0000664000175000017500000001147515251045254024214 0ustar00zuulzuul# Copyright (c) 2015 Mirantis, Inc. # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from oslo_log import log from oslo_utils import timeutils from manila import exception from manila.share import api from manila.share import hook from manila.share.hooks import zaqarclientwrapper # noqa CONF = zaqarclientwrapper.CONF LOG = log.getLogger(__name__) ZAQARCLIENT = zaqarclientwrapper.ZAQARCLIENT class ZaqarNotification(hook.HookBase): share_api = api.API() def _access_changed_trigger(self, context, func_name, access_rules_ids, share_instance_id): access = [self.db.share_access_get(context, rule_id) for rule_id in access_rules_ids] share_instance = self.db.share_instance_get(context, share_instance_id) share = self.share_api.get(context, share_id=share_instance.share_id) def rules_view(rules): result = [] for rule in rules: access_instance = None for ins in rule.instance_mappings: if ins.share_instance_id == share_instance_id: access_instance = ins break else: raise exception.InstanceNotFound( instance_id=share_instance_id) result.append({ 'access_id': rule.id, 'access_instance_id': access_instance.id, 'access_type': rule.access_type, 'access_to': rule.access_to, 'access_level': rule.access_level, }) return result is_allow_operation = 'allow' in func_name results = { 'share_id': share.share_id, 'share_instance_id': share_instance_id, 'export_locations': [ el.path for el in share_instance.export_locations], 'share_proto': share.share_proto, 'access_rules': rules_view(access), 'is_allow_operation': is_allow_operation, 'availability_zone': share_instance.availability_zone, } LOG.debug(results) return results def _execute_pre_hook(self, context, func_name, *args, **kwargs): LOG.debug("\n PRE zaqar notification has been called for " "method '%s'.\n", func_name) if func_name == "deny_access": LOG.debug("\nSending notification about denied access.\n") data = self._access_changed_trigger( context, func_name, kwargs.get('access_rules'), kwargs.get('share_instance_id'), ) self._send_notification(data) def _execute_post_hook(self, context, func_name, pre_hook_data, driver_action_results, *args, **kwargs): LOG.debug("\n POST zaqar notification has been called for " "method '%s'.\n", func_name) if func_name == "allow_access": LOG.debug("\nSending notification about allowed access.\n") data = self._access_changed_trigger( context, func_name, kwargs.get('access_rules'), kwargs.get('share_instance_id'), ) self._send_notification(data) def _send_notification(self, data): for queue_name in CONF.zaqar.zaqar_queues: ZAQARCLIENT.queue_name = queue_name message = { "body": { "example_message": ( "message generated at '%s'" % timeutils.utcnow()), "data": data, } } LOG.debug( "\n Sending message %(m)s to '%(q)s' queue using '%(u)s' user " "and '%(p)s' project.", { 'm': message, 'q': queue_name, 'u': CONF.zaqar.zaqar_username, 'p': CONF.zaqar.zaqar_project_name, } ) queue = ZAQARCLIENT.queue(queue_name) queue.post(message) def _execute_periodic_hook(self, context, periodic_hook_data, *args, **kwargs): LOG.debug("Periodic zaqar notification has been called. (Placeholder)") ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8352356 manila-23.0.0.0rc1/contrib/share_driver_hooks/zaqar_notification_example_consumer.py0000775000175000017500000001653115251045254027643 0ustar00zuulzuul#!/usr/bin/env python3 # # Copyright (c) 2015 Mirantis, Inc. # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. import os import pprint import signal import sys import time import netaddr from oslo_concurrency import processutils from oslo_config import cfg from oslo_utils import timeutils opts = [ cfg.IntOpt( "consume_interval", default=5, deprecated_name="sleep_between_consume_attempts", help=("Time that script will sleep between requests for consuming " "Zaqar messages in seconds."), ), cfg.StrOpt( "mount_dir", default="/tmp", help="Directory that will contain all mounted shares." ), cfg.ListOpt( "expected_ip_addresses", default=[], help=("List of IP addresses that are expected to be found in access " "rules to trigger [un]mount operation for a share.") ), ] CONF = cfg.CONF def print_with_time(data): time = str(timeutils.utcnow()) print(time + " " + str(data)) def print_pretty_dict(d): pprint.pprint(d) def pop_zaqar_messages(client, queues_names): if not isinstance(queues_names, (list, set, tuple)): queues_names = (queues_names, ) try: user = client.conf['auth_opts']['options']['os_username'] project = client.conf['auth_opts']['options']['os_project_name'] messages = [] for queue_name in queues_names: queue = client.queue(queue_name) messages.extend([str(m.body) for m in queue.pop()]) print_with_time( "Received %(len)s message[s] from '%(q)s' " "queue using '%(u)s' user and '%(p)s' project." % { 'len': len(messages), 'q': queue_name, 'u': user, 'p': project, } ) return messages except Exception as e: print_with_time("Caught exception - %s" % e) return [] def signal_handler(signal, frame): print("") print_with_time("Ctrl+C was pressed. Shutting down consumer.") sys.exit(0) def parse_str_to_dict(string): if not isinstance(string, str): return string result = eval(string) return result def handle_message(data): """Handles consumed message. Expected structure of a message is following: {'data': { 'access_rules': [ { 'access_id': u'b28268b9-36c6-40d3-a485-22534077328f', 'access_instance_id': u'd137b2cb-f549-4141-9dd7-36b2789fb973', 'access_level': u'rw', 'access_state': u'active', 'access_to': u'7.7.7.7', 'access_type': u'ip', } ], 'availability_zone': u'nova', 'export_locations': [u'127.0.0.1:/path/to/nfs/share'], 'is_allow_operation': True, 'share_id': u'053eae9a-726f-4f7e-8502-49d7b1adf290', 'share_instance_id': u'dc33e554-e0b9-40f5-9046-c198716d73a0', 'share_proto': u'NFS' }} """ if 'data' in data.keys(): data = data['data'] valid_access = ( 'access_rules' in data and len(data['access_rules']) == 1 and data['access_rules'][0].get('access_type', '?').lower() == 'ip' and data.get('share_proto', '?').lower() == 'nfs' ) if valid_access: is_allow_operation = data['is_allow_operation'] export_location = data['export_locations'][0] if is_allow_operation: mount_share(export_location, data['access_to']) else: unmount_share(export_location, data['access_to']) else: print_with_time('Do nothing with above message.') def execute(cmd): try: print_with_time('Executing following command: \n%s' % cmd) cmd = cmd.split() stdout, stderr = processutils.execute(*cmd) if stderr: print_with_time('Got error: %s' % stderr) return stdout, stderr except Exception as e: print_with_time('Got following error: %s' % e) return False, True def is_share_mounted(mount_point): mounts, stderr = execute('mount') return mount_point in mounts def rule_affects_me(ip_or_cidr): if '/' in ip_or_cidr: net = netaddr.IPNetwork(ip_or_cidr) for my_ip in CONF.zaqar.expected_ip_addresses: if netaddr.IPAddress(my_ip) in net: return True else: for my_ip in CONF.zaqar.expected_ip_addresses: if my_ip == ip_or_cidr: return True return False def mount_share(export_location, access_to): data = { 'mount_point': os.path.join(CONF.zaqar.mount_dir, export_location.split('/')[-1]), 'export_location': export_location, } if (rule_affects_me(access_to) and not is_share_mounted(data['mount_point'])): print_with_time( "Mounting '%(export_location)s' share to %(mount_point)s.") execute('sudo mkdir -p %(mount_point)s' % data) stdout, stderr = execute( 'sudo mount.nfs %(export_location)s %(mount_point)s' % data) if stderr: print_with_time("Mount operation failed.") else: print_with_time("Mount operation went OK.") def unmount_share(export_location, access_to): if rule_affects_me(access_to) and is_share_mounted(export_location): print_with_time("Unmounting '%(export_location)s' share.") stdout, stderr = execute('sudo umount %s' % export_location) if stderr: print_with_time("Unmount operation failed.") else: print_with_time("Unmount operation went OK.") def main(): # Register other local modules cur = os.path.dirname(__file__) pathtest = os.path.join(cur) sys.path.append(pathtest) # Init configuration CONF(sys.argv[1:], project="manila_notifier", version=1.0) CONF.register_opts(opts, group="zaqar") # Import common config and Zaqar client import zaqarclientwrapper # Handle SIGINT signal.signal(signal.SIGINT, signal_handler) # Run consumer print_with_time("Consumer was successfully run.") while True: messages = pop_zaqar_messages( zaqarclientwrapper.ZAQARCLIENT, CONF.zaqar.zaqar_queues) if not messages: message = ("No new messages in '%s' queue[s] " "found." % ','.join(CONF.zaqar.zaqar_queues)) else: message = "Got following messages:" print_with_time(message) for message in messages: message = parse_str_to_dict(message) print_pretty_dict(message) handle_message(message) time.sleep(CONF.zaqar.consume_interval) if __name__ == '__main__': main() ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8352356 manila-23.0.0.0rc1/contrib/share_driver_hooks/zaqarclientwrapper.py0000664000175000017500000000537015251045254024243 0ustar00zuulzuul# Copyright (c) 2015 Mirantis, Inc. # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from oslo_config import cfg from zaqarclient.queues import client as zaqar zaqar_notification_opts = [ cfg.StrOpt( "zaqar_username", help="Username that should be used for init of zaqar client.", ), cfg.StrOpt( "zaqar_password", secret=True, help="Password for user specified in opt 'zaqar_username'.", ), cfg.StrOpt( "zaqar_project_name", help=("Project/Tenant name that is owns user specified " "in opt 'zaqar_username'."), ), cfg.StrOpt( "zaqar_auth_url", default="http://127.0.0.1:35357/v2.0/", help="Auth url to be used by Zaqar client.", ), cfg.StrOpt( "zaqar_region_name", help="Name of the region that should be used. Optional.", ), cfg.StrOpt( "zaqar_service_type", default="messaging", help="Service type for Zaqar. Optional.", ), cfg.StrOpt( "zaqar_endpoint_type", default="publicURL", help="Type of endpoint to be used for init of Zaqar client. Optional.", ), cfg.FloatOpt( "zaqar_api_version", default=1.1, help="Version of Zaqar API to use. Optional.", ), cfg.ListOpt( "zaqar_queues", default=["manila_notification_qeueue"], help=("List of queues names to be used for sending Manila " "notifications. Optional."), ), ] CONF = cfg.CONF CONF.register_opts(zaqar_notification_opts, group='zaqar') ZAQARCLIENT = zaqar.Client( version=CONF.zaqar.zaqar_api_version, conf={ "auth_opts": { "backend": "keystone", "options": { "os_username": CONF.zaqar.zaqar_username, "os_password": CONF.zaqar.zaqar_password, "os_project_name": CONF.zaqar.zaqar_project_name, "os_auth_url": CONF.zaqar.zaqar_auth_url, "os_region_name": CONF.zaqar.zaqar_region_name, "os_service_type": CONF.zaqar.zaqar_service_type, "os_endpoint_type": CONF.zaqar.zaqar_endpoint_type, "insecure": True, }, }, }, ) ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.007185 manila-23.0.0.0rc1/devstack/0000775000175000017500000000000015251045336014233 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8352356 manila-23.0.0.0rc1/devstack/README.rst0000664000175000017500000000127415251045254015725 0ustar00zuulzuul====================== Enabling in Devstack ====================== We can enable the manila service in DevStack. For details, please refer to `development-environment-devstack`_, the following steps can be used as a quickstart reference: 1. Download DevStack 2. Add this repo as an external repository:: > cat local.conf [[local|localrc]] # Enable manila enable_plugin manila https://opendev.org/openstack/manila # Enable manila ui in the dashboard enable_plugin manila-ui https://opendev.org/openstack/manila-ui 3. run ``stack.sh`` .. _development-environment-devstack: https://docs.openstack.org/manila/latest/contributor/development-environment-devstack.html ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151965.8961837 manila-23.0.0.0rc1/devstack/files/0000775000175000017500000000000015251045336015335 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.008185 manila-23.0.0.0rc1/devstack/files/debs/0000775000175000017500000000000015251045336016252 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8352356 manila-23.0.0.0rc1/devstack/files/debs/manila0000664000175000017500000000000515251045254017430 0ustar00zuulzuullvm2 ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.008185 manila-23.0.0.0rc1/devstack/files/rpms/0000775000175000017500000000000015251045336016316 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8352356 manila-23.0.0.0rc1/devstack/files/rpms/manila0000664000175000017500000000000515251045254017474 0ustar00zuulzuullvm2 ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.008185 manila-23.0.0.0rc1/devstack/files/rpms-suse/0000775000175000017500000000000015251045336017273 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8352356 manila-23.0.0.0rc1/devstack/files/rpms-suse/manila0000664000175000017500000000000515251045254020451 0ustar00zuulzuullvm2 ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.836236 manila-23.0.0.0rc1/devstack/plugin.sh0000775000175000017500000016037315251045254016101 0ustar00zuulzuul#!/bin/bash # Plugin file for enabling manila services # ---------------------------------------- # Save trace setting XTRACE=$(set +o | grep xtrace) set -o xtrace # Entry Points # ------------ function _clean_share_group { local vg=$1 local vg_prefix=$2 # Clean out existing shares for lv in `sudo lvs --noheadings -o lv_name $vg`; do # vg_prefix prefixes the LVs we want if [[ "${lv#$vg_prefix}" != "$lv" ]]; then sudo umount -f $MANILA_MNT_DIR/$lv sudo lvremove -f $vg/$lv sudo rm -rf $MANILA_MNT_DIR/$lv fi done } function _clean_manila_lvm_backing_file { local vg=$1 # if there is no logical volume left, it's safe to attempt a cleanup # of the backing file if [ -z "`sudo lvs --noheadings -o lv_name $vg`" ]; then # if the backing physical device is a loop device, it was probably setup by devstack VG_DEV=$(sudo losetup -j $DATA_DIR/${vg}-backing-file | awk -F':' '/backing-file/ { print $1 }') if [[ -n "$VG_DEV" ]]; then sudo losetup -d $VG_DEV rm -f $DATA_DIR/${vg}-backing-file fi fi } function _clean_zfsonlinux_data { for filename in "$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR"/*; do if [[ $(sudo zpool list | grep $filename) ]]; then echo "Destroying zpool named $filename" sudo zpool destroy -f $filename file="$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR$filename" echo "Destroying file named $file" rm -f $file fi done } function _clean_ip_tables { for ipcmd in iptables ip6tables; do # cleanup rules in the "manila-storage" chain sudo $ipcmd -S -v | sed "s/-c [0-9]* [0-9]* //g" | \ grep "manila-storage" | grep "\-A" | sed "s/-A/-D/g" | \ awk -v ipcmd="$ipcmd" '{print "sudo " ipcmd,$0}' | bash # cleanup the "manila-storage" chain sudo $ipcmd -S -v | sed "s/-c [0-9]* [0-9]* //g" | \ grep "manila-storage" | grep "\-N" | sed "s/-N/-X/g" | \ awk -v ipcmd="$ipcmd" '{print "sudo " ipcmd,$0}' | bash done } # cleanup_manila - Remove residual data files, anything left over from previous # runs that a clean run would need to clean up function cleanup_manila { # All stuff, that are created by share drivers will be cleaned up by other services. _clean_share_group $SHARE_GROUP $SHARE_NAME_PREFIX _clean_manila_lvm_backing_file $SHARE_GROUP _clean_zfsonlinux_data _clean_ip_tables remove_uwsgi_config "$MANILA_UWSGI_CONF" "$MANILA_WSGI" } # configure_backends - Configures backends enabled by MANILA_ENABLED_BACKENDS function configure_backends { # Configure MANILA_ENABLED_BACKENDS backends for group_name in $(echo $MANILA_ENABLED_BACKENDS | sed "s/,/ /g"); do iniset $MANILA_CONF $group_name share_driver $SHARE_DRIVER iniset $MANILA_CONF $group_name share_backend_name ${group_name^^} iniset $MANILA_CONF $group_name path_to_public_key $MANILA_PATH_TO_PUBLIC_KEY iniset $MANILA_CONF $group_name path_to_private_key $MANILA_PATH_TO_PRIVATE_KEY iniset $MANILA_CONF $group_name service_image_name $MANILA_SERVICE_IMAGE_NAME iniset $MANILA_CONF $group_name service_instance_user $MANILA_SERVICE_INSTANCE_USER iniset $MANILA_CONF $group_name driver_handles_share_servers True if [ "$SHARE_DRIVER" == $MANILA_CONTAINER_DRIVER ]; then iniset $MANILA_CONF $group_name network_api_class $MANILA_NETWORK_API_CLASS iniset $MANILA_CONF $group_name neutron_host_id $(hostname) iniset $MANILA_CONF $group_name neutron_vnic_type $MANILA_NEUTRON_VNIC_TYPE fi if [ $(trueorfalse False MANILA_USE_SERVICE_INSTANCE_PASSWORD) == True ]; then iniset $MANILA_CONF $group_name service_instance_password $MANILA_SERVICE_INSTANCE_PASSWORD fi if [ "$SHARE_DRIVER" == "manila.share.drivers.generic.GenericShareDriver" ]; then iniset $MANILA_CONF $group_name ssh_conn_timeout $MANILA_SSH_TIMEOUT fi done } # set_config_opts - this allows to set any config opt to any config group, # parsing env vars by prefix special 'MANILA_OPTGROUP_'. function set_config_opts { # expects only one param - name of config group(s) as list separated by commas GROUP_NAMES=$1 if [[ -n "$GROUP_NAMES" ]]; then for be in ${GROUP_NAMES//,/ }; do # get backend_specific opt values prefix=MANILA_OPTGROUP_$be\_ ( set -o posix ; set ) | grep ^$prefix | while read -r line ; do # parse it to opt names and values opt=${line#$prefix} opt_name=${opt%%=*} opt_value=${opt##*=} iniset $MANILA_CONF $be $opt_name $opt_value done done fi } function set_backend_availability_zones { ENABLED_BACKENDS=$1 echo_summary "Setting up backend_availability_zone option \ for any enabled backends that do not use the Generic driver and have \ not been set previously. Availability zones for the Generic driver \ must coincide with those created for Nova and Cinder." local zonenum generic_driver='manila.share.drivers.generic.GenericShareDriver' for BE in ${ENABLED_BACKENDS//,/ }; do share_driver=$(iniget $MANILA_CONF $BE share_driver) az=$(iniget $MANILA_CONF $BE backend_availability_zone) if [[ -z $az && $share_driver != $generic_driver ]]; then zone="manila-zone-$((zonenum++))" iniset $MANILA_CONF $BE backend_availability_zone $zone fi done } # configure_manila - Set config files, create data dirs, etc function configure_manila { if [[ ! -d $MANILA_CONF_DIR ]]; then sudo mkdir -p $MANILA_CONF_DIR fi sudo chown $STACK_USER $MANILA_CONF_DIR # Set the paths of certain binaries MANILA_ROOTWRAP=$(get_rootwrap_location manila) # If Manila ships the new rootwrap filters files, deploy them # (owned by root) and add a parameter to $MANILA_ROOTWRAP ROOTWRAP_MANILA_SUDOER_CMD="$MANILA_ROOTWRAP" if [[ -d $MANILA_DIR/etc/manila/rootwrap.d ]]; then # Wipe any existing rootwrap.d files first if [[ -d $MANILA_CONF_DIR/rootwrap.d ]]; then sudo rm -rf $MANILA_CONF_DIR/rootwrap.d fi # Deploy filters to /etc/manila/rootwrap.d sudo mkdir -m 755 $MANILA_CONF_DIR/rootwrap.d sudo cp $MANILA_DIR/etc/manila/rootwrap.d/*.filters $MANILA_CONF_DIR/rootwrap.d sudo chown -R root:root $MANILA_CONF_DIR/rootwrap.d sudo chmod 644 $MANILA_CONF_DIR/rootwrap.d/* # Set up rootwrap.conf, pointing to /etc/manila/rootwrap.d sudo cp $MANILA_DIR/etc/manila/rootwrap.conf $MANILA_CONF_DIR/ sudo sed -e "s:^filters_path=.*$:filters_path=$MANILA_CONF_DIR/rootwrap.d:" -i $MANILA_CONF_DIR/rootwrap.conf sudo chown root:root $MANILA_CONF_DIR/rootwrap.conf sudo chmod 0644 $MANILA_CONF_DIR/rootwrap.conf # Specify rootwrap.conf as first parameter to manila-rootwrap MANILA_ROOTWRAP="$MANILA_ROOTWRAP $MANILA_CONF_DIR/rootwrap.conf" ROOTWRAP_MANILA_SUDOER_CMD="$MANILA_ROOTWRAP *" fi TEMPFILE=`mktemp` echo "$USER ALL=(root) NOPASSWD: $ROOTWRAP_MANILA_SUDOER_CMD" >$TEMPFILE chmod 0440 $TEMPFILE sudo chown root:root $TEMPFILE sudo mv $TEMPFILE /etc/sudoers.d/manila-rootwrap cp $MANILA_DIR/etc/manila/api-paste.ini $MANILA_API_PASTE_INI # Remove old conf file if exists rm -f $MANILA_CONF configure_keystone_authtoken_middleware $MANILA_CONF manila iniset $MANILA_CONF DEFAULT auth_strategy keystone iniset $MANILA_CONF DEFAULT debug True iniset $MANILA_CONF DEFAULT scheduler_driver $MANILA_SCHEDULER_DRIVER iniset $MANILA_CONF DEFAULT share_name_template ${SHARE_NAME_PREFIX}%s iniset $MANILA_CONF DATABASE connection `database_connection_url manila` iniset $MANILA_CONF DATABASE max_pool_size 40 iniset $MANILA_CONF DEFAULT api_paste_config $MANILA_API_PASTE_INI iniset $MANILA_CONF DEFAULT rootwrap_config $MANILA_CONF_DIR/rootwrap.conf iniset $MANILA_CONF DEFAULT osapi_share_extension manila.api.contrib.standard_extensions iniset $MANILA_CONF DEFAULT state_path $MANILA_STATE_PATH # Note: Sample share types will still be created if the below is False if [ $(trueorfalse False MANILA_CONFIGURE_DEFAULT_TYPES) == True ]; then iniset $MANILA_CONF DEFAULT default_share_type $MANILA_DEFAULT_SHARE_TYPE iniset $MANILA_CONF DEFAULT default_share_group_type $MANILA_DEFAULT_SHARE_GROUP_TYPE fi if ! [[ -z $MANILA_SHARE_MIGRATION_PERIOD_TASK_INTERVAL ]]; then iniset $MANILA_CONF DEFAULT migration_driver_continue_update_interval $MANILA_SHARE_MIGRATION_PERIOD_TASK_INTERVAL fi if ! [[ -z $MANILA_SERVER_MIGRATION_PERIOD_TASK_INTERVAL ]]; then iniset $MANILA_CONF DEFAULT server_migration_driver_continue_update_interval $MANILA_SERVER_MIGRATION_PERIOD_TASK_INTERVAL fi if ! [[ -z $MANILA_CREATE_BACKUP_CONTINUE_TASK_INTERVAL ]]; then iniset $MANILA_CONF DEFAULT driver_backup_continue_update_interval $MANILA_CREATE_BACKUP_CONTINUE_TASK_INTERVAL fi if ! [[ -z $MANILA_RESTORE_BACKUP_CONTINUE_TASK_INTERVAL ]]; then iniset $MANILA_CONF DEFAULT driver_restore_continue_update_interval $MANILA_RESTORE_BACKUP_CONTINUE_TASK_INTERVAL fi if ! [[ -z $MANILA_DEFERRED_DELETE_TASK_INTERVAL ]]; then iniset $MANILA_CONF DEFAULT periodic_deferred_delete_interval $MANILA_DEFERRED_DELETE_TASK_INTERVAL fi if ! [[ -z $MANILA_DATA_COPY_CHECK_HASH ]]; then iniset $MANILA_CONF DEFAULT check_hash $MANILA_DATA_COPY_CHECK_HASH fi iniset $MANILA_CONF DEFAULT enabled_share_protocols $MANILA_ENABLED_SHARE_PROTOCOLS iniset $MANILA_CONF oslo_concurrency lock_path $MANILA_LOCK_PATH iniset $MANILA_CONF DEFAULT wsgi_keep_alive False iniset $MANILA_CONF DEFAULT lvm_share_volume_group $SHARE_GROUP # Set the replica_state_update_interval iniset $MANILA_CONF DEFAULT replica_state_update_interval $MANILA_REPLICA_STATE_UPDATE_INTERVAL # Set the use_scheduler_creating_share_from_snapshot iniset $MANILA_CONF DEFAULT use_scheduler_creating_share_from_snapshot $MANILA_USE_SCHEDULER_CREATING_SHARE_FROM_SNAPSHOT if is_service_enabled neutron; then configure_keystoneauth $MANILA_CONF manila neutron fi if is_service_enabled nova; then configure_keystoneauth $MANILA_CONF manila nova fi if is_service_enabled cinder; then configure_keystoneauth $MANILA_CONF manila cinder fi if is_service_enabled glance; then configure_keystoneauth $MANILA_CONF manila glance fi if [ ! $MANILA_ENABLED_BACKENDS ]; then # MANILA_ENABLED_BACKENDS is a required option echo -"No configured backends, please set a value to MANILA_ENABLED_BACKENDS" exit 1 fi if is_service_enabled barbican; then configure_keystoneauth $MANILA_CONF manila barbican iniset $MANILA_CONF barbican barbican_endpoint_type $BARBICAN_ENDPOINT_TYPE iniset $MANILA_CONF barbican auth_endpoint $BARBICAN_KEYSTONE_ENDPOINT iniset $MANILA_CONF key_manager backend $KEY_MANAGER_BACKEND fi configure_backends iniset $MANILA_CONF DEFAULT enabled_share_backends $MANILA_ENABLED_BACKENDS if [ ! -f $MANILA_PATH_TO_PRIVATE_KEY ]; then ssh-keygen -N "" -t $MANILA_KEY_FORMAT -f $MANILA_PATH_TO_PRIVATE_KEY; fi iniset $MANILA_CONF DEFAULT manila_service_keypair_name $MANILA_SERVICE_KEYPAIR_NAME REAL_MANILA_SERVICE_PORT=$MANILA_SERVICE_PORT if is_service_enabled tls-proxy; then # Set the protocol to 'https', update the endpoint base and set the default port MANILA_SERVICE_PROTOCOL="https" MANILA_ENDPOINT_BASE="${MANILA_ENDPOINT_BASE/http:/https:}" REAL_MANILA_SERVICE_PORT=$MANILA_SERVICE_PORT_INT # Set the service port for a proxy to take the original iniset $MANILA_CONF DEFAULT osapi_share_listen_port $REAL_MANILA_SERVICE_PORT iniset $MANILA_CONF oslo_middleware enable_proxy_headers_parsing True fi iniset_rpc_backend manila $MANILA_CONF DEFAULT setup_logging $MANILA_CONF MANILA_CONFIGURE_GROUPS=${MANILA_CONFIGURE_GROUPS:-"$MANILA_ENABLED_BACKENDS"} set_config_opts $MANILA_CONFIGURE_GROUPS set_config_opts DEFAULT set_backend_availability_zones $MANILA_ENABLED_BACKENDS write_uwsgi_config "$MANILA_UWSGI_CONF" "$MANILA_WSGI" "/share" "" "manila-api" if [[ "$MANILA_ENFORCE_NEW_DEFAULTS" == True ]] ; then iniset $MANILA_CONF oslo_policy enforce_new_defaults true OS_CLOUD="devstack-admin" fi } function create_manila_service_keypair { if is_service_enabled nova; then local keypair_exists=$( openstack --os-cloud devstack-admin keypair list | grep " $MANILA_SERVICE_KEYPAIR_NAME " ) if [[ -z $keypair_exists ]]; then openstack --os-cloud devstack-admin keypair create $MANILA_SERVICE_KEYPAIR_NAME --public-key $MANILA_PATH_TO_PUBLIC_KEY fi fi } function is_driver_enabled { driver_name=$1 for BE in ${MANILA_ENABLED_BACKENDS//,/ }; do share_driver=$(iniget $MANILA_CONF $BE share_driver) if [ "$share_driver" == "$driver_name" ]; then return 0 fi done return 1 } # create_service_share_servers - creates service Nova VMs, one per generic # driver, and only if it is configured to mode without handling of share servers. function create_service_share_servers { created_admin_network=false for BE in ${MANILA_ENABLED_BACKENDS//,/ }; do driver_handles_share_servers=$(iniget $MANILA_CONF $BE driver_handles_share_servers) share_driver=$(iniget $MANILA_CONF $BE share_driver) generic_driver='manila.share.drivers.generic.GenericShareDriver' if [[ $share_driver == $generic_driver ]]; then if [[ $(trueorfalse False driver_handles_share_servers) == False ]]; then vm_name='manila_service_share_server_'$BE local vm_exists=$( openstack --os-cloud devstack-admin server list --all-projects | grep " $vm_name " ) if [[ -z $vm_exists ]]; then private_net_id=$(openstack --os-cloud devstack-admin network show $PRIVATE_NETWORK_NAME -f value -c id) vm_id=$(timeout 120 openstack --os-cloud devstack-admin server create $vm_name \ --flavor $MANILA_SERVICE_VM_FLAVOR_NAME \ --image $MANILA_SERVICE_IMAGE_NAME \ --nic net-id=$private_net_id \ --security-group $MANILA_SERVICE_SECGROUP \ --key-name $MANILA_SERVICE_KEYPAIR_NAME \ --wait \ | grep ' id ' | get_field 2) else vm_id=$(openstack --os-cloud devstack-admin server show $vm_name -f value -c id) fi floating_ip=$(openstack --os-cloud devstack-admin floating ip create $PUBLIC_NETWORK_NAME --subnet $PUBLIC_SUBNET_NAME | grep 'floating_ip_address' | get_field 2) openstack --os-cloud devstack-admin server add floating ip $vm_id $floating_ip iniset $MANILA_CONF $BE service_instance_name_or_id $vm_id iniset $MANILA_CONF $BE service_net_name_or_ip $floating_ip iniset $MANILA_CONF $BE tenant_net_name_or_ip $PRIVATE_NETWORK_NAME else if is_service_enabled neutron; then if ! [[ -z $MANILA_ADMIN_NET_RANGE ]]; then if [ $created_admin_network == false ]; then project_id=$(openstack --os-cloud devstack-admin project show $SERVICE_PROJECT_NAME -c id -f value) local admin_net_id=$( openstack --os-cloud devstack-admin network show admin_net -f value -c id ) if [[ -z $admin_net_id ]]; then openstack --os-cloud devstack-admin network create admin_net --project $project_id admin_net_id=$(openstack --os-cloud devstack-admin network show admin_net -f value -c id) fi local admin_subnet_id=$( openstack --os-cloud devstack-admin subnet show admin_subnet -f value -c id ) if [[ -z $admin_subnet_id ]]; then openstack --os-cloud devstack-admin subnet create admin_subnet --project $project_id --ip-version 4 --network $admin_net_id --gateway None --subnet-range $MANILA_ADMIN_NET_RANGE admin_subnet_id=$(openstack --os-cloud devstack-admin subnet show admin_subnet -f value -c id) fi created_admin_network=true fi iniset $MANILA_CONF $BE admin_network_id $admin_net_id iniset $MANILA_CONF $BE admin_subnet_id $admin_subnet_id fi fi fi fi done configure_data_service_generic_driver } function configure_data_service_generic_driver { enabled_backends=(${MANILA_ENABLED_BACKENDS//,/ }) share_driver=$(iniget $MANILA_CONF ${enabled_backends[0]} share_driver) generic_driver='manila.share.drivers.generic.GenericShareDriver' if [[ $share_driver == $generic_driver ]]; then driver_handles_share_servers=$(iniget $MANILA_CONF ${enabled_backends[0]} driver_handles_share_servers) if [[ $(trueorfalse False driver_handles_share_servers) == False ]]; then iniset $MANILA_CONF DEFAULT data_node_access_ips $PUBLIC_NETWORK_GATEWAY else if ! [[ -z $MANILA_DATA_NODE_IP ]]; then iniset $MANILA_CONF DEFAULT data_node_access_ips $MANILA_DATA_NODE_IP fi fi fi } # create_manila_service_flavor - creates flavor, that will be used by backends # with configured generic driver to boot Nova VMs with. function create_manila_service_flavor { if is_service_enabled nova; then local flavor_exists=$( openstack --os-cloud devstack-admin flavor list | grep " $MANILA_SERVICE_VM_FLAVOR_NAME " ) if [[ -z $flavor_exists ]]; then # Create flavor for Manila's service VM openstack --os-cloud devstack-admin --os-cloud devstack-admin flavor create \ $MANILA_SERVICE_VM_FLAVOR_NAME \ --id $MANILA_SERVICE_VM_FLAVOR_REF \ --ram $MANILA_SERVICE_VM_FLAVOR_RAM \ --disk $MANILA_SERVICE_VM_FLAVOR_DISK \ --vcpus $MANILA_SERVICE_VM_FLAVOR_VCPUS fi fi } # create_manila_service_image - creates image, that will be used by backends # with configured generic driver to boot Nova VMs from. function create_manila_service_image { if is_service_enabled nova g-api; then local image_exists=$( openstack --os-cloud devstack-admin image list | grep " $MANILA_SERVICE_IMAGE_NAME " ) if [[ -z $image_exists ]]; then # Download Manila's image upload_image $MANILA_SERVICE_IMAGE_URL fi fi } # create_manila_service_secgroup - creates security group that is used by # Nova VMs when generic driver is configured. function create_manila_service_secgroup { # Create a secgroup if ! openstack --os-cloud devstack-admin security group list | grep -q $MANILA_SERVICE_SECGROUP; then openstack --os-cloud devstack-admin security group create $MANILA_SERVICE_SECGROUP --description "$MANILA_SERVICE_SECGROUP description" if ! timeout 30 sh -c "while ! openstack --os-cloud devstack-admin security group list | grep -q $MANILA_SERVICE_SECGROUP; do sleep 1; done"; then echo "Security group not created" exit 1 fi fi # Configure Security Group Rules if ! openstack --os-cloud devstack-admin security group rule list $MANILA_SERVICE_SECGROUP | grep -q icmp; then openstack --os-cloud devstack-admin security group rule create $MANILA_SERVICE_SECGROUP --protocol icmp fi if ! openstack --os-cloud devstack-admin security group rule list $MANILA_SERVICE_SECGROUP | grep -q " tcp .* 22 "; then openstack --os-cloud devstack-admin security group rule create $MANILA_SERVICE_SECGROUP --protocol tcp --dst-port 22 fi if ! openstack --os-cloud devstack-admin security group rule list $MANILA_SERVICE_SECGROUP | grep -q " tcp .* 2049 "; then openstack --os-cloud devstack-admin security group rule create $MANILA_SERVICE_SECGROUP --protocol tcp --dst-port 2049 fi if ! openstack --os-cloud devstack-admin security group rule list $MANILA_SERVICE_SECGROUP | grep -q " udp .* 2049 "; then openstack --os-cloud devstack-admin security group rule create $MANILA_SERVICE_SECGROUP --protocol udp --dst-port 2049 fi if ! openstack --os-cloud devstack-admin security group rule list $MANILA_SERVICE_SECGROUP | grep -q " udp .* 445 "; then openstack --os-cloud devstack-admin security group rule create $MANILA_SERVICE_SECGROUP --protocol udp --dst-port 445 fi if ! openstack --os-cloud devstack-admin security group rule list $MANILA_SERVICE_SECGROUP | grep -q " tcp .* 445 "; then openstack --os-cloud devstack-admin security group rule create $MANILA_SERVICE_SECGROUP --protocol tcp --dst-port 445 fi if ! openstack --os-cloud devstack-admin security group rule list $MANILA_SERVICE_SECGROUP | grep -q " tcp .* 139 "; then openstack --os-cloud devstack-admin security group rule create $MANILA_SERVICE_SECGROUP --protocol tcp --dst-port 137:139 fi if ! openstack --os-cloud devstack-admin security group rule list $MANILA_SERVICE_SECGROUP | grep -q " udp .* 139 "; then openstack --os-cloud devstack-admin security group rule create $MANILA_SERVICE_SECGROUP --protocol udp --dst-port 137:139 fi # List secgroup rules openstack --os-cloud devstack-admin security group rule list $MANILA_SERVICE_SECGROUP } # create_manila_accounts - Set up common required manila accounts function create_manila_accounts { create_service_user "manila" "admin" # Set up Manila v2 service and endpoint - as of microversion 2.60, # project_id is no longer necessary in the v2 endpoint get_or_create_service "manilav2" "sharev2" "Manila Shared Filesystem Service V2" get_or_create_endpoint "sharev2" "$REGION_NAME" \ "$MANILA_ENDPOINT_BASE/v2" # Set up Manila legacy v2 service and endpoint - as of microversion 2.60, # project_id is no longer necessary in the v2 endpoint get_or_create_service "manilav2_legacy" "sharev2_legacy" "Manila Shared Filesystem Service V2 (Legacy 2.0)" get_or_create_endpoint "sharev2_legacy" "$REGION_NAME" \ "$MANILA_ENDPOINT_BASE/v2/\$(project_id)s" # Set up an endpoint for "shared-file-system" - this is necessary to # standardize a naming for the v2 API and for the openstacksdk. # See: https://specs.openstack.org/openstack/service-types-authority/ get_or_create_service "shared-file-system" "shared-file-system" "Manila Shared Filesystem Service v2 API (alias of the sharev2 service)" get_or_create_endpoint "shared-file-system" "$REGION_NAME" \ "$MANILA_ENDPOINT_BASE/v2" } # create_default_share_group_type - create share group type that will be set as default. function create_default_share_group_type { local type_exists=$( openstack --os-cloud $OS_CLOUD share group type list | grep " $MANILA_DEFAULT_SHARE_GROUP_TYPE " ) if [[ -z $type_exists ]]; then openstack --os-cloud $OS_CLOUD share group type create $MANILA_DEFAULT_SHARE_GROUP_TYPE $MANILA_DEFAULT_SHARE_TYPE fi if [[ $MANILA_DEFAULT_SHARE_GROUP_TYPE_SPECS ]]; then openstack --os-cloud $OS_CLOUD share group type set $MANILA_DEFAULT_SHARE_GROUP_TYPE --group-specs $MANILA_DEFAULT_SHARE_GROUP_TYPE_SPECS fi } # create_default_share_type - create share type that will be set as default # if $MANILA_CONFIGURE_DEFAULT_TYPES is set to True, if set to False, the share # type identified by $MANILA_DEFAULT_SHARE_TYPE is still created, but not # configured as default. function create_default_share_type { enabled_backends=(${MANILA_ENABLED_BACKENDS//,/ }) driver_handles_share_servers=$(iniget $MANILA_CONF ${enabled_backends[0]} driver_handles_share_servers) local type_exists=$( openstack --os-cloud $OS_CLOUD share type list | grep " $MANILA_DEFAULT_SHARE_TYPE " ) if [[ -z $type_exists ]]; then local command_args="$MANILA_DEFAULT_SHARE_TYPE $driver_handles_share_servers" if [[ $MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS ]]; then command_args="$command_args --extra-specs $MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS" fi openstack --os-cloud $OS_CLOUD share type create $command_args fi } # create_custom_share_types - create share types suitable for both possible # driver modes with names "dhss_true" and "dhss_false". function create_custom_share_types { local command_args="dhss_true True" if [[ $MANILA_DHSS_TRUE_SHARE_TYPE_EXTRA_SPECS ]]; then command_args="$command_args --extra-specs $MANILA_DHSS_TRUE_SHARE_TYPE_EXTRA_SPECS" fi openstack --os-cloud $OS_CLOUD share type create $command_args command_args="dhss_false False" if [[ $MANILA_DHSS_FALSE_SHARE_TYPE_EXTRA_SPECS ]]; then command_args="$command_args --extra-specs $MANILA_DHSS_FALSE_SHARE_TYPE_EXTRA_SPECS" fi openstack --os-cloud $OS_CLOUD share type create $command_args } # configure_backing_file - Set up backing file for LVM function configure_backing_file { sudo vgscan if ! sudo vgs $SHARE_GROUP; then if [ "$CONFIGURE_BACKING_FILE" = "True" ]; then SHARE_BACKING_FILE=${SHARE_BACKING_FILE:-$DATA_DIR/${SHARE_GROUP}-backing-file} # Only create if the file doesn't already exists [[ -f $SHARE_BACKING_FILE ]] || truncate -s $SHARE_BACKING_FILE_SIZE $SHARE_BACKING_FILE DEV=`sudo losetup -f --show $SHARE_BACKING_FILE` else DEV=$SHARE_BACKING_FILE fi # Only create if the loopback device doesn't contain $SHARE_GROUP if ! sudo vgs $SHARE_GROUP; then sudo vgcreate $SHARE_GROUP $DEV; fi fi mkdir -p $MANILA_STATE_PATH/shares mkdir -p /tmp/shares } # init_manila - Initializes database and creates manila dir if absent function init_manila { if is_service_enabled $DATABASE_BACKENDS; then # (re)create manila database recreate_database manila $MANILA_BIN_DIR/manila-manage db sync if [[ $(trueorfalse False MANILA_USE_DOWNGRADE_MIGRATIONS) == True ]]; then # Use both - upgrade and downgrade migrations to verify that # downgrade migrations do not break structure of Manila database. $MANILA_BIN_DIR/manila-manage db downgrade $MANILA_BIN_DIR/manila-manage db sync fi # Display version as debug-action (see bug/1473400) $MANILA_BIN_DIR/manila-manage db version fi if [ "$SHARE_DRIVER" == "manila.share.drivers.lvm.LVMShareDriver" ]; then if is_service_enabled m-shr; then # Configure a default volume group called '`lvm-shares`' for the share # service if it does not yet exist. If you don't wish to use a file backed # volume group, create your own volume group called ``stack-volumes`` before # invoking ``stack.sh``. # # By default, the backing file is 8G in size, and is stored in ``/opt/stack/data``. configure_backing_file fi elif [ "$SHARE_DRIVER" == $MANILA_CONTAINER_DRIVER ]; then if is_service_enabled m-shr; then SHARE_GROUP=$MANILA_CONTAINER_VOLUME_GROUP_NAME configure_backing_file fi elif [ "$SHARE_DRIVER" == "manila.share.drivers.zfsonlinux.driver.ZFSonLinuxShareDriver" ]; then if is_service_enabled m-shr; then mkdir -p $MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR file_counter=0 MANILA_ZFSONLINUX_SERVICE_IP=${MANILA_ZFSONLINUX_SERVICE_IP:-"127.0.0.1"} for BE in ${MANILA_ENABLED_BACKENDS//,/ }; do if [[ $file_counter == 0 ]]; then # NOTE(vponomaryov): create two pools for first ZFS backend # to cover different use cases that are supported by driver: # - Support of more than one zpool for share backend. # - Support of nested datasets. local first_file="$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR"/alpha local second_file="$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR"/betta truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $first_file truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $second_file sudo zpool create alpha $first_file sudo zpool create betta $second_file # Create subdir (nested dataset) for second pool sudo zfs create betta/subdir iniset $MANILA_CONF $BE zfs_zpool_list alpha,betta/subdir elif [[ $file_counter == 1 ]]; then local file="$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR"/gamma truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $file sudo zpool create gamma $file iniset $MANILA_CONF $BE zfs_zpool_list gamma else local filename=file"$file_counter" local file="$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR"/"$filename" truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $file sudo zpool create $filename $file iniset $MANILA_CONF $BE zfs_zpool_list $filename fi iniset $MANILA_CONF $BE zfs_share_export_ip $MANILA_ZFSONLINUX_SHARE_EXPORT_IP iniset $MANILA_CONF $BE zfs_service_ip $MANILA_ZFSONLINUX_SERVICE_IP iniset $MANILA_CONF $BE zfs_dataset_creation_options $MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS iniset $MANILA_CONF $BE zfs_use_ssh $MANILA_ZFSONLINUX_USE_SSH iniset $MANILA_CONF $BE zfs_ssh_username $MANILA_ZFSONLINUX_SSH_USERNAME iniset $MANILA_CONF $BE replication_domain $MANILA_ZFSONLINUX_REPLICATION_DOMAIN iniset $MANILA_CONF $BE driver_handles_share_servers False let "file_counter=file_counter+1" done # Install the server's SSH key in our known_hosts file eval STACK_HOME=~$STACK_USER ssh-keyscan ${MANILA_ZFSONLINUX_SERVICE_IP} >> $STACK_HOME/.ssh/known_hosts # If the server is this machine, setup trust for ourselves (otherwise you're on your own) if [ "$MANILA_ZFSONLINUX_SERVICE_IP" = "127.0.0.1" ] || [ "$MANILA_ZFSONLINUX_SERVICE_IP" = "localhost" ] ; then # Trust our own SSH keys eval SSH_USER_HOME=~$MANILA_ZFSONLINUX_SSH_USERNAME cat $STACK_HOME/.ssh/*.pub >> $SSH_USER_HOME/.ssh/authorized_keys # Give ssh user sudo access echo "$MANILA_ZFSONLINUX_SSH_USERNAME ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers > /dev/null iniset $MANILA_CONF DEFAULT data_node_access_ips $MANILA_ZFSONLINUX_SERVICE_IP fi fi fi } # check_nfs_kernel_service_state_ubuntu- Make sure nfsd is running function check_nfs_kernel_service_state_ubuntu { # (aovchinnikov): Workaround for nfs-utils bug 1052264 if [[ $(sudo service nfs-kernel-server status &> /dev/null || echo 'fail') == 'fail' ]]; then echo "Apparently nfsd is not running. Trying to fix that." sudo mkdir -p "/media/nfsdonubuntuhelper" # (aovchinnikov): shell wrapping is needed for cases when a file to be written # is owned by root. sudo sh -c "echo '/media/nfsdonubuntuhelper 127.0.0.1(ro)' >> /etc/exports" sudo service nfs-kernel-server start fi if [[ $(sudo service nfs-kernel-server status &> /dev/null || echo 'fail') == 'fail' ]]; then echo "Failed to start nfsd. Exiting." exit 1 fi } function _install_nfs_and_samba { if is_ubuntu; then install_package nfs-kernel-server nfs-common samba check_nfs_kernel_service_state_ubuntu elif is_fedora; then install_package nfs-utils samba sudo systemctl enable smb.service sudo systemctl start smb.service sudo systemctl enable nfs-server.service sudo systemctl start nfs-server.service elif is_suse; then install_package nfs-kernel-server nfs-utils samba else echo "This distro is not supported. Skipping step of NFS and Samba installation." fi } # install_manilaclient - Collect source and prepare # In order to install from git, add LIBS_FROM_GIT="python-manilaclient" # to local.conf function install_manilaclient { if use_library_from_git "python-manilaclient"; then git_clone_by_name "python-manilaclient" setup_dev_lib "python-manilaclient" else pip_install python-manilaclient fi if [[ "$GLOBAL_VENV" == "True" ]]; then sudo ln -sf /opt/stack/data/venv/bin/manila /usr/local/bin fi } # install_manila - Collect source and prepare function install_manila { setup_develop $MANILA_DIR if is_service_enabled m-shr; then if [[ ! $(systemctl is-active nfs-ganesha.service) == 'active' ]] ; then if [ "$SHARE_DRIVER" != "manila.share.drivers.cephfs.driver.CephFSDriver" ] ; then _install_nfs_and_samba fi fi if [ "$SHARE_DRIVER" == "manila.share.drivers.zfsonlinux.driver.ZFSonLinuxShareDriver" ]; then if [[ $(sudo zfs list &> /dev/null && sudo zpool list &> /dev/null || echo 'absent') == 'absent' ]]; then # ZFS not found, try to install it if is_ubuntu; then apt_get install -y zfsutils-linux zfs-dkms else echo "Manila Devstack plugin supports installation "\ "of ZFS packages only for 'Ubuntu' distros. "\ "Please, install it first by other means or add its support "\ "for your distro." exit 1 fi sudo modprobe zfs fi check_nfs_kernel_service_state_ubuntu elif [ "$SHARE_DRIVER" == $MANILA_CONTAINER_DRIVER ]; then if is_ubuntu; then echo "Installing docker...." install_docker_ubuntu echo "Importing docker image" import_docker_service_image_ubuntu elif is_fedora; then echo "Installing docker...." install_docker_fedora echo "Importing docker image" # TODO(tbarron): See if using a fedora container image # is faster/smaller because of fewer extra dependencies. import_docker_service_image_ubuntu else echo "Manila Devstack plugin does not support Container Driver on"\ " distros other than Ubuntu or Fedora." exit 1 fi fi fi } #configure_samba - Configure node as Samba server function configure_samba { if [ "$SHARE_DRIVER" == "manila.share.drivers.lvm.LVMShareDriver" ]; then # TODO(vponomaryov): add here condition for ZFSonLinux driver too # when it starts to support SAMBA samba_daemon_name=smbd if is_service_enabled m-shr; then if is_fedora; then samba_daemon_name=smb fi sudo service $samba_daemon_name restart || echo "Couldn't restart '$samba_daemon_name' service" fi if [[ -e /usr/share/samba/smb.conf ]]; then sudo cp /usr/share/samba/smb.conf $SMB_CONF fi sudo chown $STACK_USER -R /etc/samba iniset $SMB_CONF global include registry iniset $SMB_CONF global security user if [ ! -d "$SMB_PRIVATE_DIR" ]; then sudo mkdir $SMB_PRIVATE_DIR sudo touch $SMB_PRIVATE_DIR/secrets.tdb fi for backend_name in ${MANILA_ENABLED_BACKENDS//,/ }; do iniset $MANILA_CONF $backend_name driver_handles_share_servers False iniset $MANILA_CONF $backend_name lvm_share_export_ips $MANILA_LVM_SHARE_EXPORT_IPS done iniset $MANILA_CONF DEFAULT data_node_access_ips $HOST_IP fi } # start_manila_api - starts manila API services and checks its availability function start_manila_api { echo "Deploying with UWSGI" run_process m-api "$(which uwsgi) --ini $MANILA_UWSGI_CONF --procname-prefix manila-api" echo "Waiting for Manila API to start..." if ! wait_for_service $SERVICE_TIMEOUT $MANILA_ENDPOINT_BASE; then die $LINENO "Manila API did not start" fi # Start proxies if enabled # # If tls-proxy is enabled, a generic http-services-tls-proxy will be set up # to handle tls-termination to manila as well as all the other https # services, we don't need to create our own. if is_service_enabled tls-proxy; then start_tls_proxy manila '*' $MANILA_SERVICE_PORT $MANILA_SERVICE_HOST $MANILA_SERVICE_PORT_INT fi } # start_rest_of_manila - starts non-api manila services function start_rest_of_manila { run_process m-shr "$MANILA_BIN_DIR/manila-share --config-file $MANILA_CONF" run_process m-sch "$MANILA_BIN_DIR/manila-scheduler --config-file $MANILA_CONF" run_process m-dat "$MANILA_BIN_DIR/manila-data --config-file $MANILA_CONF" } # start_manila - start all manila services. This function is kept for compatibility # reasons with old approach. function start_manila { start_manila_api start_rest_of_manila } # stop_manila - Stop running processes function stop_manila { local serv # Kill all other manila processes for serv in m-api m-sch m-shr m-dat; do stop_process $serv done } # update_tempest - Function used for updating Tempest config if Tempest service enabled function update_tempest { if is_service_enabled tempest; then if [[ "$(trueorfalse False MANILA_SETUP_IPV6)" == "True" ]]; then # The public network was created by us, so set it explicitly in # tempest.conf public_net_id=$(openstack --os-cloud devstack-admin network list --name $PUBLIC_NETWORK_NAME -f value -c ID ) iniset $TEMPEST_CONFIG network public_network_id $public_net_id fi TEMPEST_CONFIG=${TEMPEST_CONFIG:-$TEMPEST_DIR/etc/tempest.conf} if [ $(trueorfalse False MANILA_USE_SERVICE_INSTANCE_PASSWORD) == True ]; then iniset $TEMPEST_CONFIG share image_password $MANILA_SERVICE_INSTANCE_PASSWORD fi iniset $TEMPEST_CONFIG share image_with_share_tools $MANILA_SERVICE_IMAGE_NAME iniset $TEMPEST_CONFIG enforce_scope manila "$MANILA_ENFORCE_NEW_DEFAULTS" # If testing a stable branch, we need to ensure we're testing with supported # API micro-versions; so set the versions from code if we're not testing the # master branch. If we're testing master, we'll allow manila-tempest-plugin # (which is branchless) tell us what versions it wants to test. if [[ "$TARGET_BRANCH" != "master" ]]; then # Grab the supported API micro-versions from the code _DEFAULT_MIN_VERSION=$(openstack --os-cloud devstack versions show --service sharev2 -c 'Min Microversion' --status CURRENT -f value) _DEFAULT_MAX_VERSION=$(openstack --os-cloud devstack versions show --service sharev2 -c 'Max Microversion' --status CURRENT -f value) # Override the *_api_microversion tempest options if present MANILA_TEMPEST_MIN_API_MICROVERSION=${MANILA_TEMPEST_MIN_API_MICROVERSION:-$_DEFAULT_MIN_VERSION} MANILA_TEMPEST_MAX_API_MICROVERSION=${MANILA_TEMPEST_MAX_API_MICROVERSION:-$_DEFAULT_MAX_VERSION} # Set these options in tempest.conf iniset $TEMPEST_CONFIG share min_api_microversion $MANILA_TEMPEST_MIN_API_MICROVERSION iniset $TEMPEST_CONFIG share max_api_microversion $MANILA_TEMPEST_MAX_API_MICROVERSION fi fi } function install_docker_ubuntu { sudo apt-get update install_package apparmor install_package docker.io } function install_docker_fedora { install_package docker sudo systemctl enable docker sudo systemctl start docker } function download_image { local image_url=$1 local image image_fname image_fname=`basename "$image_url"` if [[ $image_url != file* ]]; then # Downloads the image (uec ami+akistyle), then extracts it. if [[ ! -f $FILES/$image_fname || "$(stat -c "%s" $FILES/$image_fname)" = "0" ]]; then wget --progress=dot:giga -c $image_url -O $FILES/$image_fname if [[ $? -ne 0 ]]; then echo "Not found: $image_url" return fi fi image="$FILES/${image_fname}" else # File based URL (RFC 1738): ``file://host/path`` # Remote files are not considered here. # unix: ``file:///home/user/path/file`` # windows: ``file:///C:/Documents%20and%20Settings/user/path/file`` image=$(echo $image_url | sed "s/^file:\/\///g") if [[ ! -f $image || "$(stat -c "%s" $image)" == "0" ]]; then echo "Not found: $image_url" return fi fi } function import_docker_service_image_ubuntu { if [[ $MANILA_DOCKER_IMAGE_URL == *"/"*":"* ]] || [[ $MANILA_DOCKER_IMAGE_URL == *"/"*"/"* ]]; then # Registry reference (e.g., quay.io/org/image:tag) if [[ "$(sudo docker images -q $MANILA_DOCKER_IMAGE_URL)" == "" ]]; then sudo docker pull "$MANILA_DOCKER_IMAGE_URL" fi sudo docker tag "$MANILA_DOCKER_IMAGE_URL" manila-docker-container else # Tarball URL (http/https/file) GZIPPED_IMG_NAME=$(basename "$MANILA_DOCKER_IMAGE_URL") IMG_NAME_LOAD=${GZIPPED_IMG_NAME%.*} LOCAL_IMG_NAME=${IMG_NAME_LOAD%.*} if [[ "$(sudo docker images -q $LOCAL_IMG_NAME)" == "" ]]; then download_image $MANILA_DOCKER_IMAGE_URL if [[ $MANILA_DOCKER_IMAGE_URL == file* ]]; then local src_path src_path=$(echo "$MANILA_DOCKER_IMAGE_URL" | sed "s|^file://||") cp "$src_path" "$FILES/$GZIPPED_IMG_NAME" fi gzip -d "$FILES/$GZIPPED_IMG_NAME" sudo docker load --input "$FILES/$IMG_NAME_LOAD" fi fi } function remove_docker_service_image { sudo docker rmi $MANILA_DOCKER_IMAGE_ALIAS } function install_libraries { if [ $(trueorfalse True RUN_MANILA_HOST_ASSISTED_MIGRATION_TESTS) == True ]; then if is_ubuntu; then install_package nfs-common else install_package nfs-utils fi fi } function allow_host_ports_for_share_mounting { if [[ $MANILA_ENABLED_SHARE_PROTOCOLS =~ NFS ]]; then # 111 and 2049 are for rpcbind and NFS # Other ports are for NFSv3 statd, mountd and lockd daemons MANILA_TCP_PORTS=(2049 111 32803 892 875 662) MANILA_UDP_PORTS=(111 32769 892 875 662) fi if [[ $MANILA_ENABLED_SHARE_PROTOCOLS =~ CEPHFS ]]; then # clients need access to the ceph daemons MANILA_TCP_PORTS=(${MANILA_TCP_PORTS[*]} 6789 6800:7300) fi if [[ $MANILA_ENABLED_SHARE_PROTOCOLS =~ LUSTRE ]]; then MANILA_TCP_PORTS=(${MANILA_TCP_PORTS[*]} 988) fi if [[ -n "${MANILA_TCP_PORTS+x}" || -n "${MANILA_UDP_PORTS+x}" ]]; then for ipcmd in iptables ip6tables; do sudo $ipcmd -N manila-storage sudo $ipcmd -I INPUT 1 -j manila-storage for port in ${MANILA_TCP_PORTS[*]}; do sudo $ipcmd -A manila-storage -m tcp -p tcp --dport $port -j ACCEPT done for port in ${MANILA_UDP_PORTS[*]}; do sudo $ipcmd -A manila-storage -m udp -p udp --dport $port -j ACCEPT done done fi } function setup_ipv6 { # This will fail with multiple default routes and is not needed in CI # but may be useful when developing with devstack locally if [ $(trueorfalse False MANILA_RESTORE_IPV6_DEFAULT_ROUTE) == True ]; then # save IPv6 default route to add back later after enabling forwarding local default_route=$(ip -6 route | grep default | cut -d ' ' -f1,2,3,4,5) fi # make sure those system values are set sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0 sudo sysctl -w net.ipv6.conf.all.accept_ra=2 sudo sysctl -w net.ipv6.conf.all.forwarding=1 # Disable in-band as our communication is only internal sudo ovs-vsctl set Bridge $PUBLIC_BRIDGE other_config:disable-in-band=true # Create address scopes and subnet pools openstack --os-cloud devstack-admin address scope create --share --ip-version 4 scope-v4 openstack --os-cloud devstack-admin address scope create --share --ip-version 6 scope-v6 openstack --os-cloud devstack-admin subnet pool create $SUBNETPOOL_NAME_V4 --default-prefix-length $SUBNETPOOL_SIZE_V4 --pool-prefix $SUBNETPOOL_PREFIX_V4 --address-scope scope-v4 --default --share openstack --os-cloud devstack-admin subnet pool create $SUBNETPOOL_NAME_V6 --default-prefix-length $SUBNETPOOL_SIZE_V6 --pool-prefix $SUBNETPOOL_PREFIX_V6 --address-scope scope-v6 --default --share # Create example private network and router openstack --os-cloud devstack-admin router create $Q_ROUTER_NAME openstack --os-cloud devstack-admin network create $PRIVATE_NETWORK_NAME openstack --os-cloud devstack-admin subnet create --ip-version 6 --use-default-subnet-pool --ipv6-address-mode $IPV6_ADDRESS_MODE --ipv6-ra-mode $IPV6_RA_MODE --network $PRIVATE_NETWORK_NAME $IPV6_PRIVATE_SUBNET_NAME openstack --os-cloud devstack-admin subnet create --ip-version 4 --use-default-subnet-pool --network $PRIVATE_NETWORK_NAME $PRIVATE_SUBNET_NAME openstack --os-cloud devstack-admin router add subnet $Q_ROUTER_NAME $IPV6_PRIVATE_SUBNET_NAME openstack --os-cloud devstack-admin router add subnet $Q_ROUTER_NAME $PRIVATE_SUBNET_NAME # Create public network openstack --os-cloud devstack-admin network create $PUBLIC_NETWORK_NAME --external --default --provider-network-type flat --provider-physical-network $PUBLIC_PHYSICAL_NETWORK local public_gateway_ipv6=$(openstack --os-cloud devstack-admin subnet create $IPV6_PUBLIC_SUBNET_NAME --ip-version 6 --network $PUBLIC_NETWORK_NAME --subnet-pool $SUBNETPOOL_NAME_V6 --no-dhcp -c gateway_ip -f value) local public_gateway_ipv4=$(openstack --os-cloud devstack-admin subnet create $PUBLIC_SUBNET_NAME --ip-version 4 --network $PUBLIC_NETWORK_NAME --subnet-range $FLOATING_RANGE --no-dhcp -c gateway_ip -f value) # Set router to use public network openstack --os-cloud devstack-admin router set --external-gateway $PUBLIC_NETWORK_NAME $Q_ROUTER_NAME # Configure interfaces due to NEUTRON_CREATE_INITIAL_NETWORKS=False local ipv4_cidr_len=${FLOATING_RANGE#*/} sudo ip -6 addr add "$public_gateway_ipv6"/$SUBNETPOOL_SIZE_V6 dev $PUBLIC_BRIDGE sudo ip addr add "$public_gateway_ipv4"/"$ipv4_cidr_len" dev $PUBLIC_BRIDGE # Enabling interface is needed due to NEUTRON_CREATE_INITIAL_NETWORKS=False sudo ip link set $PUBLIC_BRIDGE up # Allocate a separate IPv6 address on the public network for FRR's BGP # identity so that FRR and os-ken (neutron BGP speaker) have distinct # addresses - required for BGP peering on a single-host devstack. local frr_bgp_ipv6=$(openstack --os-cloud devstack-admin port create \ frr-bgp-peer --network $PUBLIC_NETWORK_NAME \ --fixed-ip subnet=$IPV6_PUBLIC_SUBNET_NAME \ -c fixed_ips -f value | grep -oE '[0-9a-f]+:[:0-9a-f]+') sudo ip -6 addr add "$frr_bgp_ipv6"/$SUBNETPOOL_SIZE_V6 dev $PUBLIC_BRIDGE # Diagnostic: show kernel source address selection for connections to FRR echo "=== Source address for connections to FRR ($frr_bgp_ipv6) ===" ip -6 route get $frr_bgp_ipv6 if [ "$SHARE_DRIVER" == "manila.share.drivers.lvm.LVMShareDriver" ]; then for backend_name in ${MANILA_ENABLED_BACKENDS//,/ }; do iniset $MANILA_CONF $backend_name lvm_share_export_ips $public_gateway_ipv4,$public_gateway_ipv6 done iniset $MANILA_CONF DEFAULT data_node_access_ips $public_gateway_ipv4 fi if [ "$SHARE_DRIVER" == "manila.share.drivers.cephfs.driver.CephFSDriver" ]; then for backend_name in ${MANILA_ENABLED_BACKENDS//,/ }; do iniset $MANILA_CONF $backend_name cephfs_ganesha_export_ips $public_gateway_ipv4,$public_gateway_ipv6 done iniset $MANILA_CONF DEFAULT data_node_access_ips $public_gateway_ipv4 fi # install FRR for setting up the host routes dynamically install_package frr # Remove the default integrated config so FRR reads per-daemon # config files (bgpd.conf, zebra.conf) in traditional mode. sudo rm -f /etc/frr/frr.conf # set FRR daemons ( echo "zebra=yes" echo "bgpd=yes" echo "ospfd=no" echo "ospf6d=no" echo "ripd=no" echo "ripngd=no" echo "isisd=no" echo "babeld=no" # Explicitly listen on all addresses (IPv4+IPv6); Debian's default # daemons file restricts bgpd to 127.0.0.1 which blocks IPv6 peering. echo 'zebra_options=" -A 127.0.0.1 -s 90000000"' echo 'bgpd_options=" -A ::"' ) | sudo tee /etc/frr/daemons > /dev/null # set FRR zebra.conf ( echo "hostname dsvm" echo "password openstack" echo "log syslog informational" echo "log file $DEST/logs/frr/zebra.log" ) | sudo tee /etc/frr/zebra.conf > /dev/null # set FRR vtysh.conf ( echo "service integrated-vtysh-config" ) | sudo tee /etc/frr/vtysh.conf > /dev/null # set FRR bgpd.conf # Use "bgp listen range" with a peer-group instead of a static neighbor # so FRR accepts BGP connections from any address in the public subnet. # This avoids source-address-matching issues on single-host devstack # where os-ken and FRR share the same network namespace. local public_subnet_cidr=$(openstack --os-cloud devstack-admin \ subnet show $IPV6_PUBLIC_SUBNET_NAME -c cidr -f value) ( echo "log syslog informational" echo "log file $DEST/logs/frr/bgpd.log" echo "router bgp 200" echo " bgp router-id 1.2.3.4" echo " no bgp ebgp-requires-policy" echo " timers bgp 10 30" echo " neighbor OSKEN peer-group" echo " neighbor OSKEN remote-as 100" echo " neighbor OSKEN timers 10 30" echo " bgp listen range $public_subnet_cidr peer-group OSKEN" echo " address-family ipv6 unicast" echo " neighbor OSKEN activate" echo " exit-address-family" echo "!" echo "debug bgp events" echo "debug bgp filters" echo "debug bgp fsm" echo "debug bgp keepalives" echo "debug bgp updates" ) | sudo tee /etc/frr/bgpd.conf > /dev/null # FRR logging — write directly under $DEST/logs so Zuul collects them sudo mkdir -p $DEST/logs/frr sudo chown frr:frr $DEST/logs/frr sudo systemctl enable frr sudo systemctl restart frr # log the systemd status and BGP diagnostics sudo systemctl status frr sleep 2 sudo ss -tlnp '( sport = 179 )' sudo vtysh -c "show bgp summary" sudo cat /etc/frr/bgpd.conf # This will fail with mutltiple default routes and is not needed in CI # but may be useful when developing with devstack locally if [ $(trueorfalse False MANILA_RESTORE_IPV6_DEFAULT_ROUTE) == True ]; then # add default IPv6 route back if ! [[ -z $default_route ]]; then # "replace" should ignore "RTNETLINK answers: File exists" # error if the route wasn't flushed by the bgp setup we did earlier. sudo ip -6 route replace $default_route fi fi } function setup_bgp_for_ipv6 { # FRR's separate BGP identity address (allocated in setup_ipv6) local frr_bgp_ipv6=$(openstack --os-cloud devstack-admin port show \ frr-bgp-peer -c fixed_ips -f value | grep -oE '[0-9a-f]+:[:0-9a-f]+') openstack --os-cloud devstack-admin bgp speaker create --ip-version 6 --local-as 100 bgpspeaker openstack --os-cloud devstack-admin bgp speaker add network bgpspeaker $PUBLIC_NETWORK_NAME openstack --os-cloud devstack-admin bgp peer create --peer-ip $frr_bgp_ipv6 --remote-as 200 bgppeer openstack --os-cloud devstack-admin bgp speaker add peer bgpspeaker bgppeer } # Main dispatcher if [[ "$1" == "stack" && "$2" == "install" ]]; then echo_summary "Installing Manila Client" install_manilaclient echo_summary "Installing Manila" install_manila elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then echo_summary "Configuring Manila" configure_manila echo_summary "Initializing Manila" init_manila echo_summary "Installing extra libraries" install_libraries echo_summary "Creating Manila entities for auth service" create_manila_accounts # Cinder config update if is_service_enabled cinder && [[ -n "$CINDER_OVERSUBSCRIPTION_RATIO" ]]; then CINDER_CONF=${CINDER_CONF:-/etc/cinder/cinder.conf} iniset $CINDER_CONF DEFAULT max_over_subscription_ratio $CINDER_OVERSUBSCRIPTION_RATIO fi elif [[ "$1" == "stack" && "$2" == "extra" ]]; then if is_service_enabled nova; then echo_summary "Creating Manila service flavor" create_manila_service_flavor echo_summary "Creating Manila service security group" create_manila_service_secgroup fi # Skip image downloads when disabled. # This way vendor Manila driver CI tests can skip # this potentially long and unnecessary download. if [ "$MANILA_SERVICE_IMAGE_ENABLED" = "True" ]; then echo_summary "Creating Manila service image" create_manila_service_image else echo_summary "Skipping download of Manila service image" fi if is_service_enabled nova; then echo_summary "Creating Manila service keypair" create_manila_service_keypair fi echo_summary "Configure Samba server" configure_samba echo_summary "Configuring IPv6" if [ $(trueorfalse False MANILA_SETUP_IPV6) == True ]; then setup_ipv6 fi echo_summary "Starting Manila API" start_manila_api # Workaround for bug #1660304 if [ "$SHARE_DRIVER" != "manila.share.drivers.generic.GenericShareDriver" ]; then echo_summary "Starting rest of Manila services - scheduler, share and data" start_rest_of_manila fi echo_summary "Creating Manila default share type" create_default_share_type echo_summary "Creating Manila default share group type" create_default_share_group_type echo_summary "Creating Manila custom share types" create_custom_share_types echo_summary "Manila UI is no longer enabled by default. \ Add enable_plugin manila-ui https://opendev.org/openstack/manila-ui \ to your local.conf file to enable Manila UI" elif [[ "$1" == "stack" && "$2" == "test-config" ]]; then ########################################################################### # NOTE(vponomaryov): Workaround for bug #1660304 # We are able to create Nova VMs now only when last Nova step is performed # which is registration of cell0. It is registered as last action in # "post-extra" section. if is_service_enabled nova; then echo_summary "Creating Manila service VMs for generic driver \ backends for which handlng of share servers is disabled." create_service_share_servers fi if [ "$SHARE_DRIVER" == "manila.share.drivers.generic.GenericShareDriver" ]; then echo_summary "Starting rest of Manila services - scheduler, share and data" start_rest_of_manila fi ########################################################################### echo_summary "Update Tempest config" update_tempest if [[ "$(trueorfalse False MANILA_ALLOW_NAS_SERVER_PORTS_ON_HOST)" == "True" ]]; then echo_summary "Allowing IPv4 and IPv6 access to NAS ports on the host" allow_host_ports_for_share_mounting fi if [[ "$(trueorfalse False MANILA_SETUP_IPV6)" == "True" ]]; then # Now that all plugins are loaded, setup BGP echo_summary "Setting up BGP speaker to advertise routes to project networks" setup_bgp_for_ipv6 fi fi if [[ "$1" == "unstack" ]]; then stop_manila cleanup_manila fi if [[ "$1" == "clean" ]]; then stop_manila cleanup_manila sudo rm -rf /etc/manila fi # Restore xtrace $XTRACE ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.836236 manila-23.0.0.0rc1/devstack/settings0000664000175000017500000002515115251045254016021 0ustar00zuulzuul# Setting configuration file for manila services # ---------------------------------------------- # 1) It is possible to set any custom opt to any config group using following: # $ export MANILA_OPTGROUP_foo_bar=value # where 'foo' is name of config group and 'bar' is name of option. # # 2) 'MANILA_CONFIGURE_GROUPS' contains list of config group names used to create # config groups, but 'MANILA_ENABLED_BACKENDS' is used to set config groups as # Manila share back ends. Both can be set like following: # $ export MANILA_ENABLED_BACKENDS=foo,bar # where 'foo' and 'bar' are names of config groups with opts for some share # drivers. By default they are equal. Also be attentive, if you modify both, # make sure 'MANILA_CONFIGURE_GROUPS' contains all values from # 'MANILA_ENABLED_BACKENDS'. # DEFAULT group is always defined, no need to specify it within 'MANILA_CONFIGURE_GROUPS'. # # 3) 'CINDER_OVERSUBSCRIPTION_RATIO' - manila devstack-plugin env var that is # useful for all share drivers that use Cinder. If it is set, then it will be # applied for two Cinder options: 'max_over_subscription_ratio' and # 'lvm_max_over_subscription_ratio'. Should be float. Example: # CINDER_OVERSUBSCRIPTION_RATIO=20.0 define_plugin manila # Defaults # -------- OS_CLOUD=${OS_CLOUD:-"devstack-admin"} MANILA_GIT_BASE=${MANILA_GIT_BASE:-https://opendev.org} MANILA_REPO_ROOT=${MANILA_REPO_ROOT:-openstack} # Set up default directories MANILA_DIR=${MANILA_DIR:=$DEST/manila} MANILA_LOCK_PATH=${MANILA_LOCK_PATH:=$OSLO_LOCK_PATH} MANILA_LOCK_PATH=${MANILA_LOCK_PATH:=$MANILA_DIR/manila_locks} MANILA_STATE_PATH=${MANILA_STATE_PATH:=$DATA_DIR/manila} MANILA_CONF_DIR=${MANILA_CONF_DIR:-/etc/manila} MANILA_CONF=$MANILA_CONF_DIR/manila.conf MANILA_API_PASTE_INI=$MANILA_CONF_DIR/api-paste.ini # client settings GITREPO["python-manilaclient"]=${MANILA_GIT_BASE}/${MANILA_REPO_ROOT}/python-manilaclient GITDIR["python-manilaclient"]=${MANILACLIENT_DIR:-$DEST/python-manilaclient} GITBRANCH["python-manilaclient"]=${MANILACLIENT_BRANCH:-master} # barbican defaults BARBICAN_ENDPOINT_TYPE=${BARBICAN_ENDPOINT_TYPE:-internal} KEY_MANAGER_BACKEND=${KEY_MANAGER_BACKEND:-barbican} BARBICAN_KEYSTONE_ENDPOINT=${BARBICAN_KEYSTONE_ENDPOINT:-$KEYSTONE_SERVICE_URI} # Set this to False to leave "default_share_type" and # "default_share_group_type" configuration options empty. MANILA_CONFIGURE_DEFAULT_TYPES=${MANILA_CONFIGURE_DEFAULT_TYPES:-True} MANILA_DEFAULT_SHARE_TYPE=${MANILA_DEFAULT_SHARE_TYPE:-default} # MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS is expected to contain extra specs key-value pairs, # that should be assigned to default share type. Both - qualified and unqualified extra specs are supported. # Pairs are separated by spaces, value is assigned to key using sign of equality. Examples: # MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS='foo=bar' # MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS='foo=bar quuz=xyzzy' # MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS='foo=bar quuz=xyzzy fakeprefix:baz=waldo' MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS=${MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS:-''} MANILA_DHSS_TRUE_SHARE_TYPE_EXTRA_SPECS=${MANILA_DHSS_TRUE_SHARE_TYPE_EXTRA_SPECS:-$MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS} MANILA_DHSS_FALSE_SHARE_TYPE_EXTRA_SPECS=${MANILA_DHSS_FALSE_SHARE_TYPE_EXTRA_SPECS:-$MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS} # Share groups and their specs MANILA_DEFAULT_SHARE_GROUP_TYPE=${MANILA_DEFAULT_SHARE_GROUP_TYPE:-default} # MANILA_DEFAULT_SHARE_GROUP_TYPE_SPECS is expected to contain key-value pairs, # that should be assigned to default share group type. Both - qualified and unqualified specs are supported. # Pairs are separated by spaces, value is assigned to key using sign of equality. Examples: # MANILA_DEFAULT_SHARE_GROUP_TYPE_SPECS='foo=bar' # MANILA_DEFAULT_SHARE_GROUP_TYPE_SPECS='foo=bar quuz=xyzzy' # MANILA_DEFAULT_SHARE_GROUP_TYPE_SPECS='foo=bar quuz=xyzzy fakeprefix:baz=waldo' MANILA_DEFAULT_SHARE_GROUP_TYPE_SPECS=${MANILA_DEFAULT_SHARE_GROUP_TYPE_SPECS:-''} # Public facing bits MANILA_SERVICE_HOST=${MANILA_SERVICE_HOST:-$SERVICE_HOST} MANILA_SERVICE_PORT=${MANILA_SERVICE_PORT:-8786} MANILA_SERVICE_PORT_INT=${MANILA_SERVICE_PORT_INT:-18786} MANILA_SERVICE_PROTOCOL=${MANILA_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL} MANILA_ENDPOINT_BASE=$MANILA_SERVICE_PROTOCOL://$MANILA_SERVICE_HOST:$MANILA_SERVICE_PORT # Support entry points installation of console scripts if [[ -d $MANILA_DIR/bin ]]; then MANILA_BIN_DIR=$MANILA_DIR/bin else MANILA_BIN_DIR=$(get_python_exec_prefix) fi # Common opts SHARE_NAME_PREFIX=${SHARE_NAME_PREFIX:-share-} MANILA_ENABLED_SHARE_PROTOCOLS=${ENABLED_SHARE_PROTOCOLS:-"NFS,CIFS"} MANILA_ENABLED_BACKENDS=${MANILA_ENABLED_BACKENDS:-generic1,generic2} MANILA_SCHEDULER_DRIVER=${MANILA_SCHEDULER_DRIVER:-manila.scheduler.drivers.filter.FilterScheduler} MANILA_SERVICE_SECGROUP="manila-service" # Following env var defines whether to apply downgrade migrations setting up DB or not. # If it is set to False, then only 'upgrade' migrations will be applied. # If it is set to True, then will be applied 'upgrade', 'downgrade' and 'upgrade' # migrations again. MANILA_USE_DOWNGRADE_MIGRATIONS=${MANILA_USE_DOWNGRADE_MIGRATIONS:-"False"} MANILA_WSGI=manila.wsgi.api:application MANILA_UWSGI_CONF=$MANILA_CONF_DIR/manila-uwsgi.ini MANILA_ENDPOINT_BASE=$MANILA_SERVICE_PROTOCOL://$MANILA_SERVICE_HOST/share # Common info for Generic driver(s) SHARE_DRIVER=${SHARE_DRIVER:-manila.share.drivers.generic.GenericShareDriver} eval USER_HOME=~ MANILA_KEY_FORMAT=${MANILA_KEY_FORMAT:-"ecdsa"} MANILA_PATH_TO_PUBLIC_KEY=${MANILA_PATH_TO_PUBLIC_KEY:-"$USER_HOME/.ssh/id_${MANILA_KEY_FORMAT}.pub"} MANILA_PATH_TO_PRIVATE_KEY=${MANILA_PATH_TO_PRIVATE_KEY:-"$USER_HOME/.ssh/id_${MANILA_KEY_FORMAT}"} MANILA_SERVICE_KEYPAIR_NAME=${MANILA_SERVICE_KEYPAIR_NAME:-"manila-service"} MANILA_SERVICE_INSTANCE_USER=${MANILA_SERVICE_INSTANCE_USER:-"manila"} MANILA_SERVICE_IMAGE_URL=${MANILA_SERVICE_IMAGE_URL:-"http://tarballs.openstack.org/manila-image-elements/images/manila-service-image-master.qcow2"} MANILA_SERVICE_IMAGE_NAME=${MANILA_SERVICE_IMAGE_NAME:-"manila-service-image-master"} MANILA_USE_SCHEDULER_CREATING_SHARE_FROM_SNAPSHOT=${MANILA_USE_SCHEDULER_CREATING_SHARE_FROM_SNAPSHOT:-"False"} # Third party CI Vendors should set this to false to skip the service image download MANILA_SERVICE_IMAGE_ENABLED=$(trueorfalse True MANILA_SERVICE_IMAGE_ENABLED) MANILA_USE_SERVICE_INSTANCE_PASSWORD=${MANILA_USE_SERVICE_INSTANCE_PASSWORD:-"False"} MANILA_SERVICE_INSTANCE_PASSWORD=${MANILA_SERVICE_INSTANCE_PASSWORD:-"manila"} MANILA_SERVICE_VM_FLAVOR_REF=${MANILA_SERVICE_VM_FLAVOR_REF:-100} MANILA_SERVICE_VM_FLAVOR_NAME=${MANILA_SERVICE_VM_FLAVOR_NAME:-"manila-service-flavor"} MANILA_SERVICE_VM_FLAVOR_RAM=${MANILA_SERVICE_VM_FLAVOR_RAM:-512} MANILA_SERVICE_VM_FLAVOR_DISK=${MANILA_SERVICE_VM_FLAVOR_DISK:-5} MANILA_SERVICE_VM_FLAVOR_VCPUS=${MANILA_SERVICE_VM_FLAVOR_VCPUS:-1} # Enable this option when using a storage backend that is on the same host # as the devstack host, these iptable rules are necessary to allow mounting # shares from the host MANILA_ALLOW_NAS_SERVER_PORTS_ON_HOST=${MANILA_ALLOW_NAS_SERVER_PORTS_ON_HOST:-False} # Options for configuration of LVM share driver SHARE_BACKING_FILE_SIZE=${SHARE_BACKING_FILE_SIZE:-8400M} SHARE_GROUP=${SHARE_GROUP:-lvm-shares} MANILA_MNT_DIR=${MANILA_MNT_DIR:=$MANILA_STATE_PATH/mnt} SMB_CONF=${SMB_CONF:-/etc/samba/smb.conf} SMB_PRIVATE_DIR=${SMB_PRIVATE_DIR:-/var/lib/samba/private} CONFIGURE_BACKING_FILE=${CONFIGURE_BACKING_FILE:-"True"} MANILA_LVM_SHARE_EXPORT_IPS=${MANILA_LVM_SHARE_EXPORT_IPS:-$HOST_IP} # Options for replication MANILA_REPLICA_STATE_UPDATE_INTERVAL=${MANILA_REPLICA_STATE_UPDATE_INTERVAL:-300} # Options for configuration of ZFSonLinux driver # 'MANILA_ZFSONLINUX_ZPOOL_SIZE' defines size of each zpool. That value # will be used for creation of sparse files. MANILA_ZFSONLINUX_ZPOOL_SIZE=${MANILA_ZFSONLINUX_ZPOOL_SIZE:-"30G"} MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR=${MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR:-"/opt/stack/data/manila/zfsonlinux"} MANILA_ZFSONLINUX_SHARE_EXPORT_IP=${MANILA_ZFSONLINUX_SHARE_EXPORT_IP:-$HOST_IP} MANILA_ZFSONLINUX_SERVICE_IP=${MANILA_ZFSONLINUX_SERVICE_IP:-$HOST_IP} MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS=${MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS:-"compression=gzip"} MANILA_ZFSONLINUX_USE_SSH=${MANILA_ZFSONLINUX_USE_SSH:-"False"} MANILA_ZFSONLINUX_SSH_USERNAME=${MANILA_ZFSONLINUX_SSH_USERNAME:-$STACK_USER} # If MANILA_ZFSONLINUX_REPLICATION_DOMAIN is set to empty value then # Manila will consider replication feature as disabled for ZFSonLinux share driver. MANILA_ZFSONLINUX_REPLICATION_DOMAIN=${MANILA_ZFSONLINUX_REPLICATION_DOMAIN:-"ZFSonLinux"} # Container Driver MANILA_CONTAINER_DRIVER=${MANILA_CONTAINER_DRIVER:-"manila.share.drivers.container.driver.ContainerShareDriver"} MANILA_DOCKER_IMAGE_ALIAS=${MANILA_DOCKER_IMAGE_ALIAS:-"manila_docker_image"} MANILA_CONTAINER_VOLUME_GROUP_NAME=${MANILA_CONTAINER_VOLUME_GROUP_NAME:-"manila_docker_volumes"} MANILA_DOCKER_IMAGE_URL=${MANILA_DOCKER_IMAGE_URL:-"quay.io/openstack-manila/manila-docker-container:latest"} # Network Plugin MANILA_NETWORK_API_CLASS=${MANILA_NETWORK_API_CLASS:-"manila.network.neutron.neutron_network_plugin.NeutronBindNetworkPlugin"} MANILA_NEUTRON_VNIC_TYPE=${MANILA_NEUTRON_VNIC_TYPE:-"normal"} # SSH TIMEOUT MANILA_SSH_TIMEOUT=${MANILA_SSH_TIMEOUT:-180} # Share and snapshot deferred deletion task interval MANILA_DEFERRED_DELETE_TASK_INTERVAL=${MANILA_DEFERRED_DELETE_TASK_INTERVAL:-10} # Admin Network setup MANILA_ADMIN_NET_RANGE=${MANILA_ADMIN_NET_RANGE:=10.2.5.0/24} # Data Service IP configuration MANILA_DATA_NODE_IP=${MANILA_DATA_NODE_IP:=$MANILA_ADMIN_NET_RANGE} # Data Service copy validation MANILA_DATA_COPY_CHECK_HASH=${MANILA_DATA_COPY_CHECK_HASH:=True} # Manila IPv6 Setup flag MANILA_SETUP_IPV6=${MANILA_SETUP_IPV6:=False} MANILA_RESTORE_IPV6_DEFAULT_ROUTE=${MANILA_RESTORE_IPV6_DEFAULT_ROUTE:=True} # This option controls whether or not to use the new defaults when evaluating policies. Learn more: # https://docs.openstack.org/oslo.policy/latest/configuration/index.html#oslo_policy.enforce_new_defaults # MANILA_ENFORCE_SCOPE is a deprecated alias for MANILA_ENFORCE_NEW_DEFAULTS. MANILA_ENFORCE_NEW_DEFAULTS=$(trueorfalse True MANILA_ENFORCE_NEW_DEFAULTS) # Support the deprecated MANILA_ENFORCE_SCOPE variable as a fallback. if [[ -n "${MANILA_ENFORCE_SCOPE}" ]]; then MANILA_ENFORCE_NEW_DEFAULTS=$(trueorfalse True MANILA_ENFORCE_SCOPE) fi # Enable manila services # ---------------------- # We have to add Manila to enabled services for screen_it to work # It consists of 4 parts: m-api (API), m-shr (Share), m-sch (Scheduler) # and m-dat (Data). enable_service manila enable_service m-api enable_service m-shr enable_service m-sch enable_service m-dat ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.009185 manila-23.0.0.0rc1/devstack/upgrade/0000775000175000017500000000000015251045336015662 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.836236 manila-23.0.0.0rc1/devstack/upgrade/resources.sh0000775000175000017500000005354515251045254020246 0ustar00zuulzuul#!/bin/bash set -o errexit source $GRENADE_DIR/grenaderc source $GRENADE_DIR/functions source $TOP_DIR/openrc admin demo set -o xtrace ################################# Settings #################################### # Access rules data specific to first enabled backend. MANILA_GRENADE_ACCESS_TYPE=${MANILA_GRENADE_ACCESS_TYPE:-"ip"} MANILA_GRENADE_ACCESS_TO=${MANILA_GRENADE_ACCESS_TO:-"0.0.0.0/0"} # Network information that will be used in case DHSS=True driver is used # with non-single-network-plugin. MANILA_GRENADE_NETWORK_NAME=${MANILA_GRENADE_NETWORK_NAME:-"private"} MANILA_GRENADE_SUBNET_NAME=${MANILA_GRENADE_SUBNET_NAME:-"private-subnet"} # Timeout that will be used for share creation wait operation. MANILA_GRENADE_WAIT_STEP=${MANILA_GRENADE_WAIT_STEP:-"4"} MANILA_GRENADE_WAIT_TIMEOUT=${MANILA_GRENADE_WAIT_TIMEOUT:-"300"} MANILA_GRENADE_SHARE_NETWORK_NAME=${MANILA_GRENADE_SHARE_NETWORK_NAME:-"manila_grenade_share_network"} MANILA_GRENADE_SHARE_TYPE_NAME=${MANILA_GRENADE_SHARE_TYPE_NAME:-"manila_grenade_share_type"} MANILA_GRENADE_SHARE_NAME=${MANILA_GRENADE_SHARE_NAME:-"manila_grenade_share"} MANILA_GRENADE_SHARE_SNAPSHOT_NAME=${MANILA_GRENADE_SHARE_SNAPSHOT_NAME:-"manila_grenade_share_snapshot"} # Extra specs that will be set for newly created share type MANILA_GRENADE_SHARE_TYPE_SNAPSHOT_SUPPORT_EXTRA_SPEC=${MANILA_GRENADE_SHARE_TYPE_SNAPSHOT_SUPPORT_EXTRA_SPEC:-"True"} MANILA_GRENADE_SHARE_TYPE_CREATE_SHARE_FROM_SNAPSHOT_SUPPORT_EXTRA_SPEC=${MANILA_GRENADE_SHARE_TYPE_CREATE_SHARE_FROM_SNAPSHOT_SUPPORT_EXTRA_SPEC:-"True"} MANILA_GRENADE_SHARE_TYPE_REVERT_TO_SNAPSHOT_SUPPORT_EXTRA_SPEC=${MANILA_GRENADE_SHARE_TYPE_REVERT_TO_SNAPSHOT_SUPPORT_EXTRA_SPEC:-"True"} MANILA_GRENADE_SHARE_TYPE_MOUNT_SNAPSHOT_SUPPORT_EXTRA_SPEC=${MANILA_GRENADE_SHARE_TYPE_MOUNT_SNAPSHOT_SUPPORT_EXTRA_SPEC:-"True"} MANILA_CONF_DIR=${MANILA_CONF_DIR:-/etc/manila} MANILA_CONF=$MANILA_CONF_DIR/manila.conf ################################ Scenarios #################################### function scenario_1_do_share_with_rules_and_metadata { # NOTE(vponomaryov): nova-network with DHSS=True drivers is not supported # by this scenario. enabled_share_backends=$(iniget $MANILA_CONF \ DEFAULT enabled_share_backends) backend=$( echo $enabled_share_backends | cut -d',' -f 1 ) enabled_share_protocols=$(iniget $MANILA_CONF \ DEFAULT enabled_share_protocols) share_protocol=$( echo $enabled_share_protocols | cut -d',' -f 1 ) driver_handles_share_servers=$(iniget $MANILA_CONF \ $backend driver_handles_share_servers) create_share_cmd="openstack share create $share_protocol 1 " create_share_cmd+="--share-type $MANILA_GRENADE_SHARE_TYPE_NAME " create_share_cmd+="--name $MANILA_GRENADE_SHARE_NAME" resource_save manila share_protocol $share_protocol if [[ $(trueorfalse False driver_handles_share_servers) == True ]]; then share_driver=$(iniget $MANILA_CONF $backend share_driver) generic_driver='manila.share.drivers.generic.GenericShareDriver' windows_driver='manila.share.drivers.windows' windows_driver+='.windows_smb_driver.WindowsSMBDriver' network_plugin=$(iniget $MANILA_CONF $backend network_plugin) share_network_cmd="openstack share network create " share_network_cmd+="--name $MANILA_GRENADE_SHARE_NETWORK_NAME" if is_service_enabled neutron; then if [[ $share_driver == $generic_driver || \ $share_driver == $windows_driver || \ ! $network_plugin =~ 'Single' || \ ! $network_plugin =~ 'Standalone' ]]; then net_id=$(openstack network show \ $MANILA_GRENADE_NETWORK_NAME -c id -f value) subnet_id=$(openstack subnet show \ $MANILA_GRENADE_SUBNET_NAME -c id -f value) share_network_cmd+=" --neutron-net-id $net_id" share_network_cmd+=" --neutron-subnet-id $subnet_id" fi else echo 'Neutron service is disabled, creating empty share-network' fi create_share_cmd+=" --share-network $MANILA_GRENADE_SHARE_NETWORK_NAME" resource_save manila share_network $MANILA_GRENADE_SHARE_NETWORK_NAME else resource_save manila share_network 'None' fi # Create share-network eval $share_network_cmd # Create share-type openstack share type create \ $MANILA_GRENADE_SHARE_TYPE_NAME \ $driver_handles_share_servers \ --snapshot-support \ $MANILA_GRENADE_SHARE_TYPE_SNAPSHOT_SUPPORT_EXTRA_SPEC \ --create-share-from-snapshot-support \ $MANILA_GRENADE_SHARE_TYPE_CREATE_SHARE_FROM_SNAPSHOT_SUPPORT_EXTRA_SPEC \ --revert-to-snapshot-support \ $MANILA_GRENADE_SHARE_TYPE_REVERT_TO_SNAPSHOT_SUPPORT_EXTRA_SPEC \ --mount-snapshot-support \ $MANILA_GRENADE_SHARE_TYPE_MOUNT_SNAPSHOT_SUPPORT_EXTRA_SPEC # Create share eval $create_share_cmd # Wait for share creation results wait_timeout=$MANILA_GRENADE_WAIT_TIMEOUT available='false' while (( wait_timeout > 0 )) ; do current_status=$( openstack share show $MANILA_GRENADE_SHARE_NAME \ -c status -f value ) if [[ $current_status == 'available' ]]; then available='true' break elif [[ $current_status == 'creating' ]]; then ((wait_timeout-=$MANILA_GRENADE_WAIT_STEP)) sleep $MANILA_GRENADE_WAIT_STEP elif [[ $current_status == 'error' ]]; then die $LINENO "Share is in 'error' state." else die $LINENO "Should never reach this line." fi done if [[ $available == 'true' ]]; then echo "Share has been created successfully." else die $LINENO "Share timed out to reach 'available' status." fi # grab the export location export_path=$(openstack share export location list \ $MANILA_GRENADE_SHARE_NAME -c Path -f value | head -1) resource_save manila export_path $export_path # Create some metadata openstack share set --property gre=nade $MANILA_GRENADE_SHARE_NAME # Add access rules openstack share access create $MANILA_GRENADE_SHARE_NAME \ $MANILA_GRENADE_ACCESS_TYPE $MANILA_GRENADE_ACCESS_TO # Wait for access rule creation results wait_timeout=$MANILA_GRENADE_WAIT_TIMEOUT active='false' while (( wait_timeout > 0 )) ; do current_state=$( openstack share access list \ $MANILA_GRENADE_SHARE_NAME \ --access-type $MANILA_GRENADE_ACCESS_TYPE \ --access-to $MANILA_GRENADE_ACCESS_TO \ -c state -f value ) case $current_state in active) active='true' break;; creating|new|queued_to_apply|applying) ((wait_timeout-=$MANILA_GRENADE_WAIT_STEP)) sleep $MANILA_GRENADE_WAIT_STEP;; error) die $LINENO "Failed to create access rule.";; *) die $LINENO "Should never reach this line.";; esac done if [[ $active == 'true' ]]; then echo "Access rule has been created successfully." else die $LINENO "Access rule timed out to reach 'active' state." fi } function scenario_1_verify_share_with_rules_and_metadata { share_status=$(openstack share show $MANILA_GRENADE_SHARE_NAME \ -c status -f value) if [[ $share_status != "available" ]]; then die $LINENO "Share status is not 'available'. It is $share_status" fi rule_state=$(openstack share access list $MANILA_GRENADE_SHARE_NAME \ --access-type $MANILA_GRENADE_ACCESS_TYPE \ --access-to $MANILA_GRENADE_ACCESS_TO -c state -f value) if [[ $rule_state != "active" ]]; then die $LINENO "Share rule state is not 'active'. It is $rule_state" fi properties=$(openstack share show $MANILA_GRENADE_SHARE_NAME \ -c properties -f value) if [[ $properties != *"'gre': 'nade'"* ]]; then die $LINENO "Share metadata is not 'gre=nade'. Properties: $properties" fi } function scenario_1_destroy_share_with_rules_and_metadata { openstack share delete $MANILA_GRENADE_SHARE_NAME wait_timeout=$MANILA_GRENADE_WAIT_TIMEOUT found='true' while (( wait_timeout > 0 )) ; do share_status=$( openstack share show $MANILA_GRENADE_SHARE_NAME \ -c status -f value 2>/dev/null || true ) if [[ -z $share_status ]]; then found='false' break elif [[ $share_status == 'deleting' ]]; then ((wait_timeout-=$MANILA_GRENADE_WAIT_STEP)) sleep $MANILA_GRENADE_WAIT_STEP elif [[ $share_status == 'error_deleting' ]]; then die $LINENO "Share failed to be deleted." else die $LINENO "Should never reach this line." fi done if [[ $found == 'true' ]]; then die $LINENO "Share timed out to be deleted." else echo "Share has been deleted successfully." fi share_network=$(resource_get manila share_network) if [[ -n $share_network && $share_network != 'None' ]]; then openstack share network delete $MANILA_GRENADE_SHARE_NETWORK_NAME fi openstack share type delete $MANILA_GRENADE_SHARE_TYPE_NAME } ##### function scenario_2_do_attach_ss_to_sn { openstack share security service create \ ldap \ --name fake_ss_name \ --description fake_ss_description \ --dns-ip fake_dns_ip \ --server fake_server \ --domain fake_domain \ --user fake_user \ --password fake_password net_id=$(openstack network show \ $MANILA_GRENADE_NETWORK_NAME -c id -f value) subnet_id=$(openstack subnet show \ $MANILA_GRENADE_SUBNET_NAME -c id -f value) resource_save manila fake_sn_net_id $net_id resource_save manila fake_sn_subnet_id $subnet_id openstack share network create \ --name fake_sn_name \ --description fake_sn_description \ --neutron-net-id $net_id \ --neutron-subnet-id $subnet_id openstack share network set fake_sn_name \ --new-security-service fake_ss_name } function scenario_2_verify_attach_ss_to_sn { attached_security_service=$(\ openstack share security service list \ --share-network fake_sn_name -c Name -f value | \ grep "fake_ss_name") if [[ -z $attached_security_service ]] ; then die $LINENO "Security service 'fake_ss_name' is not attached "\ "to share-network 'fake_sn_name'." fi function assert { actual=$(openstack $1 $2 -c $3 -f value) if [[ $actual != $4 ]]; then die $LINENO "Field $3 for command $1 with arg $2 has "\ "value $actual, but $4 is expected." fi } expected_net_id=$(resource_get manila fake_sn_net_id) expected_subnet_id=$(resource_get manila fake_sn_subnet_id) assert "share network show" fake_sn_name description fake_sn_description # From API version 2.51, share-network-show command doesn't have # neutron_net_id and neutron_subnet_id, that information is in # "share-network-subnets" assert "--os-share-api-version 2.50 share network show" \ fake_sn_name neutron_net_id $expected_net_id assert "--os-share-api-version 2.50 share network show" \ fake_sn_name neutron_subnet_id $expected_subnet_id share_network_subnets=$(openstack share network show fake_sn_name \ -c share_network_subnets -f value) if [[ -n "$share_network_subnets" \ && "$share_network_subnets" != "[]" ]]; then neutron_net_id=$(echo $share_network_subnets \ | tr ',' '\n' | grep neutron_net_id \ | cut -d "'" -f4) neutron_subnet_id=$(echo $share_network_subnets \ | tr ',' '\n' | grep neutron_subnet_id \ | cut -d "'" -f4) if [[ $neutron_net_id != $expected_net_id ]]; then die $LINENO "Neutron net ID for share network" \ "isn't $expected_net_id, it is $neutron_net_id" fi if [[ $neutron_subnet_id != $expected_subnet_id ]]; then die $LINENO "Neutron subnet ID for share network" \ "isn't $expected_subnet_id," \ "it is $neutron_subnet_id" fi fi assert "share security service show" \ fake_ss_name description fake_ss_description assert "share security service show" fake_ss_name dns_ip fake_dns_ip assert "share security service show" fake_ss_name server fake_server assert "share security service show" fake_ss_name domain fake_domain assert "share security service show" fake_ss_name user fake_user assert "share security service show" fake_ss_name password fake_password } function scenario_2_destroy_attach_ss_to_sn { openstack share network delete fake_sn_name openstack share security service delete fake_ss_name } ##### function scenario_3_do_quotas { # Create a real project for quota testing since # 'openstack share quota' resolves via Keystone openstack project create manila_grenade_quota_project current_shares_quota=$(openstack share quota show \ manila_grenade_quota_project -c shares -f value) ((new_shares_quota=$current_shares_quota + 5)) openstack share quota set manila_grenade_quota_project \ --shares $new_shares_quota resource_save manila quota $new_shares_quota } function scenario_3_verify_quotas { shares_quota=$(openstack share quota show \ manila_grenade_quota_project -c shares -f value) expected=$(resource_get manila quota) if [[ $shares_quota != $expected ]] ; then die $LINENO "Shares quota is expected " \ "as $expected but it is $shares_quota." fi } function scenario_3_destroy_quotas { openstack share quota delete manila_grenade_quota_project openstack project delete manila_grenade_quota_project } ##### function scenario_4_do_private_share_types { openstack share type create ${MANILA_GRENADE_SHARE_TYPE_NAME}_scenario4 \ false --public false openstack share type access create \ ${MANILA_GRENADE_SHARE_TYPE_NAME}_scenario4 \ $(openstack project show demo -c id -f value) } function scenario_4_verify_private_share_types { share_type_visibility=$(openstack share type show \ ${MANILA_GRENADE_SHARE_TYPE_NAME}_scenario4 -c visibility -f value) if [[ $share_type_visibility != 'private' ]] ; then die $LINENO "Visibility of share type "\ "${MANILA_GRENADE_SHARE_TYPE_NAME}_scenario4 is not "\ "'private'. It is $share_type_visibility" fi project_id=$(openstack project show demo -c id -f value) access=$(openstack share type access list \ ${MANILA_GRENADE_SHARE_TYPE_NAME}_scenario4 \ -c "Project ID" -f value | grep $project_id) if [[ -z $access ]]; then die $LINENO "Expected $project_id project ID is not found in list "\ "of allowed projects of "\ "${MANILA_GRENADE_SHARE_TYPE_NAME}_scenario4 share type." fi } function scenario_4_destroy_private_share_types { openstack share type delete ${MANILA_GRENADE_SHARE_TYPE_NAME}_scenario4 } ##### function scenario_5_do_share_snapshot { snapshot_support=$MANILA_GRENADE_SHARE_TYPE_SNAPSHOT_SUPPORT_EXTRA_SPEC if [[ $(trueorfalse True snapshot_support) == True ]]; then # Create share snapshot openstack share snapshot create $MANILA_GRENADE_SHARE_NAME \ --name $MANILA_GRENADE_SHARE_SNAPSHOT_NAME resource_save manila share_snapshot $MANILA_GRENADE_SHARE_SNAPSHOT_NAME # Wait for share snapshot creation results wait_timeout=$MANILA_GRENADE_WAIT_TIMEOUT available='false' while (( wait_timeout > 0 )) ; do current_status=$( openstack share snapshot show \ $MANILA_GRENADE_SHARE_SNAPSHOT_NAME \ -c status -f value ) if [[ $current_status == 'available' ]]; then available='true' break elif [[ $current_status == 'creating' ]]; then ((wait_timeout-=$MANILA_GRENADE_WAIT_STEP)) sleep $MANILA_GRENADE_WAIT_STEP elif [[ $current_status == 'error' ]]; then die $LINENO "Share snapshot is in 'error' state." else die $LINENO "Should never reach this line." fi done if [[ $available == 'true' ]]; then echo "Share snapshot has been created successfully." else die $LINENO "Share snapshot timed out to reach 'available' status." fi else echo "Skipping scenario '5' with creation of share snapshot." fi } function scenario_5_verify_share_snapshot { snapshot_support=$MANILA_GRENADE_SHARE_TYPE_SNAPSHOT_SUPPORT_EXTRA_SPEC if [[ $(trueorfalse True snapshot_support) == True ]]; then # Check that source share ID is set share_id_in_snapshot=$( openstack share snapshot show \ $MANILA_GRENADE_SHARE_SNAPSHOT_NAME \ -c share_id -f value ) if [[ -z $share_id_in_snapshot ]]; then die $LINENO "Source share ID is not set." fi # Check that snapshot's source share ID is correct share_id=$( openstack share show $MANILA_GRENADE_SHARE_NAME \ -c id -f value ) if [[ $share_id != $share_id_in_snapshot ]]; then die $LINENO "Actual source share ID " \ "'$share_id_in_snapshot' is not " \ "equal to expected '$share_id'." fi # Check presence of expected columns in snapshot view snapshot_output=$( openstack share snapshot show \ $MANILA_GRENADE_SHARE_SNAPSHOT_NAME ) snapshot_cols="id provider_location name size" snapshot_cols+=" export_locations" for snapshot_column in $snapshot_cols; do echo $snapshot_output | grep "| $snapshot_column " if [[ $? != 0 ]]; then die $LINENO "'$snapshot_column' column" \ "not found in '$snapshot_output'" fi done fi } function scenario_5_destroy_share_snapshot { snapshot_support=$MANILA_GRENADE_SHARE_TYPE_SNAPSHOT_SUPPORT_EXTRA_SPEC if [[ $(trueorfalse True snapshot_support) == True ]]; then openstack share snapshot delete $MANILA_GRENADE_SHARE_SNAPSHOT_NAME wait_timeout=$MANILA_GRENADE_WAIT_TIMEOUT found='true' while (( wait_timeout > 0 )) ; do snapshot_status=$( openstack share snapshot show \ $MANILA_GRENADE_SHARE_SNAPSHOT_NAME \ -c status -f value 2>/dev/null || true ) if [[ -z $snapshot_status ]]; then found='false' break elif [[ $snapshot_status == 'deleting' ]]; then ((wait_timeout-=$MANILA_GRENADE_WAIT_STEP)) sleep $MANILA_GRENADE_WAIT_STEP elif [[ $snapshot_status == 'error_deleting' ]]; then die $LINENO "Share snapshot failed to be deleted." else die $LINENO "Should never reach this line." fi done if [[ $found == 'true' ]]; then die $LINENO "Share snapshot timed out to be deleted." else echo "Share snapshot has been deleted successfully." fi fi } ##### function scenario_6_do_share_mount_and_write_data { mkdir -p /tmp/manila-share export_path=$(resource_get manila export_path) share_protocol=$(resource_get manila share_protocol \ | awk '{print tolower($0)}') sudo mount -t $share_protocol $export_path /tmp/manila-share test_msg="Hello from the past" echo $test_msg | sudo tee /tmp/manila-share/testfile && sudo sync } function scenario_6_verify_share_mount_and_read_data { export_path=$(resource_get manila export_path) share_is_mounted=$(sudo mount | grep $export_path) [[ -z $share_is_mounted ]] && \ die $LINENO "Share $export_path is not mounted" read_data=$(sudo cat /tmp/manila-share/testfile|xargs) if [[ $read_data == "Hello from the past" ]]; then echo "Share data remains unmodified." else die $LINENO "Share data does not match" \ "what was written before upgrade." fi } function scenario_6_destroy_share_mount { export_path=$(resource_get manila export_path) sudo umount -f /tmp/manila-share } ################################# Main logic ################################## function create { scenario_1_do_share_with_rules_and_metadata scenario_2_do_attach_ss_to_sn scenario_3_do_quotas scenario_4_do_private_share_types scenario_5_do_share_snapshot scenario_6_do_share_mount_and_write_data echo "Manila 'create': SUCCESS" } function verify { scenario_1_verify_share_with_rules_and_metadata scenario_2_verify_attach_ss_to_sn scenario_3_verify_quotas scenario_4_verify_private_share_types scenario_5_verify_share_snapshot scenario_6_verify_share_mount_and_read_data echo "Manila 'verify': SUCCESS" } function destroy { scenario_6_destroy_share_mount scenario_5_destroy_share_snapshot scenario_1_destroy_share_with_rules_and_metadata scenario_2_destroy_attach_ss_to_sn scenario_3_destroy_quotas scenario_4_destroy_private_share_types echo "Manila 'destroy': SUCCESS" } function verify_noapi { scenario_6_verify_share_mount_and_read_data } ################################# Dispatcher ################################## case $1 in "create") create ;; "verify_noapi") verify_noapi ;; "verify") verify ;; "destroy") destroy ;; "force_destroy") set +o errexit destroy ;; esac ############################################################################### ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8372362 manila-23.0.0.0rc1/devstack/upgrade/settings0000664000175000017500000000066415251045254017452 0ustar00zuulzuul#!/bin/bash register_project_for_upgrade manila register_db_to_save manila export BASE_RUN_SMOKE=False export TARGET_RUN_SMOKE=False # NOTE(vponomaryov): stable client is used for keeping scenarios stable # so they are not broken by changed CLI views. devstack_localrc base MANILACLIENT_BRANCH="stable/ussuri" devstack_localrc target MANILACLIENT_BRANCH="stable/ussuri" devstack_localrc target MANILA_USE_DOWNGRADE_MIGRATIONS=False ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8372362 manila-23.0.0.0rc1/devstack/upgrade/shutdown.sh0000775000175000017500000000073015251045254020073 0ustar00zuulzuul#!/bin/bash # # set -o errexit source $GRENADE_DIR/grenaderc source $GRENADE_DIR/functions source $BASE_DEVSTACK_DIR/functions source $BASE_DEVSTACK_DIR/stackrc # needed for status directory # Locate the manila plugin and get its functions MANILA_DEVSTACK_DIR=$(dirname $(dirname $0)) source $MANILA_DEVSTACK_DIR/settings source $MANILA_DEVSTACK_DIR/plugin.sh set -o xtrace stop_manila # Ensure everything is stopped ensure_services_stopped m-api m-sch m-shr m-dat ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8372362 manila-23.0.0.0rc1/devstack/upgrade/upgrade.sh0000775000175000017500000000416015251045254017650 0ustar00zuulzuul#!/usr/bin/env bash # ``upgrade-manila`` echo "*********************************************************************" echo "Begin $0" echo "*********************************************************************" # Clean up any resources that may be in use cleanup() { set +o errexit echo "*********************************************************************" echo "ERROR: Abort $0" echo "*********************************************************************" # Kill ourselves to signal any calling process trap 2; kill -2 $$ } trap cleanup SIGHUP SIGINT SIGTERM # Keep track of the grenade directory RUN_DIR=$(cd $(dirname "$0") && pwd) # Source params source $GRENADE_DIR/grenaderc # Import common functions source $GRENADE_DIR/functions # This script exits on an error so that errors don't compound and you see # only the first error that occurred. set -o errexit # Upgrade Manila # ============== # Locate manila devstack plugin, the directory above the # grenade plugin. MANILA_DEVSTACK_DIR=$(dirname $(dirname $0)) # Get functions from current DevStack source $TARGET_DEVSTACK_DIR/functions source $TARGET_DEVSTACK_DIR/lib/tls source $TARGET_DEVSTACK_DIR/stackrc source $(dirname $(dirname $BASH_SOURCE))/settings source $(dirname $(dirname $BASH_SOURCE))/plugin.sh # Print the commands being run so that we can see the command that triggers # an error. It is also useful for following allowing as the install occurs. set -o xtrace # Save current config files for posterity [[ -d $SAVE_DIR/etc.manila ]] || cp -pr $MANILA_CONF_DIR $SAVE_DIR/etc.manila # Install the target manila install_manila # Calls upgrade-manila for specific release upgrade_project manila $RUN_DIR $BASE_DEVSTACK_BRANCH $TARGET_DEVSTACK_BRANCH # Migrate the database $MANILA_BIN_DIR/manila-manage db sync || die $LINENO "DB migration error" start_manila # Don't succeed unless the services come up ensure_services_started m-api m-sch m-shr m-dat set +o xtrace echo "*********************************************************************" echo "SUCCESS: End $0" echo "*********************************************************************" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.009185 manila-23.0.0.0rc1/doc/0000775000175000017500000000000015251045336013174 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8372362 manila-23.0.0.0rc1/doc/README.rst0000664000175000017500000000154115251045254014663 0ustar00zuulzuul======================= Manila Development Docs ======================= Files under this directory tree are used for generating the documentation for the manila source code. Developer documentation is built to: https://docs.openstack.org/manila/latest/ Tools ===== Sphinx The Python Sphinx package is used to generate the documentation output. Information on Sphinx, including formatting information for RST source files, can be found in the `Sphinx online documentation `_. Graphviz Some of the diagrams are generated using the ``dot`` language from Graphviz. See the `Graphviz documentation `_ for Graphviz and dot language usage information. Building Documentation ====================== Doc builds are performed using tox with the ``docs`` target:: % cd .. % tox -e docs ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.009185 manila-23.0.0.0rc1/doc/ext/0000775000175000017500000000000015251045336013774 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8372362 manila-23.0.0.0rc1/doc/ext/__init__.py0000664000175000017500000000000015251045254016072 0ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8372362 manila-23.0.0.0rc1/doc/requirements.txt0000664000175000017500000000030215251045254016452 0ustar00zuulzuulopenstackdocstheme>=2.2.1 # Apache-2.0 reno>=3.1.0 # Apache-2.0 sphinx>=2.1.1 # BSD os-api-ref>=1.4.0 # Apache-2.0 ddt>=1.0.1 # MIT fixtures>=3.0.0 # Apache-2.0/BSD oslotest>=3.2.0 # Apache-2.0 ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.010185 manila-23.0.0.0rc1/doc/source/0000775000175000017500000000000015251045336014474 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.010185 manila-23.0.0.0rc1/doc/source/_extra/0000775000175000017500000000000015251045336015756 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8372362 manila-23.0.0.0rc1/doc/source/_extra/.htaccess0000664000175000017500000000013515251045254017552 0ustar00zuulzuulRedirectMatch 301 ^/drivers/emc-isilon-driver.html$ /drivers/dell-emc-powerscale-driver.html ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.022185 manila-23.0.0.0rc1/doc/source/admin/0000775000175000017500000000000015251045336015564 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8372362 manila-23.0.0.0rc1/doc/source/admin/capabilities_and_extra_specs.rst0000664000175000017500000004006315251045254024173 0ustar00zuulzuul.. _capabilities_and_extra_specs: Capabilities and Extra-Specs ============================ Cloud Administrators create :ref:`shared_file_systems_share_types` with extra-specs to: - influence the scheduler's decision to place new shares, and - instruct the Shared File System service or its storage driver/s to perform certain special actions with respect to the users' shares. As an administrator, you can choose a descriptive name or provide good descriptions for your share types to convey the share type capabilities to end users. End users can view standard ``tenant-visible`` extra-specs that can let them seek required behavior and automate their applications accordingly. By design, however, all other extra-specs of a share type are not exposed to non-privileged users. Types of Extra-Specs -------------------- The Shared File Systems service back-end storage drivers offer a wide range of capabilities. The variation in these capabilities allows cloud administrators to provide a storage service catalog to their end users. Share type extra-specs tie-in with these capabilities. Some back-end capabilities are very specific to a storage system, and are opaque to the Shared File System service or the end users. These capabilities are invoked with the help of "scoped" extra-specs. Using scoped extra-specs is a way to provide programmatic directives to the concerned storage driver to do something during share creation or share manipulation. You can learn about the opaque capabilities through driver documentation and configure these capabilities within share types as scoped extra-specs (e.g.: hpe3par:nfs_options). The Shared File System service scheduler ignores scoped extra-specs during its quest to find the right back end to provision shares. There are some back-end capabilities in manila that do matter to the scheduler. For our understanding, lets call these non-scoped or non-opaque capabilities. All non-scoped capabilities can be directly used as share types extra-specs. They are considered by the scheduler’s capabilities filter (and any custom filter defined by deployers). You can get a list of non-scoped capabilities from the scheduler by using: .. code-block:: console $ openstack share pool list --detail The non-scoped capabilities can be of three types: - **Capabilities pertaining to a specific back end storage system driver**: For example, *huawei_smartcache*. No Shared File System service API relies on non-opaque back end specific capabilities. - **Common capabilities that are not visible to end users**: The manila community has standardized some cross-platform capabilities like *thin_provisioning*, *dedupe*, *compression*, *qos*, *ipv6_support* and *ipv4_support*. Values of these options do not matter to any Shared File System service APIs; however, they can signify something to the manila services themselves. For example when a back end supports thin_provisioning, the scheduler service performs over-provisioning, and if a back end does not report *ipv6_support* as True, the share-manager service drops IPv6 access rules before invoking the storage driver to update access rules. - **Common capabilities that are visible to end users**: Some capabilities affect functionality exposed via the Shared File System service API. For example, not all back ends support snapshots, and even if they do, they may not support all of the snapshot operations. For example, cloning snapshots into new shares, reverting shares in-place to snapshots, etc. The support for these capabilities determines whether users would be able to perform certain control-plane operations with manila. For example, a back end driver may report *snapshot_support=True* allowing end users to create share snapshots, however, the driver can report *create_share_from_snapshot_support=False*. This reporting allows cloud administrators to create share types that support snapshots but not creating shares from snapshots. When a user uses such a share type, they will not be able to clone snapshots into new shares. Tenant-visible capabilities aid manila in validating requests and failing fast on requests it cannot accommodate. They also help level set the user expectations on some failures. For example, if snapshot_support is set to False on the share type, since users can see this, they will not invoke the create snapshot API, and even if they do, they will understand the HTTP 400 (and error message) in better context. .. important:: All extra-specs are optional, except one: *driver_handles_share_servers*. Scheduler's treatment of non-scoped extra specs ----------------------------------------------- The CapabilitiesFilter in the Shared File System scheduler uses the following for matching operators: * No operator This defaults to doing a python ==. Additionally it will match boolean values. * **<=, >=, ==, !=** This does a float conversion and then uses the python operators as expected. * **** This either chooses a host that has partially matching string in the capability or chooses a host if it matches any value in a list. For example, if " sse4" is used, it will match a host that reports capability of "sse4_1" or "sse4_2". * **** This chooses a host that has one of the items specified. If the first word in the string is , another and value pair can be concatenated. Examples are " 3", " 3 5", and " 1 3 7". This is for string values only. * **** This chooses a host that matches a boolean capability. An example extra-spec value would be " True". * **=** This does a float conversion and chooses a host that has equal to or greater than the resource specified. This operator behaves this way for historical reasons. * **s==, s!=, s>=, s>, s<=, s<** The "s" indicates it is a string comparison. These choose a host that satisfies the comparison of strings in capability and specification. For example, if "capabilities:replication_type s== dr", a host that reports replication_type of "dr" will be chosen. If "share_backend_name s!= cephfs" is used, any host not named "cephfs" can be chosen. For vendor-specific non-scoped capabilities (which need to be visible to the scheduler), drivers are recommended to use the vendor prefix followed by an underscore. This is not a strict requirement, but can provide a consistent look along-side the scoped extra-specs and will be a clear indicator of vendor capabilities vs. common capabilities. Common Capabilities ------------------- Common capabilities apply to multiple backends. Like all other backend reported capabilities, these capabilities can be used verbatim as extra_specs in share types used to create shares. Share type common capability extra-specs that are visible to end users: ----------------------------------------------------------------------- .. note:: Share types are mutable. Any changes to the extra-specs associated with a share type do not affect existing shares of that type. Cloud administrators can update the value of tenant-visible extra-specs at any time, but they must be aware that modifying tenant-visible extra-specs (without also modifying affected properties of pre-existing shares) may confuse end users. For example, changing the ``availability_zones`` extra-spec on a share type will not change which availability zones existing shares of that type reside in, but users will see the new value when viewing the share type. * **driver_handles_share_servers** is a special, required common capability. When set to True, the scheduler matches requests with back ends that can isolate user workloads with dedicated share servers exporting shares on user provided share networks. * **snapshot_support** indicates whether snapshots are supported for shares created on the pool/backend. When administrators do not set this capability as an extra-spec in a share type, the scheduler can place new shares of that type in pools without regard for whether snapshots are supported, and those shares will not support snapshots. * **create_share_from_snapshot_support** indicates whether a backend can create a new share from a snapshot. When administrators do not set this capability as an extra-spec in a share type, the scheduler can place new shares of that type in pools without regard for whether creating shares from snapshots is supported, and those shares will not support creating shares from snapshots. * **revert_to_snapshot_support** indicates that a driver is capable of reverting a share in place to its most recent snapshot. When administrators do not set this capability as an extra-spec in a share type, the scheduler can place new shares of that type in pools without regard for whether reverting shares to snapshots is supported, and those shares will not support reverting shares to snapshots. * **mount_snapshot_support** indicates that a driver is capable of exporting share snapshots for mounting. Users can provide and revoke access to mountable snapshots just like they can with their shares. * **snapshot_inherit_share_access_support** indicates that a share's mountable snapshots inherit the access rules of their parent share. When this capability is enabled through a share type, access rules cannot be managed on the snapshots directly; each snapshot automatically uses the access rules of its base share. This is intended for back ends that cannot define access rules for a snapshot independently from its parent share, and is typically used together with ``mount_snapshot_support``. * **replication_type** indicates the style of replication supported for the backend/pool. This extra_spec will have a string value and could be one of :term:`writable`, :term:`readable` or :term:`dr`. `writable` replication type involves synchronously replicated shares where all replicas are writable. Promotion is not supported and not needed. `readable` and `dr` replication types involve a single `active` or `primary` replica and one or more `non-active` or secondary replicas per share. In `readable` type of replication, `non-active` replicas have one or more export_locations and can thus be mounted and read while the `active` replica is the only one that can be written into. In `dr` style of replication, only the `active` replica can be mounted, read from and written into. * **availability_zones** indicates a comma separated list of availability zones that can be used for provisioning. Users can always provide a specific availability zone during share creation, and they will receive a synchronous failure message if they attempt to create a share in an availability zone that the share type does not permit. If you do not set this extra-spec, the share type is assumed to be serviceable in all availability zones known to the Shared File Systems service. * **mount_point_name_support** whether a custom export location could be specified during share creation. To enable users to specify a custom mount point for their shares, administrators must set this extra-specification in the share type to True. They must also provide an extra-spec named ``provisioning:mount_point_prefix``. The service will use this prefix in conjunction with the mount point name provided by end users during share creation. When ``provisioning:mount_point_prefix`` is not set on a share type, but ``mount_point_name_support`` is enabled, the share's export location will be prefixed with the ``project_id``. However, shares created with a ``project_id`` prefix are not eligible for transfer. For these shares to be transferred to a different project, the admin will need to manually unmount them from the current project and mount them to the target project. Share type common capability extra-specs that are not visible to end users: --------------------------------------------------------------------------- * **dedupe** indicates that a backend/pool can provide shares using some deduplication technology. The default value of the dedupe capability (if a driver doesn't report it) is False. Drivers can support both dedupe and non-deduped shares in a single storage pool by reporting ``dedupe=[True, False]``. You can make a share type use deduplication by setting this extra-spec to ' True', or prevent it by setting this extra-spec to ' False'. * **compression** indicates that a backend/pool can provide shares using some compression technology. The default value of the compression capability (if a driver doesn't report it) is False. Drivers can support compressed and non-compressed shares in a single storage pool by reporting ``compression=[True, False]``. You can make a share type use compression by setting this extra-spec to ' True', or prevent it by setting this extra-spec to ' False'. * **thin_provisioning** can be enabled where shares will not be guaranteed space allocations and overprovisioning will be enabled. This capability defaults to False. Back ends/pools that support thin provisioning report True for this capability. Administrators can make a share type use thin provisioned shares by setting this extra-spec to ' True'. If a driver reports thin_provisioning=False (the default) then it's assumed that the driver is doing thick provisioning and overprovisioning is turned off. A driver can support thin provisioned and thick provisioned shares in the same pool by reporting ``thin_provisioning=[True, False]``. To provision a thick share on a back end that supports both thin and thick provisioning, set one of the following in extra specs: :: {'thin_provisioning': 'False'} {'thin_provisioning': ' False'} {'capabilities:thin_provisioning': 'False'} {'capabilities:thin_provisioning': ' False'} * **qos** indicates that a backend/pool can provide shares using some QoS (Quality of Service) specification. The default value of the qos capability (if a driver doesn't report it) is False. You can make a share type use QoS by setting this extra-spec to ' True' and also setting the relevant QoS-related extra specs for the drivers being used. Administrators can prevent a share type from using QoS by setting this extra-spec to ' False'. Different drivers have different ways of specifying QoS limits (or guarantees) and this extra spec merely allows the scheduler to filter by pools that either have or don't have QoS support enabled. * **ipv4_support** indicates whether a back end can create a share that can be accessed via IPv4 protocol. If administrators do not set this capability as an extra-spec in a share type, the scheduler can place new shares of that type in pools without regard for whether IPv4 is supported. * **ipv6_support** - indicates whether a back end can create a share that can be accessed via IPv6 protocol. If administrators do not set this capability as an extra-spec in a share type, the scheduler can place new shares of that type in pools without regard for whether IPv6 is supported. * **provisioning:max_share_size** can set the max size of share, the value must be an integer and greater than 0. If administrators set this capability as an extra-spec in a share type, the size of share created with the share type can not be greater than the specified value. * **provisioning:min_share_size** can set the min size of share, the value must be an integer and greater than 0. If administrators set this capability as an extra-spec in a share type, the size of share created with the share type can not be less than the specified value. * **provisioning:max_share_extend_size** can set the max size of share extend, the value must be an integer and greater than 0. If administrators set this capability as an extra-spec in a share type, the size of share extended with the share type can not be greater than the specified value. This capability is ignored for regular users and the "provisioning:max_share_size" is the only effective limit. * **provisioning:mount_point_prefix** can set prefix for human readable mount_point_name, the value must be a string containing ASCII alphabets and optionally, the underscore character. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8382366 manila-23.0.0.0rc1/doc/source/admin/container_driver.rst0000664000175000017500000001064515251045254021660 0ustar00zuulzuul.. Copyright 2016 Mirantis Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Container Driver ================ The Container driver provides a lightweight solution for share servers management. It allows to use Docker containers for hosting userspace shared file systems services. Supported operations -------------------- - Create CIFS share; - Delete CIFS share; - Allow user access to CIFS share; - Deny user access to CIFS share; - Extend CIFS share. Restrictions ------------ - Current implementation has been tested only on Ubuntu. Devstack plugin won't work on other distributions however it should be possible to install prerequisites and set the driver up manually; - The only supported protocol is CIFS; - The following features are not implemented: * Manage/unmanage share; * Shrink share; * Create/delete snapshots; * Create a share from a snapshot; * Manage/unmanage snapshots. Known problems -------------- - May demonstrate unstable behaviour when running concurrently. It is strongly suggested that the driver should be used with extreme care in cases other than building lightweight development and testing environments. Setting up container driver with devstack ----------------------------------------- The driver could be set up via devstack. This requires the following update to local.conf: .. code-block:: ini enable_plugin manila https://opendev.org/openstack/manila MANILA_ENABLED_BACKENDS=london MANILA_OPTGROUP_london_driver_handles_share_servers=True MANILA_OPTGROUP_london_neutron_host_id= SHARE_DRIVER=manila.share.drivers.container.driver.ContainerShareDriver SHARE_BACKING_FILE_SIZE= MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS='snapshot_support=false' where is change reference, which could be copied from gerrit web-interface, is the name of the host with running neutron Setting Container Driver Up Manually ------------------------------------ This section describes steps needed to be performed to set the driver up manually. The driver has been tested on Ubuntu 14.04, thus in case of any other distribution package names might differ. The following packages must be installed: - docker.io One can verify if the package is installed by issuing ``sudo docker info`` command. In case of normal operation it should return docker usage statistics. In case it fails complaining on inaccessible socket try installing ``apparmor``. Please note that docker usage requires superuser privileges. After docker is successfully installed a docker image containing necessary packages must be provided. Currently such image could be downloaded from https://github.com/a-ovchinnikov/manila-image-elements-lxd-images/releases/download/0.1.0/manila-docker-container.tar.gz The image has to be unpacked but not untarred. This could be achieved by running 'gzip -d ' command. Resulting tar-archive of the image could be uploaded to docker via .. code-block:: console sudo docker load --input If the previous command finished successfully you will be able to see the image in the image list: .. code-block:: console sudo docker images The driver expects to find a folder /tmp/shares on the host where it is running as well as a logical volume group "manila_docker_volumes". When installing the driver manually one must make sure that 'brctl' and 'docker' commands are present in the /etc/manila/rootwrap.d/share.filters and could be executed as root. Finally to use the driver one must add a backend to the config file containing the following settings: .. code-block:: ini driver_handles_share_servers = True share_driver = manila.share.drivers.container.driver.ContainerShareDriver neutron_host_id = where is the name of the host running neutron. (In case of single VM devstack it is VM's name). After restarting manila services you should be able to use the driver. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8382366 manila-23.0.0.0rc1/doc/source/admin/deferred_deletion.rst0000664000175000017500000000434115251045254021762 0ustar00zuulzuul.. _deferred_deletion: Deferred Share / Snapshot Deletion ================================== Overview -------- Manila supports deferred deletion for shares and snapshots, a feature introduced in Manila during the 2024.1 (Caracal) release cycle. When this feature is enabled, deletion requests release quotas immediately, but the actual deletion in the backend driver happens asynchronously. Resources that encounter deletion errors are retried periodically. Configuration Options --------------------- To enable or disable deferred deletion, edit your ``manila.conf`` file: .. code-block:: ini [DEFAULT] is_deferred_deletion_enabled = false # Whether to delete shares and share snapshots in a deferred manner. # When set to True, quotas are released immediately when a deletion # request is accepted. # Even with deferred deletion enabled, deletions may eventually fail, # and rectifying them will require manual intervention. (boolean value) [DEFAULT] periodic_deferred_delete_interval = 300 # Interval, in seconds, at which the share manager will attempt to delete # shares and snapshots in the backend driver. (integer value) Deletion Workflow ----------------- 1. A user requests deletion of a share or snapshot. 2. If deferred deletion is enabled, Manila: - Releases quotas immediately. - Marks the resource for deferred deletion. - Hides the resource from non-admin users in list/show API calls. 3. Periodic tasks in the share manager attempt deletion in the backend driver based on the interval defined in ``periodic_deferred_delete_interval``. 4. If deletion fails, the resource is put in the ``error_deferred_deleting`` state and retried in subsequent periodic tasks. Error Handling -------------- Deferred deletion can fail due to various reasons, such as driver errors, network failures, or backend misconfiguration. Try to correct any issues preventing deletion. 1. **Check Resource State:** Use the `openstack share list` command with admin credentials to identify resources in the `error_deferred_deleting` state. 2. **Retry Periodic Task:** After correcting any driver or network issues, the periodic task will retry deletion automatically during the next run cycle. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8382366 manila-23.0.0.0rc1/doc/source/admin/dell_emc_powerscale_driver.rst0000664000175000017500000000652715251045254023672 0ustar00zuulzuul.. Copyright (c) 2015 EMC Corporation All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. PowerScale Driver ================= The EMC manila driver framework (EMCShareDriver) utilizes Dell storage products to provide shared filesystems to OpenStack. The EMC manila driver is a plugin based driver which is designed to use different plugins to manage different Dell storage products. The PowerScale manila driver is a plugin for the EMC manila driver framework which allows manila to interface with an PowerScale backend to provide a shared filesystem. The EMC driver framework with the PowerScale plugin is referred to as the "PowerScale Driver" in this document. This PowerScale Driver interfaces with an PowerScale cluster via the REST PowerScale Platform API (PAPI) and the RESTful Access to Namespace API (RAN). Requirements ------------ - PowerScale cluster running OneFS 9.10 or higher Supported Operations -------------------- The following operations are supported on an PowerScale cluster: * Create CIFS/NFS Share * Delete CIFS/NFS Share * Allow CIFS/NFS Share access * Only IP access type is supported for NFS and CIFS * Only RW access supported * Deny CIFS/NFS Share access * Create snapshot * Delete snapshot * Create share from snapshot * Extend share * Shrink share * Manage and Unmanage CIFS/NFS share * Manage and Unmanage snapshot * Mount snapshot * Mount point name * Ensure shares * Schedule Dedupe job for a share * Revert to a snapshot * QoS support Backend Configuration --------------------- The following parameters need to be configured in the manila configuration file for the PowerScale driver: * share_driver = manila.share.drivers.dell_emc.driver.EMCShareDriver * driver_handles_share_servers = False * emc_share_backend = powerscale * emc_nas_server = * emc_nas_server_port = * emc_nas_login = * emc_nas_password = * emc_nas_root_dir = Restart of :term:`manila-share` service is needed for the configuration changes to take effect. Restrictions ------------ The PowerScale driver has the following restrictions: - Only IP access type is supported for NFS and CIFS. - Only FLAT network is supported. The :mod:`manila.share.drivers.dell_emc.driver` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.dell_emc.driver :noindex: :members: :undoc-members: :show-inheritance: The :mod:`manila.share.drivers.dell_emc.plugins.powerscale.powerscale` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.dell_emc.plugins.powerscale.powerscale :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8382366 manila-23.0.0.0rc1/doc/source/admin/emc_vnx_driver.rst0000664000175000017500000003221015251045254021325 0ustar00zuulzuul.. Copyright (c) 2014 EMC Corporation All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. VNX Driver ========== EMC manila driver framework (EMCShareDriver) utilizes the EMC storage products to provide the shared filesystems to OpenStack. The EMC manila driver is a plugin based driver which is designed to use different plugins to manage different EMC storage products. VNX plugin is the plugin which manages the VNX to provide shared filesystems. EMC driver framework with VNX plugin is referred to as VNX driver in this document. This driver performs the operations on VNX by XMLAPI and the File command line. Each backend manages one Data Mover of VNX. Multiple manila backends need to be configured to manage multiple Data Movers. .. note:: Dell EMC VNX driver has been deprecated and will be removed in a future release Requirements ------------ - VNX OE for File version 7.1 or higher. - VNX Unified, File only, or Gateway system with single storage backend. - The following licenses should be activated on VNX for File: * CIFS * NFS * SnapSure (for snapshot) * ReplicationV2 (for create share from snapshot) Supported Operations -------------------- The following operations will be supported on VNX array: - Create CIFS/NFS Share - Delete CIFS/NFS Share - Allow CIFS/NFS Share access * Only IP access type is supported for NFS. * Only user access type is supported for CIFS. - Deny CIFS/NFS Share access - Create snapshot - Delete snapshot - Create share from snapshot While the generic driver creates shared filesystems based on Cinder volumes attached to Nova VMs, the VNX driver performs similar operations using the Data Movers on the array. Pre-Configurations on VNX ------------------------- 1. Enable Unicode on Data mover VNX driver requires that the Unicode is enabled on Data Mover. CAUTION: After enabling Unicode, you cannot disable it. If there are some filesystems created before Unicode is enabled on the VNX, consult the storage administrator before enabling Unicode. To check the Unicode status on Data Mover, use the following VNX File command on VNX control station: server_cifs | head where: mover_name = Check the value of `I18N mode` field. UNICODE mode is shown as `I18N mode = UNICODE` To enable the Unicode for Data Mover: uc_config -on -mover where: mover_name = Refer to the document `Using International Character Sets on VNX for File` on [EMC support site](https://support.emc.com) for more information. 2. Enable CIFS service on Data Mover Ensure the CIFS service is enabled on the Data Mover which is going to be managed by VNX driver. To start the CIFS service, use the following command: server_setup -Protocol cifs -option start [=] where: = [=] = Note: If there is 1 GB of memory on the Data Mover, the default is 96 threads; however, if there is over 1 GB of memory, the default number of threads is 256. To check the CIFS service status, use this command: server_cifs | head where: = The command output will show the number of CIFS threads started. 3. NTP settings on Data Mover VNX driver only supports CIFS share creation with share network which has an Active Directory security-service associated. Creating CIFS share requires that the time on the Data Mover is in sync with the Active Directory domain so that the CIFS server can join the domain. Otherwise, the domain join will fail when creating share with this security service. There is a limitation that the time of the domains used by security-services even for different tenants and different share networks should be in sync. Time difference should be less than 10 minutes. It is recommended to set the NTP server to the same public NTP server on both the Data Mover and domains used in security services to ensure the time is in sync everywhere. Check the date and time on Data Mover: server_date where: mover_name = Set the NTP server for Data Mover: server_date timesvc start ntp [ ...] where: mover_name = host = Note: The host must be running the NTP protocol. Only 4 host entries are allowed. 4. Configure User Mapping on the Data Mover Before creating CIFS share using VNX driver, you must select a method of mapping Windows SIDs to UIDs and GIDs. EMC recommends using usermapper in single protocol (CIFS) environment which is enabled on VNX by default. To check usermapper status, use this command syntax: server_usermapper where: = If usermapper is not started, the following command can be used to start the usermapper: server_usermapper -enable where: = For multiple protocol environment, refer to `Configuring VNX User Mapping` on [EMC support site](https://support.emc.com) for additional information. 5. Network Connection In the current release, the share created by VNX driver uses the first network device (physical port on NIC) of Data Mover to access the network. Go to Unisphere to check the device list: Settings -> Network -> Settings for File (Unified system only) -> Device. Backend Configuration --------------------- The following parameters need to be configured in `/etc/manila/manila.conf` for the VNX driver: emc_share_backend = vnx emc_nas_server = emc_nas_password = emc_nas_login = emc_nas_server_container = emc_nas_pool_name = emc_interface_ports = share_driver = manila.share.drivers.dell_emc.driver.EMCShareDriver driver_handles_share_servers = True - `emc_share_backend` is the plugin name. Set it to `vnx` for the VNX driver. - `emc_nas_server` is the control station IP address of the VNX system to be managed. - `emc_nas_password` and `emc_nas_login` fields are used to provide credentials to the VNX system. Only local users of VNX File is supported. - `emc_nas_server_container` field is the name of the Data Mover to serve the share service. - `emc_nas_pool_name` is the pool name user wants to create volume from. The pools can be created using Unisphere for VNX. - `emc_interface_ports` is comma separated list specifying the ports(devices) of Data Mover that can be used for share server interface. Members of the list can be Unix-style glob expressions (supports Unix shell-style wildcards). This list is optional. In the absence of this option, any of the ports on the Data Mover can be used. - `driver_handles_share_servers` must be True, the driver will choose a port from port list which configured in emc_interface_ports. Restart of :term:`manila-share` service is needed for the configuration changes to take effect. IPv6 support ------------ IPv6 support for VNX driver is introduced in Queens release. The feature is divided into two parts: 1. The driver is able to manage share or snapshot in the Neutron IPv6 network. 2. The driver is able to connect VNX management interface using its IPv6 address. Pre-Configurations for IPv6 support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The following parameters need to be configured in `/etc/manila/manila.conf` for the VNX driver: network_plugin_ipv6_enabled = True - `network_plugin_ipv6_enabled` indicates IPv6 is enabled. If you want to connect VNX using IPv6 address, you should configure IPv6 address by `nas_cs` command for VNX and specify the address in `/etc/manila/manila.conf`: emc_nas_server = Snapshot support ---------------- In the Mitaka and Newton release of OpenStack, Snapshot support is enabled by default for a newly created share type. Starting with the Ocata release, the snapshot_support extra spec must be set to True in order to allow snapshots for a share type. If the 'snapshot_support' extra_spec is omitted or if it is set to False, users would not be able to create snapshots on shares of this share type. The feature is divided into two parts: 1. The driver is able to create/delete snapshot of share. 2. The driver is able to create share from snapshot. Pre-Configurations for Snapshot support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The following extra specifications need to be configured with share type. - snapshot_support = True - create_share_from_snapshot_support = True For new share type, these extra specifications can be set directly when creating share type: .. code-block:: console openstack share type create --snapshot-support True --create-share-from-snapshot-support True ${share_type_name} True Or you can update already existing share type with command: .. code-block:: console openstack share type set ${share_type_name} --extra-specs snapshot_support=True openstack share type set ${share_type_name} --extra-specs create_share_from_snapshot_support=True To snapshot a share and create share from the snapshot ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Firstly, you need create a share from share type that has extra specifications(snapshot_support=True, create_share_from_snapshot_support=True). Then snapshot the share with command: .. code-block:: console openstack share snapshot create ${source_share_name} --name ${target_snapshot_name} --description " " After creating the snapshot from previous step, you can create share from that snapshot. Use command: .. code-block:: console openstack share create nfs 1 --name ${target_share_name} --property source=snapshot --description " " --snapshot-id ${source_snapshot_id} Restrictions ------------ The VNX driver has the following restrictions: - Only IP access type is supported for NFS. - Only user access type is supported for CIFS. - Only FLAT network and VLAN network are supported. - VLAN network is supported with limitations. The Neutron subnets in different VLANs that are used to create share networks cannot have overlapped address spaces. Otherwise, VNX may have a problem to communicate with the hosts in the VLANs. To create shares for different VLANs with same subnet address, use different Data Movers. - The 'Active Directory' security service is the only supported security service type and it is required to create CIFS shares. - Only one security service can be configured for each share network. - Active Directory domain name of the 'active_directory' security service should be unique even for different tenants. - The time on Data Mover and the Active Directory domains used in security services should be in sync (time difference should be less than 10 minutes). It is recommended to use same NTP server on both the Data Mover and Active Directory domains. - On VNX the snapshot is stored in the SavVols. VNX system allows the space used by SavVol to be created and extended until the sum of the space consumed by all SavVols on the system exceeds the default 20% of the total space available on the system. If the 20% threshold value is reached, an alert will be generated on VNX. Continuing to create snapshot will cause the old snapshot to be inactivated (and the snapshot data to be abandoned). The limit percentage value can be changed manually by storage administrator based on the storage needs. Administrator is recommended to configure the notification on the SavVol usage. Refer to `Using VNX SnapSure` document on [EMC support site](https://support.emc.com) for more information. - VNX has limitations on the overall numbers of Virtual Data Movers, filesystems, shares, checkpoints, and etc. Virtual Data Mover(VDM) is created by the VNX driver on the VNX to serve as the manila share server. Similarly, filesystem is created, mounted, and exported from the VDM over CIFS or NFS protocol to serve as the manila share. The VNX checkpoint serves as the manila share snapshot. Refer to the `NAS Support Matrix` document on [EMC support site](https://support.emc.com) for the limitations and configure the quotas accordingly. The :mod:`manila.share.drivers.dell_emc.driver` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.dell_emc.driver :noindex: :members: :undoc-members: :show-inheritance: The :mod:`manila.share.drivers.dell_emc.plugins.vnx.connection` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.dell_emc.plugins.vnx.connection :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8382366 manila-23.0.0.0rc1/doc/source/admin/everpure_flashblade_driver.rst0000664000175000017500000002465515251045254023706 0ustar00zuulzuul.. Copyright 2026 Everpure Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. =============================================== Everpure FlashBlade Driver for OpenStack Manila =============================================== The Everpure FlashBlade Manila driver provides NFS shared file systems to OpenStack using Everpure's FlashBlade native filesystem capabilities. Supported Operations ~~~~~~~~~~~~~~~~~~~~ The following operations are supported with Everpure FlashBlade: - Create/delete NFS shares * Shares are not accessible until access rules allow access - Allow/deny NFS share access * IP access rules are required for NFS share access - Create/delete snapshots - Expand and Shrink shares - Revert to Snapshot Share networks are not supported. Shares are created directly on the FlashBlade without the use of a share server or service VM. Network connectivity is setup outside of Manila. General Requirements ~~~~~~~~~~~~~~~~~~~~ On the system running the Manila share service: - purity_fb 1.12.1 or newer from PyPI. On the Everpure FlashBlade: - Purity//FB Operating System software version 2.3.0 or higher Network Requirements ~~~~~~~~~~~~~~~~~~~~ Connectivity between the FlashBlade (REST) and the manila host is required for share management. Connectivity between the clients and the FlashBlade is required for mounting and using the shares. This includes: - Routing from the client to the external network - Assigning the client an external IP address (e.g., a floating IP) - Configuring the manila host networking properly for IP forwarding - Configuring the FlashBlade networking properly for client subnets Driver Configuration ~~~~~~~~~~~~~~~~~~~~ Before configuring the driver, make sure the following networking requirements have been met: - A management subnet must be accessible from the system running the Manila share services - A data subnet must be accessible from the system running the Nova compute services - An API token must be available for a user with administrative privileges Perform the following steps: #. Configure the Everpure FlashBlade parameters in `manila.conf` #. Configure/create a share type #. Restart the services It is also assumed that the OpenStack networking has been confiured correctly. Step 1 - FlashBlade Parameters configuration ******************************************** The following parameters need to be configured in the [DEFAULT] section of `/etc/manila/manila.conf`: +----------------------------+------------------------------------------------+ | **Option** | **Description** | +============================+================================================+ | enabled_share_backends | Name of the section on ``manila.conf`` used to | | | specify a backend. For example: | | | *enabled_share_backends = flashblade* | +----------------------------+------------------------------------------------+ | enabled_share_protocols | Specify a list of protocols to be allowed for | | | share creation. This driver version only | | | supports NFS | +----------------------------+------------------------------------------------+ The following parameters need to be configured in the [backend] section of ``/etc/manila/manila.conf``: +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | **Option** | **Description** | +=================================================+=====================================================================================================+ | share_backend_name | A name for the backend. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | share_driver | Python module path. For this driver **this must be**: | | | *manila.share.drivers.purestorage.flashblade.FlashBladeShareDriver* | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | driver_handles_share_servers | Driver working mode. For this driver **this must be**: | | | *False*. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | flashblade_mgmt_vip | The name (or IP address) for the Everpure FlashBlade storage system management VIP. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | flashblade_data_vip | The names (or IP address) for the Everpure FlashBlade storage system data VIPs. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | flashblade_api | API token for an administrative user account | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | flashblade_eradicate (Optional) | When enabled, all FlashBlade file systems and snapshots will be eradicated at the time | | | of deletion in Manila. Data will NOT be recoverable after a delete with this set to True! | | | When disabled, file systems and snapshots will go into pending eradication state and can be | | | recovered. Default value is *True*. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ Below is an example of a valid configuration of the FlashBlade driver: .. code-block:: ini [DEFAULT] ... enabled_share_backends = flashblade enabled_share_protocols = NFS ... [flashblade] share_backend_name = flashblade share_driver = manila.share.drivers.purestorage.flashblade.FlashBladeShareDriver driver_handles_share_servers = False flashblade_mgmt_vip = 192.0.2.4 flashblade_data_vip = 192.0.2.5,192.0.2.6 flashblade_api = T-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Restart of :term:`manila-share` service is needed for the configuration changes to take effect. Step 2 - Share Type Configuration ********************************* Shared File Systems service requires that the share type includes the driver_handles_share_servers extra-spec. This ensures that the share will be created on a backend that supports the requested driver_handles_share_servers capability. For the Everpure FlashBlade Driver for OpenStack this must be set to False. .. code-block:: console $ openstack share type create flashblade False Additionally, the driver also reports the following common capabilities that can be specified in the share type: +----------------------------------+------------------------------------------------------+ | **Capability** | **Description** | +==================================+======================================================+ | thin_provisioning = True | All shares created on FlashBlade are always thin | | | provisioned. If you set it this, the value | | | **must be**: *True*. | +----------------------------------+------------------------------------------------------+ | snapshot_support = True/False | FlashBlade supports share snapshots. | | | If you set this, the value **must be**: *True*. | +----------------------------------+------------------------------------------------------+ | revert_to_snapshot = True/False | FlashBlade supports reverting a share to the latest | | | available snapshot. If you set this, the value | | | **must be**: *True*. | +----------------------------------+------------------------------------------------------+ To specify a common capability on the share type, use the *type-key* command, for example: .. code-block:: console $ openstack share type set flashblade --extra-specs snapshot_support=True $ openstack share type set flashblade --extra-specs revert_to_snapshot=True Step 3 - Restart the Services ***************************** Restart all Shared File Systems services (manila-share, manila-scheduler and manila-api). This step is specific to your environment. for example, `systemctl restart @manila-shr` is used to restart the share service. The :mod:`manila.share.drivers.purestorage.flashblade` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.purestorage.flashblade :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8382366 manila-23.0.0.0rc1/doc/source/admin/export_location_metadata.rst0000664000175000017500000000343315251045254023371 0ustar00zuulzuulExport Location Metadata ======================== Manila shares can have one or more export locations. The exact number depends on the driver and the storage controller, and there is no preference for more or fewer export locations. Usually drivers create an export location for each physical network interface through which the share can be accessed. Because not all export locations have the same qualities, Manila allows drivers to add additional keys to the dict returned for each export location when a share is created. The share manager stores these extra keys and values in the database and they are available to the API service, which may expose them through the REST API or use them for filtering. Metadata Keys ------------- Only keys defined in this document are valid. Arbitrary driver-defined keys are not allowed. The following keys are defined: * `is_admin_only` - May be True or False. Defaults to False. Indicates that the export location exists for administrative purposes. If is_admin_only=True, then the export location is hidden from non-admin users calling the REST API. Also, these export locations are assumed to be reachable directly from the admin network, which is important for drivers that support share servers and which have some export locations only accessible to tenants. * `preferred` - May be True or False. Defaults to False. Indicates that clients should prefer to mount this export location over other export locations that are not preferred. This may be used by drivers which have fast/slow paths to indicate to clients which paths are faster. It could be used to indicate a path is preferred for another reason, as long as the reason isn't one that changes over the life of the manila-share service. This key is always visible through the REST API. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8392367 manila-23.0.0.0rc1/doc/source/admin/generic_driver.rst0000664000175000017500000002654215251045254021315 0ustar00zuulzuul.. Copyright 2014 Mirantis Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Generic approach for share provisioning ======================================= The Shared File Systems service can be configured to use Nova VMs and Cinder volumes. Using this driver, Manila will use SSH to configure the shares on the service virtual machine instance. The following options may be specified in the manila.conf configuration file: .. code-block:: ini # User in service instance that will be used for authentication. # (string value) #service_instance_user = # Password for service instance user. (string value) #service_instance_password = # Path to host's private key. (string value) #path_to_private_key = # Maximum time in seconds to wait for creating service instance. # (integer value) #max_time_to_build_instance = 300 # Block SSH connection to the service instance from other networks # than service network. (boolean value) #limit_ssh_access = false Additionally, this driver supports both ``DHSS=False`` and ``DHSS=True``. Depending on which one you use, you need to specify different configuration options in your manila.conf configuration file. - With ``DHSS=False``: .. code-block:: ini # Name or ID of service instance in Nova to use for share exports. # Used only when share servers handling is disabled. (string value) #service_instance_name_or_id = # Can be either name of network that is used by service instance # within Nova to get IP address or IP address itself (either IPv4 or # IPv6) for managing shares there. Used only when share servers # handling is disabled. (host address value) #service_net_name_or_ip = # Can be either name of network that is used by service instance # within Nova to get IP address or IP address itself (either IPv4 or # IPv6) for exporting shares. Used only when share servers handling is # disabled. (host address value) #tenant_net_name_or_ip = - With ``DHSS=True``: .. code-block:: ini # Name of image in Glance, that will be used for service instance # creation. Only used if driver_handles_share_servers=True. (string # value) #service_image_name = manila-service-image # Name of service instance. Only used if # driver_handles_share_servers=True. (string value) #service_instance_name_template = manila_service_instance_%s # Keypair name that will be created and used for service instances. # Only used if driver_handles_share_servers=True. (string value) #manila_service_keypair_name = manila-service # Path to hosts public key. Only used if # driver_handles_share_servers=True. (string value) #path_to_public_key = ~/.ssh/id_rsa.pub # Security group name, that will be used for service instance # creation. Only used if driver_handles_share_servers=True. (string # value) #service_instance_security_group = manila-service # ID of flavor, that will be used for service instance creation. Only # used if driver_handles_share_servers=True. (string value) #service_instance_flavor_id = 100 # Name of manila service network. Used only with Neutron. Only used if # driver_handles_share_servers=True. (string value) #service_network_name = manila_service_network # CIDR of manila service network. Used only with Neutron and if # driver_handles_share_servers=True. (string value) #service_network_cidr = 10.254.0.0/16 # This mask is used for dividing service network into subnets, IP # capacity of subnet with this mask directly defines possible amount # of created service VMs per tenant's subnet. Used only with Neutron # and if driver_handles_share_servers=True. (integer value) #service_network_division_mask = 28 # Module path to the Virtual Interface (VIF) driver class. This option # is used only by drivers operating in # `driver_handles_share_servers=True` mode that provision OpenStack # compute instances as share servers. This option is only supported # with Neutron networking. Drivers provided in tree work with Linux # Bridge (manila.network.linux.interface.BridgeInterfaceDriver) and # OVS (manila.network.linux.interface.OVSInterfaceDriver). If the # manila-share service is running on a host that is connected to the # administrator network, a no-op driver # (manila.network.linux.interface.NoopInterfaceDriver) may be used. # (string value) #interface_driver = manila.network.linux.interface.OVSInterfaceDriver # Attach share server directly to share network. Used only with # Neutron and if driver_handles_share_servers=True. (boolean value) #connect_share_server_to_tenant_network = false # ID of neutron network used to communicate with admin network, to # create additional admin export locations on. (string value) #admin_network_id = # ID of neutron subnet used to communicate with admin network, to # create additional admin export locations on. Related to # 'admin_network_id'. (string value) #admin_subnet_id = Configuring the right options depends on the network layout of your setup, see next section for more details. Network configurations ---------------------- If using ``DHSS=True``, there are two possible network configurations that can be chosen for share provisioning using this driver: - Service VM (SVM) has one NIC connected to a network that connects to a public router. This is, the service VM will be connected to a static administrative network created beforehand by an administrator. This approach is valid in 'flat' network topologies, where a single Neutron network is defined for all projects (no tenant networks). - Service VM has two NICs, first one connected to service network, second one connected directly to user's network. This is, in a tenant-networks-enabled Neutron deployment, manila will create a dedicated network for the share. Depending on the setup, specific configuration options are required in the manila.conf file. In particular, if you are using only a static administrative network, you need the following: .. code-block:: ini driver_handles_share_servers = True connect_share_server_to_tenant_network = True admin_network_id = admin_subnet_id = # Module path to the Virtual Interface (VIF) driver class. This option # is used only by drivers operating in # `driver_handles_share_servers=True` mode that provision OpenStack # compute instances as share servers. This option is only supported # with Neutron networking. Drivers provided in tree work with Linux # Bridge (manila.network.linux.interface.BridgeInterfaceDriver) and # OVS (manila.network.linux.interface.OVSInterfaceDriver). If the # manila-share service is running on a host that is connected to the # administrator network, a no-op driver # (manila.network.linux.interface.NoopInterfaceDriver) may be used. # (string value) interface_driver = manila.network.linux.interface.NoopInterfaceDriver Requirements for service image ------------------------------ - Linux based distro - NFS server - Samba server >=3.2.0, that can be configured by data stored in registry - SSH server - Two net interfaces configured to DHCP (see network approaches) - 'exportfs' and 'net conf' libraries used for share actions - Following files will be used, so if their paths differ one needs to create at least symlinks for them: * /etc/exports (permanent file with NFS exports) * /var/lib/nfs/etab (temporary file with NFS exports used by 'exportfs') * /etc/fstab (permanent file with mounted filesystems) * /etc/mtab (temporary file with mounted filesystems used by 'mount') Supported shared filesystems ---------------------------- - NFS (access by IP) - CIFS (access by IP) Known restrictions ------------------ - One of Nova's configurations only allows 26 shares per server. This limit comes from the maximum number of virtual PCI interfaces that are used for block device attaching. There are 28 virtual PCI interfaces, in this configuration, two of them are used for server needs and other 26 are used for attaching block devices that are used for shares. - Juno version works only with Neutron. Each share should be created with neutron-net and neutron-subnet IDs provided via share-network entity. - Juno version handles security group, flavor, image, keypair for Nova VM and also creates service networks, but does not use availability zones for Nova VMs and volume types for Cinder block devices. - Juno version does not use security services data provided with share-network. These data will be just ignored. - Liberty version adds a share extend capability. Share access will be briefly interrupted during an extend operation. - Liberty version adds a share shrink capability, but this capability is not effective because generic driver shrinks only filesystem size and doesn't shrink the size of Cinder volume. - Modifying network-related configuration options, such as ``service_network_cidr`` or ``service_network_division_mask``, after manila has already created some shares using those options is not supported. - One of the limitations that severely affects availability in the cloud is the Single Point of Failure (SPOF) issue. The driver uses a Nova VM as its NAS (NFS/CIFS) server. If/When the server goes down, there is no way to continue serving data. Due to this SPOF, today's open source SVM solutions for multi-tenant manila service do not really constitute a viable alternative to using proprietary, vendor-supplied storage arrays or appliances that combine per-tenant virtualization and solid HA recovery mechanisms. They are useful as objects of reference and study but are not acceptable to operators of real life clouds whose customers will not tolerate having to wait for manual intervention to recover from unpredictable storage data path outages. - The generic driver assumes the manila-share service is running on a node where there is an integration bridge where it can plug in the service VM (nova instance in this case). This condition does not hold in a common deployment topology where manila-share is run on a controller node and networking services are run on a separate dedicated node. Using Windows instances ~~~~~~~~~~~~~~~~~~~~~~~ While the generic driver only supports Linux instances, you may use the Windows SMB driver when Windows VMs are preferred. For more details, please check out the following page: :ref:`windows_smb_driver`. .. note:: This driver has been deprecated in 18.0.0 release. The :mod:`manila.share.drivers.generic` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.generic :noindex: :members: :undoc-members: :show-inheritance: The :mod:`manila.share.drivers.service_instance` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.service_instance :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8392367 manila-23.0.0.0rc1/doc/source/admin/glusterfs_driver.rst0000664000175000017500000001712215251045254021711 0ustar00zuulzuul.. Copyright 2015 Red Hat, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. GlusterFS driver ================ GlusterFS driver uses GlusterFS, an open source distributed file system, as the storage backend for serving file shares to manila clients. .. note:: This driver has been deprecated in 18.0.0 release. Supported shared filesystems ---------------------------- - NFS (access by IP) Supported Operations -------------------- - Create share - Delete share - Allow share access (rw) - Deny share access - With volume layout: - Create snapshot - Delete snapshot - Create share from snapshot Requirements ------------ - Install glusterfs-server package, version >= 3.5.x, on the storage backend. - Install NFS-Ganesha, version >=2.1, if using NFS-Ganesha as the NFS server for the GlusterFS backend. - Install glusterfs and glusterfs-fuse package, version >=3.5.x, on the manila host. - Establish network connection between the manila host and the storage backend. Manila driver configuration setting ----------------------------------- The following parameters in the manila's configuration file need to be set: - `share_driver` = manila.share.drivers.glusterfs.GlusterfsShareDriver The following configuration parameters are optional: - `glusterfs_nfs_server_type` = - `glusterfs_share_layout` = ; cf. :ref:`glusterfs_layouts` - `glusterfs_path_to_private_key` = - `glusterfs_server_password` = If Ganesha NFS server is used (``glusterfs_nfs_server_type = Ganesha``), then by default the Ganesha server is supposed to run on the manila host and is managed by local commands. If it's deployed somewhere else, then it's managed via ssh, which can be configured by the following parameters: - `glusterfs_ganesha_server_ip` - `glusterfs_ganesha_server_username` - `glusterfs_ganesha_server_password` In lack of ``glusterfs_ganesha_server_password`` ssh access will fall back to key based authentication, using the key specified by ``glusterfs_path_to_private_key``, or, in lack of that, a key at one of the OpenSSH-style default key locations (*~/.ssh/id_{r,d,ecd}sa*). Layouts have also their set of parameters, see :ref:`glusterfs_layouts` about that. .. _glusterfs_layouts: Layouts ------- New in Liberty, multiple share layouts can be used with glusterfs driver. A layout is a strategy of allocating storage from GlusterFS backends for shares. Currently there are two layouts implemented: - `directory mapped layout` (or `directory layout`, or `dir layout` for short): a share is backed by top-level subdirectories of a given GlusterFS volume. Directory mapped layout is the default and backward compatible with Kilo. The following setting explicitly specifies its usage: ``glusterfs_share_layout = layout_directory.GlusterfsDirectoryMappedLayout``. Options: - `glusterfs_target`: address of the volume that hosts the directories. If it's of the format `:/`, then the manila host is expected to be part of the GlusterFS cluster of the volume and GlusterFS management happens through locally calling the ``gluster`` utility. If it's of the format `@:/`, then we ssh to `@` to execute ``gluster`` (`` is supposed to have administrative privileges on ``). - `glusterfs_mount_point_base` = (optional; defaults to *$state_path*\ ``/mnt``, where *$state_path* defaults to ``/var/lib/manila``) Limitations: - directory layout does not support snapshot operations. - `volume mapped layout` (or `volume layout`, or `vol layout` for short): a share is backed by a whole GlusterFS volume. Volume mapped layout is new in Liberty. It can be chosen by setting ``glusterfs_share_layout = layout_volume.GlusterfsVolumeMappedLayout``. Options (required): - `glusterfs_servers` - `glusterfs_volume_pattern` Volume mapped layout is implemented as a common backend of the glusterfs and glusterfs-native drivers; see the description of these options in :doc:`glusterfs_native_driver`: :ref:`gluster_native_manila_conf`. Gluster NFS with volume mapped layout ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A special configuration choice is :: glusterfs_nfs_server_type = Gluster glusterfs_share_layout = layout_volume.GlusterfsVolumeMappedLayout that is, Gluster NFS used to export whole volumes. All other GlusterFS backend configurations (including GlusterFS set up with glusterfs-native) require the ``nfs.export-volumes = off`` GlusterFS setting. Gluster NFS with volume layout requires ``nfs.export-volumes = on``. ``nfs.export-volumes`` is a *cluster-wide* setting, so a given GlusterFS cluster cannot host a share backend with Gluster NFS + volume layout and other share backend configurations at the same time. There is another caveat with ``nfs.export-volumes``: setting it to ``on`` without enough care is a security risk, as the default access control for the volume exports is "allow all". For this reason, while the ``nfs.export-volumes = off`` setting is automatically set by manila for all other share backend configurations, ``nfs.export-volumes = on`` is *not* set by manila in case of a Gluster NFS with volume layout setup. It's left to the GlusterFS admin to make this setting in conjunction with the associated safeguards (that is, for those volumes of the cluster which are not used by manila, access restrictions have to be manually configured through the ``nfs.rpc-auth-{allow,reject}`` options). Known Restrictions ------------------ - The driver does not support network segmented multi-tenancy model, but instead works over a flat network, where the tenants share a network. - If NFS Ganesha is the NFS server used by the GlusterFS backend, then the shares can be accessed by NFSv3 and v4 protocols. However, if Gluster NFS is used by the GlusterFS backend, then the shares can only be accessed by NFSv3 protocol. - All manila shares, which map to subdirectories within a GlusterFS volume, are currently created within a single GlusterFS volume of a GlusterFS storage pool. - The driver does not provide read-only access level for shares. - Assume that share S is exported through Gluster NFS, and tenant machine T has mounted S. If at this point access of T to S is revoked through `access-deny`, the pre-existing mount will be still usable and T will still be able to access the data in S as long as that mount is in place. (This violates the principle *Access deny should always result in immediate loss of access to the share*, see http://lists.openstack.org/pipermail/openstack-dev/2015-July/069109.html.) The :mod:`manila.share.drivers.glusterfs` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.glusterfs :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8392367 manila-23.0.0.0rc1/doc/source/admin/glusterfs_native_driver.rst0000664000175000017500000001462215251045254023261 0ustar00zuulzuul.. Copyright 2015 Red Hat, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. GlusterFS Native driver ======================= GlusterFS Native driver uses GlusterFS, an open source distributed file system, as the storage backend for serving file shares to manila clients. A manila share is a GlusterFS volume. This driver uses flat-network (share-server-less) model. Instances directly talk with the GlusterFS backend storage pool. The instances use 'glusterfs' protocol to mount the GlusterFS shares. Access to each share is allowed via TLS Certificates. Only the instance which has the TLS trust established with the GlusterFS backend can mount and hence use the share. Currently only 'rw' access is supported. .. note:: This driver has been deprecated in 18.0.0 release. Network Approach ---------------- L3 connectivity between the storage backend and the host running the manila share service should exist. Supported shared filesystems ---------------------------- - GlusterFS (share protocol: ``glusterfs``, access by TLS certificates (``cert`` access type)) Multi-tenancy model ------------------- The driver does not support network segmented multi-tenancy model. Instead multi-tenancy is supported using tenant specific TLS certificates. Supported Operations -------------------- - Create share - Delete share - Allow share access (rw) - Deny share access - Create snapshot - Delete snapshot - Create share from snapshot Requirements ------------ - Install glusterfs-server package, version >= 3.6.x, on the storage backend. - Install glusterfs and glusterfs-fuse package, version >=3.6.x, on the manila host. - Establish network connection between the manila host and the storage backend. .. _gluster_native_manila_conf: Manila driver configuration setting ----------------------------------- The following parameters in manila's configuration file need to be set: - `share_driver` = manila.share.drivers.glusterfs.glusterfs_native.GlusterfsNativeShareDriver - `glusterfs_servers` = List of GlusterFS servers which provide volumes that can be used to create shares. The servers are expected to be of distinct Gluster clusters (ie. should not be gluster peers). Each server should be of the form ``[@]``. The optional ``@`` part of the server URI indicates SSH access for cluster management (see related optional parameters below). If it is not given, direct command line management is performed (ie. manila host is assumed to be part of the GlusterFS cluster the server belongs to). - `glusterfs_volume_pattern` = Regular expression template used to filter GlusterFS volumes for share creation. The regex template can contain the #{size} parameter which matches a number (sequence of digits) and the value shall be interpreted as size of the volume in GB. Examples: ``manila-share-volume-\d+$``, ``manila-share-volume-#{size}G-\d+$``; with matching volume names, respectively: *manila-share-volume-12*, *manila-share-volume-3G-13*". In latter example, the number that matches ``#{size}``, that is, 3, is an indication that the size of volume is 3G. The following configuration parameters are optional: - `glusterfs_mount_point_base` = - `glusterfs_path_to_private_key` = - `glusterfs_server_password` = Host and backend configuration ------------------------------ - SSL/TLS should be enabled on the I/O path for GlusterFS servers and volumes involved (ie. ones specified in ``glusterfs_servers``), as described in https://docs.gluster.org/en/latest/Administrator%20Guide/SSL/. (Enabling SSL/TLS for the management path is also possible but not recommended currently.) - The manila host should be also configured for GlusterFS SSL/TLS (ie. `/etc/ssl/glusterfs.{pem,key,ca}` files has to be deployed as the above document specifies). - There is a further requirement for the CA-s used: the set of CA-s involved should be consensual, ie. `/etc/ssl/glusterfs.ca` should be identical across all the servers and the manila host. - There is a further requirement for the common names (CN-s) of the certificates used: the certificates of the servers should have a common name starting with `glusterfs-server`, and the certificate of the host should have common name starting with `manila-host`. - To support snapshots, bricks that consist the GlusterFS volumes used by manila should be thinly provisioned LVM ones (cf. https://gluster.readthedocs.org/en/latest/Administrator%20Guide/Managing%20Snapshots/). Known Restrictions ------------------ - GlusterFS volumes are not created on demand. A pre-existing set of GlusterFS volumes should be supplied by the GlusterFS cluster(s), conforming to the naming convention encoded by ``glusterfs_volume_pattern``. However, the GlusterFS endpoint is allowed to extend this set any time (so manila and GlusterFS endpoints are expected to communicate volume supply/demand out-of-band). ``glusterfs_volume_pattern`` can include a size hint (with ``#{size}`` syntax), which, if present, requires the GlusterFS end to indicate the size of the shares in GB in the name. (On share creation, manila picks volumes *at least* as big as the requested one.) - Certificate setup (aka trust setup) between instance and storage backend is out of band of manila. - For manila to use GlusterFS volumes, the name of the trashcan directory in GlusterFS volumes must not be changed from the default. The :mod:`manila.share.drivers.glusterfs.glusterfs_native.GlusterfsNativeShareDriver` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.glusterfs.glusterfs_native :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8392367 manila-23.0.0.0rc1/doc/source/admin/gpfs_driver.rst0000664000175000017500000000656615251045254020644 0ustar00zuulzuul.. Copyright 2015 IBM Corp. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. GPFS Driver =========== GPFS driver uses IBM General Parallel File System (GPFS), a high-performance, clustered file system, developed by IBM, as the storage backend for serving file shares to the manila clients. Supported shared filesystems ---------------------------- - NFS (access by IP) Supported Operations -------------------- - Create NFS Share - Delete NFS Share - Create Share Snapshot - Delete Share Snapshot - Create Share from a Share Snapshot - Allow NFS Share access * Currently only 'rw' access level is supported - Deny NFS Share access Requirements ------------ - Install GPFS with server license, version >= 2.0, on the storage backend. - Install Kernel NFS or Ganesha NFS server on the storage backend servers. - If using Ganesha NFS, currently NFS Ganesha v1.5 and v2.0 are supported. - Create a GPFS cluster and create a filesystem on the cluster, that will be used to create the manila shares. - Enable quotas for the GPFS file system (`mmchfs -Q yes`). - Establish network connection between the manila host and the storage backend. Manila driver configuration setting ----------------------------------- The following parameters in the manila configuration file need to be set: - `share_driver` = manila.share.drivers.ibm.gpfs.GPFSShareDriver - `gpfs_share_export_ip` = - If the backend GPFS server is not running on the manila host machine, the following options are required to SSH to the remote GPFS backend server: - `gpfs_ssh_login` = and one of the following settings is required to execute commands over SSH: - `gpfs_ssh_private_key` = - `gpfs_ssh_password` = The following configuration parameters are optional: - `gpfs_mount_point_base` = - `gpfs_nfs_server_type` = - `gpfs_nfs_server_list` = - `gpfs_ssh_port` = Restart of :term:`manila-share` service is needed for the configuration changes to take effect. Known Restrictions ------------------ - The driver does not support a segmented-network multi-tenancy model but instead works over a flat network where the tenants share a network. - While using remote GPFS node, with Ganesha NFS, 'gpfs_ssh_private_key' for remote login to the GPFS node must be specified and there must be a passwordless authentication already setup between the manila share service and the remote GPFS node. The :mod:`manila.share.drivers.ibm.gpfs` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.ibm.gpfs :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8392367 manila-23.0.0.0rc1/doc/source/admin/group_capabilities_and_extra_specs.rst0000664000175000017500000000367015251045254025412 0ustar00zuulzuul.. _group_capabilities_and_extra_specs: Group Capabilities and group-specs ================================== Manila Administrators create share group types with :ref:`shared_file_systems_share_types` and group-specs to allow users to request a group type of share group to create. The Administrator chooses a name for the share group type and decides how to communicate the significance of the different share group types in terms that the users should understand or need to know. By design, most of the details of a share group type (the extra- specs) are not exposed to users -- only Administrators. Share group Types ----------------- Refer to the manila client command-line help for information on how to create a share group type and set "share types", "group-spec" key/value pairs for a share group type. Group-Specs ----------- The group specs contains the group capabilities, similar to snapshot_support in share types. Users know what a group can do from group specs. The group specs is an exact match requirement in share group filter (such as ConsistentSnapshotFilter). When the ConsistentSnapshotFilter is enabled (it is enabled by default), the scheduler will only create a share group on a backend that reports capabilities that match the share group type's group-spec keys. Common Group Capabilities ------------------------- For group capabilities that apply to multiple backends a common capability can be created. Like all other backend reported group capabilities, these group capabilities can be used verbatim as group_specs in share group types used to create share groups. * `consistent_snapshot_support` - indicates that a backend can enable you to create snapshots at the exact same point in time from multiple shares. The default value of the consistent_snapshot_support capability (if a driver doesn't report it) is None. Administrators can make a share group type use consistent snapshot support by setting this group-spec to 'host'. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8392367 manila-23.0.0.0rc1/doc/source/admin/hdfs_native_driver.rst0000664000175000017500000000610615251045254022165 0ustar00zuulzuul.. Copyright 2015 Intel, Corp. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. HDFS native driver ================== HDFS native driver is a plugin based on the OpenStack manila service, which uses Hadoop distributed file system (HDFS), a distributed file system designed to hold very large amounts of data, and provide high-throughput access to the data. A manila share in this driver is a subdirectory in hdfs root directory. Instances talk directly to the HDFS storage backend with 'hdfs' protocol. And access to each share is allowed by user based access type, which is aligned with HDFS ACLs to support access control of multiple users and groups. Network configuration --------------------- The storage backend and manila hosts should be in a flat network, otherwise, the L3 connectivity between them should exist. Supported shared filesystems ---------------------------- - HDFS (authentication by user) Supported Operations -------------------- - Create HDFS share - Delete HDFS share - Allow HDFS Share access * Only support user access type * Support level of access (ro/rw) - Deny HDFS Share access - Create snapshot - Delete snapshot - Create share from snapshot - Extend share Requirements ------------ - Install HDFS package, version >= 2.4.x, on the storage backend - To enable access control, the HDFS file system must have ACLs enabled - Establish network connection between the manila host and storage backend Manila driver configuration --------------------------- - `share_driver` = manila.share.drivers.hdfs.hdfs_native.HDFSNativeShareDriver - `hdfs_namenode_ip` = the IP address of the HDFS namenode, and only single namenode is supported now - `hdfs_namenode_port` = the port of the HDFS namenode service - `hdfs_ssh_port` = HDFS namenode SSH port - `hdfs_ssh_name` = HDFS namenode SSH login name - `hdfs_ssh_pw` = HDFS namenode SSH login password, this parameter is not necessary, if the following `hdfs_ssh_private_key` is configured - `hdfs_ssh_private_key` = Path to the HDFS namenode private key to ssh login Known Restrictions ------------------ - This driver does not support network segmented multi-tenancy model. Instead multi-tenancy is supported by the tenant specific user authentication - Only support for single HDFS namenode in Kilo release The :mod:`manila.share.drivers.hdfs.hdfs_native` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.hdfs.hdfs_native :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8392367 manila-23.0.0.0rc1/doc/source/admin/hitachi_hnas_driver.rst0000664000175000017500000005246615251045254022327 0ustar00zuulzuul.. Copyright 2016 Hitachi Data Systems, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ======================================================= Hitachi NAS Platform File Services Driver for OpenStack ======================================================= ------------------ Driver Version 3.0 ------------------ Hitachi NAS Platform Storage Requirements ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This Hitachi NAS Platform File Services Driver for OpenStack provides support for Hitachi NAS Platform (HNAS) models 3080, 3090, 4040, 4060, 4080 and 4100 with NAS OS 12.2 or higher. Before configuring the driver, ensure the HNAS has at least: - 1 storage pool (span) configured. - 1 EVS configured. - 1 file system in this EVS, created without replication target option and should be in mounted state. It is recommended to disable auto-expansion, because the scheduler uses the current free space reported by the file system when creating shares. - 1 Management User configured with "supervisor" permission level. - Hitachi NAS Management interface should be reachable from manila-share node. Also, if the driver is going to create CIFS shares, either LDAP servers or domains must be configured previously in HNAS to provide the users and groups. Supported Operations ~~~~~~~~~~~~~~~~~~~~ The following operations are supported in this version of Hitachi NAS Platform File Services Driver for OpenStack: - Create and delete CIFS and NFS shares; - Extend and shrink shares; - Manage rules to shares (allow/deny access); - Allow and deny share access; - ``IP`` access type supported for ``NFS`` shares; - ``User`` access type supported for ``CIFS`` shares; - Both ``RW`` and ``RO`` access level are supported for NFS and CIFS shares; - Manage and unmanage shares; - Create and delete snapshots; - Create shares from snapshots. Driver Configuration ~~~~~~~~~~~~~~~~~~~~ This document contains the installation and user guide of the Hitachi NAS Platform File Services Driver for OpenStack. Although mentioning some Shared File Systems service operations and HNAS commands, both are not in the scope of this document. Please refer to their own guides for details. Before configuring the driver, make sure that the nodes running the manila-share service have access to the HNAS management port, and compute and network nodes have access to the data ports (EVS IPs or aggregations). The driver configuration can be summarized in the following steps: #. Configure HNAS parameters on ``manila.conf``; #. Prepare the network ensuring all OpenStack-HNAS connections mentioned above; #. Configure/create share type; #. Restart the services; #. Configure OpenStack networks. Step 1 - HNAS Parameters Configuration ************************************** The following parameters need to be configured in the [DEFAULT] section of ``/etc/manila/manila.conf``: +----------------------------+------------------------------------------------+ | **Option** | **Description** | +============================+================================================+ | enabled_share_backends | Name of the section on ``manila.conf`` used to | | | specify a backend. For example: | | | *enabled_share_backends = hnas1* | +----------------------------+------------------------------------------------+ | enabled_share_protocols | Specify a list of protocols to be allowed for | | | share creation. This driver version supports | | | NFS and/or CIFS. | +----------------------------+------------------------------------------------+ The following parameters need to be configured in the [backend] section of ``/etc/manila/manila.conf``: +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | **Option** | **Description** | +=================================================+=====================================================================================================+ | share_backend_name | A name for the backend. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | share_driver | Python module path. For this driver **this must be**: | | | *manila.share.drivers.hitachi.hnas.driver.HitachiHNASDriver* | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | driver_handles_share_servers | Driver working mode. For this driver **this must be**: | | | *False*. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | hitachi_hnas_ip | HNAS management interface IP for communication between manila-share node and HNAS. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | hitachi_hnas_user | This field is used to provide user credential to HNAS. Provided management user must have | | | "supervisor" level. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | hitachi_hnas_password | This field is used to provide password credential to HNAS. | | | Either hitachi_hnas_password or hitachi_hnas_ssh_private_key must be set. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | hitachi_hnas_ssh_private_key | Set this parameter with RSA/DSA private key path to allow the driver to connect into HNAS. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | hitachi_hnas_evs_id | ID from EVS which this backend is assigned to (ID can be listed by CLI "evs list" | | | or EVS Management in HNAS Interface). | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | hitachi_hnas_evs_ip | EVS IP for mounting shares (this can be listed by CLI "evs list" or EVS Management in HNAS | | | interface). | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | hitachi_hnas_file_system_name | Name of the file system in HNAS, located in the specified EVS. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | hitachi_hnas_cluster_admin_ip0* | If HNAS is in a multi-farm (one SMU managing multiple HNAS) configuration, set this parameter with | | | the IP of the cluster's admin node. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | hitachi_hnas_stalled_job_timeout* | Tree-clone-job commands are used to create snapshots and create shares from snapshots. | | | This parameter sets a timeout (in seconds) to wait for jobs to complete. Default value is | | | 30 seconds. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | hitachi_hnas_driver_helper* | Python module path for the driver helper. For this driver, it should use (default value): | | | *manila.share.drivers.hitachi.hnas.ssh.HNASSSHBackend* | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | hitachi_hnas_allow_cifs_snapshot_while_mounted* | By default, CIFS snapshots are not allowed to be taken while the share has clients connected | | | because point-in-time replica cannot be guaranteed for all files. This parameter can be set | | | to *True* to allow snapshots to be taken while the share has clients connected. **WARNING**: | | | Setting this parameter to *True* might cause inconsistent snapshots on CIFS shares. Default | | | value is *False*. | +-------------------------------------------------+-----------------------------------------------------------------------------------------------------+ \* Non mandatory parameters. Below is an example of a valid configuration of HNAS driver: .. code-block:: ini [DEFAULT]`` ... enabled_share_backends = hitachi1 enabled_share_protocols = CIFS,NFS ... [hitachi1] share_backend_name = HITACHI1 share_driver = manila.share.drivers.hitachi.hnas.driver.HitachiHNASDriver driver_handles_share_servers = False hitachi_hnas_ip = 192.0.2.15 hitachi_hnas_user = supervisor hitachi_hnas_password = supervisor hitachi_hnas_evs_id = 1 hitachi_hnas_evs_ip = 192.0.2.20 hitachi_hnas_file_system_name = FS-Manila Step 2 - Prepare the Network **************************** In the driver mode used by Hitachi NAS Platform File Services Driver for OpenStack, driver_handles_share_servers (DHSS) as False, the driver does not handle network configuration, it is up to the administrator to configure it. It is mandatory that HNAS management interface is reachable from a manila-share node through admin network, while the selected EVS data interface is reachable from OpenStack Cloud, such as through neutron flat networking. Here is a step-by-step of an example configuration: | **Manila-Share Node:** | **eth0**: Admin Network, can ping HNAS management interface. | **eth1**: Data Network, can ping HNAS EVS IP (data interface). This interface is only required if you plan to use Share Migration. | **Network Node and Compute Nodes:** | **eth0**: Admin Network, can ping HNAS management interface. | **eth1**: Data Network, can ping HNAS EVS IP (data interface). The following image represents the described scenario: .. image:: /images/rpc/hds_network.jpg :width: 60% Run in **Network Node**: .. code-block:: console $ sudo ifconfig eth1 0 $ sudo ovs-vsctl add-br br-eth1 $ sudo ovs-vsctl add-port br-eth1 eth1 $ sudo ifconfig eth1 up Edit */etc/neutron/plugins/ml2/ml2_conf.ini* (default directory), change the following settings as follows in their respective tags: .. code-block:: ini [ml2] type_drivers = flat,vlan,vxlan,gre mechanism_drivers = openvswitch [ml2_type_flat] flat_networks = physnet1,physnet2 [ml2_type_vlan] network_vlan_ranges = physnet1:1000:1500,physnet2:2000:2500 [ovs] bridge_mappings = physnet1:br-ex,physnet2:br-eth1 You may have to repeat the last line above in another file in the Compute Node, if it exists is located in: */etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini*. Create a route in HNAS to the tenant network. Please make sure multi-tenancy is enabled and routes are configured per EVS. Use the command "route-net-add" in HNAS console, where the network parameter should be the tenant's private network, while the gateway parameter should be the flat network gateway and the "console-context --evs" parameter should be the ID of EVS in use, such as in the following example: .. code-block:: console $ console-context --evs 3 route-net-add --gateway 203.0.113.1 198.51.100.0/24 Step 3 - Share Type Configuration ********************************* Shared File Systems service requires that the share type includes the driver_handles_share_servers extra-spec. This ensures that the share will be created on a backend that supports the requested driver_handles_share_servers capability. For the Hitachi NAS Platform File Services Driver for OpenStack this must be set to False. .. code-block:: console $ openstack share type create hitachi False Additionally, the driver also reports the following common capabilities that can be specified in the share type: +----------------------------+----------------------------------------------+ | **Capability** | **Description** | +============================+==============================================+ | thin_provisioning = True | All shares created on HNAS are always thin | | | provisioned. So, if you set it, the value | | | **must be**: *True*. | +----------------------------+----------------------------------------------+ | dedupe = True/False | HNAS supports deduplication on its file | | | systems and the driver will report | | | *dedupe=True* if it is enabled on the file | | | system being used. To use it, go to HNAS and | | | enable the feature on the file system used. | +----------------------------+----------------------------------------------+ To specify a common capability on the share type, use the *share type set* command, for example: .. code-block:: console $ openstack share type set hitachi --extra-specs dedupe=True Step 4 - Restart the Services ***************************** Restart all Shared File Systems services (manila-share, manila-scheduler and manila-api) and neutron services (neutron-\*). This step is specific to your environment. If you are running in devstack for example, you have to log into screen (``screen -r``), stop the process (``Ctrl^C``) and run it again. If you are running it in a distro like RHEL, a systemd command (for example *systemctl restart manila-api*) is used to restart the service. Step 5 - Configure OpenStack Networks ************************************* In Neutron Controller it is necessary to create a network, a subnet and to add this subnet interface to a router: Create a network to the given tenant (demo), providing the DEMO_ID (this can be fetched using *keystone tenant-list*), a name for the network, the name of the physical network over which the virtual network is implemented and the type of the physical mechanism by which the virtual network is implemented: .. code-block:: console $ neutron net-create --tenant-id hnas_network --provider:physical_network=physnet2 --provider:network_type=flat Create a subnet to same tenant (demo), providing the DEMO_ID (this can be fetched using *keystone tenant-list*), the gateway IP of this subnet, a name for the subnet, the network ID created on previously step (this can be fetched using *neutron net-list*) and CIDR of subnet: .. code-block:: console $ neutron subnet-create --tenant-id --gateway --name hnas_subnet Finally, add the subnet interface to a router, providing the router ID and subnet ID created on previously step (can be fetched using *neutron subnet-list*): .. code-block:: console $ neutron router-interface-add Manage and Unmanage Shares ~~~~~~~~~~~~~~~~~~~~~~~~~~ Manila has the ability to adopt and abandon shares. If there is a share in the storage and it is not in OpenStack, you can adopt that share and use it as a manila share. Hitachi NAS Platform File Services Driver for OpenStack use virtual-volumes (V-VOLs) to create shares. Only V-VOLs with a quota limit can be used by the driver, also, they must be created or moved inside the directory '/shares/' and exported (as NFS or CIFS shares). The unmanage operation only unlinks the share from OpenStack, preserving all data in the share. To **manage** shares use: .. code-block:: console $ openstack share adopt [--name ] [--description ] [--share-type ] [--driver-options [ [ ...]]] Where: +------------------+----------------------------------------------------------+ | Parameter | Description | +==================+==========================================================+ | | Manila host, backend and share name. For example | | service_host | ubuntu\@hitachi1#HITACHI1. The available hosts can be | | | listed with the command: | | | *openstack share pool list* (admin only). | +------------------+---------------------+------------------------------------+ | protocol | NFS or CIFS protocols are currently supported. | +------------------+----------------------------------------------------------+ | export_path | The export path of the share. | | | For example: *192.0.2.31:/shares/some_share_id* | +------------------+----------------------------------------------------------+ To **unmanage** a share use: .. code-block:: console $ openstack share abandon Where: +------------------+---------------------------------------------------------+ | Parameter | Description | +==================+=========================================================+ | share_id | Manila ID of the share to be unmanaged. This list can | | | be fetched with: *openstack share list*. | +------------------+---------------------------------------------------------+ Additional Notes ~~~~~~~~~~~~~~~~ - HNAS has some restrictions about the number of EVSs, file systems, virtual-volumes and simultaneous SSC connections. Check the manual specification for your system. - Shares and snapshots are thin provisioned. It is reported to manila only the real used space in HNAS. Also, a snapshot does not initially take any space in HNAS, it only stores the difference between the share and the snapshot, so it grows when share data is changed. - Admins should manage the tenant's quota (*openstack share quota set*) to control the backend usage. - By default, CIFS snapshots are disabled when the share is mounted, since it uses tree-clone to create snapshots and does not guarantee point-in-time replicas when the source directory tree is changing, also, changing permissions to *read-only* does not affect already mounted shares. So, enable it if your source directory can be static while taking snapshots. Currently, it affects only CIFS protocol. For more information check the tree-clone feature in HNAS with *man tree-clone*. The :mod:`manila.share.drivers.hitachi.hnas.driver` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.hitachi.hnas.driver :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8402371 manila-23.0.0.0rc1/doc/source/admin/hpe_3par_driver.rst0000664000175000017500000002671715251045254021406 0ustar00zuulzuul.. Copyright 2015 Hewlett Packard Development Company, L.P. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. HPE 3PAR Driver for OpenStack Manila ==================================== The HPE 3PAR manila driver provides NFS and CIFS shared file systems to OpenStack using HPE 3PAR's File Persona capabilities. .. note:: In OpenStack releases prior to Mitaka this driver was called the HP 3PAR driver. The Liberty configuration reference can be found at: http://docs.openstack.org/liberty/config-reference/content/hp-3par-share-driver.html For information on HPE 3PAR Driver for OpenStack Manila, refer to `content kit page `_. Supported Operations -------------------- The following operations are supported with HPE 3PAR File Persona: - Create/delete NFS and CIFS shares * Shares are not accessible until access rules allow access - Allow/deny NFS share access * IP access rules are required for NFS share access - Allow/deny CIFS share access * CIFS shares require user access rules. * User access requires a 3PAR local or AD user (LDAP is not yet supported) - Create/delete snapshots - Create shares from snapshots Share networks are not supported. Shares are created directly on the 3PAR without the use of a share server or service VM. Network connectivity is setup outside of manila. Requirements ------------ On the system running the manila share service: - python-3parclient 4.2.0 or newer from PyPI. On the HPE 3PAR array: - HPE 3PAR Operating System software version 3.2.1 MU3 or higher - The array class and hardware configuration must support File Persona Pre-Configuration on the HPE 3PAR --------------------------------- - HPE 3PAR File Persona must be initialized and started (:code:`startfs`) - A File Provisioning Group (FPG) must be created for use with manila - A Virtual File Server (VFS) must be created for the FPG - The VFS must be configured with an appropriate share export IP address - A local user in the Administrators group is needed for CIFS shares Backend Configuration --------------------- The following parameters need to be configured in the manila configuration file for the HPE 3PAR driver: - `share_backend_name` = - `share_driver` = manila.share.drivers.hpe.hpe_3par_driver.HPE3ParShareDriver - `driver_handles_share_servers` = False - `hpe3par_fpg` = - `hpe3par_share_ip_address` = - `hpe3par_san_ip` = - `hpe3par_api_url` = <3PAR WS API Server URL> - `hpe3par_username` = <3PAR username with the 'edit' role> - `hpe3par_password` = <3PAR password for the user specified in hpe3par_username> - `hpe3par_san_login` = - `hpe3par_san_password` = - `hpe3par_debug` = - `hpe3par_cifs_admin_access_username` = - `hpe3par_cifs_admin_access_password` = - `hpe3par_cifs_admin_access_domain` = - `hpe3par_share_mount_path` = The `hpe3par_share_ip_address` must be a valid IP address for the configured FPG's VFS. This IP address is used in export locations for shares that are created. Networking must be configured to allow connectivity from clients to shares. `hpe3par_cifs_admin_access_username` and `hpe3par_cifs_admin_access_password` must be provided to delete nested CIFS shares. If they are not, the share contents will not be deleted. `hpe3par_cifs_admin_access_domain` and `hpe3par_share_mount_path` can be provided for additional configuration. Restart of :term:`manila-share` service is needed for the configuration changes to take effect. Backend Configuration for AD user --------------------------------- The following parameters need to be configured through HPE 3PAR CLI to access file share using AD. Set authentication parameters:: $ setauthparam ldap-server IP_ADDRESS_OF_AD_SERVER $ setauthparam binding simple $ setauthparam user-attr AD_DOMAIN_NAME\\ $ setauthparam accounts-dn CN=Users,DC=AD,DC=DOMAIN,DC=NAME $ setauthparam account-obj user $ setauthparam account-name-attr sAMAccountName $ setauthparam memberof-attr memberOf $ setauthparam super-map CN=AD_USER_GROUP,DC=AD,DC=DOMAIN,DC=NAME Verify new authentication parameters set as expected:: $ showauthparam Verify AD users set as expected:: $ checkpassword AD_USER Command result should show ``user AD_USER is authenticated and authorized`` message on successful configuration. Add 'ActiveDirectory' in authentication providers list:: $ setfs auth ActiveDirectory Local Verify authentication provider list shows 'ActiveDirectory':: $ showfs -auth Set/Add AD user on FS:: $ setfs ad –passwd PASSWORD AD_USER AD_DOMAIN_NAME Verify FS user details:: $ showfs -ad Example of using AD user to access CIFS share --------------------------------------------- Pre-requisite: - Share type should be configured for 3PAR backend Create a CIFS file share with 2GB of size:: $ openstack share create --name FILE_SHARE_NAME --share-type SHARE_TYPE CIFS 2 Check file share created as expected:: $ openstack share show FILE_SHARE_NAME Configuration to provide share access to AD user:: $ openstack share access create FILE_SHARE_NAME user AD_DOMAIN_NAME\\\\AD_USER --access-level rw Check users permission set as expected:: $ openstack share access list FILE_SHARE_NAME The AD_DOMAIN_NAME\\AD_USER must be listed in access_to column and should show active in its state column as result of this command. Network Approach ---------------- Connectivity between the storage array (SSH/CLI and WSAPI) and the manila host is required for share management. Connectivity between the clients and the VFS is required for mounting and using the shares. This includes: - Routing from the client to the external network - Assigning the client an external IP address (e.g., a floating IP) - Configuring the manila host networking properly for IP forwarding - Configuring the VFS networking properly for client subnets Share Types ----------- When creating a share, a share type can be specified to determine where and how the share will be created. If a share type is not specified, the `default_share_type` set in the manila configuration file is used. Manila requires that the share type includes the `driver_handles_share_servers` extra-spec. This ensures that the share will be created on a backend that supports the requested driver_handles_share_servers (share networks) capability. For the HPE 3PAR driver, this must be set to False. Another common manila extra-spec used to determine where a share is created is `share_backend_name`. When this extra-spec is defined in the share type, the share will be created on a backend with a matching share_backend_name. The HPE 3PAR driver automatically reports capabilities based on the FPG used for each backend. Share types with extra specs can be created by an administrator to control which share types are allowed to use FPGs with or without specific capabilities. The following extra-specs are used with the capabilities filter and the HPE 3PAR driver: - `hpe3par_flash_cache` = ' True' or ' False' - `thin_provisioning` = ' True' or ' False' - `dedupe` = ' True' or ' False' `hpe3par_flash_cache` will be reported as True for backends that have 3PAR's Adaptive Flash Cache enabled. `thin_provisioning` will be reported as True for backends that use thin provisioned volumes. FPGs that use fully provisioned volumes will report False. Backends that use thin provisioning also support manila's over-subscription feature. `dedupe` will be reported as True for backends that use deduplication technology. Scoped extra-specs are used to influence vendor-specific implementation details. Scoped extra-specs use a prefix followed by a colon. For HPE 3PAR these extra-specs have a prefix of `hpe3par`. For HP 3PAR these extra-specs have a prefix of `hp3par`. The following HPE 3PAR extra-specs are used when creating CIFS (SMB) shares: - `hpe3par:smb_access_based_enum` = true or false - `hpe3par:smb_continuous_avail` = true or false - `hpe3par:smb_cache` = off, manual, optimized or auto `smb_access_based_enum` (Access Based Enumeration) specifies if users can see only the files and directories to which they have been allowed access on the shares. The default is `false`. `smb_continuous_avail` (Continuous Availability) specifies if SMB3 continuous availability features should be enabled for this share. If not specified, the default is `true`. This setting will be ignored with hp3parclient 3.2.1 or earlier. `smb_cache` specifies client-side caching for offline files. Valid values are: * `off`: The client must not cache any files from this share. The share is configured to disallow caching. * `manual`: The client must allow only manual caching for the files open from this share. * `optimized`: The client may cache every file that it opens from this share. Also, the client may satisfy the file requests from its local cache. The share is configured to allow automatic caching of programs and documents. * `auto`: The client may cache every file that it opens from this share. The share is configured to allow automatic caching of documents. * If this is not specified, the default is `manual`. The following HPE 3PAR extra-specs are used when creating NFS shares: - `hpe3par:nfs_options` = Comma separated list of NFS export options The NFS export options have the following limitations: * `ro` and `rw` are not allowed (manila will determine the read-only option) * `no_subtree_check` and `fsid` are not allowed per HPE 3PAR CLI support * `(in)secure` and `(no_)root_squash` are not allowed because the HPE 3PAR driver controls those settings All other NFS options are forwarded to the HPE 3PAR as part of share creation. The HPE 3PAR will do additional validation at share creation time. Refer to HPE 3PAR CLI help for more details. Delete Nested Shares -------------------- When a nested share is deleted (nested shares will be created when ``hpe_3par_fstore_per_share`` is set to ``False``), the file tree also attempts to be deleted. With NFS shares, there is no additional configuration that needs to be done. For CIFS shares, ``hpe3par_cifs_admin_access_username`` and ``hpe3par_cifs_admin_access_password`` must be provided. If they are omitted, the original functionality is honored and the file tree remains untouched. ``hpe3par_cifs_admin_access_domain`` and ``hpe3par_share_mount_path`` can also be specified to create further customization. The :mod:`manila.share.drivers.hpe.hpe_3par_driver` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.hpe.hpe_3par_driver :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8402371 manila-23.0.0.0rc1/doc/source/admin/hpe_alletra_mp_b10000_driver.rst0000664000175000017500000003356115251045254023536 0ustar00zuulzuul.. Copyright 2025 Hewlett Packard Enterprise Development LP Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. HPE Alletra MP B10000 Share Driver =================================== The HPE Alletra MP B10000 Manila driver provides NFS file services to OpenStack using the HPE Alletra MP B10000 file service capabilities. Supported Operations -------------------- The following operations are supported with HPE Alletra MP B10000: - Create/delete NFS shares - Allow/deny NFS share access - Extend shares - Manage existing shares - Unmanage shares - Create/delete snapshots - Manage/unmanage snapshots - Revert to snapshot - Mountable snapshot Share networks are not supported. Shares are created directly on the HPE Alletra MP B10000 array without the use of a share server or service VM. Network connectivity is set up outside of Manila. .. note:: Most operations described in this document can also be performed through the OpenStack Horizon dashboard. This document focuses on CLI commands. Requirements ------------ On the HPE Alletra MP B10000 array: - Device version 10.5.0 or later. - The HPE Alletra MP B10000 file service must be enabled. .. note:: Device version 10.6.0 or later is required for snapshot operations. Share Types ----------- When creating a share, the share type will be used to determine where and how the share will be created. Manila requires that the share type includes the ``driver_handles_share_servers`` extra-spec. This ensures that the share is created on a backend that supports the requested driver_handles_share_servers (share networks) capability. For the HPE Alletra MP B10000 driver, this option must be set to ``False``. Creating a Share Type ~~~~~~~~~~~~~~~~~~~~~ To create a share type for the HPE Alletra MP B10000 backend: .. code-block:: console $ openstack share type create alletra_nfs False $ openstack share type set alletra_nfs --extra-specs share_backend_name=hpealletra1 Share Type Extra Specs ~~~~~~~~~~~~~~~~~~~~~~ The following driver-specific extra specs are supported by Alletra MP B10000: **hpe_alletra_b10000:reduce** When the value is set to ``true`` (or ``false``), shares of this reduce type are created on the backend. The reduce setting is applied at share creation time and cannot be changed for existing shares. The ``reduce`` parameter controls the ``compression`` and ``dedupe`` capabilities of the share: - If reduce = true: compression = true, dedupe = true - If reduce = false: compression = false, dedupe = false If the reduce key is not provided, its value defaults to ``true``. Alternatively, you can use the ``compression`` and ``dedupe`` parameters directly instead of ``reduce``, but you cannot specify both ``reduce`` and ``compression``/``dedupe`` in the same share type. Example using reduce: .. code-block:: console $ openstack share type set alletra_nfs --extra-specs hpe_alletra_b10000:reduce=true Example using compression and dedupe as alternative: .. code-block:: console $ openstack share type set alletra_nfs --extra-specs compression=true dedupe=true **hpe_alletra_b10000:squash_option** The value can be set to ``root_squash``, ``all_squash``, or ``no_root_squash``. Any access rules added to the Alletra backend will be created with this squash option. If the share type is modified to change the squash option, the next share access rule update will use the new squash option value. If not provided, the squash option defaults to ``root_squash``. Example: .. code-block:: console $ openstack share type set alletra_nfs --extra-specs hpe_alletra_b10000:squash_option=root_squash The following common extra specs are also supported by Alletra MP B10000: **compression** Controls whether compression is enabled on the share. When specifying ``compression``, you must also specify ``dedupe`` with the same value (both ``true`` or both ``false``). You cannot use ``compression`` together with ``hpe_alletra_b10000:reduce``. Example: .. code-block:: console $ openstack share type set alletra_nfs --extra-specs compression=true dedupe=true **dedupe** Controls whether data deduplication is enabled on the share. When specifying ``dedupe``, you must also specify ``compression`` with the same value (both ``true`` or both ``false``). You cannot use ``dedupe`` together with ``hpe_alletra_b10000:reduce``. Example: .. code-block:: console $ openstack share type set alletra_nfs --extra-specs dedupe=true compression=true **thin_provisioning** Controls whether thin provisioning is enabled on the share. This extra spec must be set to ``true`` or not specified at all. Setting it to ``false`` is not supported by this driver. Example: .. code-block:: console $ openstack share type set alletra_nfs --extra-specs thin_provisioning=true **snapshot_support** Controls whether snapshots are enabled for shares of this type. Set to ``True`` to allow snapshot creation. Requires device version 10.6.0 or later. Example: .. code-block:: console $ openstack share type set alletra_nfs --extra-specs snapshot_support=True **revert_to_snapshot_support** Controls whether shares of this type can be reverted to a snapshot. Requires ``snapshot_support=True``. Requires device version 10.6.0 or later. Example: .. code-block:: console $ openstack share type set alletra_nfs --extra-specs revert_to_snapshot_support=True **mount_snapshot_support** Controls whether snapshots of this share type can be directly mounted by clients. Requires ``snapshot_support=True`` and ``snapshot_inherit_share_access_support=True``. Requires device version 10.6.0 or later. Example: .. code-block:: console $ openstack share type set alletra_nfs --extra-specs mount_snapshot_support=True snapshot_inherit_share_access_support=True **snapshot_inherit_share_access_support** Must be set to ``True`` when ``mount_snapshot_support`` is ``True``. On Alletra MP B10000, snapshot access rules are always inherited from the parent share and cannot be managed independently. Requires device version 10.6.0 or later. Example: .. code-block:: console $ openstack share type set alletra_nfs --extra-specs snapshot_inherit_share_access_support=True .. note:: Modifying share type extra specs after shares have been created is not recommended, as it will cause inconsistency between the share type definition and the actual backend share properties. Backend share characteristics like reduce, compression, and dedupe cannot be changed after creation. Managing Share Access --------------------- A share must have access rules configured before it can be accessed by clients. IP-based access rules are required for NFS shares. .. note:: When no Manila access rules are configured, the driver will block all IP addresses by setting a default access rule of 0.0.0.0 with read-only and root_squash permissions on the backend Alletra B10000 array. You must explicitly create access rules to allow client access. For CLI commands and more information on managing access rules, see :ref:`manage access to share `. Extending Shares ---------------- The driver supports extending shares to increase their size. For CLI commands and more information on extending shares, see :ref:`share resize `. .. note:: The share size shown in Manila includes filesystem metadata and other overhead. Client-usable space will be less than the displayed share size. Managing Existing Shares ------------------------ The driver supports bringing existing shares on the HPE Alletra array into Manila management using the manage operation. Prerequisites for Manage Operation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Before managing an existing share, ensure the following requirements are met: #. **Share type compatibility**: The backend share ``reduce`` value must match the ``hpe_alletra_b10000:reduce`` value from the share type. If they don't match, the manage operation will fail. Associate the correct share type. Default reduce value (if share type doesn't have this key) is ``true``. Similarly, if the share type uses ``compression`` and ``dedupe`` parameters instead of ``reduce``, those values must also match the backend share's compression and deduplication settings. #. **No existing access rules**: The backend share must have either an empty access rules list or only the default 0.0.0.0 access rule with read-only and root_squash. If other access rules exist, clear them from the backend share before managing: .. code-block:: console $ setsharesetting -remove #. **Filesystem size alignment**: The filesystem size of the backend fileshare must be a multiple of 1024 MiB (1 GiB). If not, the manage operation will fail. Manila logs will indicate how much MiB to expand the backend filesystem. To expand size by a specific amount (e.g., 500 MiB): .. code-block:: console $ setfilesystem -size 500 Ensure Shares Operation ----------------------- The driver supports the ``ensure_shares`` operation, which validates that shares exist on the backend and updates their status in Manila. Shares found on the backend are updated with the latest export locations. Shares not found on the backend are marked with ``error`` state. The ensure_shares operation for the driver is executed only in case of service restarts after configuration changes in /etc/manila/manila.conf. If the backend fileshare export path changes due to file port IP change or other reasons, the administrator must manually trigger the ensure shares command in OpenStack to update the latest export paths. Refer to :ref:`recalculating the shares export location ` for details on manually triggering the ensure shares operation. Snapshot Operations ------------------- The driver supports creating and deleting snapshots (``snapshot_support``), reverting a share to its last snapshot (``revert_to_snapshot_support``), and exporting snapshots for mounting (``mount_snapshot_support``). .. note:: When ``mount_snapshot_support`` is set to ``True`` in the share type, ``snapshot_inherit_share_access_support`` must also be set to ``True``. On Alletra MP B10000, snapshot access rules are always inherited from the parent share and cannot be managed independently. Managing Existing Snapshots --------------------------- The driver supports bringing existing snapshots on the HPE Alletra array into Manila management using the manage operation. The ``provider_location`` required by manage snapshot is the backend snapshot **filesystem name** on the Alletra array. Prerequisites for Manage Snapshot Operation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Before managing an existing snapshot, ensure the following: #. **Snapshot state must match share type**: If ``mount_snapshot_support`` is ``True``, the backend snapshot filesystem must be in online state. Otherwise, it must be in offline state. To change the snapshot filesystem state on the Alletra array: .. code-block:: console $ setfilesystem -online $ setfilesystem -offline #. **Filesystem size alignment**: The backend snapshot filesystem size must be a multiple of 1 GiB. If not, the manage operation will fail. Driver Capabilities ------------------- The HPE Alletra MP B10000 driver reports the following capabilities: - Storage protocol: NFS - driver_handles_share_servers: False - Thin provisioning support - Dedupe and compression support - Share extend support - Manage/unmanage share support - Snapshot support (create/delete) - Revert to snapshot support - Mountable snapshot support - Manage/unmanage snapshot support Restrictions and Limitations ---------------------------- The HPE Alletra MP B10000 driver has the following restrictions: - Only NFS protocol is supported; CIFS/SMB is not supported - Share networks are not supported (driver_handles_share_servers must be False) - Share shrink is not currently supported - Creating a share from a snapshot is not supported - Share migration is not supported - Share replication is not supported - Share groups and consistency groups are not supported - Security services (LDAP, Active Directory, Kerberos) are not supported - Only IP-based access rules are supported for NFS shares Troubleshooting --------------- Common Issues ~~~~~~~~~~~~~ **Share creation fails** - Verify the HPE Alletra MP B10000 file service is enabled - Check connectivity to the WSAPI endpoint - Ensure the configured user has sufficient permissions **Access rules not working** - Verify network connectivity between client and array's file ports - Check that the IP address in the access rule is correct - Ensure the share type's squash_option is appropriate for your use case **Manage operation fails** - Clear all access rules from the backend share - Verify filesystem size is a multiple of 1 GiB - Ensure share type's reduce value matches the backend share The :mod:`manila.share.drivers.hpe.alletra_mp_b10000.hpe_alletra_driver` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.hpe.alletra_mp_b10000.hpe_alletra_driver :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8402371 manila-23.0.0.0rc1/doc/source/admin/huawei_nas_driver.rst0000664000175000017500000002245215251045254022020 0ustar00zuulzuul.. Copyright (c) 2015 Huawei Technologies Co., Ltd. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Huawei Driver ============= Huawei NAS Driver is a plugin based the OpenStack manila service. The Huawei NAS Driver can be used to provide functions such as the share and snapshot for virtual machines(instances) in OpenStack. Huawei NAS Driver enables the OceanStor V3 series V300R002 storage system to provide only network filesystems for OpenStack. Requirements ------------ - The OceanStor V3 series V300R002 storage system. - The following licenses should be activated on V3 for File: * CIFS * NFS * HyperSnap License (for snapshot) Supported Operations -------------------- The following operations is supported on V3 storage: - Create CIFS/NFS Share - Delete CIFS/NFS Share - Allow CIFS/NFS Share access * IP and USER access types are supported for NFS(ro/rw). * Only USER access type is supported for CIFS(ro/rw). - Deny CIFS/NFS Share access - Create snapshot - Delete snapshot - Manage CIFS/NFS share - Support pools in one backend - Extend share - Shrink share - Support multi RestURLs() - Support multi-tenancy - Ensure share - Create share from snapshot - Support QoS Pre-Configurations on Huawei ---------------------------- 1. Create a driver configuration file. The driver configuration file name must be the same as the manila_huawei_conf_file item in the manila_conf configuration file. 2. Configure Product. Product indicates the storage system type. For the OceanStor V3 series V300R002 storage systems, the driver configuration file is as follows: :: V3 x.x.x.x abc;CTE0.A.H1 https://x.x.x.x:8088/deviceManager/rest/; https://x.x.x.x:8088/deviceManager/rest/ xxxxxxxxx xxxxxxxxx xxxxxxxxx 64 3 60 x.x.x.x xxxxxxxxx xxxxxxxxx - `Product` is a type of a storage product. Set it to `V3`. - `LogicalPortIP` is an IP address of the logical port. - `Port` is a port name list of bond port or ETH port, used to create vlan and logical port. Multi Ports can be configured in (separated by ";"). If is not configured, then will choose an online port on the array. - `RestURL` is an access address of the REST interface. Multi RestURLs can be configured in (separated by ";"). When one of the RestURL failed to connect, driver will retry another automatically. - `UserName` is a user name of an administrator. - `UserPassword` is a password of an administrator. - `StoragePool` is a name of a storage pool to be used. - `SectorSize` is the size of the disk blocks, optional value can be "4", "8", "16", "32" or "64", and the units is KB. If "sectorsize" is configured in both share_type and xml file, the value of sectorsize in the share_type will be used. If "sectorsize" is configured in neither share_type nor xml file, huawei storage backends will provide a default value(64) when creating a new share. - `WaitInterval` is the interval time of querying the file system status. - `Timeout` is the timeout period for waiting command execution of a device to complete. - `NFSClient\IP` is the backend IP in admin network to use for mounting NFS share. - `CIFSClient\UserName` is the backend user name in admin network to use for mounting CIFS share. - `CIFSClient\UserPassword` is the backend password in admin network to use for mounting CIFS share. Backend Configuration --------------------- Modify the `manila.conf` manila configuration file and add share_driver and manila_huawei_conf_file items. Example for configuring a storage system: - `share_driver` = manila.share.drivers.huawei.huawei_nas.HuaweiNasDriver - `manila_huawei_conf_file` = /etc/manila/manila_huawei_conf.xml - `driver_handles_share_servers` = True or False .. note:: - If `driver_handles_share_servers` is True, the driver will choose a port in to create vlan and logical port for each tenant network. And the share type with the DHSS extra spec should be set to True when creating shares. - If `driver_handles_share_servers` is False, then will use the IP in . Also the share type with the DHSS extra spec should be set to False when creating shares. Restart of manila-share service is needed for the configuration changes to take effect. Share Types ----------- When creating a share, a share type can be specified to determine where and how the share will be created. If a share type is not specified, the `default_share_type` set in the manila configuration file is used. Manila requires that the share type includes the `driver_handles_share_servers` extra-spec. This ensures that the share will be created on a backend that supports the requested driver_handles_share_servers (share networks) capability. For the Huawei driver, this must be set to False. To create a share on a backend with a specific type of disks, include the `huawei_disk_type` extra-spec in the share type. Valid values for this extra-spec are 'ssd', 'sas', 'nl_sas' or 'mix'. This share will be created on a backend with a matching disk type. Another common manila extra-spec used to determine where a share is created is `share_backend_name`. When this extra-spec is defined in the share type, the share will be created on a backend with a matching share_backend_name. Manila "share types" may contain qualified extra-specs, -extra-specs that have significance for the backend driver and the CapabilityFilter. This commit makes the Huawei driver report the following boolean capabilities: - capabilities:dedupe - capabilities:compression - capabilities:thin_provisioning - capabilities:huawei_smartcache * huawei_smartcache:cachename - capabilities:huawei_smartpartition * huawei_smartpartition:partitionname - capabilities:qos * qos:maxIOPS * qos:minIOPS * qos:minbandwidth * qos:maxbandwidth * qos:latency * qos:iotype - capabilities:huawei_sectorsize The scheduler will choose a host that supports the needed capability when the CapabilityFilter is used and a share type uses one or more of the following extra-specs: - capabilities:dedupe=' True' or ' False' - capabilities:compression=' True' or ' False' - capabilities:thin_provisioning=' True' or ' False' - capabilities:huawei_smartcache=' True' or ' False' * huawei_smartcache:cachename=test_cache_name - capabilities:huawei_smartpartition=' True' or ' False' * huawei_smartpartition:partitionname=test_partition_name - capabilities:qos=' True' or ' False' * qos:maxIOPS=100 * qos:minIOPS=10 * qos:maxbandwidth=100 * qos:minbandwidth=10 * qos:latency=10 * qos:iotype=0 - capabilities:huawei_sectorsize=' True' or ' False' * huawei_sectorsize:sectorsize=4 - huawei_disk_type='ssd' or 'sas' or 'nl_sas' or 'mix' `thin_provisioning` will be reported as [True, False] for Huawei backends. `dedupe` will be reported as [True, False] for Huawei backends. `compression` will be reported as [True, False] for Huawei backends. `huawei_smartcache` will be reported as [True, False] for Huawei backends. Adds SSDs into a high-speed cache pool and divides the pool into multiple cache partitions to cache hotspot data in random and small read I/Os. `huawei_smartpartition` will be reported as [True, False] for Huawei backends. Add share to the smartpartition named 'test_partition_name'. Allocates cache resources based on service characteristics, ensuring the quality of critical services. `qos` will be reported as True for backends that use QoS (Quality of Service) specification. `huawei_sectorsize` will be reported as [True, False] for Huawei backends. `huawei_disk_type` will be reported as "ssd", "sas", "nl_sas" or "mix" for Huawei backends. Restrictions ------------ The Huawei driver has the following restrictions: - IP and USER access types are supported for NFS. - Only LDAP domain is supported for NFS. - Only USER access type is supported for CIFS. - Only AD domain is supported for CIFS. The :mod:`manila.share.drivers.huawei.huawei_nas` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.huawei.huawei_nas :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8402371 manila-23.0.0.0rc1/doc/source/admin/index.rst0000664000175000017500000000753215251045254017433 0ustar00zuulzuul.. _shared_file_systems_intro: =========== Admin Guide =========== Shared File Systems service provides a set of services for management of shared file systems in a multi-project cloud environment. The service resembles OpenStack block-based storage management from the OpenStack Block Storage service project. With the Shared File Systems service, you can create a remote file system, mount the file system on your instances, and then read and write data from your instances to and from your file system. The Shared File Systems service serves same purpose as the Amazon Elastic File System (EFS) does. The Shared File Systems service can run in a single-node or multiple node configuration. The Shared File Systems service can be configured to provision shares from one or more back ends, so it is required to declare at least one back end. Shared File System service contains several configurable components. It is important to understand these components: * Share networks * Shares * Multi-tenancy * Back ends The Shared File Systems service consists of four types of services, most of which are similar to those of the Block Storage service: - ``manila-api`` - ``manila-data`` - ``manila-scheduler`` - ``manila-share`` Installation of first three - ``manila-api``, ``manila-data``, and ``manila-scheduler`` is common for almost all deployments. But configuration of ``manila-share`` is backend-specific and can differ from deployment to deployment. .. toctree:: :maxdepth: 1 shared-file-systems-key-concepts.rst shared-file-systems-share-management.rst shared-file-systems-share-types.rst shared-file-systems-quotas.rst shared-file-systems-share-group-types.rst shared-file-systems-share-groups.rst shared-file-systems-snapshots.rst shared-file-systems-share-server-management.rst shared-file-systems-security-services.rst shared-file-systems-share-migration.rst shared-file-systems-share-replication.rst shared-file-systems-multi-backend.rst shared-file-systems-healthcheck.rst shared-file-systems-networking.rst shared-file-systems-troubleshoot.rst shared-file-systems-profiling.rst shared-file-systems-upgrades.rst shared-file-systems-share-revert-to-snapshot.rst shared-file-systems-share-server-migration.rst share_mount_point_name.rst share_back_ends_feature_support_mapping capabilities_and_extra_specs group_capabilities_and_extra_specs export_location_metadata shared-file-systems-share-backup-management.rst shared-file-systems-services-manage.rst deferred_deletion.rst shared-file-systems-telemetry Supported share back ends ------------------------- The manila share service must be configured to use drivers for one or more storage back ends, as described in general terms below. See the drivers section in the `Configuration Reference `_ for detailed configuration options for each back end. .. toctree:: :maxdepth: 3 container_driver zfs_on_linux_driver netapp_cluster_mode_driver emc_vnx_driver dell_emc_powerscale_driver ../configuration/shared-file-systems/drivers/dell-emc-unity-driver ../configuration/shared-file-systems/drivers/dell-emc-powerstore-driver ../configuration/shared-file-systems/drivers/dell-emc-powerflex-driver everpure_flashblade_driver generic_driver glusterfs_driver glusterfs_native_driver ../configuration/shared-file-systems/drivers/cephfs_driver gpfs_driver huawei_nas_driver hdfs_native_driver hitachi_hnas_driver hpe_3par_driver hpe_alletra_mp_b10000_driver infortrend_driver lustre_driver macrosan_driver tegile_driver nexentastor5_driver weka_share_driver ../configuration/shared-file-systems/drivers/windows-smb-driver zadara_driver ../configuration/shared-file-systems/drivers/vastdata_driver ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8402371 manila-23.0.0.0rc1/doc/source/admin/infortrend_driver.rst0000664000175000017500000000613415251045254022046 0ustar00zuulzuul.. Copyright (c) 2019 Infortrend Technologies Co., Ltd. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Infortrend Driver for OpenStack Manila ====================================== The `Infortrend `__ Manila driver provides NFS and CIFS shared file systems to Openstack. Requirements ------------ - The EonStor GS/GSe series Fireware version 139A23 Supported shared filesystems and operations ------------------------------------------- This driver supports NFS and CIFS shares. The following operations are supported: - Create CIFS/NFS Share - Delete CIFS/NFS Share - Allow CIFS/NFS Share access * Only IP access type is supported for NFS (ro/rw). * Only USER access type is supported for CIFS (ro/rw). - Deny CIFS/NFS Share access - Manage a share. - Unmanage a share. - Extend a share. - Shrink a share. Backend Configuration --------------------- The following parameters need to be configured in the manila configuration file for the Infortrend driver: - `share_backend_name` = - `share_driver` = manila.share.drivers.infortrend.driver.InfortrendNASDriver - `driver_handles_share_servers` = False - `infortrend_nas_ip` = - `infortrend_nas_user` = - `infortrend_nas_password` = - `infortrend_share_pools` = - `infortrend_share_channels` = Share Types ----------- When creating a share, a share type can be specified to determine where and how the share will be created. If a share type is not specified, the `default_share_type` set in the manila configuration file is used. Manila requires that the share type includes the `driver_handles_share_servers` extra-spec. This ensures that the share will be created on a backend that supports the requested driver_handles_share_servers (share networks) capability. For the Infortrend driver, this must be set to False. Back-end configuration example ------------------------------ .. code-block:: ini [DEFAULT] enabled_share_backends = ift-manila enabled_share_protocols = NFS, CIFS [ift-manila] share_backend_name = ift-manila share_driver = manila.share.drivers.infortrend.driver.InfortrendNASDriver driver_handles_share_servers = False infortrend_nas_ip = FAKE_IP infortrend_nas_user = FAKE_USER infortrend_nas_password = FAKE_PASS infortrend_share_pools = pool-1, pool-2 infortrend_share_channels = 0, 1 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8402371 manila-23.0.0.0rc1/doc/source/admin/lustre_driver.rst0000664000175000017500000001137615251045254021216 0ustar00zuulzuul.. Copyright 2026 Red Hat, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ============= Lustre driver ============= The Lustre driver creates shares as sub-directories on a pre-provisioned `Lustre `_ parallel filesystem. Capacity is enforced with `project quotas `_ and access control uses `nodemaps `_ for IP-based client isolation. The driver operates in DHSS=False mode only (the Lustre filesystem must be provisioned and mounted before Manila starts). Prerequisites ~~~~~~~~~~~~~ - Lustre >= 2.16 (required for RBAC nodemaps and ``root_prj_enable``). - A mounted Lustre client on the manila-share host. - Project quotas enabled on all MDTs and OSTs. - Nodemap feature activated on the MGS. - ``lfs`` and ``lctl`` utilities available on the manila-share host. For details on installing and configuring a Lustre filesystem, see the `Lustre Operations Manual `_. Supported operations ~~~~~~~~~~~~~~~~~~~~ The driver supports the LUSTRE protocol with IP access rules. - Create and delete a share - Extend and shrink a share - Allow and deny share access (IP type, RW and RO) - Manage and unmanage an existing share Restrictions ~~~~~~~~~~~~ - Only ``ip`` access type is supported. - Snapshots are not supported (Lustre does not have filesystem-level snapshots). - Share groups and replication are not supported. - IPv6 access rules are not currently supported. Back-end configuration ~~~~~~~~~~~~~~~~~~~~~~ Add LUSTRE to the enabled share protocols: .. code-block:: ini [DEFAULT] enabled_share_protocols = LUSTRE Create a backend section in ``manila.conf``: .. code-block:: ini [lustre1] share_driver = manila.share.drivers.lustre.driver.LustreShareDriver driver_handles_share_servers = False share_backend_name = LUSTRE1 lustre_share_export_ip = 10.0.0.5 lustre_mount_point = /mnt/lustre lustre_fs_name = lustrefs Add the backend to ``enabled_share_backends``: .. code-block:: ini [DEFAULT] enabled_share_backends = lustre1 When the MGS or MDS is on a different host, configure SSH access: .. code-block:: ini [lustre1] lustre_mgs_ip = 10.0.0.10 lustre_mds_ip = 10.0.0.11 lustre_ssh_username = root lustre_ssh_private_key_path = /etc/manila/lustre_ssh_key When both MGS and MDS run on the manila-share host, omit ``lustre_mgs_ip`` and ``lustre_mds_ip`` and the driver will use oslo.privsep for privileged operations. Project ID range ---------------- Each share is assigned a unique Lustre project ID for quota enforcement. The range is controlled by ``lustre_project_id_start`` (default 10000) and ``lustre_project_id_end`` (default 60000). Ensure this range does not overlap with project IDs used by other applications on the same filesystem. Share types ~~~~~~~~~~~ Create a share type for Lustre shares: .. code-block:: console openstack share type create lustretype false openstack share type set lustretype \ --extra-specs vendor_name=Lustre storage_protocol=LUSTRE Create a share: .. code-block:: console openstack share create --share-type lustretype --name myshare lustre 10 Mounting shares ~~~~~~~~~~~~~~~ The export location is in Lustre NID format:: :// Mount using the Lustre client: .. code-block:: console sudo mount -t lustre 10.0.0.5@tcp:/lustrefs/manila_shares/share-xyz /mnt/myshare For client mount instructions, see the `Lustre Operations Manual: Mounting `_. Access control ~~~~~~~~~~~~~~ The driver creates a Lustre nodemap per access rule, mapping the client IP (or CIDR) to the share's sub-directory. Read-only rules set ``readonly_mount=1`` on the nodemap. Nodemaps persist on the MGS across reboots. See `Lustre Nodemap documentation `_ for background on how nodemaps enforce client identity and permissions. Driver options ~~~~~~~~~~~~~~ All configuration options for the Lustre driver are documented in the :doc:`Configuration Reference `. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8402371 manila-23.0.0.0rc1/doc/source/admin/macrosan_driver.rst0000664000175000017500000000662615251045254021505 0ustar00zuulzuul.. Copyright (c) 2022 Macrosan Technologies Co., Ltd. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ==================================== Macrosan Driver for OpenStack Manila ==================================== The `Macrosan `__ driver provides NFS and CIFS shared file systems to Openstack. Requirements ------------ - The following service should be enabled on NAS system: * CIFS * NFS Supported Operations -------------------- The following operations are supported: - Create CIFS/NFS Share - Delete CIFS/NFS Share - Allow CIFS/NFS Share access * Only IP access type is supported for NFS (ro/rw). * Only USER access type is supported for CIFS (ro/rw). - Deny CIFS/NFS Share access - Extend a share. - Shrink a share. Backend Configuration --------------------- The following parameters need to be configured in the [DEFAULT] section of manila configuration (/etc/manila/manila.conf): - `enabled_share_backends` - Name of the section on manila.conf used to specify a backend i.e. *enabled_share_backends = macrosan* - `enabled_share_protocols` - Specify a list of protocols to be allowed for share creation. The VPSA driver support the following options: *NFS* or *CIFS* or *NFS, CIFS* The following parameters need to be configured in the [backend] section of manila configuration (/etc/manila/manila.conf): - `share_backend_name` = - `share_driver` = manila.share.drivers.macrosan.macrosan_nas.MacrosanNasDriver - `driver_handles_share_servers` = False - `macrosan_nas_ip` = - `macrosan_nas_port` = - `macrosan_nas_user` = - `macrosan_nas_password` = - `macrosan_share_pools` = Share Types ----------- When creating a share, a share type can be specified to determine where and how the share will be created. If a share type is not specified, the `default_share_type` set in the manila configuration file is used. Manila requires that the share type includes the `driver_handles_share_servers` extra-spec. This ensures that the share will be created on a backend that supports the requested driver_handles_share_servers (share networks) capability. For the Macrosan driver, this must be set to False. Back-end configuration example ------------------------------ .. code-block:: ini [DEFAULT] enabled_share_backends = macrosan enabled_share_protocols = NFS, CIFS [macrosan] share_backend_name = MACROSAN share_driver = manila.share.drivers.macrosan.macrosan_nas.MacrosanNasDriver driver_handles_share_servers = False macrosan_nas_ip = FAKE_IP macrosan_nas_port = 8443 macrosan_nas_user = FAKE_USER macrosan_nas_password = FAKE_PASSWORD macrosan_share_pools = fake_pool1, fake_pool2 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8402371 manila-23.0.0.0rc1/doc/source/admin/netapp_cluster_mode_driver.rst0000664000175000017500000001554715251045254023740 0ustar00zuulzuul.. Copyright 2014 Mirantis Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. NetApp Clustered Data ONTAP =========================== The Shared File Systems service can be configured to use NetApp Clustered Data ONTAP (cDOT) version 8.2 and later. The driver can work with two types of pools: FlexGroup and FlexVol. By default, it only works with FlexVol, if desired, the FlexGroup pool can be enabled together or standalone. FlexGroup pool requires ONTAP version 9.8 or later. Supported Operations -------------------- The following operations are supported on Clustered Data ONTAP: - Create CIFS/NFS Share - Delete CIFS/NFS Share - Allow NFS Share access * IP access type is supported for NFS. * Read/write and read-only access are supported for NFS. - Allow CIFS Share access * User access type is supported for CIFS. * Read/write access is supported for CIFS. - Deny CIFS/NFS Share access - Create snapshot - Delete snapshot - Create share from snapshot - Extend share - Shrink share - Manage share - Unmanage share - Create consistency group - Delete consistency group - Create consistency group from CG snapshot - Create CG snapshot - Delete CG snapshot - Create a replica (DHSS=False) - Promote a replica (DHSS=False) - Delete a replica (DHSS=False) - Update a replica (DHSS=False) - Create a replicated snapshot (DHSS=False) - Delete a replicated snapshot (DHSS=False) - Update a replicated snapshot (DHSS=False) - Migrate share - Migrate share server - Create share backup - Restore share backup - Delete share backup .. note:: The operations are not fully supported configuring FlexGroup pool: - Consistency group operations are only supported configuring the driver without any FlexGroup pool. - For FlexGroup share, create more than one replica is only allowed with ONTAP 9.9.1 and newer. - Migration of FlexGroup shares is not allowed. - Migration of share servers containing FlexGroup share is not allowed. .. note:: :term:`DHSS` is abbreviated from `driver_handles_share_servers`. Supported Operating Modes ------------------------- The cDOT driver supports both 'driver_handles_share_servers' (:term:`DHSS`) modes. If 'driver_handles_share_servers' is True, the driver will create a storage virtual machine (SVM, previously known as vServers) for each unique tenant network and provision each of a tenant's shares into that SVM. This requires the user to specify both a share network as well as a share type with the DHSS extra spec set to True when creating shares. If 'driver_handles_share_servers' is False, the manila admin must configure a single SVM, along with associated LIFs and protocol services, that will be used for provisioning shares. The SVM is specified in the manila config file. DNS Configuration for DHSS=True SVMs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In DHSS=True mode, newly created SVMs have no DNS name-service unless a security service is attached. SVMs that need to resolve infrastructure hostnames (for example, a Barbican KMS endpoint for share encryption) will fail without a working resolver. Set ``netapp_dns_domains`` and ``netapp_dns_nameservers`` in the backend stanza of ``manila.conf`` to provide infrastructure DNS to every SVM managed by the backend. Optionally, set ``netapp_dns_hosts`` to add static hostname:ip fallback entries to the SVM local-hosts table. When a security service is later attached, its DNS values are merged on top of the infrastructure DNS (security-service entries first). The driver reconciles DNS on service restart via ``ensure_shares``. Network approach ---------------- L3 connectivity between the storage cluster and manila host must exist, and VLAN segmentation may be configured. All of manila's network plug-ins are supported with the cDOT driver. Supported shared filesystems ---------------------------- - NFS (access by IP address or subnet) - CIFS (authentication by user) Required licenses ----------------- - NFS - CIFS - FlexClone Known restrictions ------------------ - For CIFS shares an external Active Directory (AD) service is required. The AD details should be provided via a manila security service that is attached to the specified share network. - Share access rules for CIFS shares may be created only for existing users in Active Directory. - The time on external security services and storage must be synchronized. The maximum allowed clock skew is 5 minutes. - cDOT supports only flat and VLAN network segmentation types. How to take backup for NetApp shares ------------------------------------ Starting from 2024.1, a concept named ``backup_type`` has been introduced. At present, it has been implemented for NetApp driver. The ``backup_type`` is a construct which consists of backup specific configuration parameters such as ``backup_type_name``, ``netapp_backup_backend_section_name``, ``netapp_backup_vserver``, ``netapp_backup_share``, ``netapp_snapmirror_job_timeout``. .. note:: The sample config will look like this: ``eng_data_backup`` is the backup_type here.:: [eng_data_backup] netapp_backup_backend_section_name = ontap2 netapp_backup_vserver = backup_vserver_name netapp_backup_volume = backup_volume_name_inside_vserver netapp_snapmirror_job_timeout = 180 [nas_storage] vendor_name = NetApp share_driver = manila.share.drivers.netapp.common.NetAppDriver driver_handles_share_servers = False netapp_login = admin .... .... enabled_backup_types = eng_data_backup If the option ``netapp_backup_volume`` is not specified, the backup volume (destination volume) would be created automatically by the driver inside the vserver. The options "netapp_backup_vserver" and "netapp_backup_volume" are optional and it works as below: In case of "driver_handles_share_servers=true", "netapp_backup_vserver" and "netapp_backup_volume" will be created by driver on "backend" mentioned under backup type stanza. In case of "driver_handles_share_servers=false", it will use the existing vserver of the "backend" mentioned under backup type stanza and will create the new volume. The :mod:`manila.share.drivers.netapp.common.py` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.netapp.common :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8412373 manila-23.0.0.0rc1/doc/source/admin/nexentastor5_driver.rst0000664000175000017500000000635715251045254022342 0ustar00zuulzuul.. Copyright 2019 Nexenta by DDN, Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. NexentaStor5 Driver for OpenStack Manila ======================================== The `NexentaStor5 `__ Manila driver provides NFS shared file systems to OpenStack. Requirements ------------ - The NexentaStor 5.1 or newer Supported shared filesystems and operations ------------------------------------------- This driver supports NFS shares. The following operations are supported: - Create NFS Share - Delete NFS Share - Allow NFS Share access * Only IP access type is supported for NFS (ro/rw). - Deny NFS Share access - Manage a share. - Unmanage a share. - Extend a share. - Shrink a share. - Create snapshot - Revert to snapshot - Delete snapshot - Create share from snapshot Backend Configuration --------------------- The following parameters need to be configured in the manila configuration file for the NexentaStor5 driver: - `share_backend_name` = - `share_driver` = manila.share.drivers.nexenta.ns5.nexenta_nas.NexentaNasDriver - `driver_handles_share_servers` = False - `nexenta_nas_host` = - `nexenta_user` = - `nexenta_password` = - `nexenta_pool` = - `nexenta_rest_addresses` = - `nexenta_folder` = - `nexenta_nfs` = True Share Types ----------- When creating a share, a share type can be specified to determine where and how the share will be created. If a share type is not specified, the `default_share_type` set in the manila configuration file is used. Manila requires that the share type includes the `driver_handles_share_servers` extra-spec. This ensures that the share will be created on a backend that supports the requested driver_handles_share_servers (share networks) capability. For the NexentaStor driver, this extra-spec's value must be set to False. Restrictions ------------ - Only IP share access control is allowed for NFS shares. Back-end configuration example ------------------------------ .. code-block:: ini [DEFAULT] enabled_share_backends = NexentaStor5 [NexentaStor5] share_backend_name = NexentaStor5 driver_handles_share_servers = False nexenta_folder = manila share_driver = manila.share.drivers.nexenta.ns5.nexenta_nas.NexentaNasDriver nexenta_rest_addresses = 10.3.1.1,10.3.1.2 nexenta_nas_host = 10.3.1.10 nexenta_rest_port = 8443 nexenta_pool = pool1 nexenta_nfs = True nexenta_user = admin nexenta_password = secret_password nexenta_thin_provisioning = True ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8412373 manila-23.0.0.0rc1/doc/source/admin/share_back_ends_feature_support_mapping.rst0000664000175000017500000021065615251045254026444 0ustar00zuulzuul.. Copyright 2015 Mirantis Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. .. _share_back_ends_feature_support_mapping: Manila share features support mapping ===================================== Here we provide information on support of different share features by different share drivers. Column values contain the OpenStack release letter when a feature was added to the driver. Column value "?" means that this field requires an update with current information. Column value "-" means that this feature is not currently supported. Mapping of share drivers and share features support --------------------------------------------------- +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Driver name | create delete share | manage unmanage share | extend share | shrink share | create delete snapshot | create share from snapshot | manage unmanage snapshot | revert to snapshot | mountable snapshot | +========================================+=======================+=======================+==========================+==========================+========================+===================================+==========================+====================+====================+ | ZFSonLinux | M | N | M | M | M | M | N | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Container | N | \- | N | \- | \- | \- | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Generic (Cinder as back-end) | J | K | L | L | J | J | M | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | NetApp Clustered Data ONTAP | J | L | L | L | J |same pool (J), across back ends (U)| N | O | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Dell PowerMax | O | \- | O | \- | O | O | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Dell VNX | J | \- | \- | \- | J | J | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Dell Unity | N | U | N | S | N | N | U | S | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Dell PowerScale | K | G | M | G | K | K | G | H | G | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Dell PowerStore | B | H | B | B | B | B | H | B | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Dell PowerFlex | B | \- | B | \- | B | \- | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | GlusterFS | J | \- | directory layout (T) | directory layout (T) | volume layout (L) | volume layout (L) | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | GlusterFS-Native | J | \- | \- | \- | K | L | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | HDFS | K | \- | M | \- | K | K | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Hitachi HNAS | L | L | L | M | L | L | O | O | O | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Hitachi HSP | N | N | N | N | \- | \- | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | HPE 3PAR | K | \- | \- | \- | K | K | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | HPE Alletra MP B10000 | G | G | G | \- | H | \- | H | H | H | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Huawei | K | L | L | L | K | M | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | IBM GPFS | K | O | L | \- | K | K | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | INFINIDAT | Q | \- | Q | \- | Q | Q | \- | Q | Q | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | INSPUR AS13000 | R | \- | R | \- | R | R | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | INSPUR InStorage | T | \- | T | \- | \- | \- | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Infortrend | T | T | T | T | \- | \- | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Macrosan | Z | \- | Z | Z | \- | \- | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | LVM | M | \- | M | \- | M | M | \- | O | O | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Quobyte | K | \- | M | M | \- | \- | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Windows SMB | L | L | L | L | L | L | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Oracle ZFSSA | K | N | M | M | K | K | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | CephFS | M | D (2024.2) | M | M | M | W | D (2024.2) | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Tegile | M | \- | M | M | M | M | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | NexentaStor4 | N | \- | N | \- | N | N | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | NexentaStor5 | N | T | N | N | N | N | \- | T | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | MapRFS | O | O | O | O | O | O | O | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | QNAP | O | O | O | \- | O | O | O | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Everpure FlashBlade | X | \- | X | X | X | \- | \- | X | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Vastdata | D | \- | D | D | D | \- | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Lustre | H | H | H | H | \- | \- | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | Weka | H | H | H | H | H | H | \- | H | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ Mapping of share drivers and share access rules support ------------------------------------------------------- +----------------------------------------+--------------------------------------------------------------------------+------------------------------------------------------------------------+ | | Read & Write | Read Only | + Driver name +--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | | IPv4 | IPv6 | USER | Cert | CephX | IPv4 | IPv6 | USER | Cert | CephX | +========================================+==============+==============+================+============+==============+==============+==============+================+============+============+ | ZFSonLinux | NFS (M) | \- | \- | \- | \- | NFS (M) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Container | \- | \- | CIFS (N) | \- | \- | \- | \- | CIFS (N) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Generic (Cinder as back-end) | NFS,CIFS (J) | \- | \- | \- | \- | NFS (K) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | NetApp Clustered Data ONTAP | NFS (J) | NFS (Q) | CIFS (J) | \- | \- | NFS (K) | NFS (Q) | CIFS (M) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Dell PowerMax | NFS (O) | NFS (R) | CIFS (O) | \- | \- | NFS (O) | NFS (R) | CIFS (O) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Dell VNX | NFS (J) | NFS (Q) | CIFS (J) | \- | \- | NFS (L) | NFS (Q) | CIFS (L) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Dell Unity | NFS (N) | NFS (Q) | CIFS (N) | \- | \- | NFS (N) | NFS (Q) | CIFS (N) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Dell PowerScale | NFS,CIFS (K) | \- | CIFS (M) | \- | \- | NFS (M) | \- | CIFS (M) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Dell PowerStore | NFS (B) | \- | CIFS (B) | \- | \- | NFS (B) | \- | CIFS (B) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Dell PowerFlex | NFS (B) | \- | \- | \- | \- | NFS (B) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | GlusterFS | NFS (J) | \- | \- | \- | \- | \- | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | GlusterFS-Native | \- | \- | \- | J | \- | \- | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | HDFS | \- | \- | HDFS(K) | \- | \- | \- | \- | HDFS(K) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Hitachi HNAS | NFS (L) | \- | CIFS (N) | \- | \- | NFS (L) | \- | CIFS (N) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Hitachi HSP | NFS (N) | \- | \- | \- | \- | NFS (N) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | HPE 3PAR | NFS,CIFS (K) | \- | CIFS (K) | \- | \- | \- | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | HPE Alletra MP B10000 | NFS (G) | \- | \- | \- | \- | NFS (G) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Huawei | NFS (K) | \- |NFS (M),CIFS (K)| \- | \- | NFS (K) | \- |NFS (M),CIFS (K)| \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | LVM | NFS (M) | NFS (P) | CIFS (M) | \- | \- | NFS (M) | NFS (P) | CIFS (M) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Quobyte | NFS (K) | \- | \- | \- | \- | NFS (K) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Windows SMB | \- | \- | CIFS (L) | \- | \- | \- | \- | CIFS (L) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | IBM GPFS | NFS (K) | \- | \- | \- | \- | NFS (K) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | INFINIDAT | NFS (Q) | \- | \- | \- | \- | NFS (Q) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | INSPUR AS13000 | NFS (R) | \- | CIFS (R) | \- | \- | NFS (R) | \- | CIFS (R) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | INSPUR InStorage | NFS (T) | \- | CIFS (T) | \- | \- | NFS (T) | \- | CIFS (T) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Infortrend | NFS (T) | \- | CIFS (T) | \- | \- | NFS (T) | \- | CIFS (T) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Macrosan | NFS (Z) | \- | CIFS (Z) | \- | \- | NFS (Z) | \- | CIFS (Z) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Oracle ZFSSA | NFS,CIFS(K) | \- | \- | \- | \- | \- | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | CephFS | NFS (P) | NFS (T) | \- | \- | CEPHFS (M) | NFS (P) | NFS (T) | \- | \- | CEPHFS (N) | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Tegile | NFS (M) | \- |NFS (M),CIFS (M)| \- | \- | NFS (M) | \- |NFS (M),CIFS (M)| \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | NexentaStor4 | NFS (N) | \- | \- | \- | \- | NFS (N) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | NexentaStor5 | NFS (N) | T | \- | \- | \- | NFS (N) | T | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | MapRFS | \- | \- | MapRFS(O) | \- | \- | \- | \- | MapRFS(O) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | QNAP | NFS (O) | \- | \- | \- | \- | NFS (O) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Everpure FlashBlade | NFS (X) | \- | \- | \- | \- | NFS (X) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Vastdata | NFS (D) | \- | \- | \- | \- | NFS (D) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Lustre | LUSTRE (H) | \- | \- | \- | \- | LUSTRE (H) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | Weka | NFS (H) | \- | \- | \- | \- | NFS (H) | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ Mapping of share drivers and security services support ------------------------------------------------------ +----------------------------------------+------------------+-----------------+------------------+ | Driver name | Active Directory | LDAP | Kerberos | +========================================+==================+=================+==================+ | ZFSonLinux | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Container | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Generic (Cinder as back-end) | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | NetApp Clustered Data ONTAP | J | J | J | +----------------------------------------+------------------+-----------------+------------------+ | Dell PowerMax | O | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Dell VNX | J | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Dell Unity | N | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | EMC PowerScale | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Dell PowerStore | B | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Dell PowerFlex | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | GlusterFS | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | GlusterFS-Native | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | HDFS | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Hitachi HNAS | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Hitachi HSP | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | HPE 3PAR | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | HPE Alletra MP B10000 | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Huawei | M | M | \- | +----------------------------------------+------------------+-----------------+------------------+ | LVM | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Quobyte | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Windows SMB | L | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | IBM GPFS | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | INFINIDAT | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | INSPUR AS13000 | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | INSPUR InStorage | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Infortrend | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Macrosan | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Oracle ZFSSA | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | CephFS | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Tegile | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | NexentaStor4 | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | NexentaStor5 | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | MapRFS | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | QNAP | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Everpure FlashBlade | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Vastdata | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Lustre | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | Weka | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ Mapping of share drivers and common capabilities ------------------------------------------------ More information: :ref:`capabilities_and_extra_specs` +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Driver name | DHSS=True | DHSS=False | dedupe | compression | thin_provisioning | thick_provisioning | qos | create share from snapshot | revert to snapshot | mountable snapshot | ipv4_support | ipv6_support | multiple subnets per AZ | mount point name support | +========================================+===========+============+========+=============+===================+====================+=====+============================+====================+====================+==============+==============+=========================+==========================+ | ZFSonLinux | \- | M | M | M | M | \- | \- | M | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Container | N | \- | \- | \- | \- | N | \- | \- | \- | \- | P | \- | Y | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Generic (Cinder as back-end) | J | K | \- | \- | \- | L | \- | J | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | NetApp Clustered Data ONTAP | J | K | M | M | M | L | P | J | O | \- | P | Q | \- | Y | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Dell PowerMax | O | \- | \- | \- | \- | \- | \- | O | \- | \- | P | R | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Dell VNX | J | \- | \- | \- | \- | L | \- | J | \- | \- | P | Q | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Dell Unity | N | T | \- | \- | N | \- | \- | N | S | \- | P | Q | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Dell PowerScale | \- | K | G | \- | F | L | H | K | H | G | P | \- | \- | G | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Dell PowerStore | \- | B | \- | \- | B | \- | \- | B | B | \- | B | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Dell PowerFlex | \- | B | \- | \- | B | \- | \- | \- | \- | \- | B | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | GlusterFS | \- | J | \- | \- | \- | L | \- | volume layout (L) | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | GlusterFS-Native | \- | J | \- | \- | \- | L | \- | L | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | HDFS | \- | K | \- | \- | \- | L | \- | K | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Hitachi HNAS | \- | L | N | \- | L | \- | \- | L | O | O | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Hitachi HSP | \- | N | \- | \- | N | \- | \- | \- | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | HPE 3PAR | L | K | L | \- | L | L | \- | K | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | HPE Alletra MP B10000 | \- | G | G | G | G | \- | \- | \- | H | H | G | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Huawei | M | K | L | L | L | L | M | M | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | INFINIDAT | \- | Q | \- | \- | Q | Q | \- | Q | Q | Q | Q | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Infortrend | \- | T | \- | \- | \- | \- | \- | \- | \- | \- | T | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | LVM | \- | M | \- | \- | \- | M | \- | K | O | O | P | P | \- | Y | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Macrosan | \- | Z | \- | \- | \- | Z | \- | \- | \- | \- | Z | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Quobyte | \- | K | \- | \- | \- | L | \- | M | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Windows SMB | L | L | \- | \- | \- | L | \- | \- | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | IBM GPFS | \- | K | \- | \- | \- | L | \- | L | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Oracle ZFSSA | \- | K | \- | \- | \- | L | \- | K | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | CephFS | \- | M | \- | \- | \- | M | \- | \- | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Tegile | \- | M | M | M | M | \- | \- | M | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | NexentaStor4 | \- | N | N | N | N | N | \- | N | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | NexentaStor5 | \- | N | \- | N | N | N | \- | N | T | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | MapRFS | \- | N | \- | \- | \- | N | \- | O | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | QNAP | \- | O | Q | Q | O | Q | \- | O | \- | \- | P | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | INSPUR AS13000 | \- | R | \- | \- | R | \- | \- | R | \- | \- | R | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | INSPUR InStorage | \- | T | \- | \- | \- | T | \- | \- | \- | \- | T | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Everpure FlashBlade | \- | X | \- | \- | X | \- | \- | \- | X | \- | X | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Vastdata | \- | D | \- | \- | \- | \- | \- | \- | \- | \- | D | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Lustre | \- | H | \- | \- | H | \- | \- | \- | \- | \- | H | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ | Weka | \- | H | \- | \- | \- | H | \- | H | H | \- | H | \- | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+--------------------------+ .. note:: The common capability reported by back ends differs from some names seen in the above table: * `DHSS` is reported as ``driver_handles_share_servers`` (See details for :term:`DHSS`) * `create share from snapshot` is reported as ``create_share_from_snapshot_support`` * `multiple subnets per AZ` is reported as ``multiple_subnets_per_availability_zone`` ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8412373 manila-23.0.0.0rc1/doc/source/admin/share_mount_point_name.rst0000664000175000017500000000736715251045254023067 0ustar00zuulzuul.. _shared_mount_point_name: Mount Point Name Support ======================== The Shared File Systems service supports user defined mount point names. This feature allows users to specify a custom `mount_point_name` during share creation, which will be reflected in the share's export location. However, for this feature to be available to users, administrators must enable an extra-spec in the share type, `mount_point_name_support`, and set an extra-spec named `provisioning:mount_point_prefix`. If the `provisioning:mount_point_prefix` extra-spec is not set, the `project_id` from the `RequestContext` is used as a fallback. However, using the `project_id` as a prefix can restrict the transfer of share ownership, and manual action required to facilitate the transfer. .. note:: - In order to use this feature, the available backend in your deployment must have support for it. The list of backends that support this feature in the manila can be found in the :doc:`share_back_ends_feature_support_mapping`. - This feature is only available in API version 2.84 and beyond. - The extra-spec type `mount_point_name_support` required for this feature to work. - When the `project_id` is used as a prefix due to the absence of the `provisioning:mount_point_prefix` extra-spec, the transfer of share ownership may be restricted, and manual action may be required. Administrator Guide =================== 1. **Configuring `mount_point_name_support` and `provisioning:mount_point_prefix`** .. code-block:: bash openstack share type set --extra-specs \ mount_point_name_support=" True" provisioning:mount_point_prefix= Replace `` with the name of the share type you are configuring, and `` with the desired prefix. The `` should be a string containing ASCII alphabets and optionally, the underscore character. 2. **Default Behavior and Security Considerations** If `provisioning:mount_point_prefix` is not set, the system will use the `project_id` as the default prefix for the `mount_point_name`. However, be aware that setting `provisioning:mount_point_prefix` to a constant string and sharing the share type with multiple projects could potentially leak information about the existence of other shares. This could be considered a security hole and should be avoided. 3. **Share Transfer** During a share transfer, if `provisioning:mount_point_prefix` contains a `project_id`, the system will refuse to perform the transfer and return an HTTP 400 error. This indicates that the share has some project identity that requires administrator intervention. To perform the transfer, administrators will need to unmanage the share from the current project and manage it into the target project. 4. **Constructing `mount_point_name`** The `mount_point_name` is constructed by combining the prefix from the share type (set by `provisioning:mount_point_prefix`) and the suffix provided by the user. This combined string must be ASCII alphanumeric, allowing only underscores as special characters. If this validation fails, the system will log an error and return a message indicating that the `mount_point_name` is not appropriate. Share Replica Behavior ====================== When a share replica is created via ``POST /v2/share-replicas``, the ``mount_point_name`` is automatically inherited from the parent share's active instance. No user input is required — the value is copied transparently. This enables DNS-based access balancing across replicas: all replicas share the same export path, and clients can switch between the active and passive replica simply by changing the IP address resolved by a DNS record, without remounting. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8412373 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-crud-share.rst0000664000175000017500000014506415251045254024252 0ustar00zuulzuul.. _shared_file_systems_crud_share: ====================== Share basic operations ====================== General concepts ---------------- To create a file share, and access it, the following general concepts are prerequisite knowledge: #. To create a share, use :command:`openstack share create` command and specify the required arguments: the size of the share and the shared file system protocol. ``NFS``, ``CIFS``, ``GlusterFS``, ``HDFS``, ``CephFS`` or ``MAPRFS`` share file system protocols are supported. #. You can also optionally specify the share network and the share type. #. After the share becomes available, use the :command:`openstack share show` command to get the share export locations. #. After getting the share export locations, you can create an :ref:`access rule ` for the share, mount it and work with files on the remote file system. There are big number of the share drivers created by different vendors in the Shared File Systems service. As a Python class, each share driver can be set for the :ref:`back end ` and run in the back end to manage the share operations. Initially there are two driver modes for the back ends: * no share servers mode * share servers mode Each share driver supports one or two of possible back end modes that can be configured in the ``manila.conf`` file. The configuration option ``driver_handles_share_servers`` in the ``manila.conf`` file sets the share servers mode or no share servers mode, and defines the driver mode for share storage lifecycle management: +------------------+-------------------------------------+--------------------+ | Mode | Config option | Description | +==================+=====================================+====================+ | no share servers | driver_handles_share_servers = False| An administrator | | | | rather than a share| | | | driver manages the | | | | bare metal storage | | | | with some net | | | | interface instead | | | | of the presence of | | | | the share servers. | +------------------+-------------------------------------+--------------------+ | share servers | driver_handles_share_servers = True | The share driver | | | | creates the share | | | | server and manages,| | | | or handles, the | | | | share server life | | | | cycle. | +------------------+-------------------------------------+--------------------+ It is :ref:`the share types ` which have the extra specifications that help scheduler to filter back ends and choose the appropriate back end for the user that requested to create a share. The required extra boolean specification for each share type is ``driver_handles_share_servers``. As an administrator, you can create the share types with the specifications you need. For details of managing the share types and configuration the back ends, see :ref:`shared_file_systems_share_types` and :ref:`shared_file_systems_multi_backend` documentation. You can create a share in two described above modes: * in a no share servers mode without specifying the share network and specifying the share type with ``driver_handles_share_servers = False`` parameter. See subsection :ref:`create_share_in_no_share_server_mode`. * in a share servers mode with specifying the share network and the share type with ``driver_handles_share_servers = True`` parameter. See subsection :ref:`create_share_in_share_server_mode`. .. _create_share_in_no_share_server_mode: Create a share in no share servers mode --------------------------------------- To create a file share in no share servers mode, you need to: #. To create a share, use :command:`openstack share create` command and specify the required arguments: the size of the share and the shared file system protocol. ``NFS``, ``CIFS``, ``GlusterFS``, ``HDFS``, ``CephFS`` or ``MAPRFS`` share file system protocols are supported. #. You should specify the :ref:`share type ` with ``driver_handles_share_servers = False`` extra specification. #. You must not specify the ``share network`` because no share servers are created. In this mode the Shared File Systems service expects that administrator has some bare metal storage with some net interface. #. The :command:`openstack share create` command creates a share. This command does the following things: * The :ref:`manila-scheduler ` service will find the back end with ``driver_handles_share_servers = False`` mode due to filtering the extra specifications of the share type. * The share is created using the storage that is specified in the found back end. #. After the share becomes available, use the :command:`openstack share show` command to get the share export locations. In the example to create a share, the created already share type named ``dhss_false`` with ``driver_handles_share_servers = False`` extra specification is used. Check share types that exist, run: .. code-block:: console $ openstack share type list +----------+----------+------------+------------+----------------------+----------------------+-------------+ | ID | Name | Visibility | Is Default | Required Extra Specs | Optional Extra Specs | Description | +----------+----------+------------+------------+----------------------+----------------------+-------------+ | 807e5cd7 | default | public | True | driver_handles_share | snapshot_support : | None | | -a0e7- | | | | _servers : True | True | | | 4912- | | | | | create_share_from_sn | | | 8f7d- | | | | | apshot_support : | | | 352512ce | | | | | True | | | 51c3 | | | | | revert_to_snapshot_s | | | | | | | | upport : True | | | | | | | | mount_snapshot_suppo | | | | | | | | rt : True | | | d57dfcb5 | dhss_fal | public | False | driver_handles_share | snapshot_support : | None | | -3026- | se | | | _servers : False | True | | | 4018- | | | | | create_share_from_sn | | | be87- | | | | | apshot_support : | | | 3d7ca511 | | | | | True | | | 60cc | | | | | revert_to_snapshot_s | | | | | | | | upport : True | | | | | | | | mount_snapshot_suppo | | | | | | | | rt : True | | | a5e531e6 | dhss_tru | public | False | driver_handles_share | snapshot_support : | None | | -8a89- | e | | | _servers : True | True | | | 4333- | | | | | create_share_from_sn | | | 9920- | | | | | apshot_support : | | | 59cd420d | | | | | True | | | 4f79 | | | | | revert_to_snapshot_s | | | | | | | | upport : True | | | | | | | | mount_snapshot_suppo | | | | | | | | rt : True | | +----------+----------+------------+------------+----------------------+----------------------+-------------+ Create a private share with ``dhss_false`` share type, NFS shared file system protocol, and size 1 GB: .. code-block:: console $ openstack share create nfs 1 --name Share1 --description "My share" \ --share-type dhss_false +---------------------------------------+--------------------------------------+ | Field | Value | +---------------------------------------+--------------------------------------+ | id | c1de2cdc-2ccf-4e8d-afe9-b25c84bf3953 | | size | 1 | | availability_zone | None | | created_at | 2025-04-05T22:05:29.343767 | | status | creating | | name | Share1 | | description | My share | | project_id | c0bc204890ad428796f364b677a8516b | | snapshot_id | None | | share_network_id | None | | share_proto | NFS | | metadata | {} | | share_type | d57dfcb5-3026-4018-be87-3d7ca51160cc | | volume_type | dhss_false | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | dhss_false | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | c5d0c19aae6e4484a41e241f0d8b04fb | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | None | | is_soft_deleted | False | | scheduled_to_be_deleted_at | None | | source_backup_id | None | | share_server_id | None | | host | | +---------------------------------------+--------------------------------------+ New share ``Share1`` should have a status ``available``: .. code-block:: console $ openstack share show Share1 +---------------------------------------+------------------------------------------+ | Field | Value | +---------------------------------------+------------------------------------------+ | id | c1de2cdc-2ccf-4e8d-afe9-b25c84bf3953 | | size | 1 | | availability_zone | manila-zone-1 | | created_at | 2025-04-05T22:05:29.343767 | | status | available | | name | Share1 | | description | My share | | project_id | c0bc204890ad428796f364b677a8516b | | snapshot_id | None | | share_network_id | None | | share_proto | NFS | | share_type | d57dfcb5-3026-4018-be87-3d7ca51160cc | | volume_type | dhss_false | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | dhss_false | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | c5d0c19aae6e4484a41e241f0d8b04fb | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | 100% | | is_soft_deleted | False | | scheduled_to_be_deleted_at | None | | source_backup_id | None | | share_server_id | None | | host | manila@paris#shares | | export_locations | | | | id = | | | 30d8ad5a-05b2-401a-9dbd-caf496f4ab12 | | | path = 192.0.2.11:/shares/share_c1de2 | | | cdc_2ccf_4e8d_afe9_b25c84bf3953_86ef2 | | | fc0_acbe_444c_888a_c52c05242dce | | | preferred = False | | | metadata = {} | | | share_instance_id = | | | 86ef2fc0-acbe-444c-888a-c52c05242dce | | | is_admin_only = True | | | id = | | | acdd47f6-aef5-4d3b-86b2-db7d73d4bbfe | | | path = 192.0.2.10:/shares/share_c1de2 | | | cdc_2ccf_4e8d_afe9_b25c84bf3953_86ef2 | | | fc0_acbe_444c_888a_c52c05242dce | | | preferred = True | | | metadata = {} | | | share_instance_id = | | | 86ef2fc0-acbe-444c-888a-c52c05242dce | | | is_admin_only = False | | | id = | | | 224f223f-6dea-4e08-92c5-66de161cf43d | | | path = 192.0.2.20:shares/share_c1de2 | | | cdc_2ccf_4e8d_afe9_b25c84bf3953_86ef2 | | | fc0_acbe_444c_888a_c52c05242dce | | | preferred = False | | | metadata = {} | | | share_instance_id = | | | 86ef2fc0-acbe-444c-888a-c52c05242dce | | | is_admin_only = False | | properties | | +---------------------------------------+------------------------------------------+ .. _create_share_in_share_server_mode: Create a share in share servers mode ------------------------------------ To create a file share in share servers mode, you need to: #. To create a share, use :command:`openstack share create` command and specify the required arguments: the size of the share and the shared file system protocol. ``NFS``, ``CIFS``, ``GlusterFS``, ``HDFS``, ``CephFS`` or ``MAPRFS`` share file system protocols are supported. #. You should specify the :ref:`share type ` with ``driver_handles_share_servers = True`` extra specification. #. You should specify the :ref:`share network `. #. The :command:`openstack share create` command creates a share. This command does the following things: * The :ref:`manila-scheduler ` service will find the back end with ``driver_handles_share_servers = True`` mode due to filtering the extra specifications of the share type. * The share driver will create a share server with the share network. For details of creating the resources, see the `documentation `_ of the specific share driver. #. After the share becomes available, use the :command:`openstack share show` command to get the share export location. In the example to create a share, the default share type and the already existing share network are used. .. note:: There is no default share type just after you started manila as the administrator. See :ref:`shared_file_systems_share_types` to create the default share type. To create a share network, use :ref:`shared_file_systems_share_networks`. Check share networks that exist, run: .. code-block:: console $ openstack share network list +--------------------------------------+-------+ | ID | Name | +--------------------------------------+-------+ | 1e0b9a80-2bce-4244-9da4-f8589c6bd56b | mynet | +--------------------------------------+-------+ Create a public share with ``my_share_net`` network, ``default`` share type, NFS shared file system protocol, and size 1 GB: .. code-block:: console $ openstack share create nfs 1 \ --name "Share2" \ --description "My second share" \ --share-type default \ --share-network my_net \ --property aim=testing \ --public +---------------------------------------+--------------------------------------+ | Field | Value | +---------------------------------------+--------------------------------------+ | id | a37c3d1d-023f-4fcf-b640-3dbbb3e89193 | | size | 1 | | availability_zone | None | | created_at | 2025-04-05T22:25:51.609837 | | status | creating | | name | Share2 | | description | My second share | | project_id | c0bc204890ad428796f364b677a8516b | | snapshot_id | None | | share_network_id | 1e0b9a80-2bce-4244-9da4-f8589c6bd56b | | share_proto | NFS | | metadata | {'aim': 'testing'} | | share_type | 807e5cd7-a0e7-4912-8f7d-352512ce51c3 | | is_public | True | | snapshot_support | True | | task_state | None | | share_type_name | default | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | c5d0c19aae6e4484a41e241f0d8b04fb | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | None | | is_soft_deleted | False | | scheduled_to_be_deleted_at | None | | source_backup_id | None | | share_server_id | None | | host | | +---------------------------------------+--------------------------------------+ The share also can be created from a share snapshot. For details, see :ref:`shared_file_systems_snapshots`. See the share in a share list: .. code-block:: console $ openstack share list +--------------------------------------+----------------+------+-------------+--------------+-----------+-----------------+----------------------+-------------------+ | ID | Name | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone | +--------------------------------------+----------------+------+-------------+--------------+-----------+-----------------+----------------------+-------------------+ | a37c3d1d-023f-4fcf-b640-3dbbb3e89193 | Share2 | 1 | NFS | available | True | default | manila@lima#shares | manila-zone-1 | | c1de2cdc-2ccf-4e8d-afe9-b25c84bf3953 | Share1 | 1 | NFS | available | False | dhss_false | manila@paris#shares | manila-zone-1 | +--------------------------------------+----------------+------+-------------+--------------+-----------+-----------------+----------------------+-------------------+ Check the share status and see the share export locations. After ``creating`` status share should have status ``available``: .. code-block:: console $ openstack share show Share2 +---------------------------------------+------------------------------------------+ | Field | Value | +---------------------------------------+------------------------------------------+ | id | a37c3d1d-023f-4fcf-b640-3dbbb3e89193 | | size | 1 | | availability_zone | manila-zone-1 | | created_at | 2025-04-05T22:25:51.609837 | | status | available | | name | Share2 | | description | My second share | | project_id | c0bc204890ad428796f364b677a8516b | | snapshot_id | None | | share_network_id | 1e0b9a80-2bce-4244-9da4-f8589c6bd56b | | share_proto | NFS | | share_type | 807e5cd7-a0e7-4912-8f7d-352512ce51c3 | | volume_type | default | | is_public | True | | snapshot_support | True | | task_state | None | | share_type_name | default | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | c5d0c19aae6e4484a41e241f0d8b04fb | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | None | | is_soft_deleted | False | | scheduled_to_be_deleted_at | None | | source_backup_id | None | | share_server_id | None | | host | manila@lima#shares | | export_locations | | | | id = | | | aeac5f3e-60e3-461c-8ca8-6696e0f59f39 | | | path = 192.0.2.12:/shares/share_cdc_2c | | | cf_4e8d_afe9_b25c84bf3953_86ef2 | | | 789-f1f5-4171-9e43-3afabddf8b5f | | | preferred = False | | | metadata = {} | | | share_instance_id = | | | 86ef2fc0-acbe-444c-888a-c52c05242dce | | | is_admin_only = True | | | id = | | | 965aa536-9ba4-4f8b-9ddd-a6a916968597 | | | path = 192.0.2.10:/shares/share_cdc_2c | | | cf_4e8d_afe9_b25c84bf3953_86ef2 | | | 789-f1f5-4171-9e43-3afabddf8b5f | | | preferred = True | | | metadata = {} | | | share_instance_id = | | | 86ef2fc0-acbe-444c-888a-c52c05242dce | | | is_admin_only = False | | | id = | | | 224f223f-6dea-4e08-92c5-66de161cf43d | | | path = 192.0.2.20:/shares/share_cdc_2c | | | cf_4e8d_afe9_b25c84bf3953_86ef2 | | | 789-f1f5-4171-9e43-3afabddf8b5f | | | preferred = False | | | metadata = {} | | | share_instance_id = | | | 86ef2fc0-acbe-444c-888a-c52c05242dce | | properties | aim='testing' | +---------------------------------------+------------------------------------------+ ``is_public`` defines the level of visibility for the share: whether other projects can or cannot see the share. By default, the share is private. Update share ------------ Update the name, or description, or level of visibility for all projects for the share if you need: .. code-block:: console $ openstack share set Share2 --description "My second share. Updated" \ --public False $ openstack share show Share2 +---------------------------------------+--------------------------------------+ | Field | Value | +---------------------------------------+--------------------------------------+ | id | a37c3d1d-023f-4fcf-b640-3dbbb3e89193 | | size | 1 | | availability_zone | manila-zone-1 | | created_at | 2025-04-05T22:25:51.609837 | | status | available | | name | Share2 | | description | My second share. Updated | | project_id | c0bc204890ad428796f364b677a8516b | | snapshot_id | None | | share_network_id | 1e0b9a80-2bce-4244-9da4-f8589c6bd56b | | share_proto | NFS | | share_type | 807e5cd7-a0e7-4912-8f7d-352512ce51c3 | | volume_type | default | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | default | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | c5d0c19aae6e4484a41e241f0d8b04fb | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | None | | is_soft_deleted | False | | scheduled_to_be_deleted_at | None | | source_backup_id | None | | share_server_id | None | | host | manila@lima#shares | | export_locations | | | properties | aim='testing' | +---------------------------------------+--------------------------------------+ A share can have one of these status values: +-----------------------------------+-----------------------------------------+ | Status | Description | +===================================+=========================================+ | creating | The share is being created. | +-----------------------------------+-----------------------------------------+ | deleting | The share is being deleted. | +-----------------------------------+-----------------------------------------+ | error | An error occurred during share creation.| +-----------------------------------+-----------------------------------------+ | error_deleting | An error occurred during share deletion.| +-----------------------------------+-----------------------------------------+ | available | The share is ready to use. | +-----------------------------------+-----------------------------------------+ | manage_starting | Share manage started. | +-----------------------------------+-----------------------------------------+ | manage_error | Share manage failed. | +-----------------------------------+-----------------------------------------+ | unmanage_starting | Share unmanage started. | +-----------------------------------+-----------------------------------------+ | unmanage_error | Share cannot be unmanaged. | +-----------------------------------+-----------------------------------------+ | unmanaged | Share was unmanaged. | +-----------------------------------+-----------------------------------------+ | extending | The extend, or increase, share size | | | request was issued successfully. | +-----------------------------------+-----------------------------------------+ | extending_error | Extend share failed. | +-----------------------------------+-----------------------------------------+ | shrinking | Share is being shrunk. | +-----------------------------------+-----------------------------------------+ | shrinking_error | Failed to update quota on share | | | shrinking. | +-----------------------------------+-----------------------------------------+ | shrinking_possible_data_loss_error| Shrink share failed due to possible data| | | loss. | +-----------------------------------+-----------------------------------------+ | migrating | Share migration is in progress. | +-----------------------------------+-----------------------------------------+ .. _share_metadata: Share metadata -------------- If you want to set the metadata key-value pairs on the share, run: .. code-block:: console $ openstack share set Share2 --property project=my_abc Get all metadata key-value pairs of the share: .. code-block:: console $ openstack share show -c properties Share2 +------------+------------------------------------------------------+ | Field | Value | +------------+------------------------------------------------------+ | properties | aim='testing', deadline='01/20/16', project='my_abc' | +------------+------------------------------------------------------+ You can update the metadata: .. code-block:: console $ openstack share set Share2 --property deadline='01/30/16' $ openstack share show -c properties Share2 +------------+------------------------------------------------------+ | Field | Value | +------------+------------------------------------------------------+ | properties | aim='testing', deadline='01/30/16', project='my_abc' | +------------+------------------------------------------------------+ You also can unset the metadata using **openstack share unset --property **. .. note:: In case you want to prevent certain metadata key-values to be manipulated by less privileged users, you can provide a list of such keys through the admin only metadata configuration option listed in the :doc:`Configuration Reference `. In case you want to pass certain metadata key-values to be consumed by share drivers, you can provide a list of such keys through the driver updatable metadata configuration option listed in the :doc:`Configuration Reference `. Reset share state ----------------- As administrator, you can reset the state of a share. Use **openstack share set --status** command to reset share state, where ``state`` indicates which state to assign the share. Options include ``available``, ``error``, ``creating``, ``deleting``, ``error_deleting`` states. .. code-block:: console $ openstack share set Share2 --status deleting $ openstack share show Share2 +---------------------------------------+--------------------------------------+ | Field | Value | +---------------------------------------+--------------------------------------+ | id | a37c3d1d-023f-4fcf-b640-3dbbb3e89193 | | size | 1 | | availability_zone | manila-zone-1 | | created_at | 2025-04-05T22:25:51.609837 | | status | deleting | | name | Share2 | | description | My second share. Updated | | project_id | c0bc204890ad428796f364b677a8516b | | snapshot_id | None | | share_network_id | 1e0b9a80-2bce-4244-9da4-f8589c6bd56b | | share_proto | NFS | | share_type | 807e5cd7-a0e7-4912-8f7d-352512ce51c3 | | volume_type | default | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | default | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | c5d0c19aae6e4484a41e241f0d8b04fb | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | None | | is_soft_deleted | False | | scheduled_to_be_deleted_at | None | | source_backup_id | None | | share_server_id | None | | host | manila@lima#shares | | export_locations | | | properties | deadline='01/30/16' | +---------------------------------------+--------------------------------------+ Delete and force-delete share ----------------------------- You also can force-delete a share. The shares cannot be deleted in transitional states. The transitional states are ``creating``, ``deleting``, ``managing``, ``unmanaging``, ``migrating``, ``extending``, and ``shrinking`` statuses for the shares. Force-deletion deletes an object in any state. Use the ``policy.yaml`` file to grant permissions for this action to other roles. .. tip:: The configuration file ``policy.yaml`` may be used from different places. The path ``/etc/manila/policy.yaml`` is one of expected paths by default. Use **openstack share delete ** command to delete a specified share: .. code-block:: console $ openstack share delete %share_name_or_id% .. code-block:: console $ openstack share delete %share_name_or_id% --share-group %share-group-id% .. code-block:: console $ openstack share delete Share2 Print the list of all shares for all projects: .. code-block:: console $ openstack share delete --force Share2 $ openstack share list --all +--------------------------------------+----------------+------+-------------+--------------+-----------+-----------------+------------------------+-------------------+ | ID | Name | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone | +--------------------------------------+----------------+------+-------------+--------------+-----------+-----------------+------------------------+-------------------+ | c1de2cdc-2ccf-4e8d-afe9-b25c84bf3953 | Share1 | 1 | NFS | available | False | default | manila@paris#shares | manila-zone-1 | +--------------------------------------+----------------+------+-------------+--------------+-----------+-----------------+------------------------+-------------------+ .. _access_to_share: Manage access to share ---------------------- The Shared File Systems service allows to grant or deny access to a specified share, and list the permissions for a specified share. To grant or deny access to a share, specify one of these supported share access levels: - **rw**. Read and write (RW) access. This is the default value. - **ro**. Read-only (RO) access. You must also specify one of these supported authentication methods: - **ip**. Authenticates an instance through its IP address. A valid format is ``XX.XX.XX.XX`` or ``XX.XX.XX.XX/XX``. For example ``0.0.0.0/0``. - **user**. Authenticates by a specified user or group name. A valid value is an alphanumeric string that can contain some special characters and is from 4 to 32 characters long. - **cert**. Authenticates an instance through a TLS certificate. Specify the TLS identity as the IDENTKEY. A valid value is any string up to 64 characters long in the common name (CN) of the certificate. The meaning of a string depends on its interpretation. - **cephx**. Ceph authentication system. Specify the Ceph auth ID that needs to be authenticated and authorized for share access by the Ceph back end. A valid value must be non-empty, consist of ASCII printable characters, and not contain periods. Try to mount NFS share with export path ``192.0.2.10:/shares/share_cdc_2ccf_4e8d_afe9_b25c84bf3953_86ef2789-f1f5-4171-9e43-3afabddf8b5f`` on the node with IP address ``192.0.2.13``: .. code-block:: console $ sudo mount -v -t nfs 192.0.2.10:/shares/share_cdc_2ccf_4e8d_afe9_b25c84bf3953_86ef2789-f1f5-4171-9e43-3afabddf8b5f /mnt/ mount.nfs: timeout set for Mon Mar 31 10:37:23 2026 mount.nfs: trying text-based options 'vers=4,addr=192.0.2.10,clientaddr=192.0.2.13' mount.nfs: mount(2): Permission denied mount.nfs: access denied by server while mounting 192.0.2.10:/shares/share_cdc_2ccf_4e8d_afe9_b25c84bf3953_86ef2789-f1f5-4171-9e43-3afabddf8b5f An error message "Permission denied" appeared, so you are not allowed to mount a share without an access rule. Allow access to the share with ``ip`` access type and ``198.51.100.13`` IP address: .. code-block:: console $ openstack share access create Share1 ip 198.51.100.13 --access-level rw +--------------+--------------------------------------+ | Field | Value | +--------------+--------------------------------------+ | id | 56d344c5-95cb-477b-bf33-39f6e9b43edf | | share_id | c1de2cdc-2ccf-4e8d-afe9-b25c84bf3953 | | access_level | rw | | access_to | 198.51.100.13 | | access_type | ip | | state | queued_to_apply | | access_key | None | | created_at | 2025-04-05T23:44:31.165395 | | updated_at | None | | properties | | +--------------+--------------------------------------+ Try to mount a share again. This time it is mounted successfully: .. code-block:: console $ sudo mount -v -t nfs 192.0.2.10:/shares/share_cdc_2ccf_4e8d_afe9_b25c84bf3953_86ef2789-f1f5-4171-9e43-3afabddf8b5f /mnt/ .. note:: Different share features are supported by different share drivers. For the example, the Generic driver with the Block Storage service as a back-end doesn't support ``user`` and ``cert`` authentications methods. For details of supporting of features by different drivers, see `Manila share features support mapping `_. .. tip:: Starting from the 2023.2 (Bobcat) release, in case you want to restrict the visibility of the sensitive fields (``access_to`` and ``access_key``), or avoid the access rule being deleted by other users, you can specify ``--lock-visibility`` and ``--lock-deletion`` in the Manila OpenStack command for creating access rules. A reason (``--lock-reason``) can also be provided. Only the user that placed the lock, system administrators and services will be able to view sensitive fields of, or manipulate such access rules by virtue of default RBAC. In case the deletion of the access rule was locked, Manila will also place an additional lock on the share, to ensure it will not be deleted and cause disconnections. To verify that the access rules (ACL) were configured correctly for a share, you list permissions for a share: .. code-block:: console $ openstack share access list Share1 +--------------------------------------+-------------+------------+--------------+--------+------------+----------------------------+-------------------------+ | ID | Access Type | Access To | Access Level | State | Access Key | Created At | Updated At | +--------------------------------------+-------------+------------+--------------+--------+------------+----------------------------+-------------------------+ | 56d344c5-95cb-477b-bf33-39f6e9b43edf | ip | 192.0.2.13 | rw | active | None | 2025-04-05T23:44:31.165395 | 2025-04-05T23:45:50.780 | +--------------------------------------+-------------+------------+--------------+--------+------------+----------------------------+-------------------------+ Deny access to the share and check that deleted access rule is absent in the access rule list: .. code-block:: console $ openstack share access delete Share1 56d344c5-95cb-477b-bf33-39f6e9b43edf .. note:: Starting from the 2023.2 (Bobcat) release, it is possible to prevent the deletion of an access rule. In case the deletion was locked, the ``--unrestrict`` argument from the Manila's OpenStack Client must be used in the request to revoke the access. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8412373 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-healthcheck.rst0000664000175000017500000001631015251045254024447 0ustar00zuulzuul============ Healthchecks ============ The health of a the Shared File Systems API service can be determined with the help of a "healthcheck" middleware. This middleware is enabled by default with the `api-paste`_ file that is packaged with the software. There is hence a ``/healthcheck`` endpoint that responds to GET requests with HTTP 200 "OK" as the body if the API service is functional. If the API service is not functional, the response is HTTP 503 "Service Unavailable". This ``/healthcheck`` endpoint can be polled by load balancers to determine service availability. The end point behaves very similar to `mod_status` in apache. A sample configuration that can be added to the `api-paste`_ file is as follows. .. _api-paste: ../configuration/shared-file-systems/samples/api-paste.ini.html .. code-block:: [app:healthcheck] paste.app_factory = oslo_middleware:Healthcheck.app_factory backends = disable_by_file disable_by_file_path = /etc/manila/healthcheck_disable detailed = False Example healthcheck requests and responses: .. code-block:: $ curl -i -X GET http://203.0.113.30/share/healthcheck HTTP/1.1 200 OK Date: Wed, 20 Mar 2024 23:00:19 GMT Server: Apache/2.4.52 (Ubuntu) Content-Type: text/plain; charset=UTF-8 Content-Length: 2 Connection: close Vary: Accept-Encoding OK $ curl -i -X GET http://203.0.113.30/share/healthcheck -H "Accept: application/json" HTTP/1.1 200 OK Date: Wed, 20 Mar 2024 23:01:08 GMT Server: Apache/2.4.52 (Ubuntu) Content-Type: application/json Content-Length: 62 Connection: close { "detailed": false, "reasons": [ "OK" ] } $ curl -i -X GET http://203.0.113.30/share/healthcheck -H "Accept: text/html" HTTP/1.1 200 OK Date: Wed, 20 Mar 2024 23:02:27 GMT Server: Apache/2.4.52 (Ubuntu) Content-Type: text/html; charset=UTF-8 Content-Length: 239 Connection: close Vary: Accept-Encoding Healthcheck Status

Result of 1 checks:

Reason
OK

A "detail" response can be sought if ``detailed`` is set to ``True`` in the ``[app:healthcheck]`` section of the api paste configuration file. This is not done by default. .. code-block:: $ curl -i -X GET http://203.0.113.30/share/healthcheck -H "Accept: application/json" HTTP/1.1 200 OK Date: Wed, 20 Mar 2024 23:06:19 GMT Server: Apache/2.4.52 (Ubuntu) Content-Type: application/json Content-Length: 4177 Connection: close { "detailed": true, "gc": { "counts": [ 400, 5, 0 ], "threshold": [ 700, 10, 10 ] }, "greenthreads": [ " File \"/opt/stack/data/venv/lib/python3.10/site-packages/paste/urlmap.py\", line 216, in __call__\n return app(environ, start_response)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/webob/dec.py\", line 129, in __call__\n resp = self.call_func(req, *args, **kw)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/webob/dec.py\", line 193, in call_func\n return self.func(req, *args, **kwargs)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_middleware/base.py\", line 121, in __call__\n response = self.process_request(req)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/webob/dec.py\", line 146, in __call__\n return self.call_func(req, *args, **kw)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/webob/dec.py\", line 193, in call_func\n return self.func(req, *args, **kwargs)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_middleware/healthcheck/__init__.py\", line 582, in process_request\n body, content_type = functor(results, healthy)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_middleware/healthcheck/__init__.py\", line 510, in _make_json_response\n body['greenthreads'] = self._get_greenstacks()\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_middleware/healthcheck/__init__.py\", line 464, in _get_greenstacks\n traceback.print_stack(gt.gr_frame, file=buf)\n" ], "now": "2024-03-20 23:06:19.907279", "platform": "Linux-5.15.0-91-generic-x86_64-with-glibc2.35", "python_version": "3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]", "reasons": [ { "class": "HealthcheckResult", "details": "Path '/etc/manila/healthcheck_disable' was not found", "reason": "OK" } ], "threads": [ " File \"/usr/lib/python3.10/threading.py\", line 973, in _bootstrap\n self._bootstrap_inner()\n File \"/usr/lib/python3.10/threading.py\", line 1016, in _bootstrap_inner\n self.run()\n File \"/usr/lib/python3.10/threading.py\", line 953, in run\n self._target(*self._args, **self._kwargs)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/tooz/coordination.py\", line 208, in _beat_forever_until_stopped\n self._dead.wait(has_to_sleep_for / 2.0)\n File \"/usr/lib/python3.10/threading.py\", line 607, in wait\n signaled = self._cond.wait(timeout)\n File \"/usr/lib/python3.10/threading.py\", line 324, in wait\n gotit = waiter.acquire(True, timeout)\n", " File \"/opt/stack/data/venv/lib/python3.10/site-packages/paste/urlmap.py\", line 216, in __call__\n return app(environ, start_response)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/webob/dec.py\", line 129, in __call__\n resp = self.call_func(req, *args, **kw)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/webob/dec.py\", line 193, in call_func\n return self.func(req, *args, **kwargs)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_middleware/base.py\", line 121, in __call__\n response = self.process_request(req)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/webob/dec.py\", line 146, in __call__\n return self.call_func(req, *args, **kw)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/webob/dec.py\", line 193, in call_func\n return self.func(req, *args, **kwargs)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_middleware/healthcheck/__init__.py\", line 582, in process_request\n body, content_type = functor(results, healthy)\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_middleware/healthcheck/__init__.py\", line 511, in _make_json_response\n body['threads'] = self._get_threadstacks()\n File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_middleware/healthcheck/__init__.py\", line 452, in _get_threadstacks\n traceback.print_stack(stack, file=buf)\n" ] } You may disable the healthcheck endpoint dynamically by creating a file called ``/etc/manila/healthcheck_disable``. The name of this file can be customized with the configuration option ``disable_by_file_path`` in the ``[app:healthcheck]`` section of the api paste configuration file. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8422375 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-key-concepts.rst0000664000175000017500000001141515251045254024611 0ustar00zuulzuul.. _shared_file_systems_key_concepts: ============ Key concepts ============ Share ~~~~~ In the Shared File Systems service ``share`` is the fundamental resource unit allocated by the Shared File System service. It represents an allocation of a persistent, readable, and writable filesystems. Compute instances access these filesystems. Depending on the deployment configuration, clients outside of OpenStack can also access the filesystem. .. note:: A ``share`` is an abstract storage object that may or may not directly map to a "share" concept from the underlying storage provider. See the description of ``share instance`` for more details. Share instance ~~~~~~~~~~~~~~ This concept is tied with ``share`` and represents created resource on specific back end, when ``share`` represents abstraction between end user and back-end storages. In common cases, it is one-to-one relation. One single ``share`` has more than one ``share instance`` in two cases: - When ``share migration`` is being applied - When ``share replication`` is enabled Therefore, each ``share instance`` stores information specific to real allocated resource on storage. And ``share`` represents the information that is common for ``share instances``. A user with ``member`` role will not be able to work with it directly. Only a user with ``admin`` role has rights to perform actions against specific share instances. Snapshot ~~~~~~~~ A ``snapshot`` is a point-in-time, read-only copy of a ``share``. You can create ``Snapshots`` from an existing, operational ``share`` regardless of whether a client has mounted the file system. A ``snapshot`` can serve as the content source for a new ``share``. Specify the **Create from snapshot** option when creating a new ``share`` on the dashboard. Storage Pools ~~~~~~~~~~~~~ With the Kilo release of OpenStack, Shared File Systems can use ``storage pools``. The storage may present one or more logical storage resource pools that the Shared File Systems service will select as a storage location when provisioning ``shares``. Share Type ~~~~~~~~~~ ``Share type`` is an abstract collection of criteria used to characterize ``shares``. They are most commonly used to create a hierarchy of functional capabilities. This hierarchy represents tiered storage services levels. For example, an administrator might define a premium ``share type`` that indicates a greater level of performance than a basic ``share type``. Premium represents the best performance level. Share Access Rules ~~~~~~~~~~~~~~~~~~ ``Share access rules`` define which users can access a particular ``share``. For example, administrators can declare rules for NFS shares by listing the valid IP networks which will access the ``share``. List the IP networks in CIDR notation. Security Services ~~~~~~~~~~~~~~~~~ ``Security services`` allow granular client access rules for administrators. They can declare rules for authentication or authorization to access ``share`` content. External services including LDAP, Active Directory, and Kerberos can be declared as resources. Examine and consult these resources when making an access decision for a particular ``share``. You can associate ``Shares`` with multiple security services, but only one service per one type. Share Networks ~~~~~~~~~~~~~~ A ``share network`` is an object that defines a relationship between a project network and subnet, as defined in an OpenStack Networking service or Compute service. The ``share network`` is also defined in ``shares`` created by the same project. A project may find it desirable to provision ``shares`` such that only instances connected to a particular OpenStack-defined network have access to the ``share``. Also, ``security services`` can be attached to ``share networks``, because most of auth protocols require some interaction with network services. The Shared File Systems service has the ability to work outside of OpenStack. That is due to the ``StandaloneNetworkPlugin``. The plugin is compatible with any network platform, and does not require specific network services in OpenStack like Compute or Networking service. You can set the network parameters in the ``manila.conf`` file. Share Servers ~~~~~~~~~~~~~ A ``share server`` is a logical entity that hosts the shares created on a specific ``share network``. A ``share server`` may be a configuration object within the storage controller, or it may represent logical resources provisioned within an OpenStack deployment used to support the data path used to access ``shares``. ``Share servers`` interact with network services to determine the appropriate IP addresses on which to export ``shares`` according to the related ``share network``. The Shared File Systems service has a pluggable network model that allows ``share servers`` to work with different implementations of the Networking service. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8422375 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-manage-and-unmanage-share.rst0000664000175000017500000003270515251045254027073 0ustar00zuulzuul.. _shared_file_systems_manage_and_unmanage_share: ========================= Manage and unmanage share ========================= To ``manage`` a share means that an administrator, rather than a share driver, manages the storage lifecycle. This approach is appropriate when an administrator already has the custom non-manila share with its size, shared file system protocol, and export path, and an administrator wants to register it in the Shared File System service. To ``unmanage`` a share means to unregister a specified share from the Shared File Systems service. Administrators can revert an unmanaged share to managed status if needed. .. _unmanage_share: Unmanage a share ---------------- .. note:: The ``unmanage`` operation is not supported for shares that were created on top of share servers and created with share networks until Shared File Systems API version ``2.49`` (Stein/Manila 8.0.0 release). .. important:: Shares that have dependent snapshots or share replicas cannot be removed from the Shared File Systems service unless the snapshots have been removed or unmanaged and the share replicas have been removed. Unmanaging a share removes it from the management of the Shared File Systems service without deleting the share. It is a non-disruptive operation and existing clients are not disconnected, and the functionality is aimed at aiding infrastructure operations and maintenance workflows. To unmanage a share, run the :command:`openstack share abandon` command. Then try to print the information about the share. The returned result should indicate that Shared File Systems service won't find the share: .. code-block:: console $ openstack share abandon share_for_docs $ openstack share show share_for_docs ERROR: No share with a name or ID of 'share_for_docs' exists. .. _manage_share: Manage a share -------------- .. note:: The ``manage`` operation is not supported for shares that are exported on share servers via share networks until Shared File Systems API version ``2.49`` (Stein/Manila 8.0.0 release). .. note:: From API version 2.53, if the requester specifies a share type containing a ``replication_type`` extra spec while managing a share, manila quota system will reserve and consume resources for two additional quotas: ``share_replicas`` and ``replica_gigabytes``. From API version 2.62, manila quota system will validate size of the share against ``per_share_gigabytes`` quota. To register the non-managed share in the File System service, run the :command:`openstack share adopt` command: .. code-block:: console openstack share adopt [-h] [-f {json,shell,table,value,yaml}] [-c COLUMN] [--noindent] [--prefix PREFIX] [--max-width ] [--fit-width] [--print-empty] [--name ] [--description ] [--share-type ] [--driver-options [ ...]] [--public] [--share-server-id ] [--wait] The positional arguments are: - service_host. The manage-share service host in ``host@backend#POOL`` format, which consists of the host name for the back end, the name of the back end, and the pool name for the back end. - protocol. The Shared File Systems protocol of the share to manage. Valid values are NFS, CIFS, GlusterFS, HDFS or MAPRFS. - export_path. The share export path in the format appropriate for the protocol: - NFS protocol. 10.0.0.1:/foo_path. - CIFS protocol. \\\\10.0.0.1\\foo_name_of_cifs_share. - HDFS protocol. hdfs://10.0.0.1:foo_port/foo_share_name. - GlusterFS. 10.0.0.1:/foo_volume. - MAPRFS. maprfs:///share-0 -C -Z -N foo. The optional arguments are: - name. The name of the share that is being managed. - share_type. The share type of the share that is being managed. If not specified, the service will try to manage the share with the configured default share type. - share_server_id. must be provided to manage shares within share networks. This argument can only be used with File Systems API version ``2.49`` (Stein/Manila 8.0.0 release) and beyond. - driver_options. An optional set of one or more key and value pairs that describe driver options. As a result, a special share type named ``for_managing`` was used in example. To manage share, run: .. code-block:: console $ openstack share adopt \ manila@saopaulo#shares \ nfs \ 10.0.0.10:/shares/share_e113729a_8da4_45f3_bbbf_0014f_350380c_c4b06060_9c56_459e_9219_b86a0777054b \ --name share_for_docs \ --description "We manage share." \ --share-type default +-------------------------------------+--------------------------------------+ | Field | Value | +-------------------------------------+--------------------------------------+ | id | 8b3aa39d-e07f-4255-82ac-f6f56565a725 | | size | None | | availability_zone | None | | created_at | 2025-04-03T10:57:19.230793 | | status | manage_starting | | name | share_for_docs | | description | We manage share. | | project_id | c0bc204890ad428796f364b677a8516b | | snapshot_id | None | | share_network_id | None | | share_proto | NFS | | metadata | {} | | share_type | 807e5cd7-a0e7-4912-8f7d-352512ce51c3 | | volume_type | default | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | default | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | c5d0c19aae6e4484a41e241f0d8b04fb | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_ | None | | id | | | mount_snapshot_support | True | | progress | None | | is_soft_deleted | False | | scheduled_to_be_deleted_at | None | | source_backup_id | None | | share_server_id | None | | host | manila@saopaulo#shares | +-------------------------------------+--------------------------------------+ Check that the share is available: .. code-block:: console $ openstack share show share_for_docs +-------------------------------------+--------------------------------------+ | Field | Value | +-------------------------------------+--------------------------------------+ | id | 8b3aa39d-e07f-4255-82ac-f6f56565a725 | | size | 1 | | availability_zone | manila-zone-1 | | created_at | 2025-04-03T10:57:19.230793 | | status | available | | name | share_for_docs | | description | We manage share. | | project_id | c0bc204890ad428796f364b677a8516b | | snapshot_id | None | | share_network_id | None | | share_proto | NFS | | share_type | 807e5cd7-a0e7-4912-8f7d-352512ce51c3 | | volume_type | default | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | default | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | c5d0c19aae6e4484a41e241f0d8b04fb | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_ | None | | id | | | mount_snapshot_support | True | | progress | 100% | | is_soft_deleted | False | | scheduled_to_be_deleted_at | None | | source_backup_id | None | | share_server_id | None | | host | manila@saopaulo#shares | | export_locations | | | | id = | | | ba4ad0cd-6d25-422f-97f6-a1bc383ae49d | | | path = 11.0.0.11:/shares/share_e1137 | | | 29a_8da4_45f3_bbbf_0014f350380c_c4b0 | | | 6060_9c56_459e_9219_b86a0777054b | | | preferred = False | | | metadata = {} | | | share_instance_id = | | | c4b06060-9c56-459e-9219-b86a0777054b | | | is_admin_only = True | | | id = | | | c525a3aa-b52a-4565-acf3-aacaca1167ec | | | path = 10.0.0.10:/shares/share_e1137 | | | 29a_8da4_45f3_bbbf_0014f350380c_c4b0 | | | 6060_9c56_459e_9219_b86a0777054b | | | preferred = True | | | metadata = {} | | | share_instance_id = | | | c4b06060-9c56-459e-9219-b86a0777054b | | | is_admin_only = False | | | id = | | | b5c26041-eba0-415d-8bda-f46ca67a55b9 | | | path = 10.0.0.20:/shares/share_e1137 | | | 29a_8da4_45f3_bbbf_0014f350380c_c4b0 | | | 6060_9c56_459e_9219_b86a0777054b | | | preferred = False | | | metadata = {} | | | share_instance_id = | | | c4b06060-9c56-459e-9219-b86a0777054b | | | is_admin_only = False | | properties | | +-------------------------------------+--------------------------------------+ ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8422375 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-manage-and-unmanage-snapshot.rst0000664000175000017500000001111315251045254027616 0ustar00zuulzuul.. _shared_file_systems_manage_and_unmanage_snapshot: ================================== Manage and unmanage share snapshot ================================== To ``manage`` a share snapshot means that an administrator, rather than a share driver, manages the storage lifecycle. This approach is appropriate when an administrator manages share snapshots outside of the Shared File Systems service and wants to register it with the service. To ``unmanage`` a share snapshot means to unregister a specified share snapshot from the Shared File Systems service. Administrators can revert an unmanaged share snapshot to managed status if needed. .. _unmanage_share_snapshot: Unmanage a share snapshot ------------------------- The ``unmanage`` operation is not supported for shares that were created on top of share servers and created with share networks. The Share service should have the option ``driver_handles_share_servers = False`` set in the ``manila.conf`` file. To unmanage managed share snapshot, run the :command:`openstack share snapshot abandon ` command. Then try to print the information about the share snapshot. The returned result should indicate that Shared File Systems service won't find the share snapshot: .. code-block:: console $ openstack share snapshot abandon my_test_share_snapshot $ openstack share snapshot show my_test_share_snapshot ERROR: No sharesnapshot with a name or ID of 'my_test_share_snapshot' exists. .. _manage_share_snapshot: Manage a share snapshot ----------------------- To register the non-managed share snapshot in the File System service, run the :command:`openstack share snapshot adopt` command: .. code-block:: console openstack share snapshot adopt [--name ] [--description ] [--driver-option ] The positional arguments are: - share. Name or ID of the share. - provider_location. Provider location of the share snapshot on the backend. The ``driver_options`` is an optional set of one or more key and value pairs that describe driver options. To manage share snapshot, run: .. code-block:: console $ openstack share snapshot adopt \ 9ba52cc6-c97e-4b40-8653-4bcbaaf9628d \ 4d1e2863-33dd-4243-bf39-f7354752097d \ --name my_test_share_snapshot \ --description "My test share snapshot" \ +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | id | 89c663b5-026d-45c7-a43b-56ef0ba0faab | | share_id | 9ba52cc6-c97e-4b40-8653-4bcbaaf9628d | | share_size | 1 | | created_at | 2026-03-31T04:49:42.600980 | | status | manage_starting | | name | my_test_share_snapshot | | description | My test share snapshot | | size | None | | share_proto | NFS | | user_id | d9f4003655c94db5b16c591920be1f91 | | project_id | aaa33a0ca4324965a3e65ae47e864e94 | | provider_location | 4d1e2863-33dd-4243-bf39-f7354752097d | +-------------------+--------------------------------------+ Check that the share snapshot is available: .. code-block:: console $ openstack share snapshot show my_test_share_snapshot +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | id | 89c663b5-026d-45c7-a43b-56ef0ba0faab | | share_id | 9ba52cc6-c97e-4b40-8653-4bcbaaf9628d | | share_size | 1 | | created_at | 2026-03-31T04:49:42.000000 | | status | available | | name | my_test_share_snapshot | | description | My test share snapshot | | size | 1 | | share_proto | NFS | | user_id | d9f4003655c94db5b16c591920be1f91 | | project_id | aaa33a0ca4324965a3e65ae47e864e94 | | provider_location | 4d1e2863-33dd-4243-bf39-f7354752097d | | properties | | +-------------------+--------------------------------------+ ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8422375 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-multi-backend.rst0000664000175000017500000000376415251045254024734 0ustar00zuulzuul.. _shared_file_systems_multi_backend: =========================== Multi-storage configuration =========================== The Shared File Systems service can provide access to one or more file storage back ends. In general, the workflow with multiple back ends looks similar to the Block Storage service one. Using ``manila.conf``, you can spawn multiple share services. To do it, you should set the `enabled_share_backends` flag in the ``manila.conf`` file. This flag defines the comma-separated names of the configuration stanzas for the different back ends. One name is associated to one configuration group for a back end. The following example runs three configured share services: .. code-block:: ini [DEFAULT] enabled_share_backends=backendEMC1,backendGeneric1,backendNetApp [backendGeneric1] share_driver=manila.share.drivers.generic.GenericShareDriver share_backend_name=one_name_for_two_backends service_instance_user=ubuntu_user service_instance_password=ubuntu_user_password service_image_name=ubuntu_image_name path_to_private_key=/home/foouser/.ssh/id_rsa path_to_public_key=/home/foouser/.ssh/id_rsa.pub [backendEMC1] share_driver=manila.share.drivers.emc.driver.EMCShareDriver share_backend_name=backendEMC2 emc_share_backend=vnx emc_nas_server=1.1.1.1 emc_nas_password=password emc_nas_login=user emc_nas_server_container=server_3 emc_nas_pool_name="Pool 2" [backendNetApp] share_driver = manila.share.drivers.netapp.common.NetAppDriver driver_handles_share_servers = True share_backend_name=backendNetApp netapp_login=user netapp_password=password netapp_server_hostname=1.1.1.1 netapp_root_volume_aggregate=aggr01 To spawn separate groups of share services, you can use separate configuration files. If it is necessary to control each back end in a separate way, you should provide a single configuration file per each back end. .. toctree:: shared-file-systems-scheduling.rst shared-file-systems-services-manage.rst ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8422375 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-network-plugins.rst0000664000175000017500000001246715251045254025365 0ustar00zuulzuul.. _shared_file_systems_network_plugins: ================ Network plug-ins ================ The Shared File Systems service architecture defines an abstraction layer for network resource provisioning and allowing administrators to choose from a different options for how network resources are assigned to their projects' networked storage. There are a set of network plug-ins that provide a variety of integration approaches with the network services that are available with OpenStack. What is a network plugin in Manila? ----------------------------------- A network plugin is a python class that uses a specific facility (e.g. Neutron network) to provide network resources to the :term:`manila-share` service. When to use a network plugin? ----------------------------- A Manila `share driver` may be configured in one of two modes, where it is managing the lifecycle of `share servers` on its own or where it is merely providing storage resources on a pre-configured share server. This mode is defined using the boolean option `driver_handles_share_servers` in the Manila configuration file. A network plugin is only useful when a driver is handling its own share servers. .. note:: Not all share drivers support both modes. Each driver must report which mode(s) it supports to the manila-share service. When `driver_handles_share_servers` is set to `True`, a share driver will be called to create share servers for shares using information provided within a `share network`. This information will be provided to one of the enabled network plugins that will handle reservation, creation and deletion of network resources including `IP addresses` and `network interfaces`. The Shared File Systems service may need a network resource provisioning if share service with specified driver works in mode, when a share driver manages lifecycle of share servers on its own. This behavior is defined by a flag ``driver_handles_share_servers`` in share service configuration. When ``driver_handles_share_servers`` is set to ``True``, a share driver will be called to create share servers for shares using information provided within a share network. This information will be provided to one of the enabled network plug-ins that will handle reservation, creation and deletion of network resources including IP addresses and network interfaces. What network plug-ins are available? ------------------------------------ There are three network plug-ins and three python classes in the Shared File Systems service: #. Network plug-in for using the OpenStack Networking service. It allows to use any network segmentation that the Networking service supports. It is up to each share driver to support at least one network segmentation type. a) ``manila.network.neutron.neutron_network_plugin.NeutronNetworkPlugin``. This is a default network plug-in. It requires the ``neutron_net_id`` property and the ``neutron_subnet_id`` property to be provided when creating the share network that will be used for the creation of share servers. The user may define any number of share networks corresponding to the various physical network segments in a project environment. .. note:: When a share network contains a router provider network with multiple segments, the ``neutron_physical_net_name`` option should be additionally configured in ``manila.conf``. b) ``manila.network.neutron.neutron_network_plugin.NeutronSingleNetworkPlugin``. This is a simplification of the previous case. It accepts values for ``neutron_net_id`` and ``neutron_subnet_id`` from the ``manila.conf`` configuration file and uses one network for all shares. c) ``manila.network.neutron.neutron_network_plugin.NeutronBindNetworkPlugin``. This driver waits for active binding and fails if a Neutron port can't be bound or an error occurs. This plugin is useful for agent based binding (like OVS with docker driver) and fabric binding where real hardware reconfiguration is taking place. The existing ``NeutronBindSingleNetworkPlugin`` is a combination of `1b` and `1c`. When only a single network is needed, the NeutronSingleNetworkPlugin (1.b) is a simple solution. Otherwise NeutronNetworkPlugin (1.a) should be chosen. #. Network plug-in for specifying networks independently from OpenStack networking services. a) ``manila.network.standalone_network_plugin.StandaloneNetworkPlugin``. This plug-in uses a pre-existing network that is available to the manila-share host. This network may be handled either by OpenStack or be created independently by any other means. The plug-in supports any type of network - flat and segmented. As above, it is completely up to the share driver to support the network type for which the network plug-in is configured. .. note:: The ip version of the share network is defined by the flags of ``network_plugin_ipv4_enabled`` and ``network_plugin_ipv6_enabled`` in the ``manila.conf`` configuration since Pike. The ``network_plugin_ipv4_enabled`` default value is set to True. The ``network_plugin_ipv6_enabled`` default value is set to False. If ``network_plugin_ipv6_enabled`` option is True, the value of ``network_plugin_ipv4_enabled`` will be ignored, it means to support both IPv4 and IPv6 share network. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8422375 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-networking.rst0000664000175000017500000000107015251045254024370 0ustar00zuulzuul.. _shared_file_systems_networking: ========== Networking ========== Unlike the OpenStack Block Storage service, the Shared File Systems service must connect to the Networking service. The share service requires the option to self-manage share servers. For client authentication and authorization, you can configure the Shared File Systems service to work with different network authentication services, like LDAP, Kerberos protocols, or Microsoft Active Directory. .. toctree:: shared-file-systems-share-networks.rst shared-file-systems-network-plugins.rst ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8422375 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-profiling.rst0000664000175000017500000001216315251045254024177 0ustar00zuulzuul.. _shared_file_systems_profiling: ========================================== Profiling the Shared File Systems service ========================================== Profiler ^^^^^^^^ The detailed description of the profiler and its config options is available at `Profiler docs `_. Using Profiler ^^^^^^^^^^^^^^ To start profiling Manila code, the following steps have to be taken: #. Add the following lines to the ``/etc/manila/manila.conf`` file (the profiling is disabled by default). .. code-block:: console [profiler] connection_string = redis://localhost:6379 hmac_keys = SECRET_KEY trace_sqlalchemy = True enabled = True Examples of possible values for ``connection_string`` option: * ``messaging://`` - use oslo_messaging driver for sending spans. * ``redis://127.0.0.1:6379`` - use redis driver for sending spans. * ``mongodb://127.0.0.1:27017`` - use mongodb driver for sending spans. * ``elasticsearch://127.0.0.1:9200`` - use elasticsearch driver for sending spans. * ``jaeger://127.0.0.1:6831`` - use jaeger tracing as driver for sending spans. #. Restart all manila services and keystone service. #. To verify profiler with openstackclient, run any command with ``--os-profile ``. The key (e.g. SECRET_KEY) should be one of the ``hmac_keys`` mentioned in manila.conf. To generate correct profiling information across all services at least one key needs to be consistent between OpenStack projects. .. code-block:: console $ openstack --os-profile SECRET_KEY share create NFS 1 --name Share2 \ --share-network testNetwork --share-type dhss_true +---------------------------------------+--------------------------------------+ | Field | Value | +---------------------------------------+--------------------------------------+ | access_rules_status | active | | availability_zone | None | | create_share_from_snapshot_support | False | | created_at | 2021-02-23T11:23:41.000000 | | description | None | | has_replicas | False | | host | | | id | 78a19734-394f-4967-9671-c226df00a023 | | is_public | False | | metadata | {} | | mount_snapshot_support | False | | name | Share2 | | progress | None | | project_id | c67b2fd35b054060971d28cf654ee92a | | replication_type | None | | revert_to_snapshot_support | False | | share_group_id | None | | share_network_id | 03754c58-1456-497f-b7d6-8f36a4d644f0 | | share_proto | NFS | | share_server_id | None | | share_type | 5b1a4133-371c-4583-a801-f2b6e1ae102d | | share_type_name | dhss_true | | size | 1 | | snapshot_id | None | | snapshot_support | False | | source_share_group_snapshot_member_id | None | | status | creating | | task_state | None | | user_id | 7ecd60ddae1448b79449dc6434460eaf | | volume_type | dhss_true | +---------------------------------------+--------------------------------------+ Trace ID: 0ca7ce01-36a9-481c-8b3d-263a3b5caa35 Short trace ID for OpenTracing-based drivers: 8b3d263a3b5caa35 Display trace data with command: osprofiler trace show --html 0ca7ce01-36a9-481c-8b3d-263a3b5caa35 #. To display the trace date in HTML format, run below command. .. code-block:: console $ osprofiler trace show --html 0ca7ce01-36a9-481c-8b3d-263a3b5caa35 --connection-string redis://localhost:6379 --out /opt/stack/output.html ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8432379 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-quotas.rst0000664000175000017500000002426515251045254023530 0ustar00zuulzuul.. _shared_file_systems_quotas: ================= Quotas and limits ================= Limits are usage restrictions imposed on consumers of the Shared File Systems service (manila). These limits can be of two types: * Limits on resource consumption (also referred to as ``quotas``) * Limits on usage of APIs (also referred to as ``rate-limits``) Administrators can setup and manipulate these limits at any point of time. Users can query their rate limits and quotas. If an administrator does not set up limits explicitly, the service does not impose any rate limits but it enforces default resource limits (also referred to as ``default quotas``). Users can query their absolute limits using the :command:`openstack share limits show --absolute` command. .. code-block:: console $ openstack share limits show --absolute +------------------------------+-------+ | Name | Value | +------------------------------+-------+ | maxTotalShares | 50 | | maxTotalShareSnapshots | 50 | | maxTotalShareGigabytes | 1000 | | maxTotalSnapshotGigabytes | 1000 | | maxTotalShareNetworks | 10 | | maxTotalShareGroups | 50 | | maxTotalShareGroupSnapshots | 50 | | maxTotalShareReplicas | 100 | | maxTotalReplicaGigabytes | 1000 | | maxTotalShareBackups | 10 | | maxTotalBackupGigabytes | 1000 | | totalSharesUsed | 2 | | totalShareSnapshotsUsed | 0 | | totalShareGigabytesUsed | 2 | | totalSnapshotGigabytesUsed | 0 | | totalShareNetworksUsed | 0 | | totalShareGroupsUsed | 0 | | totalShareGroupSnapshotsUsed | 0 | | totalShareReplicasUsed | 0 | | totalReplicaGigabytesUsed | 0 | | totalShareBackupsUsed | 0 | | totalBackupGigabytesUsed | 0 | +------------------------------+-------+ API Rate Limits ~~~~~~~~~~~~~~~ API Rate limits control the frequency at which users can make specific API requests. Administrators can use rate limiting on the type and number of API calls that can be made in a specific time interval. For example, a rate limit can control the number of ``GET`` requests processed during a one-minute period. To set API rate limits, copy and modify the ``etc/manila/api-paste.ini`` file. You need to restart ``manila-api`` service after you edit the ``api-paste.ini`` file. .. code-block:: ini [filter:ratelimit] paste.filter_factory = manila.api.v2.limits:RateLimitingMiddleware.factory limits = (POST, "*/shares", ^/shares, 120, MINUTE);(PUT, "*/shares", .*, 120, MINUTE);(DELETE, "*", .*, 120, MINUTE) Also, add the ``ratelimit`` to ``noauth`` and ``keystone`` parameters in the ``[composite:openstack_share_api]`` and ``[composite:openstack_share_api_v2]`` groups. .. code-block:: ini [composite:openstack_share_api] use = call:manila.api.middleware.auth:pipeline_factory noauth = cors faultwrap ssl ratelimit sizelimit noauth api keystone = cors faultwrap ssl ratelimit sizelimit authtoken keystonecontext api keystone_nolimit = cors faultwrap ssl sizelimit authtoken keystonecontext api [composite:openstack_share_api_v2] use = call:manila.api.middleware.auth:pipeline_factory noauth = cors faultwrap ssl ratelimit sizelimit noauth apiv2 keystone = cors faultwrap ssl ratelimit sizelimit authtoken keystonecontext apiv2 keystone_nolimit = cors faultwrap ssl sizelimit authtoken keystonecontext apiv2 Finally, set the ``[DEFAULT]/api_rate_limit`` parameter in ``manila.conf`` to ``True``. .. code-block:: ini [DEFAULT] api_rate_limit=True To see the rate limits, run: .. code-block:: console $ openstack share limits show --rate +--------+----------+------------+-------+-----------+--------+----------------------+ | Verb | Regex | URI | Value | Remaining | Unit | Next Available | +--------+----------+------------+-------+-----------+--------+----------------------+ | POST | ^/shares | "*/shares" | 120 | 120 | MINUTE | 2025-02-25T02:15:39Z | | PUT | .* | "*/shares" | 120 | 120 | MINUTE | 2025-02-25T02:15:39Z | | DELETE | .* | "*" | 120 | 120 | MINUTE | 2025-02-25T02:15:39Z | +--------+----------+------------+-------+-----------+--------+----------------------+ Default Resource Quotas ~~~~~~~~~~~~~~~~~~~~~~~ It is possible to set limits on the number of ``shares``, ``snapshots``, ``share-networks``, ``share_groups`` (requires API version 2.40), ``share_group_snapshots`` (requires API version 2.40) and ``share_replicas`` (requires API version 2.53). Alongside limits can also be set on capacity with ``gigabytes`` (total size of shares allowed), ``snapshot-gigabytes`` (total size of snapshots allowed), ``replica_gigabytes`` (requires API version 2.53) or ``per_share_gigabytes`` (requires API version 2.62). If these resource quotas are not set by an administrator, default quotas that are hardcoded in the service will apply. To view these default quotas, the administrator can use the :command:`openstack share quota show –class default` command: .. code-block:: console $ openstack share quota show %project_id% --defaults +-----------------------+----------------------------------+ | Field | Value | +-----------------------+----------------------------------+ | backup_gigabytes | 1000 | | backups | 10 | | gigabytes | 1000 | | id | a0ce678da60e4ca18010016d44ee6e83 | | per_share_gigabytes | -1 | | replica_gigabytes | 1000 | | share_group_snapshots | 50 | | share_groups | 50 | | share_networks | 10 | | share_replicas | 100 | | shares | 50 | | snapshot_gigabytes | 1000 | | snapshots | 50 | +-----------------------+----------------------------------+ Administrators can modify default quotas with the :command:`openstack share quota set --class default` command: .. code-block:: console openstack share quota set --class default --shares 30 --snapshots 50 --share-groups 15 Alternatively, you can also specify these defaults via the ``manila.conf``. The following is an example: .. code-block:: ini [quota] shares = 30 share_gigabytes = 10000 share_networks = 50 share_snapshots = 100 .. important:: Default quotas specified via the API will always take precedence over any defaults applied via ``manila.conf``. Therefore it is recommended to always use the API when creating or manipulating default quotas. Custom quotas ~~~~~~~~~~~~~ The administrator can customize quotas for a specific project, or for a specific user within a project context, or for a share type used by users of a project. To list the quotas for a project or user, use the :command:`openstack share quota show` command. If you specify the optional ``--user`` parameter, you get the quotas for this user in the specified project. If you omit this parameter, you get the quotas for the specified project. If there are no overrides, the quotas shown will match the defaults. .. note:: The Shared File Systems service does not perform mapping of usernames and project names to IDs. Provide only ID values to get correct setup of quotas. Setting it by names you set quota for nonexistent project/user. In case quota is not set explicitly by project/user ID, The Shared File Systems service just applies default quotas. .. code-block:: console $ openstack share quota show %project_id% --user %user_id% +-----------------------+----------------------------------+ | Field | Value | +-----------------------+----------------------------------+ | backup_gigabytes | 1000 | | backups | 10 | | gigabytes | 1000 | | id | a0ce678da60e4ca18010016d44ee6e83 | | per_share_gigabytes | -1 | | replica_gigabytes | 1000 | | share_group_snapshots | 50 | | share_groups | 50 | | share_networks | 10 | | share_replicas | 100 | | shares | 50 | | snapshot_gigabytes | 1000 | | snapshots | 50 | +-----------------------+----------------------------------+ These quotas can be updated with the :command:`openstack share quota set` command. .. code-block:: console $ openstack share quota set %project_id% --user %user_id% --shares 49 \ --snapshots 49 The service will prevent the quota being set lower than the current consumption. However, a quota update can still be made if necessary with the``force`` key. .. code-block:: console $ openstack share quota set %project_id% --shares 51 --snapshots 51 --force The administrator can also update the quotas for a specific share type. Share Type quotas cannot be set for individual users within a project. They can only be applied across all users of a particular project. .. code-block:: console $ openstack share quota set %project_id% --share-type %share_type_id% To revert quotas to default for a project or for a user, simply delete the quota that has been set: .. code-block:: console $ openstack share quota delete %project_id% --user %user_id% Share type quotas can be reverted in the same way. Except, Share Type quotas can not be set for individual users within a project, so they cannot be unset either. .. code-block:: console $ openstack share quota delete %project_id% --share-type %share_type_id% ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8432379 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-scheduling.rst0000664000175000017500000000300115251045254024322 0ustar00zuulzuul.. _shared_file_systems_scheduling: ========== Scheduling ========== The Shared File Systems service uses a scheduler to provide unified access for a variety of different types of shared file systems. The scheduler collects information from the active shared services, and makes decisions such as what shared services will be used to create a new share. To manage this process, the Shared File Systems service provides Share types API. A share type is a list from key-value pairs called extra-specs. The scheduler uses required and un-scoped extra-specs to look up the shared service most suitable for a new share with the specified share type. For more information about extra-specs and their type, see `Capabilities and Extra-Specs `_ section in developer documentation. The general scheduler workflow: #. Share services report information about their existing pool number, their capacities, and their capabilities. #. When a request on share creation arrives, the scheduler picks a service and pool that best serves the request, using share type filters and back end capabilities. If back end capabilities pass through, all filters request the selected back end where the target pool resides. #. The share driver receives a reply on the request status, and lets the target pool serve the request as the scheduler instructs. The scoped and un-scoped share types are available for the driver implementation to use as needed. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8432379 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-security-services.rst0000664000175000017500000002757415251045254025712 0ustar00zuulzuul.. _shared_file_systems_security_services: ================= Security services ================= A security service stores client configuration information used for authentication and authorization (AuthN/AuthZ). For example, a share server will be the client for an existing service such as LDAP, Kerberos, or Microsoft Active Directory. You can associate a share with one to three security service types: - ``ldap``: LDAP. - ``kerberos``: Kerberos. - ``active_directory``: Microsoft Active Directory. You can configure a security service with these options: - A DNS IP address. - An IP address or host name. - A domain. - A user or group name. - The password for the user, if you specify a user name. You can add the security service to the :ref:`share network `. To create a security service, specify the security service type, a description of a security service, DNS IP address used inside project's network, security service IP address or host name, domain, security service user or group used by project, and a password for the user. The share name is optional. Create a ``ldap`` security service: .. code-block:: console $ openstack share security service create ldap \ --dns-ip 203.0.113.53 --server 203.0.113.3 \ --name my_ldap_security_service +-----------------+--------------------------------------+ | Field | Value | +-----------------+--------------------------------------+ | id | 266d7c94-db18-47af-b6db-0c3a663e39f5 | | name | my_ldap_security_service | | type | ldap | | status | new | | created_at | 2025-04-04T12:44:17.131358 | | updated_at | None | | description | None | | dns_ip | 203.0.113.53 | | server | 203.0.113.3 | | domain | None | | user | None | | password | None | | project_id | ae096acaa6ce4a3bb4f5a7f7a324514c | | ou | None | | default_ad_site | None | +-----------------+--------------------------------------+ To create ``kerberos`` security service, run: .. code-block:: console $ openstack share security service create kerberos \ --server 203.0.113.3 --user demo --password secret \ --name my_kerberos_security_service \ --description "Kerberos security service" +-----------------+--------------------------------------+ | Field | Value | +-----------------+--------------------------------------+ | id | a6b3634d-63ba-460d-b506-bde475d9c634 | | name | my_kerberos_security_service | | type | kerberos | | status | new | | created_at | 2025-04-04T12:52:24.537002 | | updated_at | None | | description | Kerberos security service | | dns_ip | None | | server | 203.0.113.3 | | domain | None | | user | demo | | password | secret | | project_id | ae096acaa6ce4a3bb4f5a7f7a324514c | | ou | None | | default_ad_site | None | +-----------------+--------------------------------------+ To see the list of created security service use :command:`openstack share security service list`: .. code-block:: console $ openstack share security service list +--------------------------------------+------------------------------+--------+----------+ | ID | Name | Status | Type | +--------------------------------------+------------------------------+--------+----------+ | 266d7c94-db18-47af-b6db-0c3a663e39f5 | my_ldap_security_service | new | ldap | | a6b3634d-63ba-460d-b506-bde475d9c634 | my_kerberos_security_service | new | kerberos | +--------------------------------------+------------------------------+--------+----------+ You can add a security service to the existing :ref:`share network `, which is not yet used (a ``share network`` not associated with a share). Add a security service to the share network with ``openstack share network set --new-security-service`` specifying share network and security service. The command returns information about the security service. You can see view new attributes and ``share_networks`` using the associated share network ID. .. code-block:: console $ openstack share network set share_net2 \ --new-security-service my_ldap_security_service $ openstack share security service show my_ldap_security_service +-----------------+-------------------------------------------+ | Field | Value | +-----------------+-------------------------------------------+ | id | 266d7c94-db18-47af-b6db-0c3a663e39f5 | | name | my_ldap_security_service | | type | ldap | | status | new | | created_at | 2025-04-04T12:44:17.131358 | | updated_at | None | | description | None | | dns_ip | 203.0.113.53 | | server | 203.0.113.3 | | domain | None | | user | None | | password | None | | project_id | ae096acaa6ce4a3bb4f5a7f7a324514c | | ou | None | | default_ad_site | None | | share_networks | [u'6d36c41f-d310-4aff-a0c2-ffd870e91cab'] | +----------------+--------------------------------------------+ It is possible to see the list of security services associated with a given share network. List security services for ``share_net2`` share network with: .. code-block:: console $ openstack share network show share_net2 +-----------------------------------+------------------------------------------------------------+ | Field | Value | +-----------------------------------+------------------------------------------------------------+ | id | 6d36c41f-d310-4aff-a0c2-ffd870e91cab | | name | share_net2 | | project_id | ae096acaa6ce4a3bb4f5a7f7a324514c | | created_at | 2025-04-03T12:34:12.211349 | | updated_at | None | | description | None | | status | active | | security_service_update_support | True | | network_allocation_update_support | True | | share_network_subnets | | | | id = 55916458-1272-4d41-95d9-b1bfbc2e2da1 | | | availability_zone = None | | | created_at = 2025-04-08T21:27:22.735925 | | | updated_at = None | | | segmentation_id = None | | | neutron_net_id = None | | | neutron_subnet_id = None | | | ip_version = None | | | cidr = None | | | network_type = None | | | mtu = None | | | gateway = None | | | properties = | | security_services | | | | security_service_name = my_ldap_security_service | | | security_service_id = 266d7c94-db18-47af-b6db-0c3a663e39f5 | +-----------------------------------+------------------------------------------------------------+ You also can dissociate a security service from the share network and confirm that the security service now has an empty list of share networks: .. code-block:: console $ openstack share network unset \ --security-service my_ldap_security_service share_net2 $ openstack share security service show my_ldap_security_service +-----------------+--------------------------------------+ | Field | Value | +-----------------+--------------------------------------+ | id | 266d7c94-db18-47af-b6db-0c3a663e39f5 | | name | my_ldap_security_service | | type | ldap | | status | new | | created_at | 2025-04-04T12:44:17.131358 | | updated_at | None | | description | None | | dns_ip | 203.0.113.53 | | server | 203.0.113.3 | | domain | None | | user | None | | password | None | | project_id | ae096acaa6ce4a3bb4f5a7f7a324514c | | ou | None | | default_ad_site | None | | share_networks | [] | +-----------------+--------------------------------------+ The Shared File Systems service allows you to update a security service field using :command:`openstack share security service set` command with optional arguments such as ``--dns-ip``, ``--server``, ``--domain``, ``--ou``, ``server``, ``default_ad_site``, ``--user``, ``--password``, ``--name``, or ``--description`` and a required ``security-service`` argument. To remove a security service not associated with any share networks run: .. code-block:: console $ openstack share security service delete my_ldap_security_service ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8432379 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-services-manage.rst0000664000175000017500000000416415251045254025261 0ustar00zuulzuul.. _shared_file_systems_services_manage.rst: ====================== Manage shares services ====================== The Shared File Systems service provides API that allows to manage running share services (`Share services API `_). Using the :command:`openstack share service list` command, it is possible to get a list of all kinds of running services. To select only share services, you can pick items that have field ``binary`` equal to ``manila-share``. Also, you can enable or disable share services using raw API requests. Disabling means that share services are excluded from the scheduler cycle and new shares will not be placed on the disabled back end. However, shares from this service stay available. With 2024.2 release, admin can schedule share on disabled back end using ``only_host`` scheduler hint. Recalculating the shares' export location ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Until the 2024.2 release, recalculating a share's export location required restarting the corresponding manila-share manager service. This action triggered the backend driver's "ensure shares" operation, which would execute a series of steps to update the export locations. Starting with the 2024.2 release, as an administrator, you can initiate export location recalculation without restarting the manila-share service. This can now be done directly through the "ensure shares" API. It is possible to start the ensure shares procedure even if a service is already running it. To start ensure shares on a given manila-share binary, run the :command:`openstack share service ensure shares` command: .. code-block:: console $ openstack share service ensure shares .. note:: When this command is issued, the ``manila-share`` manager will by default change the status of the shares to ``ensuring``, unless the :doc:`configuration option ` named ``update_shares_status_on_ensure`` is changed to ``False``. .. note:: The service will have its ``ensuring`` field set to ``True`` while this operation is still in progress. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8432379 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-backup-management.rst0000664000175000017500000003645615251045254026700 0ustar00zuulzuul.. _shared-file-systems-share-backup-management: ======================= Share backup management ======================= Share backup management is the feature that provides the capability to create a backup for the given share, restore a backup, and delete a backup. It is a valuable feature for most shared file system users, especially for NAS users. Use cases ~~~~~~~~~ As an administrator, you may want to backup and restore your share so that archival can be made simpler and you can bring back the old data whenever required. It includes: * Create a backup * Delete a backup * Restore a backup in specified share Backup/Restore workflows ~~~~~~~~~~~~~~~~~~~~~~~~ Starting from 2023.2, a generic approach for backing up shares through the manila data service has been implemented where the backup of the shares can be stored on a NFS path which are mounted on control nodes. This driver matches the workflows of cinder NFSBackupDriver and thus it helps users with less learning time, and provides the basic backup ability. The vendor that supports NFS, must provide space for NFS to interconnect with NFS backup drivers. The implementation of NFS backup driver will be generic though. The backup process for this driver consists of: * Make sure share is in available state and not busy. * Allow read access to share and write access to backup share. * Mount the share and backend driver's share(i.e. backup share) to the data service node. * Copy data from share to backup share. * Unmount the share and backup share. * Deny access to share and backup share. For the generic NFS backup approach, only one backup backend is allowed for simplicity, at the moment. By default no backup driver will be enabled. To enable the backup driver, use the below configurations in manila.conf .. code-block:: console backup_driver = manila.data.drivers.nfs.NFSBackupDriver backup_mount_export = :/ backup_mount_options = '-o vers=',minorversion=1 New status for backup and share: * backup * creating * available * deleting * deleted * error_deleting * backup_restoring * error * share * backing_creating * backup_restoring * backup_restoring_error During backup, share will be marked as busy and other operations on share such as delete, soft_delete, migration, extend, shrink, ummanage, revert_to_snapshot, crate_snapshot, create_replica etc can not be performed unless share becomes available. Finally, whether or not the share is successfully backed up, the state of the share is rolled back to the available state. In case the backup fails, share task_state will contain the failure information. Also, failure message will be recorded. New clean up actions: The backup and restore actions could break when service is down, so new clean up action will be added to reset the status and clean temporary files (if involved). New quotas for backup : * ``quota_backups``: indicate the share backups allowed per project. * ``quota_backup_gigabytes``: indicate the total amount of storage, in gigabytes, allowed for backups per project. Using the backup APIs (CLI): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The commands to interact with the share backup API are: * ``openstack share backup create``: It creates a backup for the share on the NFS path. The backup becomes creating and it becomes availabe when the backup is completed. .. code-block:: console $ openstack share backup create --help # to see the help of all the available options $ openstack share backup create \ --name manila_backup1 25a6f80e-306e-4bb8-ad27-cf6800955228 +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | availability_zone | manila-zone-0 | | created_at | 2024-03-21T12:49:35.719214 | | description | None | | host | None | | id | c2022366-0701-44d2-b48b-aa95a666efa5 | | name | manila_backup1 | | progress | 0 | | restore_progress | 0 | | share_id | 25a6f80e-306e-4bb8-ad27-cf6800955228 | | size | 1 | | status | creating | | topic | None | | updated_at | None | +-------------------+--------------------------------------+ * ``openstack share backup list``: It prints the current status of the backup. It is set to ``available`` if all operations succeeded. .. code-block:: console $ openstack share backup list +--------------------------------------+----------------+--------------------------------------+-----------+ | ID | Name | Share ID | Status | +--------------------------------------+----------------+--------------------------------------+-----------+ | c2022366-0701-44d2-b48b-aa95a666efa5 | manila_backup1 | 25a6f80e-306e-4bb8-ad27-cf6800955228 | available | +--------------------------------------+----------------+--------------------------------------+-----------+ $ * ``openstack share backup show``: It obtains the latest information of the backup. .. code-block:: console $ openstack share backup show c2022366-0701-44d2-b48b-aa95a666efa5 +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | availability_zone | manila-zone-0 | | created_at | 2024-03-21T12:49:36.000000 | | description | None | | host | vm.openstack.opendev.com | | id | c2022366-0701-44d2-b48b-aa95a666efa5 | | name | manila_backup1 | | progress | 100 | | restore_progress | 0 | | share_id | 25a6f80e-306e-4bb8-ad27-cf6800955228 | | size | 1 | | status | available | | topic | manila-data | | updated_at | 2024-03-21T12:50:07.000000 | +-------------------+--------------------------------------+ $ * ``openstack share backup set``: It sets the name and description for the backup. .. code-block:: console $ openstack share backup set c2022366-0701-44d2-b48b-aa95a666efa5 \ --name "new_name" --description "backup_taken_on_march_21" .. note:: This command has no output. .. code-block:: console $ openstack share backup show c2022366-0701-44d2-b48b-aa95a666efa5 +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | availability_zone | manila-zone-0 | | created_at | 2024-03-21T12:49:36.000000 | | description | backup_taken_on_march_21 | | host | vm.openstack.opendev.com | | id | c2022366-0701-44d2-b48b-aa95a666efa5 | | name | new_name | | progress | 100 | | restore_progress | 0 | | share_id | 25a6f80e-306e-4bb8-ad27-cf6800955228 | | size | 1 | | status | available | | topic | manila-data | | updated_at | 2024-03-21T12:57:09.000000 | +-------------------+--------------------------------------+ Using the backup APIs (REST): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ APIs will be experimental, until some cycles of testing, and the eventual graduation of them. You can refer to this link for more information `REST API Support `_ Backup/Restore via backup types (Vendor specific) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ There are use cases such that, the individual storage vendors/drivers might have robust solution in their own storage to backup the data. When such features are available in the storage, the individual drivers can be enhanced to build their own backup solutions by extending the existing manila backup drivers with the use of backup types. Thus shares created in Manila on such storage, can be easily backed up via vendor specific solutions. .. note:: `backup_type` was added to backup API responses in version 2.85. Starting from 2024.1, a concept named ``backup_type`` has been introduced. This is needed for creating backups with third party drivers, in case an implementation is available. The ``backup_type`` is a construct which should have backup specific parameters such as ``backup_type_name`` .. note:: The sample config will look like this: ``eng_data_backup`` is the backup_type here.:: [eng_data_backup] backup_type_name=my_backup [nas_storage] enabled_backup_types = eng_data_backup Backup/Restore workflows via backup type: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Users can create, delete and restore backups on vendor specific storage using backup_type. .. note:: Before using this feature, you need to check with your storage partner for the availability of this feature in Manila drivers. The workflow of creating, viewing, restoring and deleting backups captured below for user reference. .. code-block:: console $ openstack share backup list +--------------------------------------+-------+--------------------------------------+-----------+ | ID | Name | Share ID | Status | +--------------------------------------+-------+--------------------------------------+-----------+ | 8a9b3ce0-23bb-4923-b8ce-d0dd1f56b2b8 | test4 | 983c6dd5-ef93-4c73-9359-ef02fe3bbce7 | available | +--------------------------------------+-------+--------------------------------------+-----------+ $ openstack share backup create --name test5 \ --backup-options backup_type=eng_data_backup source_share +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | availability_zone | manila-zone-0 | | backup_type | backup_type1 | | created_at | 2024-03-11T18:15:32.183982 | | description | None | | host | vm.openstack.opendev.com@nas_storage | | id | 4b468327-d03f-4df7-97ef-c5230b5beafc | | name | test5 | | progress | 0 | | restore_progress | 0 | | share_id | 983c6dd5-ef93-4c73-9359-ef02fe3bbce7 | | size | 1 | | status | creating | | topic | None | | updated_at | None | +-------------------+--------------------------------------+ $ openstack share backup list +--------------------------------------+-------+--------------------------------------+-----------+ | ID | Name | Share ID | Status | +--------------------------------------+-------+--------------------------------------+-----------+ | 4b468327-d03f-4df7-97ef-c5230b5beafc | test5 | 983c6dd5-ef93-4c73-9359-ef02fe3bbce7 | creating | | 8a9b3ce0-23bb-4923-b8ce-d0dd1f56b2b8 | test4 | 983c6dd5-ef93-4c73-9359-ef02fe3bbce7 | available | +--------------------------------------+-------+--------------------------------------+-----------+ $ openstack share backup show test5 +-------------------+------------------------------------------------+ | Field | Value | +-------------------+------------------------------------------------+ | availability_zone | manila-zone-0 | | backup_type | backup_type1 | | created_at | 2024-03-11T18:15:32.000000 | | description | None | | host | scs000215254-1.nb.openenglab.netapp.com@ontap1 | | id | 4b468327-d03f-4df7-97ef-c5230b5beafc | | name | test5 | | progress | 0 | | restore_progress | 0 | | share_id | 983c6dd5-ef93-4c73-9359-ef02fe3bbce7 | | size | 1 | | status | creating | | topic | manila-share | | updated_at | 2024-03-11T18:15:32.000000 | +-------------------+------------------------------------------------+ $ openstack share backup list +--------------------------------------+-------+--------------------------------------+-----------+ | ID | Name | Share ID | Status | +--------------------------------------+-------+--------------------------------------+-----------+ | 4b468327-d03f-4df7-97ef-c5230b5beafc | test5 | 983c6dd5-ef93-4c73-9359-ef02fe3bbce7 | available | | 8a9b3ce0-23bb-4923-b8ce-d0dd1f56b2b8 | test4 | 983c6dd5-ef93-4c73-9359-ef02fe3bbce7 | available | +--------------------------------------+-------+--------------------------------------+-----------+ $ openstack share backup restore test4 $ openstack share backup list +--------------------------------------+-------+--------------------------------------+-----------+ | ID | Name | Share ID | Status | +--------------------------------------+-------+--------------------------------------+-----------+ | 4b468327-d03f-4df7-97ef-c5230b5beafc | test5 | 983c6dd5-ef93-4c73-9359-ef02fe3bbce7 | available | | 8a9b3ce0-23bb-4923-b8ce-d0dd1f56b2b8 | test4 | 983c6dd5-ef93-4c73-9359-ef02fe3bbce7 | restoring | +--------------------------------------+-------+--------------------------------------+-----------+ $ openstack share backup delete test5 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8432379 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-group-types.rst0000664000175000017500000002200415251045254025577 0ustar00zuulzuul.. _shared_file_systems_share_group_types: ================= Share group types ================= Share group types are types for share groups just like :ref:`share types for shares`. A group type is associated with group specs similar to the way extra specs are associated with a share type. A share group type aids the scheduler to filter or choose back ends when you create a share group and to set any backend specific parameters on the share group. Any driver that can perform a group operation in an advantaged way may report that as a group capability, such as: * Ordered writes * Consistent snapshots * Group replication * Group backup Share group types may contain group specs corresponding to the group capabilities reported by the backends. A group capability applies across all the shares inside the share group, for example, a backend may support `consistent_snapshot_support`, and using this group type extra spec in the group type will allow scheduling share groups onto that backend. Any time a snapshot of the group is initiated, a crash consistent simultaneous snapshot of all the constituent shares is taken. Shares in a share group may each have different share types because they can each be on separate pools, have different capabilities and perhaps end users can even be billed differently for using each of them. To allow for this possibility, one or more share types can be associated with a group type. The admin also specifies which share type(s) a given group type may contain. At least one share type must be provided to create a share group type. When an user creates a share group, the scheduler creates the group on one of the backends that match the specified share type(s) and share group type. In the Shared File Systems configuration file ``manila.conf``, the administrator can set the share group type used by default for the share group creation. To create a share group type, use :command:`openstack share group type create` command as: .. code-block:: console openstack share group type create [-h] [-f {json,shell,table,value,yaml}] [-c COLUMN] [--noindent] [--prefix PREFIX] [--max-width ] [--fit-width] [--print-empty] [--group-specs [ ...]] [--public ] [ ...] Where the ``name`` is the share group type name and ``--public`` defines the level of the visibility for the share group type. One share group can include multiple ``share-types``. ``--group-specs`` are the extra specifications used to filter back ends. .. note:: The extra specifications set in the share group types are explained further in :ref:`shared_file_systems_scheduling`. Administrators can create share group types with these extra specifications for the back ends filtering. An administrator can use the ``policy.yaml`` file to grant permissions for share group type creation with extra specifications to other roles. You set a share group type to private or public and :ref:`manage the access` to the private share group types. By default a share group type is created as publicly accessible. Set ``--public`` to ``False`` to make the share group type private. Share group type operations --------------------------- To create a new share group type you need to specify the name of the new share group type and existing share types. The new share group type can also be public. One share group can include multiple share types. .. code-block:: console $ openstack share group type create group_type_for_cg default --public True +-------------+--------------------------------------+ | Field | Value | +-------------+--------------------------------------+ | id | cd7173f2-93f9-4977-aa55-eb8884333a07 | | name | group_type_for_cg | | share_types | c069126a-2d87-4bbb-a395-1dc5a5ac5d96 | | visibility | public | | is_default | False | | group_specs | | +-------------+--------------------------------------+ $ openstack share group type list +--------------------------------------+-------------------+--------------------------------------+------------+------------+-------------+ | ID | Name | Share Types | Visibility | Is Default | Group Specs | +--------------------------------------+-------------------+--------------------------------------+------------+------------+-------------+ | cd7173f2-93f9-4977-aa55-eb8884333a07 | group_type_for_cg | c069126a-2d87-4bbb-a395-1dc5a5ac5d96 | public | False | | +--------------------------------------+-------------------+--------------------------------------+------------+------------+-------------+ You can set extra specifications for a share group type using **openstack share group type set --group-specs ** command. .. code-block:: console $ openstack share group type set group_type_for_cg \ --group-specs consistent_snapshot_support=host It is also possible to view a list of current share group types and extra specifications: .. code-block:: console $ openstack share group type list +--------------------------------------+-------------------+--------------------------------------+------------+------------+------------------------------------+ | ID | Name | Share Types | Visibility | Is Default | Group Specs | +--------------------------------------+-------------------+--------------------------------------+------------+------------+------------------------------------+ | cd7173f2-93f9-4977-aa55-eb8884333a07 | group_type_for_cg | c069126a-2d87-4bbb-a395-1dc5a5ac5d96 | public | False | consistent_snapshot_support : host | +--------------------------------------+-------------------+--------------------------------------+------------+------------+------------------------------------+ Use :command:`openstack share group type unset ` to unset one or more extra specifications. .. code-block:: console $ openstack share group type unset test_group_type mount_snapshot_support A public or private share group type can be deleted with the :command:`openstack share group type delete ` command. .. _share_group_type_access: Share group type access ----------------------- You can manage access to a private share group type for different projects. Administrators can provide access, revoke access, and retrieve information about access for a specified private share group type. Create a private group type: .. code-block:: console $ openstack share group type create my_type1 default --public False +-------------+--------------------------------------+ | Field | Value | +-------------+--------------------------------------+ | id | 0c488ca6-8843-4313-ba2b-cc33acb2af73 | | name | my_type1 | | share_types | c069126a-2d87-4bbb-a395-1dc5a5ac5d96 | | visibility | private | | is_default | False | | group_specs | | +-------------+--------------------------------------+ .. note:: If you run :command:`openstack share group type list` both public and private share group types appear. Grant access to created private type for a demo and alt_demo projects by providing their IDs: .. code-block:: console $ openstack share group type access create my_type1 \ 63ce0a1452384fce9edb0189425ea0e2 $ openstack share group type access create my_type1 \ d274cfc59e2543d38aa223af4f5eb327 To view information about access for a private share group type, use the command :command:`openstack share group type access list my_type1`: .. code-block:: console $ openstack share group type access list my_type1 +----------------------------------+ | Project ID | +----------------------------------+ | 63ce0a1452384fce9edb0189425ea0e2 | | d274cfc59e2543d38aa223af4f5eb327 | +----------------------------------+ After granting access to the share group type, the target project can see the share group type in the list, and create private share groups. To deny access for a specified project, use :command:`openstack share group type access delete ` command. .. code-block:: console $ openstack share group type access delete my_type1 \ b0fa13353e594d6f809dfa405fedc46a ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8432379 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-groups.rst0000664000175000017500000004303315251045254024625 0ustar00zuulzuul.. Copyright (c) 2017 Jun Zhong Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ============ Share groups ============ Share group support is available in Manila since the Ocata release. A share group is a group of shares upon which users can perform group based operations, such as taking a snapshot together. This framework is meant to allow migrating or replicating a group of shares in unison in future releases of manila. Support currently exists for creating group types and group specs, creating groups of shares, and creating snapshots of groups. These group operations can be performed using the command line client. To create a share group, and access it, the following general concepts are prerequisite knowledge: #. To create a share group, use :command:`openstack share group create` command. #. You can specify the ``share-network``, :ref:`share group type `, ``source-share-group-snapshot``, ``availability-zone``, :ref:`share type `. #. After the share group becomes available, use the :command:`openstack share create` command to create a share within the share group. .. note:: A share group is limited to a single backend, i.e. all shares created within a particular share group end up on the same backend. If the backend supports pools, the shares may be created within separate pools. So this feature is apt for those that would like co-locality of different shares. Actions on a share group ~~~~~~~~~~~~~~~~~~~~~~~~ A few actions, such as extend & shrink, are inherently applicable only to individual shares. One could theoretically apply extend to a group, increasing the size of each member, but this would not be a use-case covered initially. Any actions in this category must remain available to group members, and other actions such as taking snapshots of group members can be allowed, but actions such as migration or replication would be available only at the group level and not on its members. ====================== ======================================================== Share Action Share Group Action ====================== ======================================================== Create (share type) Create (share types, group type) Delete Delete (group) Snapshot Snapshot (may or may not be a consistent group snapshot) Create from snapshot Create from group snapshot Clone Clone group (and all members) (planned) Replicate Replicate (planned) Migrate Migrate (planned) Extend/shrink N/A ====================== ======================================================== Creating a share with share group ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Creating a share group type --------------------------- In this example, we will create a new share group type and specify the `consistent_snapshot_support` as an group-spec within the share-group-type-create being used. Use the :command:`openstack share type list` command to get a share type. Then use the share type to create a share group type. .. code-block:: console $ openstack share type list +--------------------------------------+---------------------+------------+------------+--------------------------------------+-----------------------------+ | ID | Name | Visibility | Is Default | Required Extra Specs | Optional Extra Specs | +--------------------------------------+---------------------+------------+------------+--------------------------------------+-----------------------------+ | ee6287aa-448b-432b-a928-41ce9d8e149f | default_share_type | public | - | driver_handles_share_servers : False | | +--------------------------------------+---------------------+------------+------------+--------------------------------------+-----------------------------+ Use the :command:`openstack share group type create` command to create a new share group type. Specify the name and share types. .. code-block:: console $ openstack share group type create group_type_for_cg default_share_type +-------------+--------------------------------------+ | Field | Value | +-------------+--------------------------------------+ | id | cfe42f20-d13e-4348-9370-f0763e426db3 | | name | group_type_for_cg | | share_types | ee6287aa-448b-432b-a928-41ce9d8e149f | | visibility | public | | is_default | False | | group_specs | | +-------------+--------------------------------------+ Use the :command:`openstack share group type set` command to set a group-spec to the share group type. .. code-block:: console $ openstack share group type set group_type_for_cg \ --group-specs consistent_snapshot_support=host .. note:: This command has no output. To verify the group-spec, use the :command:`openstack share group type list` command and specify the share group type's name or ID as a parameter. Creating a share group ---------------------- Use the :command:`openstack share group create` command to create a share group. Specify the share group type that we created. .. code-block:: console $ openstack share group create --share-group-type group_type_for_cg +--------------------------------+--------------------------------------+ | Field | Value | +--------------------------------+--------------------------------------+ | id | ecf78d45-546a-48df-a969-c153e68f0376 | | name | None | | created_at | 2026-03-31T02:08:52.799823 | | status | creating | | description | None | | project_id | 87ba30b5315c40ec8ec5e3346112eae4 | | host | None | | share_group_type_id | cfe42f20-d13e-4348-9370-f0763e426db3 | | source_share_group_snapshot_id | None | | share_network_id | None | | share_types | ee6287aa-448b-432b-a928-41ce9d8e149f | | availability_zone | None | | consistent_snapshot_support | None | +--------------------------------+--------------------------------------+ .. note:: One share group can include multiple share types. The share types are going to be inherited directly from the share group type. Use the :command:`openstack share group show` command to retrieve details of the share. Specify the share ID or name as a parameter. .. code-block:: console $ openstack share group show ecf78d45-546a-48df-a969-c153e68f0376 +--------------------------------+--------------------------------------+ | Field | Value | +--------------------------------+--------------------------------------+ | id | ecf78d45-546a-48df-a969-c153e68f0376 | | name | None | | created_at | 2026-03-31T02:08:52.988027 | | status | available | | description | None | | project_id | 87ba30b5315c40ec8ec5e3346112eae4 | | host | ubuntu@generic2#test_pool | | share_group_type_id | cfe42f20-d13e-4348-9370-f0763e426db3 | | source_share_group_snapshot_id | None | | share_network_id | None | | share_types | ee6287aa-448b-432b-a928-41ce9d8e149f | | availability_zone | nova | | consistent_snapshot_support | pool | +--------------------------------+--------------------------------------+ Create a share with the share group ----------------------------------- Use the :command:`openstack share create` command to create a share. Specify the share protocol, size, share group type and the share name. .. code-block:: console $ openstack share create NFS 1 \ --share-group ecf78d45-546a-48df-a969-c153e68f0376 \ --name test_group_share_1 +---------------------------------------+--------------------------------------+ | Field | Value | +---------------------------------------+--------------------------------------+ | id | 21997eaf-712e-433e-8872-4ff085683657 | | size | 1 | | availability_zone | nova | | created_at | 2026-03-31T02:28:16.192637 | | status | creating | | name | test_group_share_1 | | description | None | | project_id | 87ba30b5315c40ec8ec5e3346112eae4 | | snapshot_id | None | | share_network_id | None | | share_proto | NFS | | metadata | {} | | share_type | ee6287aa-448b-432b-a928-41ce9d8e149f | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | default_share_type | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | b7f2c522a5644a83b78b3f61f50c6d71 | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | ecf78d45-546a-48df-a969-c153e68f0376 | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | None | +---------------------------------------+--------------------------------------+ Create another share with a same share group, and named 'test_group_share_2'. .. code-block:: console $ openstack share create NFS 1 \ --share-group ecf78d45-546a-48df-a969-c153e68f0376 \ --name test_group_share_2 +---------------------------------------+--------------------------------------+ | Field | Value | +---------------------------------------+--------------------------------------+ | id | 8d34a9a3-3b8c-4771-af2c-66c78fe1e0b1 | | size | 1 | | availability_zone | nova | | created_at | 2026-03-31T21:01:36.784688 | | status | creating | | name | test_group_share_2 | | description | None | | project_id | 87ba30b5315c40ec8ec5e3346112eae4 | | snapshot_id | None | | share_network_id | None | | share_proto | NFS | | metadata | {} | | share_type | ee6287aa-448b-432b-a928-41ce9d8e149f | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | default_share_type | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | b7f2c522a5644a83b78b3f61f50c6d71 | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | ecf78d45-546a-48df-a969-c153e68f0376 | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | None | +---------------------------------------+--------------------------------------+ Creating a share group snapshot ------------------------------- Create a share group sanpshot of the share group Use the :command:`openstack share group snapshot create` command to create a share group snapshot. Specify the share group ID or name. .. code-block:: console $ openstack share group snapshot create \ ecf78d45-546a-48df-a969-c153e68f0376 +----------------+--------------------------------------+ | Field | Value | +----------------+--------------------------------------+ | id | ac387240-08dc-4b23-80f6-ffc481e6c87a | | name | None | | created_at | 2026-03-31T21:04:54.276514 | | status | creating | | description | None | | project_id | 87ba30b5315c40ec8ec5e3346112eae4 | | share_group_id | ecf78d45-546a-48df-a969-c153e68f0376 | +----------------+--------------------------------------+ Show the members of the share group snapshot Use the :command:`openstack share group snapshot show` command to see all share members of share group snapshot. Specify the share group snapshot ID or name. .. code-block:: console $ openstack share group snapshot members list \ ac387240-08dc-4b23-80f6-ffc481e6c87a +--------------------------------------+------+ | Share ID | Size | +--------------------------------------+------+ | 21997eaf-712e-433e-8872-4ff085683657 | 1 | | 8d34a9a3-3b8c-4771-af2c-66c78fe1e0b1 | 1 | +--------------------------------------+------+ Show the details of the share group snapshot .. code-block:: console $ openstack share group snapshot show ac387240-08dc-4b23-80f6-ffc481e6c87a +----------------+--------------------------------------+ | Field | Value | +----------------+--------------------------------------+ | id | ac387240-08dc-4b23-80f6-ffc481e6c87a | | name | None | | created_at | 2026-03-31T21:04:54.276514 | | status | available | | description | None | | project_id | 87ba30b5315c40ec8ec5e3346112eae4 | | share_group_id | ecf78d45-546a-48df-a969-c153e68f0376 | +----------------+--------------------------------------+ Deleting share groups --------------------- Use the :command:`openstack share group delete ` to delete share groups. Deleting share group snapshots ------------------------------ Use the :command:`openstack share group snapshot delete ` to delete share a share group snapshot. .. important:: Before attempting to delete a share group or a share group snapshot, make sure that all its constituent shares and snapshots were deleted. Users will need to delete share group snapshots before attempting to delete shares within ashare group or the group itself. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8432379 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-management.rst0000664000175000017500000000240215251045254025415 0ustar00zuulzuul.. _shared_file_systems_share_management: ================ Share management ================ A share is a remote, mountable file system. You can mount a share to and access a share from several hosts by several users at a time. You can create a share and associate it with a network, list shares, and show information for, update, and delete a specified share. You can also create snapshots of shares. To create a snapshot, you specify the ID of the share that you want to snapshot. The shares are based on of the supported Shared File Systems protocols: * *NFS*. Network File System (NFS). * *CIFS*. Common Internet File System (CIFS). * *GLUSTERFS*. Gluster file system (GlusterFS). * *HDFS*. Hadoop Distributed File System (HDFS). * *CEPHFS*. Ceph File System (CephFS). * *MAPRFS*. MapR File System (MAPRFS). The Shared File Systems service provides set of drivers that enable you to use various network file storage devices, instead of the base implementation. That is the real purpose of the Shared File Systems service in production. .. toctree:: shared-file-systems-crud-share.rst shared-file-systems-manage-and-unmanage-share.rst shared-file-systems-manage-and-unmanage-snapshot.rst shared-file-systems-share-resize.rst shared-file-systems-quotas.rst ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8432379 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-migration.rst0000664000175000017500000003226515251045254025304 0ustar00zuulzuul.. _shared_file_systems_share_migration: =============== Share migration =============== Share migration is the feature that migrates a share between different storage pools. Use cases ~~~~~~~~~ As an administrator, you may want to migrate your share from one storage pool to another for several reasons. Examples include: * Maintenance or evacuation * Evacuate a back end for hardware or software upgrades * Evacuate a back end experiencing failures * Evacuate a back end which is tagged end-of-life * Optimization * Defragment back ends to empty and be taken offline to conserve power * Rebalance back ends to maximize available performance * Move data and compute closer together to reduce network utilization and decrease latency or increase bandwidth * Moving shares * Migrate from old hardware generation to a newer generation * Migrate from one vendor to another Migration workflows ~~~~~~~~~~~~~~~~~~~ Moving shares across different storage pools is generally expected to be a disruptive operation that disconnects existing clients when the source ceases to exist. For this reason, share migration is implemented in a 2-phase approach that allows the administrator to control the timing of the disruption. The first phase performs data copy while users retain access to the share. When copying is complete, the second phase may be triggered to perform a switchover that may include a last sync and deleting the source, generally requiring users to reconnect to continue accessing the share. In order to migrate a share, one of two possible mechanisms may be employed, which provide different capabilities and affect how the disruption occurs with regards to user access during data copy phase and disconnection during switchover phase. Those two mechanisms are: * Driver-assisted migration: This mechanism is intended to make use of driver optimizations to migrate shares between pools of the same storage vendor. This mechanism allows migrating shares nondisruptively while the source remains writable, preserving all filesystem metadata and snapshots. The migration workload is performed in the storage back end. * Host-assisted migration: This mechanism is intended to migrate shares in an agnostic manner between two different pools, regardless of storage vendor. The implementation for this mechanism does not offer the same properties found in driver-assisted migration. In host-assisted migration, the source remains readable, snapshots must be deleted prior to starting the migration, filesystem metadata may be lost, and the clients will get disconnected by the end of migration. The migration workload is performed by the Data Service, which is a dedicated manila service for intensive data operations. When starting a migration, driver-assisted migration is attempted first. If the shared file system service detects it is not possible to perform the driver-assisted migration, it proceeds to attempt host-assisted migration. Using the migration APIs ~~~~~~~~~~~~~~~~~~~~~~~~ The commands to interact with the share migration API are: * ``migration_start``: starts a migration while retaining access to the share. Migration is paused and waits for ``migration_complete`` invocation when it has copied all data and is ready to take down the source share. .. code-block:: console $ openstack share migration start share_1 ubuntu@generic2#GENERIC2 \ --writable False --preserve-snapshots False \ --preserve-metadata False --nondisruptive False .. note:: This command has no output. * ``migration_complete``: completes a migration, removing the source share and setting the destination share instance to ``available``. .. code-block:: console $ openstack share migration complete share_1 .. note:: This command has no output. * ``migration_get_progress``: obtains migration progress information of a share. .. code-block:: console $ openstack share migration show share_1 +----------------+--------------------------+ | Field | Value | +----------------+--------------------------+ | task_state | data_copying_in_progress | | total_progress | 37 | +----------------+--------------------------+ * ``migration_cancel``: cancels an in-progress migration of a share. .. code-block:: console $ openstack share migration cancel share_1 .. note:: This command has no output. The parameters -------------- To start a migration, an administrator should specify several parameters. Among those, two of them are key for the migration. * ``share``: The share that will be migrated. * ``destination_pool``: The destination pool to which the share should be migrated to, in format host@backend#pool. Several other parameters, referred to here as ``driver-assisted parameters``, *must* be specified in the ``migration_start`` API. They are: * ``preserve_metadata``: whether preservation of filesystem metadata should be enforced for this migration. * ``preserve_snapshots``: whether preservation of snapshots should be enforced for this migration. * ``writable``: whether the source share remaining writable should be enforced for this migration. * ``nondisruptive``: whether it should be enforced to keep clients connected throughout the migration. Specifying any of the boolean parameters above as ``True`` will disallow a host-assisted migration. In order to appropriately move a share to a different storage pool, it may be required to change one or more share properties, such as the share type, share network, or availability zone. To accomplish this, use the optional parameters: * ``new_share_type_id``: Specify the ID of the share type that should be set in the migrated share. * ``new_share_network_id``: Specify the ID of the share network that should be set in the migrated share. If driver-assisted migration should not be attempted, you may provide the optional parameter: * ``force_host_assisted_migration``: whether driver-assisted migration attempt should be skipped. If this option is set to ``True``, all driver-assisted options must be set to ``False``. Configuration ~~~~~~~~~~~~~ For share migration to work in the cloud, there are several configuration requirements that need to be met: For driver-assisted migration: it is necessary that the configuration of all back end stanzas is present in the file manila.conf of all manila-share nodes. Also, network connectivity between the nodes running manila-share service and their respective storage back ends is required. For host-assisted migration: it is necessary that the Data Service (manila-data) is installed and configured in a node connected to the cloud's administrator network. The drivers pertaining to the source back end and destination back end involved in the migration should be able to provide shares that can be accessed from the administrator network. This can easily be accomplished if the driver supports ``admin_only`` export locations, else it is up to the administrator to set up means of connectivity. In order for the Data Service to mount the source and destination instances, it must use manila share access APIs to grant access to mount the instances. The access rule type varies according to the share protocol, so there are a few config options to set the access value for each type: * ``data_node_access_ips``: For IP-based access type, provide one or more administrator network IP addresses of the host running the Data Service. For NFS shares, drivers should always add rules with the "no_root_squash" property. * ``data_node_access_cert``: For certificate-based access type, provide the value of the certificate name that grants access to the Data Service. * ``data_node_access_admin_user``: For user-based access type, provide the value of a username that grants access and administrator privileges to the files in the share. * ``data_node_mount_options``: Provide the value of a mapping of protocol name to respective mount options. The Data Service makes use of mount command templates that by default have a dedicated field to inserting mount options parameter. The default value for this config option already includes the username and password parameters for CIFS shares and NFS v3 enforcing parameter for NFS shares. * ``mount_tmp_location``: Provide the value of a string representing the path where the share instances used in migration should be temporarily mounted. The default value is ``/tmp/``. * ``check_hash``: This boolean config option value determines whether the hash of all files copied in migration should be validated. Setting this option increases the time it takes to migrate files, and is recommended for ultra-dependable systems. It defaults to disabled. The configuration options above are respective to the Data Service only and should be defined the ``DEFAULT`` group of the ``manila.conf`` configuration file. Also, the Data Service node must have all the protocol-related libraries pre-installed to be able to run the mount commands for each protocol. You may need to change some driver-specific configuration options from their default value to work with specific drivers. If so, they must be set under the driver configuration stanza in ``manila.conf``. See a detailed description for each one below: * ``migration_ignore_files``: Provide value as a list containing the names of files or folders to be ignored during migration for a specific driver. The default value is a list containing only ``lost+found`` folder. * ``share_mount_template``: Provide a string that defines the template for the mount command for a specific driver. The template should contain the following entries to be formatted by the code: * proto: The share protocol. Automatically formatted by the Data Service. * options: The mount options to be formatted by the Data Service according to the data_node_mount_options config option. * export: The export path of the share. Automatically formatted by the Data Service with the share's ``admin_only`` export location. * path: The path to mount the share. Automatically formatted by the Data Service according to the mount_tmp_location config option. The default value for this config option is:: mount -vt %(proto)s %(options)s %(export)s %(path)s. * ``share_unmount_template``: Provide the value of a string that defines the template for the unmount command for a specific driver. The template should contain the path of where the shares are mounted, according to the ``mount_tmp_location`` config option, to be formatted automatically by the Data Service. The default value for this config option is:: umount -v %(path)s * ``protocol_access_mapping``: Provide the value of a mapping of access rule type to protocols supported. The default value specifies IP and user based access types mapped to NFS and CIFS respectively, which are the combinations supported by manila. If a certain driver uses a different protocol for IP or user access types, or is not included in the default mapping, it should be specified in this configuration option. Other remarks ~~~~~~~~~~~~~ * There is no need to manually add any of the previously existing access rules after a migration is complete, they will be persisted on the destination after the migration. * Once migration of a share has started, the user will see the status ``migrating`` and it will block other share actions, such as adding or removing access rules, creating or deleting snapshots, resizing, among others. * The destination share instance export locations, although it may exist from the beginning of a host-assisted migration, are not visible nor accessible as access rules cannot be added. * During a host-assisted migration, an access rule granting access to the Data Service will be added and displayed by querying the ``access-list`` API. This access rule should not be tampered with, it will otherwise cause migration to fail. * Resources allocated are cleaned up automatically when a migration fails, except if this failure occurs during the 2nd phase of a driver-assisted migration. Each step in migration is saved to the field ``task_state`` present in the Share model. If for any reason the state is not set to ``migration_error`` during a failure, it will need to be reset using the ``reset-task-state`` API. * It is advised that the node running the Data Service is well secured, since it will be mounting shares with highest privileges, temporarily exposing user data to whoever has access to this node. * The two mechanisms of migration are affected differently by service restarts: * If performing a host-assisted migration, all services may be restarted except for the manila-data service when performing the copy (the ``task_state`` field value starts with ``data_copying_``). In other steps of the host-assisted migration, both the source and destination manila-share services should not be restarted. * If performing a driver-assisted migration, the migration is affected minimally by driver restarts if the ``task_state`` is ``migration_driver_in_progress``, while the copy is being done in the back end. Otherwise, the source and destination manila-share services should not be restarted. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8432379 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-networks.rst0000664000175000017500000004377015251045254025172 0ustar00zuulzuul.. _shared_file_systems_share_networks: ============== Share networks ============== Share networks are essential to allow end users a path to hard multi-tenancy. When backed by isolated networks, the Shared File Systems service can guarantee hard network path isolation for the users' shares. Users can be allowed to designate their project networks as share networks. When a share network is provided during share creation, the share driver sets up a virtual share server (NAS server) on the share network and exports shares using this NAS server. The share server itself is abstracted away from the user. You must ensure that the storage system can connect the share servers it provisions to the networks users can use as their share networks. .. note:: Not all shared file systems storage backends support share networks. Share networks can only be used when using a share type that has the specification ``driver_handles_share_servers=True``. To see what storage back ends support this specification, refer to the :doc:`share_back_ends_feature_support_mapping`. How to create share network ~~~~~~~~~~~~~~~~~~~~~~~~~~~ To list networks in a project, run: .. code-block:: console $ openstack network list +--------------+---------+--------------------+ | ID | Name | Subnets | +--------------+---------+--------------------+ | bee7411d-... | public | 884a6564-0f11-... | | | | e6da81fa-5d5f-... | | 5ed5a854-... | private | 74dcfb5a-b4d7-... | | | | cc297be2-5213-... | +--------------+---------+--------------------+ A share network stores network information that share servers can use where shares are hosted. You can associate a share with a single share network. You must always specify a share network when creating a share with a share type that requests hard multi-tenancy, i.e., has extra-spec 'driver_handles_share_servers=True'. For more information about supported plug-ins for share networks, see :ref:`shared_file_systems_network_plugins`. A share network has these attributes: - The IP block in Classless Inter-Domain Routing (CIDR) notation from which to allocate the network. - The IP version of the network. - The network type, which is `vlan`, `vxlan`, `gre`, or `flat`. If the network uses segmentation, a segmentation identifier. For example, VLAN, VXLAN, and GRE networks use segmentation. To create a share network with private network and subnetwork, run: .. code-block:: console $ openstack share network create \ --neutron-net-id 5ed5a854-21dc-4ed3-870a-117b7064eb21 \ --neutron-subnet-id 74dcfb5a-b4d7-4855-86f5-a669729428dc \ --name my_share_net --description "My first share network" \ --availability-zone manila-zone-0 +-----------------------------------+----------------------------------------------------------+ | Field | Value | +-----------------------------------+----------------------------------------------------------+ | id | 5c3cbabb-f4da-465f-bc7f-fadbe047b85a | | name | my_share_net | | project_id | 20787a7ba11946adad976463b57d8a2f | | created_at | 2026-03-31T12:06:32.289118 | | updated_at | None | | description | My first share network | | status | active | | share_network_subnets | | | | id = 3147bc3d-d389-451b-b912-e8f7894013b2 | | | availability_zone = manila-zone-0 | | | created_at = 2026-03-31T12:06:32.321436 | | | segmentation_id = None | | | neutron_net_id = 5ed5a854-21dc-4ed3-870a-117b7064eb21 | | | neutron_subnet_id = 74dcfb5a-b4d7-4855-86f5-a669729428dc | | | ip_version = None | | | cidr = None | | | network_type = None | +-----------------------------------+----------------------------------------------------------+ The ``segmentation_id``, ``cidr``, ``ip_version``, and ``network_type`` share network attributes are automatically set to the values determined by the network provider. .. note:: You are able to specify the parameter ``availability_zone`` only with API versions >= 2.51. From the version 2.51, a share network is able to span multiple subnets in different availability zones. The network parameters ``neutron_net_id``, ``neutron_subnet_id``, ``segmentation_id``, ``cidr``, ``ip_version``, ``network_type``, ``gateway`` and ``mtu`` were moved to the share network subnet and no longer pertain to the share network. If you do not specify an availability zone during the share network creation, the created subnet will be considered default by the Shared File Systems Service. A default subnet is expected to be reachable from all availability zones in the cloud. .. note:: Since API version 2.63, the share network will have two additional fields: ``status`` and ``security_service_update_support``. The former indicates the current status of a share network, and the latter informs if all the share network's resources can hold updating or adding security services after they are already deployed. To check the network list, run: .. code-block:: console $ openstack share network list +--------------------------------------+--------------+ | ID | Name | +--------------------------------------+--------------+ | 5c3cbabb-f4da-465f-bc7f-fadbe047b85a | my_share_net | +--------------------------------------+--------------+ If you configured the generic driver with ``driver_handles_share_servers = True`` (with the share servers) and already had previous operations in the Shared File Systems service, you can see ``manila_service_network`` in the neutron list of networks. This network was created by the generic driver for internal use. .. code-block:: console $ openstack network list +--------------+------------------------+--------------------+ | ID | Name | Subnets | +--------------+------------------------+--------------------+ | 3b5a629a-e...| manila_service_network | 4f366100-50... | | bee7411d-... | public | 884a6564-0f11-... | | | | e6da81fa-5d5f-... | | 5ed5a854-... | private | 74dcfb5a-b4d7-... | | | | cc297be2-5213-... | +--------------+------------------------+--------------------+ You also can see detailed information about the share network including ``network_type``, and ``segmentation_id`` fields: .. code-block:: console $ openstack network show manila_service_network +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | UP | | availability_zone_hints | | | availability_zones | nova | | created_at | 2026-03-31T09:31:30Z | | description | | | id | 3b5a629a-e7a1-46a3-afb2-ab666fb884bc | | ipv4_address_scope | None | | ipv6_address_scope | None | | mtu | 1450 | | name | manila_service_network | | port_security_enabled | True | | project_id | f6ac448a469b45e888050cf837b6e628 | | provider:network_type | vxlan | | provider:physical_network | None | | provider:segmentation_id | 73 | | revision_number | 7 | | router:external | Internal | | shared | False | | status | ACTIVE | | subnets | 682e3329-60b0-440f-8749-83ef53dd8544 | | tags | [] | | updated_at | 2026-03-31T09:31:36Z | +---------------------------+--------------------------------------+ You also can add and remove the security services from the share network. For more detail, see :ref:`shared_file_systems_security_services`. How to reset the state of a share network (Since API version 2.63) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To reset the state of a given share network, run: .. code-block:: console $ openstack share network set manila_service_network --status active ============================================== Share network subnets (Since API version 2.51) ============================================== Share network subnet is an entity that stores network data from the OpenStack Networking service. A share network can span multiple share network subnets in different availability zones. How to create share network subnet ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When you create a share network, a primary share network subnet is automatically created. The share network subnet stores network information that share servers can use where shares are hosted. If a share network subnet is not assigned to a specific availability zone, it is considered to be available across all availability zones. Such a subnet is referred to as ``default`` subnet. A share network can have only one default subnet. However, having a default subnet is not necessary. A share can be associated with only one share network. To list share networks in a project, run: .. code-block:: console $ openstack share network list +--------------------------------------+-----------------------+ | ID | Name | +--------------------------------------+-----------------------+ | 483a9787-5116-48b2-bd89-473022fad060 | sharenetwork1 | | bcb9c650-a501-410d-a418-97f28b8ab61a | sharenetwork2 | +--------------------------------------+-----------------------+ You can attach any number of share network subnets into a share network. However, only one share network subnet is allowed per availability zone in a given share network. If you try to create another subnet in a share network that already contains a subnet in a specific availability zone, the operation will be denied. To create a share network subnet in a specific share network, run: .. code-block:: console $ openstack share network subnet create sharenetwork1 \ --availability-zone manila-zone-0 \ --neutron-net-id 5ed5a854-21dc-4ed3-870a-117b7064eb21 \ --neutron-subnet-id 74dcfb5a-b4d7-4855-86f5-a669729428dc +--------------------+--------------------------------------+ | Field | Value | +--------------------+--------------------------------------+ | id | 20f3cd2c-0faa-4b4b-a00a-4f188eb1cf38 | | availability_zone | manila-zone-0 | | share_network_id | 483a9787-5116-48b2-bd89-473022fad060 | | share_network_name | sharenetwork1 | | created_at | 2026-03-31T00:37:30.847733 | | segmentation_id | None | | neutron_subnet_id | 74dcfb5a-b4d7-4855-86f5-a669729428dc | | updated_at | None | | neutron_net_id | 5ed5a854-21dc-4ed3-870a-117b7064eb21 | | ip_version | None | | cidr | None | | network_type | None | | mtu | None | | gateway | None | | metadata | {} | +--------------------+--------------------------------------+ To list all the share network subnets of a given share network, you need to show the share network, and then all subnets will be displayed, as shown below: .. code-block:: console $ openstack share network show sharenetwork1 +-----------------------------------+----------------------------------------------------------+ | Field | Value | +-----------------------------------+----------------------------------------------------------+ | id | 483a9787-5116-48b2-bd89-473022fad060 | | name | sharenetwork1 | | project_id | 58ff89e14f9245d7843b8cf290525b5b | | created_at | 2026-03-31T00:16:39.289118 | | updated_at | 2026-03-31T00:31:58.000000 | | description | None | | status | active | | share_network_subnets | | | | id = 20f3cd2c-0faa-4b4b-a00a-4f188eb1cf38 | | | availability_zone = manila-zone-0 | | | created_at = 2026-03-31T00:37:30.321436 | | | segmentation_id = None | | | neutron_net_id = 5ed5a854-21dc-4ed3-870a-117b7064eb21 | | | neutron_subnet_id = 74dcfb5a-b4d7-4855-86f5-a669729428dc | | | ip_version = None | | | cidr = None | | | network_type = None | | | id = 8b532c15-3ac7-4ea1-b1bc-732614a82313 | | | availability_zone = None | | | created_at = 2026-03-31T00:16:39.000000 | | | segmentation_id = None | | | neutron_net_id = None | | | neutron_subnet_id = None | | | ip_version = None | | | cidr = None | | | network_type = None | | security_services | | +-----------------------------------+----------------------------------------------------------+ To show a specific share network subnet, run: .. code-block:: console $ openstack share network subnet show sharenetwork1 \ 20f3cd2c-0faa-4b4b-a00a-4f188eb1cf38 +--------------------+--------------------------------------+ | Field | Value | +--------------------+--------------------------------------+ | id | 20f3cd2c-0faa-4b4b-a00a-4f188eb1cf38 | | availability_zone | manila-zone-0 | | share_network_id | 483a9787-5116-48b2-bd89-473022fad060 | | share_network_name | sharenetwork1 | | created_at | 2026-03-31T00:37:30.847733 | | segmentation_id | None | | neutron_subnet_id | 74dcfb5a-b4d7-4855-86f5-a669729428dc | | updated_at | None | | neutron_net_id | 5ed5a854-21dc-4ed3-870a-117b7064eb21 | | ip_version | None | | cidr | None | | network_type | None | | mtu | None | | gateway | None | | properties | | +--------------------+--------------------------------------+ To delete a share network subnet, run: .. code-block:: console $ openstack share network subnet delete sharenetwork1 \ 20f3cd2c-0faa-4b4b-a00a-4f188eb1cf38 If you want to remove a share network subnet, make sure that no other resource is using the subnet, otherwise the Shared File Systems Service will deny the operation. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.844238 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-replication.rst0000664000175000017500000010172415251045254025621 0ustar00zuulzuul.. _shared_file_systems_share_replication: ================= Share replication ================= Replication of data has a number of use cases in the cloud. One use case is High Availability of the data in a shared file system, used for example, to support a production database. Another use case is ensuring Data Protection; i.e being prepared for a disaster by having a replication location that will be ready to back up your primary data source. The Shared File System service supports user facing APIs that allow users to create shares that support replication, add and remove share replicas and manage their snapshots and access rules. Three replication types are currently supported and they vary in the semantics associated with the primary share and the secondary copies. .. note:: **Share replication** APIs were introduced in the Mitaka release and graduated from experimental status in API version 2.56. Starting from version 2.56, these APIs are stable and no longer require the ``X-OpenStack-Manila-API-Experimental`` header. For API versions 2.11 through 2.55, the experimental header is still required for backward compatibility. Replication types supported ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Before using share replication, make sure the Shared File System driver that you are running supports this feature. You can check it in the ``manila-scheduler`` service reports. The ``replication_type`` capability reported can have one of the following values: writable The driver supports creating ``writable`` share replicas. All share replicas can be accorded read/write access and would be synchronously mirrored. readable The driver supports creating ``read-only`` share replicas. All secondary share replicas can be accorded read access. Only the primary (or ``active`` share replica) can be written into. dr The driver supports creating ``dr`` (abbreviated from Disaster Recovery) share replicas. A secondary share replica is inaccessible until after a ``promotion``. None The driver does not support Share Replication. .. note:: The term ``active`` share replica refers to the ``primary`` share. In ``writable`` style of replication, all share replicas are ``active``, and there could be no distinction of a ``primary`` share. In ``readable`` and ``dr`` styles of replication, a ``secondary`` share replica may be referred to as ``passive``, ``non-active`` or simply, ``replica``. Configuration ~~~~~~~~~~~~~ Two new configuration options have been introduced to support Share Replication. replica_state_update_interval Specify this option in the ``DEFAULT`` section of your ``manila.conf``. The Shared File Systems service requests periodic update of the `replica_state` of all ``non-active`` share replicas. The update occurs with respect to an interval corresponding to this option. If it is not specified, it defaults to 300 seconds. replication_domain Specify this option in the backend stanza when using a multi-backend style configuration. The value can be any ASCII string. Two backends that can replicate between each other would have the same ``replication_domain``. This comes from the premise that the Shared File Systems service expects Share Replication to be performed between symmetric backends. This option is *required* for using the Share Replication feature. Health of a share replica ~~~~~~~~~~~~~~~~~~~~~~~~~ Apart from the ``status`` attribute, share replicas have the ``replica_state`` attribute to denote the state of data replication on the storage backend. The ``primary`` share replica will have it's `replica_state` attribute set to `active`. The ``secondary`` share replicas may have one of the following as their ``replica_state``: in_sync The share replica is up to date with the ``active`` share replica (possibly within a backend-specific ``recovery point objective``). out_of_sync The share replica is out of date (all new share replicas start out in this ``replica_state``). error When the scheduler fails to schedule this share replica or some potentially irrecoverable error occurred with regard to updating data for this replica. Promotion or failover ~~~~~~~~~~~~~~~~~~~~~ For ``readable`` and ``dr`` types of replication, we refer to the task of switching a `non-active` share replica with the ``active`` replica as `promotion`. For the ``writable`` style of replication, promotion does not make sense since all share replicas are ``active`` (or writable) at all times. The `status` attribute of the non-active replica being promoted will be set to ``replication_change`` during its promotion. This has been classified as a ``busy`` state and thus API interactions with the share are restricted while one of its share replicas is in this state. Share replication workflows ~~~~~~~~~~~~~~~~~~~~~~~~~~~ The following examples have been implemented with the ZFSonLinux driver that is a reference implementation in the Shared File Systems service. It operates in ``driver_handles_share_servers=False`` mode and supports the ``readable`` type of replication. In the example, we assume a configuration of two Availability Zones [1]_, called `availability_zone_1` and `availability_zone_2`. Since the Train release, some drivers operating in ``driver_handles_share_server=True`` mode support share replication. Multiple availability zones are not necessary to use the replication feature. However, the use of an availability zone as a ``failure domain`` is encouraged. Pay attention to the network configuration for the ZFS driver. Here, we assume a configuration of ``zfs_service_ip`` and ``zfs_share_export_ip`` from two separate networks. The service network is reachable from the host where the ``manila-share`` service is running. The share export IP is from a network that allows user access. See `Configuring the ZFSonLinux driver `_ for information on how to set up the ZFSonLinux driver. Creating a share that supports replication ------------------------------------------ Create a new share type and specify the `replication_type` as an extra-spec within the share-type being used. Use the :command:`openstack share type create` command to create a new share type. Specify the name and the value for the extra-spec ``driver_handles_share_servers``. .. code-block:: console $ openstack share type create readable_type_replication False +----------------------+--------------------------------------+ | Field | Value | +----------------------+--------------------------------------+ | id | 3b3ee3f7-6e43-4aa1-859d-0b0511c43074 | | name | readable_type_replication | | visibility | public | | is_default | - | | required_extra_specs | driver_handles_share_servers : False | | optional_extra_specs | snapshot_support : True | | description | None | +----------------------+--------------------------------------+ Use the :command:`openstack share type set` command to set an extra-spec to the share type. .. code-block:: console $ openstack share type set readable_type_replication \ --extra-specs replication_type=readable .. note:: This command has no output. To verify the extra-spec, use the :command:`openstack share type list` command and specify the share type's name or ID as a parameter. Create a share with the share type Use the :command:`openstack share create` command to create a share. Specify the share protocol, size and the availability zone. .. code-block:: console $ openstack share create NFS 1 --share-type readable_type_replication \ --name my_share --description "This share will have replicas" \ --availability-zone availability_zone_1 +---------------------------------------+--------------------------------------+ | Field | Value | +---------------------------------------+--------------------------------------+ | id | e496ed61-8f2e-436b-b299-32c3e90991cc | | size | 1 | | availability_zone | availability_zone_1 | | created_at | 2026-03-31T20:22:18.000000 | | status | creating | | name | my_share | | description | This share will have replicas | | project_id | 48a5ca76ac69405e99dc1c13c5195186 | | snapshot_id | None | | share_network_id | None | | share_proto | NFS | | metadata | {} | | share_type | 3b3ee3f7-6e43-4aa1-859d-0b0511c43074 | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | readable_type_replication | | access_rules_status | active | | replication_type | readable | | has_replicas | False | | user_id | 5c7bdb6eb0504d54a619acf8375c08ce | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | None | +---------------------------------------+--------------------------------------+ .. note:: If you are creating a share with the share type specification ``driver_handles_share_servers=True``, the share network parameter is required for the operation to be performed. Use the :command:`openstack share show` command to retrieve details of the share. Specify the share ID or name as a parameter. .. code-block:: console $ openstack share show my_share +---------------------------------------+----------------------------------------------------------------------+ | Field | Value | +---------------------------------------+----------------------------------------------------------------------+ | id | e496ed61-8f2e-436b-b299-32c3e90991cc | | size | 1 | | availability_zone | availability_zone_1 | | created_at | 2026-03-31T20:22:18.000000 | | status | available | | name | my_share | | description | This share will have replicas | | project_id | 48a5ca76ac69405e99dc1c13c5195186 | | snapshot_id | None | | share_network_id | None | | share_proto | NFS | | share_type | 3b3ee3f7-6e43-4aa1-859d-0b0511c43074 | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | readable_type_replication | | access_rules_status | active | | replication_type | readable | | has_replicas | False | | user_id | 5c7bdb6eb0504d54a619acf8375c08ce | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | 100% | | export_locations | | | | id = e1d754b5-ec06-42d2-afff-3e98c0013faf | | | path = 192.0.2.26:/alpha/manila_share_38efc042_50c2_4825_a6d8_cba2a | | | preferred = False | | properties | | +---------------------------------------+----------------------------------------------------------------------+ .. note:: When you create a share that supports replication, an ``active`` replica is created for you. You can verify this with the :command:`openstack share replica list` command. From API version 2.53, when creating a replicated share, the manila quota system will reserve and consume resources for two additional quotas: ``share_replicas`` and ``replica_gigabytes``. Creating and promoting share replicas ------------------------------------- Create a share replica Use the :command:`openstack share replica create` command to create a share replica. Specify the share ID or name as a parameter. You may optionally provide the `availability_zone` or the `scheduler_hints`. For the scheduler hints, the value of ``only_host`` parameter must be a manila-share service host in ``host@backend#POOL`` format. .. code-block:: console $ openstack share replica create my_share \ --availability-zone availability_zone_2 \ --scheduler-hint only_host=openstack4@zfsonlinux_2#beta +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | id | 78a5ef96-6c36-42e0-b50b-44efe7c1807e | | status | creating | | share_id | e496ed61-8f2e-436b-b299-32c3e90991cc | | availability_zone | availability_zone_2 | | created_at | 2026-03-31T20:24:53.148992 | | updated_at | None | | share_network_id | None | | share_server_id | None | | host | | | replica_state | None | +-------------------+--------------------------------------+ See details of the newly created share replica .. note:: Since API version 2.51 (Train release), a share network is able to span multiple subnets in different availability zones. So, when using a share type with specification ``driver_handles_share_servers=True``, users must ensure that the share network has a subnet in the availability zone that they desire the share replica to be created in. .. note:: Scheduler hints are available only for API version >= 2.67. Use the :command:`openstack share replica show` command to see details of the newly created share replica. Specify the share replica's ID as a parameter. .. code-block:: console $ openstack share replica show 78a5ef96-6c36-42e0-b50b-44efe7c1807e +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | id | 78a5ef96-6c36-42e0-b50b-44efe7c1807e | | status | available | | share_id | e496ed61-8f2e-436b-b299-32c3e90991cc | | availability_zone | availability_zone_2 | | created_at | 2026-03-31T20:24:53.000000 | | updated_at | 2026-03-31T20:24:58.000000 | | share_network_id | None | | share_server_id | None | | host | openstack4@zfsonlinux_2#beta | | replica_state | in_sync | +-------------------+--------------------------------------+ See all replicas of the share Use the :command:`openstack share replica list` command to see all the replicas of the share. Specify the share ID or name as an optional parameter. .. code-block:: console $ openstack share replica list --share-id my_share +--------------------------------------+-----------+---------------+--------------------------------------+-------------------------------+---------------------+----------------------------+ | ID | Status | Replica State | Share ID | Host | Availability Zone | Updated At | +--------------------------------------+-----------+---------------+--------------------------------------+-------------------------------+---------------------+----------------------------+ | 38efc042-50c2-4825-a6d8-cba2a8277b28 | available | active | e496ed61-8f2e-436b-b299-32c3e90991cc | openstack4@zfsonlinux_1#alpha | availability_zone_1 | 2026-03-31T20:22:19.000000 | | 78a5ef96-6c36-42e0-b50b-44efe7c1807e | available | in_sync | e496ed61-8f2e-436b-b299-32c3e90991cc | openstack4@zfsonlinux_2#beta | availability_zone_2 | 2026-03-31T20:24:58.000000 | +--------------------------------------+-----------+---------------+--------------------------------------+-------------------------------+---------------------+----------------------------+ Promote the secondary share replica to be the new active replica Use the :command:`openstack share replica promote` command to promote a non-active share replica to become the ``active`` replica. Specify the non-active replica's ID as a parameter. .. code-block:: console $ openstack share replica promote 78a5ef96-6c36-42e0-b50b-44efe7c1807e .. note:: This command has no output. The promotion may take time. During the promotion, the ``replica_state`` attribute of the share replica being promoted will be set to ``replication_change``. .. code-block:: console $ openstack share replica list --share-id my_share +--------------------------------------+-----------+--------------------+--------------------------------------+-------------------------------+---------------------+----------------------------+ | ID | Status | Replica State | Share ID | Host | Availability Zone | Updated At | +--------------------------------------+-----------+--------------------+--------------------------------------+-------------------------------+---------------------+----------------------------+ | 38efc042-50c2-4825-a6d8-cba2a8277b28 | available | active | e496ed61-8f2e-436b-b299-32c3e90991cc | openstack4@zfsonlinux_1#alpha | availability_zone_1 | 2026-03-31T20:32:19.000000 | | 78a5ef96-6c36-42e0-b50b-44efe7c1807e | available | replication_change | e496ed61-8f2e-436b-b299-32c3e90991cc | openstack4@zfsonlinux_2#beta | availability_zone_2 | 2026-03-31T20:32:19.000000 | +--------------------------------------+-----------+--------------------+--------------------------------------+-------------------------------+---------------------+----------------------------+ Once the promotion is complete, the ``replica_state`` will be set to ``active``. .. code-block:: console $ openstack share replica list --share-id my_share +--------------------------------------+-----------+---------------+--------------------------------------+-------------------------------+---------------------+----------------------------+ | ID | Status | Replica State | Share ID | Host | Availability Zone | Updated At | +--------------------------------------+-----------+---------------+--------------------------------------+-------------------------------+---------------------+----------------------------+ | 38efc042-50c2-4825-a6d8-cba2a8277b28 | available | in_sync | e496ed61-8f2e-436b-b299-32c3e90991cc | openstack4@zfsonlinux_1#alpha | availability_zone_1 | 2026-03-31T20:32:19.000000 | | 78a5ef96-6c36-42e0-b50b-44efe7c1807e | available | active | e496ed61-8f2e-436b-b299-32c3e90991cc | openstack4@zfsonlinux_2#beta | availability_zone_2 | 2026-03-31T20:32:19.000000 | +--------------------------------------+-----------+---------------+--------------------------------------+-------------------------------+---------------------+----------------------------+ Access rules ------------ Create an IP access rule for the share Use the :command:`openstack share access create` command to add an access rule. Specify the share ID or name, protocol and the target as parameters. .. code-block:: console $ openstack share access create my_share ip 0.0.0.0/0 --access-level rw +--------------+--------------------------------------+ | Field | Value | +--------------+--------------------------------------+ | share_id | e496ed61-8f2e-436b-b299-32c3e90991cc | | access_type | ip | | access_to | 0.0.0.0/0 | | access_level | rw | | state | new | | id | 8b339cdc-c1e0-448f-bf6d-f068ee6e8f45 | +--------------+--------------------------------------+ .. note:: Access rules are not meant to be different across the replicas of the share. However, as per the type of replication, drivers may choose to modify the access level prescribed. In the above example, even though read/write access was requested for the share, the driver will provide read-only access to the non-active replica to the same target, because of the semantics of the replication type: ``readable``. However, the target will have read/write access to the (currently) non-active replica when it is promoted to become the ``active`` replica. The :command:`openstack share access delete` command can be used to remove a previously applied access rule. List the export locations of the share Use the :command:`openstack share export location list` command to list the export locations of a share. .. code-block:: console $ openstack share export location list my_share +--------------------------------------+-----------------------------------------------------------------------------+-----------+ | ID | Path | Preferred | +--------------------------------------+-----------------------------------------------------------------------------+-----------+ | 3ed3fbf5-2fa1-4dc0-8440-a0af72398cb6 | 192.0.2.21:/beta/subdir/manila_share_78a5ef96_6c36_42e0_b50b_44efe7c1807e | False | | 6f843ecd-a7ea-4939-86de-e1e01d9e8672 | 203.0.113.23:/alpha/manila_share_38efc042_50c2_4825_a6d8_cba2a8277b28 | False | | e1d754b5-ec06-42d2-afff-3e98c0013faf | 192.0.2.26:/alpha/manila_share_38efc042_50c2_4825_a6d8_cba2a8277b28 | False | | f3c5585f-c2f7-4264-91a7-a4a1e754e686 | 203.0.113.29:/beta/subdir/manila_share_78a5ef96_6c36_42e0_b50b_44efe7c1807e | False | +--------------------------------------+-----------------------------------------------------------------------------+-----------+ Identify the export location corresponding to the share replica on the user accessible network and you may mount it on the target node. .. note:: As an administrator, you can list the export locations for a particular share replica by using the :command:`openstack share instance export location list` command and specifying the share replica's ID as a parameter. Snapshots --------- Create a snapshot of the share Use the :command:`openstack share snapshot create` command to create a snapshot of the share. Specify the share ID or name as a parameter. .. code-block:: console $ openstack share snapshot create my_share --name "my_snapshot" +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | status | creating | | share_id | e496ed61-8f2e-436b-b299-32c3e90991cc | | user_id | 5c7bdb6eb0504d54a619acf8375c08ce | | description | None | | created_at | 2026-03-31T21:14:03.000000 | | share_proto | NFS | | provider_location | None | | id | 06cdccaf-93a0-4e57-9a39-79fb1929c649 | | project_id | cadd7139bc3148b8973df097c0911016 | | size | 1 | | share_size | 1 | | name | my_snapshot | +-------------------+--------------------------------------+ Show the details of the snapshot Use the :command:`openstack share snapshot show` to view details of a snapshot. Specify the snapshot ID or name as a parameter. .. code-block:: console $ openstack share snapshot show my_snapshot +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | status | available | | share_id | e496ed61-8f2e-436b-b299-32c3e90991cc | | user_id | 5c7bdb6eb0504d54a619acf8375c08ce | | description | None | | created_at | 2026-03-31T21:14:03.000000 | | share_proto | NFS | | provider_location | None | | id | 06cdccaf-93a0-4e57-9a39-79fb1929c649 | | project_id | cadd7139bc3148b8973df097c0911016 | | size | 1 | | share_size | 1 | | name | my_snapshot | +-------------------+--------------------------------------+ .. note:: The ``status`` attribute of a snapshot will transition from ``creating`` to ``available`` only when it is present on all the share replicas that have their ``replica_state`` attribute set to ``active`` or ``in_sync``. Likewise, the ``replica_state`` attribute of a share replica will transition from ``out_of_sync`` to ``in_sync`` only when all ``available`` snapshots are present on it. Planned failovers ----------------- As an administrator, you can use the :command:`openstack share replica resync` command to attempt to sync data between ``active`` and ``non-active`` share replicas of a share before promotion. This will ensure that share replicas have the most up-to-date data and their relationships can be safely switched. .. code-block:: console $ openstack share replica resync 38efc042-50c2-4825-a6d8-cba2a8277b28 .. note:: This command has no output. Updating attributes ------------------- If an error occurs while updating data or replication relationships (during a ``promotion``), the Shared File Systems service may not be able to determine the consistency or health of a share replica. It may require administrator intervention to make any fixes on the storage backend as necessary. In such a situation, state correction within the Shared File Systems service is possible. As an administrator, you can: Reset the ``status`` attribute of a share replica Use the :command:`openstack share replica set` command to reset the ``status`` attribute. Specify the share replica's ID as a parameter and use the ``--status`` option to specify the state intended. .. code-block:: console $ openstack share replica set 38efc042-50c2-4825-a6d8-cba2a8277b28 \ --status=available .. note:: This command has no output. Reset the ``replica_state`` attribute Use the :command:`openstack share replica set` command to reset the ``replica_state`` attribute. Specify the share replica's ID and use the ``--replica-state`` option to specify the state intended. .. code-block:: console $ openstack share replica set 38efc042-50c2-4825-a6d8-cba2a8277b28 \ --replica-state=out_of_sync .. note:: This command has no output. Force delete a specified share replica in any state Use the :command:`openstack share replica delete` command with the '--force' key to remove the share replica, regardless of the state it is in. .. code-block:: console $ openstack share replica show 9513de5d-0384-4528-89fb-957dd9b57680 +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | status | error | | share_id | e496ed61-8f2e-436b-b299-32c3e90991cc | | availability_zone | availability_zone_1 | | created_at | 2026-03-31T01:32:47.000000 | | updated_at | 2026-03-31T01:34:25.000000 | | share_network_id | None | | share_server_id | None | | host | openstack4@zfsonlinux_1#alpha | | replica_state | out_of_sync | | id | 38efc042-50c2-4825-a6d8-cba2a8277b28 | +-------------------+--------------------------------------+ $ openstack share replica delete \ --force 38efc042-50c2-4825-a6d8-cba2a8277b28 .. note:: This command has no output. Use the ``policy.yaml`` file to grant permissions for these actions to other roles. Deleting share replicas ----------------------- Use the :command:`openstack share replica delete` command with the share replica's ID to delete a share replica. .. code-block:: console $ openstack share replica delete 38efc042-50c2-4825-a6d8-cba2a8277b28 .. note:: This command has no output. .. note:: You cannot delete the last ``active`` replica with this command. You should use the :command:`openstack share delete` command to remove the share. .. [1] When running in a multi-backend configuration, until the Stein release, deployers could only configure one Availability Zone per manila configuration file. This is achieved with the option ``storage_availability_zone`` defined under the ``[DEFAULT]`` section. Beyond the Stein release, the option ``backend_availability_zone`` can be specified in each back end stanza. The value of this configuration option will override any configuration of the ``storage_availability_zone`` from the ``[DEFAULT]`` section. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.844238 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-resize.rst0000664000175000017500000001662115251045254024612 0ustar00zuulzuul.. _shared_file_systems_share_resize: ============ Resize share ============ For most drivers, resizing the share is safe operation. If you want to be sure that your data is safe, you can make a share back up by creating a snapshot of it. You can extend and shrink the share with the :command:`openstack share resize` command, and specify the share with the new size that does not exceed the quota. For details, see :ref:`Quotas and Limits `. You also cannot shrink share size to 0 or to a greater value than the current share size. .. note:: From API version 2.53, extending a replicated share, manila quota system will reserve and consume resources for two additional quotas: ``share_replicas`` and ``replica_gigabytes``. This request will fail if there is no available quotas to extend the share and all of its share replicas. While extending, the share has an ``extending`` status. This means that the increase share size request was issued successfully. To extend the share and check the result, run: .. code-block:: console $ openstack share resize docs_resize 2 $ openstack share show docs_resize +---------------------------------------+---------------------------------------+ | Field | Value | +---------------------------------------+---------------------------------------+ | id | a3454cf1-bb1d-4e4d-a8e4-a3881c593720 | | size | 2 | | availability_zone | manila-zone-0 | | created_at | 2024-09-26T14:53:18.153832 | | status | extending | | name | docs_resize | | description | None | | project_id | 1f31ee1c3e3c443bbf9aee5684456daa | | snapshot_id | None | | share_network_id | None | | share_proto | NFS | | properties | {} | | share_type | 303f0a73-711e-4beb-a4f7-a60acc1d588e | | is_public | True | | snapshot_support | True | | task_state | None | | share_type_name | default | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | b47d81c8c8c74ea3a7c13461f30ad5ed | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | False | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | False | | progress | 100% | | is_soft_deleted | False | | scheduled_to_be_deleted_at | None | | source_backup_id | None | | share_server_id | None | | host | host@backend1#poolA | +---------------------------------------+---------------------------------------+ While shrinking, the share has a ``shrinking`` status. This means that the decrease share size request was issued successfully. To shrink the share and check the result, run: .. code-block:: console $ openstack share resize docs_resize 1 $ openstack share show docs_resize +---------------------------------------+---------------------------------------+ | Field | Value | +---------------------------------------+---------------------------------------+ | id | a3454cf1-bb1d-4e4d-a8e4-a3881c593720 | | size | 1 | | availability_zone | manila-zone-0 | | created_at | 2024-09-26T14:53:18.153832 | | status | shrinking | | name | docs_resize | | description | None | | project_id | 1f31ee1c3e3c443bbf9aee5684456daa | | snapshot_id | None | | share_network_id | None | | share_proto | NFS | | properties | {'__mount_options': 'fs=cephfs'} | | share_type | 303f0a73-711e-4beb-a4f7-a60acc1d588e | | is_public | True | | snapshot_support | True | | task_state | None | | share_type_name | default | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | b47d81c8c8c74ea3a7c13461f30ad5ed | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | False | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | False | | progress | 100% | | is_soft_deleted | False | | scheduled_to_be_deleted_at | None | | source_backup_id | None | | share_server_id | None | | host | host@backend1#poolA | +---------------------------------------+---------------------------------------+ ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.844238 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-revert-to-snapshot.rst0000664000175000017500000000335015251045254027070 0ustar00zuulzuul.. _shared_file_systems_share_revert_to_snapshot: ======================== Share revert to snapshot ======================== To revert a share to the latest available snapshot, use the :command:`openstack share revert`. .. note:: - In order to use this feature, the available backend in your deployment must have support for it. The list of backends that support this feature in the manila can be found in the :doc:`share_back_ends_feature_support_mapping`. - This feature is only available in API version 2.27 and beyond. To create shares that are revertible, the share type used must contain the extra-spec ``revert_to_snapshot_support`` set to ``True``. The default value for this is ``False``. - The revert operation can only be performed to the most recent available snapshot of the share known to manila. If revert to an earlier snapshot is desired, later snapshots must explicitly be deleted. In order to determine the most recent snapshot, the ``created_at`` field on the snapshot object is used. While reverting, the share is in ``reverting`` status and the snapshot is in ``restoring`` status. After a successful restoration, the share and snapshot states will again be set to ``available``. If the restoration fails the share will be set to ``reverting_error`` state and the snapshot will be set to ``available``. When a replicated share is reverted, the share becomes ready to be used only when all ``active`` replicas have been reverted. All secondary replicas will remain in ``out-of-sync`` state until they are consistent with the ``active`` replicas. To revert a share to a snapshot, run: .. code-block:: console $ openstack share revert 14ee8575-aac2-44af-8392-d9c9d344f392 ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.844238 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-server-management.rst0000664000175000017500000002215415251045254026727 0ustar00zuulzuul.. _shared_file_systems_share_server_management: ============= Share servers ============= A share server is a resource created by the Shared File Systems service when the driver is operating in the `driver_handles_share_servers = True` mode. A share server exports users' shares, manages their exports and access rules. Share servers are abstracted away from end users. Drivers operating in `driver_handles_share_servers = True` mode manage the lifecycle of these share servers automatically. Administrators can however remove the share servers from the management of the Shared File Systems service without destroying them. They can also bring in existing share servers under the Shared File Systems service. They can list all available share servers and update their status attribute. They can delete an specific share server if it has no dependent shares. ======================= Share server management ======================= To ``manage`` a share server means that when the driver is operating in the ``driver_handles_share_servers = True`` mode, the administrator can bring a pre-existing share server under the management of the Shared File Systems service. To ``unmanage`` means that the administrator is able to unregister an existing share server from the Shared File Systems service without deleting it from the storage back end. To be unmanaged, the referred share server cannot have any shares known to the Shared File Systems service. Manage a share server --------------------- To bring a share server under the Shared File System service, use the :command:`openstack share server adopt` command: .. code-block:: console openstack share server adopt [--driver-options ] [--share-network-subnet ] The positional arguments are: - host. The manage-share service host in ``host@backend`` format, which consists of the host name for the back end and the name of the back end. - share_network. The share network where the share server is contained. - identifier. The identifier of the share server on the back end storage. The ``driver_options`` is an optional set of one or more driver-specific metadata items as key and value pairs. The specific key-value pairs necessary vary from driver to driver. Consult the driver-specific documentation to determine if any specific parameters must be supplied. Ensure that the share type has the ``driver_handles_share_servers = True`` extra-spec. The ``share_network_subnet`` is an optional parameter which was introduced in Train release. Due to a change in the share networks structure, a share network no longer contains the following attributes: ``neutron_net_id``, ``neutron_subnet_id``, ``gateway``, ``mtu``, ``network_type``, ``ip_version``, ``segmentation_id``. These attributes now pertain to the share network subnet entity, and a share network can span multiple share network subnets in different availability zones. If you do not specify a share network subnet, the Shared File Systems Service will choose the default one (which does not pertain to any availability zone). If using an OpenStack Networking (Neutron) based plugin, ensure that: - There are some ports created, which correspond to the share server interfaces. - The correct IP addresses are allocated to these ports. - ``manila:share`` is set as the owner of these ports. To manage a share server, run: .. code-block:: console $ openstack share server adopt \ manila@paris \ share_net_test \ backend_server_1 \ +--------------------+------------------------------------------+ | Field | Value | +--------------------+------------------------------------------+ | id | 441d806f-f0e0-4c90-b7e2-a553c6aa76b2 | | project_id | 907004508ef4447397ce6741a8f037c1 | | updated_at | None | | status | manage_starting | | host | manila@paris | | share_network_name | share_net_test | | share_network_id | c895fe26-92be-4152-9e6c-f2ad230efb13 | | created_at | 2026-03-31T18:25:23.000000 | | backend_details | {} | | is_auto_deletable | False | | identifier | backend_server_1 | +--------------------+------------------------------------------+ .. note:: The ``is_auto_deletable`` property is used by the Shared File Systems service to identify a share server that can be deleted by internal routines. The service can automatically delete share servers if there are no shares associated with them. To delete a share server when the last share is deleted, set the option: ``delete_share_server_with_last_share``. If a scheduled cleanup is desired instead, ``automatic_share_server_cleanup`` and ``unused_share_server_cleanup_interval`` options can be set. Only one of the cleanup methods can be used at one time. Any share server that has a share unmanaged from it cannot be automatically deleted by the Shared File Systems service. The same is true for share servers that have been managed into the service. Cloud administrators can delete such share servers manually if desired. Unmanage a share server ----------------------- To ``unmanage`` a share server, run :command:`openstack share server abandon `. .. code-block:: console $ openstack share server abandon 441d806f-f0e0-4c90-b7e2-a553c6aa76b2 $ openstack share server show 441d806f-f0e0-4c90-b7e2-a553c6aa76b2 ERROR: Share server 441d806f-f0e0-4c90-b7e2-a553c6aa76b2 could not be found. Reset the share server state ---------------------------- As administrator you are able to reset a share server state. To reset the state of a share server, run :command:`openstack share server set --status `. The positional arguments are: - share-server. The share server name or id. - state. The state to be assigned to the share server. The options are: - ``active`` - ``error`` - ``deleting`` - ``creating`` - ``managing`` - ``unmanaging`` - ``unmanage_error`` - ``manage_error`` List share servers ------------------ To list share servers, run :command:`openstack share server list` command: .. code-block:: console openstack share server list [--host ] [--status ] [--share-network ] [--project-id ] [--columns ] All the arguments above are optional. They can ben used to filter share servers. The options to filter: - host. Shows all the share servers pertaining to the specified host. - status. Shows all the share servers that are in the specified status. - share_network. Shows all the share servers that pertain in the same share network. - project_id. Shows all the share servers pertaining to the same project. - columns. The administrator specifies which columns to display in the result of the list operation. .. code-block:: console $ openstack share server list +--------------------------------------+--------------+--------+----------------+----------------------------------+------------+ | Id | Host | Status | Share Network | Project Id | Updated_at | +--------------------------------------+--------------+--------+----------------+----------------------------------+------------+ | 441d806f-f0e0-4c90-b7e2-a553c6aa76b2 | manila@paris | active | share_net_test | fd6d30efa5ff4c99834dc0d13f96e8eb | None | +--------------------------------------+--------------+--------+----------------+----------------------------------+------------+ =========================================== Share server limits (Since Wallaby release) =========================================== Since Wallaby release, it is possible to specify limits for share servers size and amount of instances. It helps administrators to provision their resources in the cloud system and balance the share servers' size. If a value is not configured, there is no behavioral change and manila will consider it as unlimited. Then, will reuse share servers regardless their size and amount of built instances. - ``max_share_server_size``: Maximum sum of gigabytes a share server can have considering all its share instances and snapshots. - ``max_shares_per_share_server``: Maximum number of share instances created in a share server. .. note:: If one of these limits is reached during a request that requires a share server to be provided, manila will create a new share server to place such request. .. note:: The limits can be ignored when placing a new share created from parent snapshot in the same host as the parent. For this scenario, the share server must be the same, so it does not take the limit in account, reusing the share server anyway. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.844238 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-server-migration.rst0000664000175000017500000004666315251045254026617 0ustar00zuulzuul.. _shared_file_systems_share_server_migration: ====================== Share server migration ====================== Share server migration is a functionality that lets administrators migrate a share server, and all its shares and snapshots, to a new destination. As with share migration, a 2-phase approach was implemented for share server migration, which allows to control the right time to complete the operation, that usually ends on clients disruption. The process of migrating a share server involves different operations over the share server, but can be achieved by invoking two main operations: "start" and "complete". You'll need to begin with the "start" operation and wait until the service has completed the first phase of the migration to call the "complete" operation. When a share server is undergoing the first phase, it's possible to choose to "cancel" it, or get a report of the progress. A new operation called "migration check" is available to assist on a pre-migration phase, by validating within the destination host if the migration can or not be completed, providing an output with the compatible capabilities supported by the driver. Share server migration is driven by share drivers, which means that both source and destination backends must support this functionality, and the driver must provide such operation in an efficient way. Server migration workflows ~~~~~~~~~~~~~~~~~~~~~~~~~~ Before actually starting the migration, you can use the operation :ref:`migration_check ` to verify if the destination host and the requested capabilities are supported by the driver. If the answer is ``compatible`` equal to ``True``, you can proceed with the migration process, otherwise you'll need to identify the conflicting parameters or, in more complex scenarios, search for messages directly in the manila logs. The available capabilities are: ``writable``, ``nondisruptive``, ``preserve_snapshots`` and ``new_share_network_id``, which are detailed in :ref:`shared_file_systems_share_server_migration_parameters`. The migration process starts by invoking the :ref:`migration_start ` operation for a given share server. This operation will start the first phase of the migration that copies all data, from source to destination, including all shares, their access rules and even snapshots if supported by the driver controlling the destination host. For all ongoing migrations, you can optionally request the current status of a share server migration using :ref:`migration_get_progress ` operation to retrieve the total progress of the data copy and its current task state. If supported by the driver, you can also cancel this operation by issuing :ref:`migration_cancel ` and wait until all status become ``active`` and ``available`` again. After completing the data copy, the first phase is completed and the next operation, :ref:`migration_complete `, can be initiated to finish the migration. The :ref:`migration_complete ` operation usually disrupts clients access, since the export locations of the shares will change. The new export locations will be derived from the new share server that is provisioned at the destination, which is instantiated with distinct network allocations. A new field ``task_state`` is available in the share server model to help track which operation is being executed during this process. The following tables show, for each phase, the expected ``task_state``, along with their order of execution and a brief description of the actions that are being executed in the back end. .. table:: **Share server migration states - 1st phase** ============ ================================ ======================================================================================================================================================= Sequence *task_state* Description ============ ================================ ======================================================================================================================================================= 1 migration_starting All initial validations passed, all shares and snapshots can't be modified until the end of the migration. 2 migration_in_progress The destination host started the process of migration. If the driver doesn't support remain ``writable``, all access rules are modified to read only. 3 migration_driver_starting The driver was called to initiate the process of migrating the share server. Manila will wait for driver's answer. 4 migration_driver_in_progress The driver accepted the request and started copying the data to the new share server. It will remain in this state until the end of the data copy. 5 migration_driver_phase1_done Driver finished copying the data and it's ready to complete the migration. ============ ================================ ======================================================================================================================================================= Along with the share server migration progress (in percentage) and the the current task state, the API also provides the destination share server ID. Alternatively, you may check the destination share server ID by querying the share server for a ``source_share_server_id`` set to the ID of the share server being migrated. During the entire migration process, the source source share server will remain with ``server_migrating`` status while the destination share server will remain with ``server_migrating_to`` status. If an error occurs during the 1st phase of the migration, the source share server has its status reverted to ``active`` again, while the destination server has its status set to ``error``. Both share servers will have their ``task_state`` updated to ``migration_error``. All shares and snapshots are updated to ``available`` and any ``read-only`` rules are reset to allow writing into the shares. .. table:: **Share server migration states - 2nd phase** ============ ================================ ======================================================================================================================== Sequence *task_state* Description ============ ================================ ======================================================================================================================== 1 migration_completing The destination host started processing the operation and the driver is called to complete the share server migration. 2 migration_success The migration was completed with success. All shares and snapshots are ``available`` again. ============ ================================ ======================================================================================================================== After finishing the share server migration, all shares and snapshots have their status updated to ``available``. The source share server status is set to ``inactive`` and the destination share server to ``active``. If an error occurs during the 2nd phase of the migration, both source and destination share servers will have their status updated to ``error``, along with their shares and snapshots, since it's not possible to infer if they are working properly and the current status of the migration. In this scenario, you will need to manually verify the health of all share server's resources and manually fix their statuses. Both share servers will have their ``task_state`` set to ``migration_error``. .. table:: **Share server migration states - migration cancel** ============ ================================ ========================================================================================================================================= Sequence *task_state* Description ============ ================================ ========================================================================================================================================= 1 migration_cancel_in_progress The destination host started the cancel process. It will remain in this state until the driver finishes all tasks that are in progress. 2 migration_cancelled The migration was successfully cancelled. ============ ================================ ========================================================================================================================================= If an error occurs during the migration cancel operation, the source share server has its status reverted to ``active`` again, while the destination server has its status updated to ``error``. Both share servers will have their ``task_state`` set to ``migration_error``. All shares and snapshots have their statuses updated to ``available``. Using share server migration CLI ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The available commands to interact with the share server migration API are the following: .. _share_server_migration_check_cli: * ``migration_check``: call a migration check operation to validate if the provided destination host is compatible with the requested operation and its parameters. The output shows if the destination host is compatible or not and the migration capabilities supported by the back end. .. code-block:: console $ openstack share server migration start \ --check-only f3089d4f-89e8-4730-b6e6-7cab553df071 stack@dummy2 \ --nondisruptive False --writable True --preserve-snapshots True +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | compatible | True | | requested_capabilities | {'writable': 'True', 'nondisruptive': 'False', 'preserve_snapshots': 'True', 'share_network_id': None, 'host': 'stack@dummy2'} | | supported_capabilities | {'writable': True, 'nondisruptive': False, 'preserve_snapshots': True, 'share_network_id': 'ac8e103f-c21a-4442-bddc-fdadee093099', 'migration_cancel': True, 'migration_get_progress': True} | +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ The ``share_network_id`` attribute in the ``supported_capabilities`` will correspond to the value ``--new-share-network`` option if provided, otherwise it will be the same as the source share network. In the output it is possible to identify if the destination host supports the ``migration_cancel`` and ``migration_get_progress`` operations before starting the migration. The request parameters are the same for both ``migration_check`` and ``migration_start`` operations and are detailed in the following section. .. note:: Back ends might use this operation to do many other validations with regards of storage compatibility, free space checks, share-type extra-specs validations, and so on. A ``compatible`` equal to ``False`` answer may not carry the actual conflict. You must check the ``manila-share`` logs for more details. .. _share_server_migration_start_cli: * ``migration_start``: starts a share server migration to the provided destination host. This command starts the 1st phase of the migration that is an asynchronous operation and can take long to finish, depending on the size of the share server and the efficiency of the storage on copying all the data. .. code-block:: console $ openstack share server migration start \ f3089d4f-89e8-4730-b6e6-7cab553df071 stack@dummy2 \ --nondisruptive False --writable True --preserve-snapshots True The parameters description is detailed in the following section. .. note:: This operation doesn't support migrating share servers with shares that have replicas or that belong to share groups. .. note:: The current migration state and progress can be retrieve using the ``migration-get-progress`` command. .. note:: This command has no output. .. _share_server_migration_complete_cli: * ``migration_complete``: completes a migration that already finished the 1st phase. This operation can't be cancelled and might end up on disrupting clients' access after all shares migrate to the new share server. .. code-block:: console $ openstack share server migration complete \ f3089d4f-89e8-4730-b6e6-7cab553df071 +-----------------------------+--------------------------------------+ | Field | Value | +-----------------------------+--------------------------------------+ | destination_share_server_id | f3fb808f-c2a4-4caa-9805-7caaf55c0522 | +-----------------------------+--------------------------------------+ .. _share_server_migration_cancel_cli: * ``migration_cancel``: cancels an in-progress share server migration. This operation can only be started while the migration is still on the 1st phase of the migration. .. code-block:: console $ openstack share server migration cancel \ f3089d4f-89e8-4730-b6e6-7cab553df071 .. note:: This command has no output. .. _share_server_migration_get_progress_cli: * ``migration_get_progress``: obtains the current progress information of a share server migration. .. code-block:: console $ openstack share server migration show \ f3089d4f-89e8-4730-b6e6-7cab553df071 +-----------------------------+--------------------------------------+ | Field | Value | +-----------------------------+--------------------------------------+ | total_progress | 50 | | task_state | migration_driver_in_progress | | destination_share_server_id | f3fb808f-c2a4-4caa-9805-7caaf55c0522 | +-----------------------------+--------------------------------------+ .. _shared_file_systems_share_server_migration_parameters: Migration check and migration start parameters ---------------------------------------------- Share server :ref:`migration_check ` and :ref:`migration_start ` operations have specific parameters that have the semantic detailed below. From these, only ``new_share_network`` stands as an optional parameter. * ``share_server_id``: The ID of the share server that will be migrated. * ``destination_host``: The destination host to which the share server should be migrated to, in format ``host@backend``. * ``preserve_snapshots``: enforces when the preservation of snapshots is mandatory for the requested migration. If the destination host doesn't support it, the operation will be denied. If this parameter is set to ``False``, it will be the driver's supported capability that will define if the snapshots will be preserved or not. .. note:: If the driver doesn't support preserving snapshots but at least one share has a snapshot, the operation will fail and the you will need to manually remove the remaining snapshots before proceeding. * ``writable``: enforces whether the source share server should remain writable for the requested migration. If the destination host doesn't support it, the operation will be denied. If this parameter is set to ``False``, it will be the driver's supported capability that will define if all shares will remain writable or not. * ``nondisruptive``: enforces whether the migration should keep clients connected throughout the migration process. If the destination host doesn't support it, the operation will be denied. If this parameter is set to ``False``, it will be the driver's supported capability that will define if all clients will remain connected or not. In order to appropriately move a share server to a different host, it may be required to change the destination share network to be used by the new share server. In this case, a new share network can be provided using the following optional parameter: * ``new_share_network_id``: specifies the ID of the share network that should be used when setting up the new share server. .. note:: It is not possible to choose the destination share network subnet since it will be automatically selected according to the destination host's availability zone. If the new share network doesn't have a share network subnet in the destination host's availability zone or doesn't have a default subnet, the operation will fail. Configuration ~~~~~~~~~~~~~ For share server migration to work it is necessary to have compatible back end stanzas present in the manila configuration of all ``manila-share`` nodes. Some drivers may provide some driver-specific configuration options that can be changed to adapt to specific workload. Check :ref:`share_drivers` documentation for more details. Important notes ~~~~~~~~~~~~~~~ * Once the migration of a share server has started, the user will see that the status of all associated resources change to ``server_migrating`` and this will block any other share actions, such as adding or removing access rules, creating or deleting snapshots, resizing, among others. * Since this is a driver-assisted migration, there is no guarantee that the destination share server will be cleaned up after a migration failure. For this reason, the destination share server will be always updated to ``error`` if any failure occurs. The same assumption is made for a source share server after a successful migration, where manila updates its status to ``inactive`` to avoid being reused for new shares. * If a failure occurs during the 2nd phase of the migration, you will need to manually identify the current status of the source share server in order to revert it back to ``active`` again. If the share server and all its resources remain healthy, you will need to reset the status using ``reset_status`` API for each affected resource. * Each step in the migration process is saved to the field ``task_state`` present in the share server model. If for any reason the state is not set to ``migration_error`` after a failure, it will need to be reset using the ``reset_task_state`` API, to unlock new share actions. * After a failure occurs, the destination share server will have its status updated to ``error`` and will continue pointing to the original source share server. This can help you to identify the failed share servers when running multiple migrations in parallel. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.844238 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-share-types.rst0000664000175000017500000003614215251045254024455 0ustar00zuulzuul.. _shared_file_systems_share_types: =========== Share types =========== The Shared File System service back-end storage drivers offer a wide range of capabilities. The variation in these capabilities allows cloud administrators to provide a storage service catalog to their end users. Share types can be used to create this storage service catalog. Cloud administrators can influence provisioning of users' shares with the help of Share types. All shares are associated with a share type. Share types are akin to ``flavors`` in the OpenStack Compute service (nova), or ``volume types`` in the OpenStack Block Storage service (cinder), or ``storage classes`` in Kubernetes. You can allow a share type to be accessible to all users in your cloud if you wish. You can also create private share types that allow only users belonging to certain OpenStack projects to access them. You can have an unlimited number of share types in your cloud, but for practical purposes, you may want to create only a handful of publicly accessible share types. Each share type is an object that encompasses ``extra-specs`` (extra specifications). These extra-specs can map to storage back-end capabilities, or can be directives to the service. Consider for example, offering three share types in your cloud to map to "service levels": +--------+--------------------------------------------------------------------------------------------------+ | Type | Capabilities/Instructions | +========+==================================================================================================+ | Gold | Allow creating snapshots, reverting to snapshots and share replication, "thick" provision shares | +--------+--------------------------------------------------------------------------------------------------+ | Silver | Allow creating snapshots, "thin" provision shares | +--------+--------------------------------------------------------------------------------------------------+ | Bronze | Don't allow creating snapshots, "thin" provision shares | +--------+--------------------------------------------------------------------------------------------------+ Capabilities or instructions such as the ones above are coded as extra-specs that your users and the Shared File System service understand. Users in OpenStack projects can see all public share types along with private share types that are made accessible to them. Not all extra-specs that you configure in a share type are visible to your users. This design helps preserve the cloud abstraction. Along with the share type names, they can see the share type descriptions and "tenant-visible" extra-specs. For more details on extra-specs, see :ref:`capabilities_and_extra_specs`. The Shared File Systems service also allows using quota controls with share types. Quotas can help you maintain your SLAs by limiting the number of consumable resources or aid in billing. See :ref:`shared_file_systems_quotas` for more details. Driver Handles Share Servers (DHSS) ----------------------------------- To provide secure and hard multi-tenancy on the network data path, the Shared File Systems service allows users to use their own "share networks". When shares are created on a share network, users can be sure they have their own isolated "share servers" that export their shares on the share network that have the ability plug into user-determined authentication domains ("security services"). Not all Shared File System service storage drivers support share networks. Those that do assert the capability ``driver_handles_share_servers=True``. When creating a share type, you are *required* to set an extra-spec that matches this capability. It is visible to end users. Default Share Type ------------------ When you are operating a cloud where all your tenants are trusted, you may want to create a "default" share type that applies to all of them. It simplifies share creation for your end users since they don't need to worry about share types. Use of a default share type is not recommended in a multi-tenant cloud where you may want to separate your user workloads, or offer different service capabilities. In such instances, you must always encourage your users to specify a share type at share creation time, and not rely on the default share type. .. important:: If you do not create and configure a default share type, users *must* specify a valid share type during share creation, or share creation requests will fail. To configure the default share type, edit the ``manila.conf`` file, and set the configuration option [DEFAULT]/default_share_type. You must then create a share type, using :command:`openstack share type create`: .. code-block:: console openstack share type create [--public | --private] [--description ] [--extra-specs ] where: - ``name`` is the share type name - ``is_public`` defines the visibility for the share type (true/false) - ``description`` is a free form text field to describe the characteristics of the share type for your users' benefit - ``extra-specs`` defines a comma separated set of key=value pairs of optional extra specifications - ``spec_driver_handles_share_servers`` is the mandatory extra-spec (true/false) Share type operations --------------------- To create a new share type you need to specify the name of the new share type. You also require an extra spec ``driver_handles_share_servers``. The new share type can be public or private. .. code-block:: console $ openstack share type create default-shares False \ --description "Default share type for the cloud, no fancy capabilities" $ openstack share type list +--------------------------------------+-----------------------------------+------------+------------+--------------------------------------+-------------------------------------------+---------------------------------------------------------+ | ID | Name | Visibility | Is Default | Required Extra Specs | Optional Extra Specs | Description | +--------------------------------------+-----------------------------------+------------+------------+--------------------------------------+-------------------------------------------+---------------------------------------------------------+ | cf1f92ec-4d0a-4b79-8f18-6bb82c22840a | default-shares | public | - | driver_handles_share_servers : False | | Default share type for the cloud, no fancy capabilities | +--------------------------------------+-----------------------------------+------------+------------+--------------------------------------+-------------------------------------------+---------------------------------------------------------+ $ openstack share type show default-shares +----------------------+---------------------------------------------------------+ | Field | Value | +----------------------+---------------------------------------------------------+ | id | cf1f92ec-4d0a-4b79-8f18-6bb82c22840a | | name | default-shares | | visibility | public | | is_default | NO | | description | Default share type for the cloud, no fancy capabilities | | required_extra_specs | driver_handles_share_servers : False | | Optional Extra Specs | | +----------------------+---------------------------------------------------------+ You did not provide optional capabilities, so they are all *assumed to be off by default*. So, Non-privileged users see some tenant-visible capabilities explicitly. .. code-block:: console $ source demorc $ openstack share type list +--------------------------------------+-----------------------------------+------------+------------+--------------------------------------+--------------------------------------------+---------------------------------------------------------+ | ID | Name | Visibility | Is Default | Required Extra Specs | Optional Extra Specs | Description | +--------------------------------------+-----------------------------------+------------+------------+--------------------------------------+--------------------------------------------+---------------------------------------------------------+ | cf1f92ec-4d0a-4b79-8f18-6bb82c22840a | default-shares | public | - | driver_handles_share_servers : False | snapshot_support : False | Default share type for the cloud, no fancy capabilities | +--------------------------------------+-----------------------------------+------------+------------+--------------------------------------+--------------------------------------------+---------------------------------------------------------+ $ openstack share type show default-shares +----------------------+---------------------------------------------------------+ | Field | Value | +----------------------+---------------------------------------------------------+ | id | cf1f92ec-4d0a-4b79-8f18-6bb82c22840a | | name | default-shares | | visibility | public | | is_default | NO | | description | Default share type for the cloud, no fancy capabilities | | required_extra_specs | driver_handles_share_servers : False | | Optional Extra Specs | snapshot_support : False | | | create_share_from_snapshot_support : False | | | revert_to_snapshot_support : False | | | mount_snapshot_support : False | +----------------------+---------------------------------------------------------+ You can set or unset extra specifications for a share type using **openstack share type set --extra-specs ** command. .. code-block:: console $ openstack share type set default-shares \ --extra-specs snapshot_support=True $ openstack share type show default-shares +----------------------+---------------------------------------------------------+ | Field | Value | +----------------------+---------------------------------------------------------+ | id | cf1f92ec-4d0a-4b79-8f18-6bb82c22840a | | name | default-shares | | visibility | public | | is_default | NO | | description | Default share type for the cloud, no fancy capabilities | | required_extra_specs | driver_handles_share_servers : False | | Optional Extra Specs | snapshot_support : True | +----------------------+---------------------------------------------------------+ Use :command:`openstack share type unset ` to unset an extra specification. .. warning:: Share types are mutable. Any changes to the extra-specs associated with a share type do not affect existing shares of that type. Cloud administrators can update extra-specs at any time, but they must be aware that modifying tenant-visible extra-specs (such as ``availability_zones``, ``snapshot_support``, ``replication_type``, etc.) without also modifying affected properties of pre-existing shares may confuse end users. For example, if you change ``snapshot_support`` from True to False on a share type, shares that were already created with that type will still support snapshots, but users viewing the share type's extra-specs will see ``snapshot_support=False``. A share type can be deleted with the :command:`openstack share type delete ` command. However, a share type can only be deleted if there are no shares, share groups or share group types associated with the share type. .. _share_type_access: Share type access control ------------------------- You can provide access, revoke access, and retrieve list of allowed projects for a specified private share. Create a private type: .. code-block:: console $ openstack share type create my_type1 True \ --public False \ --extra-specs snapshot_support=True +----------------------+--------------------------------------+ | Field | Value | +----------------------+--------------------------------------+ | required_extra_specs | driver_handles_share_servers : True | | Name | my_type1 | | Visibility | private | | is_default | - | | ID | 06793be5-9a79-4516-89fe-61188cad4d6c | | Optional Extra Specs | snapshot_support : True | +----------------------+--------------------------------------+ .. note:: If you run :command:`openstack share type list` only public share types appear. To see private share types, run :command:`openstack share type list --all``. Grant access to created private type for a demo and alt_demo projects by providing their IDs: .. code-block:: console $ openstack share type access create my_type1 \ d8f9af6915404114ae4f30668a4f5ba7 $ openstack share type access create my_type1 \ e4970f57f1824faab2701db61ee7efdf To view information about access for a private share, type ``my_type1``: .. code-block:: console $ openstack share type access list my_type1 +----------------------------------+ | Project_ID | +----------------------------------+ | d8f9af6915404114ae4f30668a4f5ba7 | | e4970f57f1824faab2701db61ee7efdf | +----------------------------------+ After granting access to the share, the users in the allowed projects can see the share type and use it to create shares. To deny access for a specified project, use :command:`openstack share type access delete ` command. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.844238 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-snapshots.rst0000664000175000017500000002733415251045254024236 0ustar00zuulzuul.. _shared_file_systems_snapshots: =============== Share snapshots =============== The Shared File Systems service provides a snapshot mechanism to help users restore data by running the :command:`openstack share snapshot create` command. To export a snapshot, create a share from it, then mount the new share to an instance. Copy files from the attached share into the archive. To import a snapshot, create a new share with appropriate size, attach it to instance, and then copy a file from the archive to the attached file system. .. note:: You cannot delete a share while it has saved dependent snapshots. Create a snapshot from the share: .. code-block:: console $ openstack share snapshot create Share1 --name Snapshot1 \ --description "Snapshot of Share1" +-------------+--------------------------------------+ | Field | Value | +-------------+--------------------------------------+ | id | 962e8126-35c3-47bb-8c00-f0ee37f42ddd | | share_id | aca648eb-8c03-4394-a5cc-755066b7eb66 | | share_size | 1 | | created_at | 2026-03-31T05:27:38.188948 | | status | creating | | name | Snapshot1 | | description | Snapshot of Share1 | | size | 1 | | share_proto | NFS | | user_id | 5c7bdb6eb0504d54a619acf8375c08ce | | project_id | cadd7139bc3148b8973df097c0911016 | | metadata | {} | +-------------+--------------------------------------+ Update snapshot name or description if needed: .. code-block:: console $ openstack share snapshot set Snapshot1 --name Snapshot_1 \ --description "Snapshot of Share1. Updated." Check that status of a snapshot is ``available``: .. code-block:: console $ openstack share snapshot show Snapshot1 +-------------+--------------------------------------+ | Field | Value | +-------------+--------------------------------------+ | id | 962e8126-35c3-47bb-8c00-f0ee37f42ddd | | share_id | aca648eb-8c03-4394-a5cc-755066b7eb66 | | share_size | 1 | | created_at | 2026-03-31T05:27:38.188948 | | status | available | | name | Snapshot1 | | description | Snapshot of Share1 | | size | 1 | | share_proto | NFS | | user_id | 5c7bdb6eb0504d54a619acf8375c08ce | | project_id | cadd7139bc3148b8973df097c0911016 | | properties | | +-------------+--------------------------------------+ To create a copy of your data from a snapshot, use :command:`openstack share create` with key ``--snapshot-id``. This creates a new share from an existing snapshot. Create a share from a snapshot and check whether it is available: .. code-block:: console $ openstack share create nfs 1 --name Share2 --property source=snapshot \ --description "Share from a snapshot." \ --snapshot-id 962e8126-35c3-47bb-8c00-f0ee37f42ddd +---------------------------------------+--------------------------------------+ | Field | Value | +---------------------------------------+--------------------------------------+ | id | b6b0617c-ea51-4450-848e-e7cff69238c7 | | size | 1 | | availability_zone | nova | | created_at | 2026-03-31T06:25:50.309282 | | status | creating | | name | Share2 | | description | Share from a snapshot. | | project_id | 20787a7ba11946adad976463b57d8a2f | | snapshot_id | 962e8126-35c3-47bb-8c00-f0ee37f42ddd | | share_network_id | None | | share_proto | NFS | | metadata | {'source': 'snapshot'} | | share_type | c0086582-30a6-4060-b096-a42ec9d66b86 | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | default | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | 5c7bdb6eb0504d54a619acf8375c08ce | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | None | +---------------------------------------+--------------------------------------+ $ openstack share show Share2 +---------------------------------------+---------------------------------------------------------------+ | Field | Value | +---------------------------------------+---------------------------------------------------------------+ | id | b6b0617c-ea51-4450-848e-e7cff69238c7 | | size | 1 | | availability_zone | nova | | created_at | 2026-03-31T06:25:50.309282 | | status | available | | name | Share2 | | description | Share from a snapshot. | | project_id | 20787a7ba11946adad976463b57d8a2f | | snapshot_id | 962e8126-35c3-47bb-8c00-f0ee37f42ddd | | share_network_id | None | | share_proto | NFS | | share_type | c0086582-30a6-4060-b096-a42ec9d66b86 | | is_public | False | | snapshot_support | True | | task_state | None | | share_type_name | default | | access_rules_status | active | | replication_type | None | | has_replicas | False | | user_id | 5c7bdb6eb0504d54a619acf8375c08ce | | create_share_from_snapshot_support | True | | revert_to_snapshot_support | True | | share_group_id | None | | source_share_group_snapshot_member_id | None | | mount_snapshot_support | True | | progress | 100% | | export_locations | | | | id = 33d0964d-a968-40d5-97c4-b9371f580e46 | | | path = 203.0.113.3:/shares/share-1dc2a471-3d47-4e1a-bf6c-bd01 | | | preferred = True | | properties | source='snapshot' | +---------------------------------------+---------------------------------------------------------------+ By default, the Shared File Systems service will place the new share in the source share's pool, unless a different destination availability zone is provided by the user, using the key ``--availability-zone``. Starting from Ussuri release, a new filter and weigher were added to the scheduler to enhance the selection of a destination pool when creating shares from snapshot. Drivers that support creating shares from snapshots across back ends also need the back end configuration option ``replication_domain`` to be specified. This option can be an arbitrary string. As an administrator, you are expected to determine which back ends are compatible to copy data between each other. Once you have identified these back ends, configure ``replication_domain`` in their respective configuration sections to the same string. Refer to the :ref:`feature support mapping ` for identifying which back ends support this feature. The use of scheduler when creating share from a snapshot must be enabled using the configuration flag ``[DEFAULT]/use_scheduler_creating_share_from_snapshot``. This option is disabled by default. .. note:: When combining both ``--snapshot-id`` and ``--availability-zone`` keys, you'll need to make sure that the configuration flag ``[DEFAULT]/use_scheduler_creating_share_from_snapshot`` is enabled, or the operation will be denied when source and destination availability zones are different. You can soft-delete a snapshot using :command:`openstack share snapshot delete `. If a snapshot is in busy state, and during the delete an ``error_deleting`` status appeared, administrator can force-delete it or explicitly reset the state. Use :command:`openstack share snapshot set --status ` to update the state of a snapshot explicitly. A valid value of a status are ``available``, ``error``, ``creating``, ``deleting``, ``error_deleting``. If no status is provided, the ``available`` status will be used. Use :command:`openstack share snapshot delete --force ` to force-delete a specified share snapshot in any state. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.844238 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-telemetry.rst0000664000175000017500000000521115251045254024214 0ustar00zuulzuul.. _shared_file_systems_telemetry: Shared File Systems Telemetry ============================= Overview -------- Telemetry in the Shared File Systems service (Manila) allows operators to collect and monitor metrics related to shared file systems. These metrics help track resource usage, monitor performance, and support billing and auditing use cases. In OpenStack deployments, telemetry is typically provided by services such as Ceilometer and Prometheus-based telemetry systems. These services collect and store metric data generated from notifications emitted by Manila. Configuration ------------- To enable telemetry notifications in the Shared File Systems service, configure the following options in ``manila.conf``: - ``[oslo_messaging_notifications] driver`` must be set (for example, ``messagingv2``) for notifications to be emitted. - ``[oslo_messaging_notifications] topics`` defaults to ``notifications``. - ``[DEFAULT] enable_gathering_share_usage_size`` must be set to ``True`` to emit periodic usage metrics. The default value is ``False``. - ``[DEFAULT] share_usage_size_update_interval`` defines the polling interval in seconds. The default value is ``300``. Notifications ------------- The Shared File Systems service emits notifications via ``oslo_messaging`` for various lifecycle events, including: - ``share.create.start`` and ``share.create.end`` - ``share.delete.start`` and ``share.delete.end`` - ``share.extend.start`` and ``share.extend.end`` - ``share.shrink.start`` and ``share.shrink.end`` Additionally, periodic usage metrics are emitted. The corresponding Ceilometer meter for share size is: - ``manila.share.size`` Snapshot-related notifications are currently not emitted by the service. Ceilometer Metrics ------------------ If using Ceilometer, operators can access metrics derived from notifications. See: `Ceilometer telemetry measurements `_ Retrieving Metrics ------------------ Telemetry data collected from the Shared File Systems service can be accessed using OpenStack command-line tools when telemetry services are configured. To list available metrics: .. code-block:: bash openstack metric list To view details of a specific metric: .. code-block:: bash openstack metric show To retrieve measurements for a metric: .. code-block:: bash openstack metric measures show Notes ----- Ensure that telemetry services are properly configured and integrated with the Shared File Systems service. Without proper configuration, metrics may not be collected or available for querying. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.844238 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-troubleshoot.rst0000664000175000017500000000455615251045254024746 0ustar00zuulzuul.. _shared_file_systems_troubleshoot: ======================================== Troubleshoot Shared File Systems service ======================================== Failures in Share File Systems service during a share creation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Problem ------- New shares can enter ``error`` state during the creation process. Solution -------- #. Make sure, that share services are running in debug mode. If the debug mode is not set, you will not get any tips from logs how to fix your issue. #. Find what share service holds a specified share. To do that, run command :command:`openstack share show ` and find a share host in the output. Host uniquely identifies what share service holds the broken share. #. Look thought logs of this share service. Usually, it can be found at ``/etc/var/log/manila-share.log``. This log should contain kind of traceback with extra information to help you to find the origin of issues. No valid host was found ~~~~~~~~~~~~~~~~~~~~~~~ Problem ------- If a share type contains invalid extra specs, the scheduler will not be able to locate a valid host for the shares. Solution -------- To diagnose this issue, make sure that scheduler service is running in debug mode. Try to create a new share and look for message ``Failed to schedule create_share: No valid host was found.`` in ``/etc/var/log/manila-scheduler.log``. To solve this issue look carefully through the list of extra specs in the share type, and the list of share services reported capabilities. Make sure that extra specs are pointed in the right way. Created share is unreachable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Problem ------- By default, a new share does not have any active access rules. Solution -------- To provide access to new share, you need to create appropriate access rule with the right value. The value must defines access. Failures during management of internal resources ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Problem ------- The Shared File System service manages internal resources effectively. Administrators may need to manually adjust internal resources to handle failures. Solution -------- Some drivers in the Shared File Systems service can create service entities, like servers and networks. If it is necessary, you can log in to project ``service`` and take manual control over it. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.844238 manila-23.0.0.0rc1/doc/source/admin/shared-file-systems-upgrades.rst0000664000175000017500000001367715251045254024033 0ustar00zuulzuulUpgrading the Shared File System service ======================================== This document outlines steps and notes for operators for reference when upgrading their Shared File System service (manila) from previous versions of OpenStack. The service aims to provide a minimal downtime upgrade experience. Since the service does not operate in the data plane, the accessibility of any provisioned resources such as shares, share snapshots, share groups, share replicas, share servers, security services and share networks will not be affected during an upgrade. Clients can continue to actively use these resources while the service control plane is being upgraded. Plan the upgrade ---------------- It is highly recommended that you: * update the Shared File System service to the latest code from the release you are currently using. * read the `Shared File System service release notes `_ for the release that you intended to upgrade to. Pay special attention to the deprecations and upgrade notes. * consider the impact of the service control plane upgrade to your cloud's users. The upgrade process interrupts provisioning of new shared file systems and associated resources. It also prevents management operations on existing shared file systems and associated resources. Data path access to shared file systems will remain uninterrupted. * take a backup of the shared file system service database so you can rollback any failed upgrades to a previous version of the software. Although the ``manila-manage`` command offers a database downgrade command, it is not supported for production use. The only way to recover from a failed update is to restore the database from a backup. * identify your Shared File System service back end storage systems/solutions and their drivers. Ensure that the version of each storage system is supported by the respective driver in the target release. If you're using a storage solution from a third party vendor, consult their product pages to determine if the solution is supported by the release of OpenStack that you are upgrading to. Many vendors publish a support matrix either within this service administration guide, or on their own websites. If you find an incompatibility, stop, and determine if you have to upgrade the storage solution first. * develop an upgrade procedure and assess it thoroughly by using a test environment similar to your production environment. Graceful service shutdown ------------------------- Shared File System service components (scheduler, share-manager, data-manager) are python processes listening for messages on a AMQP queue. When the operator sends SIGTERM signal to the process, they stop getting new work from the queue, complete any outstanding work and then terminate. Database Migration ------------------ The Shared File System service only supports cold upgrades, meaning that the service plane is expected to be down during the database upgrade. Database upgrades include schema changes as well as data migrations to accommodate newer versions of the schema. Once upgraded, downgrading the database is not supported. When the database has been upgraded, older services may misbehave when accessing database objects, so ensure all ``manila-*`` services are down before you upgrade the database. Prune deleted database rows --------------------------- Shared File System service resources are soft deleted in the database, so users are able to track instances in the DB that are created and destroyed in production. Soft-deletion also helps cloud operators adhere to data retention policies. Not purging soft-deleted entries affects DB performance as indices grow very large and data migrations take longer as there is more data to migrate. It is recommended that you prune the service database before upgrading to prevent unnecessary data migrations. Pruning permanently deletes soft deleted database records. .. code:: manila-manage db purge Upgrade procedure ----------------- #. Ensure you're running the latest Shared File System service packages for the OpenStack release that you currently use. #. Run the ``manila-status upgrade check`` command to validate that the service is ready for upgrade. #. Backup the manila database #. Gracefully stop all Shared File System service processes. We recommend in this order: manila-api, manila-scheduler, manila-share and manila-data. .. note:: The manila-data service may be processing time consuming data migrations. Shutting it down will interrupt any ongoing migrations, and these will not be automatically started when the service comes back up. You can check the status on ongoing migrations with ``openstack share migration show`` command; issue ``openstack share migration complete`` for any ongoing migrations that have completed their data copy phase. #. Upgrade all the service packages. If upgrading from distribution packages, your system package manager is expected to handle this automatically. #. Fix any deprecated configuration options used. #. Fix any deprecated api policies used. #. Run ``manila-manage db sync`` from any node with the latest manila packages. #. Start all the Shared File System service processes. #. Inspect the ``services`` by running ``openstack share service list``. If there are any orphaned records, run ``manila-manage service cleanup`` to delete them. Upgrade testing --------------- The Shared File System service code is continually tested for upgrade from a previous release to the current release using `Grenade `_. Grenade is an OpenStack test harness project that validates upgrade scenarios between releases. It uses DevStack to initially perform a base OpenStack install and then upgrade to a target version. Tests include the creation of a variety of Shared File System service resources on the prior release, and verification for their existence and functionality after the upgrade. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8452384 manila-23.0.0.0rc1/doc/source/admin/tegile_driver.rst0000664000175000017500000001613515251045254021147 0ustar00zuulzuul.. Copyright (c) 2016 Tegile Systems Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Tegile Driver ============= The Tegile Manila driver uses Tegile IntelliFlash Arrays to provide shared filesystems to OpenStack. The Tegile Driver interfaces with a Tegile Array via the REST API. Requirements ------------ - Tegile IntelliFlash version 3.5.1 - For using CIFS, Active Directory must be configured in the Tegile Array. Supported Operations -------------------- The following operations are supported on a Tegile Array: * Create CIFS/NFS Share * Delete CIFS/NFS Share * Allow CIFS/NFS Share access * Only IP access type is supported for NFS * USER access type is supported for NFS and CIFS * RW and RO access supported * Deny CIFS/NFS Share access * IP access type is supported for NFS * USER access type is supported for NFS and CIFS * Create snapshot * Delete snapshot * Extend share * Shrink share * Create share from snapshot Backend Configuration --------------------- The following parameters need to be configured in the [DEFAULT] section of */etc/manila/manila.conf*: +-----------------------------------------------------------------------------------------------------------------------------------+ | [DEFAULT] | +============================+======================================================================================================+ | **Option** | **Description** | +----------------------------+-----------+------------------------------------------------------------------------------------------+ | enabled_share_backends | Name of the section on manila.conf used to specify a backend. | | | E.g. *enabled_share_backends = tegileNAS* | +----------------------------+------------------------------------------------------------------------------------------------------+ | enabled_share_protocols | Specify a list of protocols to be allowed for share creation. For Tegile driver this can be: | | | *NFS* or *CIFS* or *NFS, CIFS*. | +----------------------------+------------------------------------------------------------------------------------------------------+ The following parameters need to be configured in the [backend] section of */etc/manila/manila.conf*: +-------------------------------------------------------------------------------------------------------------------------------------+ | [tegileNAS] | +===============================+=====================================================================================================+ | **Option** | **Description** | +-------------------------------+-----------------------------------------------------------------------------------------------------+ | share_backend_name | A name for the backend. | +-------------------------------+-----------------------------------------------------------------------------------------------------+ | share_driver | Python module path. For Tegile driver this must be: | | | *manila.share.drivers.tegile.tegile.TegileShareDriver*. | +-------------------------------+-----------------------------------------------------------------------------------------------------+ | driver_handles_share_servers| DHSS, Driver working mode. For Tegile driver **this must be**: | | | *False*. | +-------------------------------+-----------------------------------------------------------------------------------------------------+ | tegile_nas_server | Tegile array IP to connect from the Manila node. | +-------------------------------+-----------------------------------------------------------------------------------------------------+ | tegile_nas_login | This field is used to provide username credential to Tegile array. | +-------------------------------+-----------------------------------------------------------------------------------------------------+ | tegile_nas_password | This field is used to provide password credential to Tegile array. | +-------------------------------+-----------------------------------------------------------------------------------------------------+ | tegile_default_project | This field can be used to specify the default project in Tegile array where shares are created. | | | This field is optional. | +-------------------------------+-----------------------------------------------------------------------------------------------------+ Below is an example of a valid configuration of Tegile driver: | ``[DEFAULT]`` | ``enabled_share_backends = tegileNAS`` | ``enabled_share_protocols = NFS,CIFS`` | ``[tegileNAS]`` | ``driver_handles_share_servers = False`` | ``share_backend_name = tegileNAS`` | ``share_driver = manila.share.drivers.tegile.tegile.TegileShareDriver`` | ``tegile_nas_server = 10.12.14.16`` | ``tegile_nas_login = admin`` | ``tegile_nas_password = password`` | ``tegile_default_project = financeshares`` Restart of :term:`manila-share` service is needed for the configuration changes to take effect. Restrictions ------------ The Tegile driver has the following restrictions: - IP access type is supported only for NFS. - Only FLAT network is supported. The :mod:`manila.share.drivers.tegile.tegile` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.tegile.tegile :noindex: :members: :undoc-members: :show-inheritance: :exclude-members: TegileAPIExecutor, debugger ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8452384 manila-23.0.0.0rc1/doc/source/admin/weka_share_driver.rst0000664000175000017500000002442315251045254022006 0ustar00zuulzuul.. Copyright 2026 Weka.IO Ltd. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================= Weka Share Driver ================= The Weka share driver allows OpenStack Manila to use `Weka `_ as a shared-file-system backend. It exposes Weka filesystems as Manila shares and supports two access protocols: * **WEKAFS** (primary) -- the WekaFS POSIX kernel client mounted directly on the Manila host. Delivers sub-250 us latency and full POSIX semantics. Requires the WekaFS kernel module to be installed on the Manila host. * **NFS** (secondary) -- standard NFS v3 exports via Weka's built-in NFS gateway. Works on all Linux kernel versions with no additional client software. The driver operates in ``driver_handles_share_servers=False`` mode and maps each Manila share to one Weka filesystem. .. note:: The WekaFS kernel module does not compile on Linux kernel 6.17 or later due to a breaking change in ``inode_operations``. Use the NFS protocol or pin the host kernel below 6.17 when running on affected distributions. Architecture ------------ :: Manila ShareDriver API | v WekaShareDriver (manila/share/drivers/weka/driver.py) | +-- WekaApiClient -- REST calls to the Weka cluster (port 14000) | +-- WekaMount -- WekaFS POSIX mount management on the host | +-- privsep -- mount/umount/rsync as root Implementation notes that matter when reading or extending the driver: * All Weka API calls exchange **bytes**; conversion to and from GiB happens in the driver. * Every create and delete is idempotent -- already-exists and not-found conditions are handled silently, so a retried request converges. * The Manila share UUID is the Weka filesystem name, prefixed with ``weka_share_name_prefix``. * The Weka filesystem UID is recorded in the share's export metadata, so later operations resolve the filesystem directly instead of scanning every filesystem on the cluster. WEKAFS Tenant Isolation ~~~~~~~~~~~~~~~~~~~~~~~ WEKAFS shares are isolated per tenant, and the isolation is mandatory -- there is no option to disable it. Each Manila project is mapped to its own Weka organization named ````, and WEKAFS filesystems are created inside that organization with authentication required. A mount token scoped to one project therefore cannot mount another project's shares: the boundary is enforced by the Weka cluster, not by the driver. This requires a multi-tenant Weka cluster and the ``weka_org_admin_secret`` option. Each organization's admin password is derived deterministically as ``HMAC-SHA256(weka_org_admin_secret, project_id)``, so the driver stores no per-tenant secret. The driver refuses to start when the secret is unset. .. warning:: Keep ``weka_org_admin_secret`` stable. Rotating it changes every derived password and invalidates the logins of organizations already created. Within the organization the driver also creates a least-privilege *mount user* named ``-mnt``. Its password is returned to the tenant as the ``access_key`` of each WEKAFS access rule, so tenants mount their own shares with no operator hand-off. Prerequisites ------------- * **Weka cluster** version 5.0 or later (tested against 5.1.x), configured for multi-tenancy (required for WEKAFS shares). * **OpenStack Manila** — the driver is introduced in the Hibiscus release. * Network connectivity from the Manila host to the Weka cluster on TCP port **14000** (REST API). * For WEKAFS protocol shares only: the WekaFS client package must be installed on the Manila host and the ``wekafsio`` kernel module loaded: .. code-block:: console $ sudo modprobe wekafsio $ lsmod | grep wekafsio # verify Supported Operations -------------------- * Create and delete shares * Extend and shrink shares * Ensure shares (re-mount on service restart) * Create, delete, and revert-to snapshots * Create shares from snapshots * Manage and unmanage existing shares * Report share statistics and capacity Access Rules ~~~~~~~~~~~~ For WEKAFS shares, each ``ip`` rule is mapped to a per-filesystem Weka security policy that admits only the client source addresses it names and denies all others at native mount time. ``--access-level`` is honored: an ``ro`` rule installs a read-only policy. Alternatively, a share type may reference a shared, reusable policy group through the ``weka:security_policy_group`` extra spec, whose contents are defined by the ``weka_security_policy_group`` configuration option. One policy object then serves every share of that type, which keeps a large deployment within the cluster's policy budget. NFS shares use IP-based access rules backed by Weka client groups and export permissions. For both protocols, ``ip`` rules are IPv4-only. The driver reports ``ipv6_implemented = False``, and an IPv6 rule that reaches it anyway is logged and ignored rather than applied. Access Rule Reconciliation ^^^^^^^^^^^^^^^^^^^^^^^^^^ ``update_access`` honors both modes of the Manila driver contract. In incremental mode the driver applies ``add_rules``, ``delete_rules`` and ``update_rules``. When ``add_rules`` and ``delete_rules`` are both empty -- as they are when the access level changes for every rule on a share -- the driver instead reconciles the backend down to ``access_rules``, removing the export permissions, client groups and security-policy addresses that no longer correspond to a rule. A revoked rule therefore cannot leave working access behind on the cluster. Shares whose share type sets ``weka:security_policy_group`` are exempt from reconciliation: those policies are shared between shares, so reconciling one share's rules against them would revoke access for the others. Configuration ------------- The driver ships with Manila; no separate installation is required. Enable it by adding a Weka backend section to ``manila.conf`` (see below). Install WekaFS Kernel Module (WEKAFS protocol only) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Download and install the WekaFS client package from your Weka cluster: .. code-block:: console $ curl -k -o weka-client.tar \ https://:14000/dist/v1/install/ $ tar xf weka-client.tar $ sudo ./install.sh $ sudo modprobe wekafsio $ echo "wekafsio" | sudo tee /etc/modules-load.d/wekafs.conf Configure ``manila.conf`` ~~~~~~~~~~~~~~~~~~~~~~~~~ Add a ``[weka]`` backend section to ``manila.conf``: .. code-block:: ini [DEFAULT] enabled_share_backends = weka enabled_share_protocols = NFS,WEKAFS [weka] share_driver = manila.share.drivers.weka.driver.WekaShareDriver share_backend_name = weka driver_handles_share_servers = false # Connection weka_api_server = weka-cluster.example.com weka_api_port = 14000 weka_ssl_verify = true # Authentication weka_username = manila-driver weka_password = your-password-here weka_organization = Root # WEKAFS per-tenant isolation (required for WEKAFS shares) weka_org_admin_secret = a-long-random-secret # Filesystem management weka_filesystem_group = default weka_share_name_prefix = manila_ # POSIX client (WEKAFS protocol only) weka_mount_point_base = /mnt/weka weka_num_cores = 1 Configuration Options ~~~~~~~~~~~~~~~~~~~~~ The driver's options are registered in ``manila/opts.py``, so the full list with types and defaults is rendered into the sample ``manila.conf`` and the configuration reference. Share Type Extra Specs ~~~~~~~~~~~~~~~~~~~~~~ .. list-table:: :header-rows: 1 :widths: 30 70 * - Extra Spec - Description * - ``weka:security_policy_group`` - Name of a group defined in ``weka_security_policy_group``. WEKAFS shares of this type are created with the group's Allow policies attached and are exempt from per-share rule reconciliation. Known Limitations ----------------- * ``ip`` access rules are IPv4-only on both protocols. An IPv6 rule is reported in the ``error`` state rather than applied. * WEKAFS shares require a multi-tenant Weka cluster. Tenant isolation cannot be turned off. * Shares are thick-provisioned (the filesystem reserves its full size). Thin provisioning and QoS are planned as future enhancements, exposed through share-type extra specs. * ``create_share_from_snapshot`` runs asynchronously: the share is reported ``creating_from_snapshot`` until the data copy completes. The copy uses the WekaFS POSIX client for WEKAFS shares and ``rsync`` over the NFS gateway for NFS shares, so copy time scales with snapshot size. If ``manila-share`` restarts mid-copy the in-memory progress is lost and the share is reported ``error``; delete it and retry. * The WekaFS kernel module is incompatible with Linux kernel 6.17 or later. Use the NFS protocol or pin the host kernel below 6.17. Troubleshooting --------------- ``WekaMountError: mount command failed`` The WekaFS kernel module is not loaded. Run ``modprobe wekafsio``. ``WekaAuthError: Weka authentication failed`` Verify ``weka_username``, ``weka_password``, and ``weka_organization`` in ``manila.conf``. ``WekaConfigurationError: weka_org_admin_secret must be set`` WEKAFS shares are always created with per-tenant organization isolation, which derives per-org credentials from this secret. Set ``weka_org_admin_secret`` in the backend section and restart ``manila-share``. ``ShareShrinkingPossibleDataLoss`` The filesystem contains more data than the requested target size. Free space on the share before shrinking. ``FileSystemNotFound`` errors in ``ensure_share`` The Weka filesystem was deleted outside Manila. Either restore it or remove the share from Manila with ``openstack share delete ``. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8452384 manila-23.0.0.0rc1/doc/source/admin/zadara_driver.rst0000664000175000017500000001121515251045254021132 0ustar00zuulzuul.. Copyright (c) 2021 Zadara Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ======================================= Zadara VPSA Driver for OpenStack Manila ======================================= `Zadara’s `__ Virtual Private Storage Array (VPSA) is the first software defined, Enterprise-Storage-as-a-Service. It is an elastic and private block and file storage system which provides enterprise-grade data protection and data management storage services. Manila VPSA driver provides a seamless management capabilities for VPSA volumes, in this case, NFS & SMB volumes without losing the added value provided by the VPSA Storage Array/Flash-Array. Requirements ------------ - VPSA Storage Array/Flash-Array running version 20.12 or higher. - Networking preparation - the Zadara VPSA driver for Manila support DHSS=False (driver_handles_share_servers), the driver does not handle the network configuration, it is up to the administrator to ensure connectivity from a manila-share node and the Openstack cloud to the VPSA Front-End network (such as neutron flat/VLAN network). Supported shared filesystems and operations ------------------------------------------- Share file system supported ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - SMB (CIFS) - NFS Supported operations ~~~~~~~~~~~~~~~~~~~~ The following operations are supported: - Create a share. - Delete a share. - Extend a share. - Create a snapshot. - Delete a snapshot. - Create a share from snapshot. - Allow share access. - Manage a share. .. note:: - Only IP access type is supported - Both RW and RO access levels supported Backend Configuration ~~~~~~~~~~~~~~~~~~~~~ The following parameters need to be configured in the [DEFAULT] section of manila configuration (/etc/manila/manila.conf): - `enabled_share_backends` = Name of the section on manila.conf used to specify a backend i.e. *enabled_share_backends = zadaravpsa* - `enabled_share_protocols` - Specify a list of protocols to be allowed for share creation. The VPSA driver support the following options: *NFS* or *CIFS* or *NFS, CIFS* The following parameters need to be configured in the [backend] section of manila configuration (/etc/manila/manila.conf): Driver options -------------- - `zadara_vpsa_host` = - `zadara_vpsa_port` = - `zadara_vpsa_use_ssl` = - `zadara_driver_ssl_cert_path` = - `zadara_vpsa_poolname` - - `zadara_vol_encrypt` = - `zadara_gen3_vol_compress` = - `zadara_share_name_template` = - `zadara_share_snap_name_template` = - `driver_handles_share_servers` = - `share_driver` = manila.share.drivers.zadara.zadara.ZadaraVPSAShareDriver Back-end configuration example ------------------------------ .. code-block:: ini [DEFAULT] enabled_share_backends = zadaravpsa enabled_share_protocols = NFS,CIFS [zadaravpsa] driver_handles_share_servers = False zadara_vpsa_host = vsa-00000010-mycloud.zadaravpsa.com zadara_vpsa_port = 443 zadara_access_key = MYSUPERSECRETACCESSKEY zadara_vpsa_poolname = pool-00010001 share_backend_name = zadaravpsa zadara_vpsa_use_ssl = true share_driver = manila.share.drivers.zadara.zadara.ZadaraVPSAShareDriver ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8452384 manila-23.0.0.0rc1/doc/source/admin/zfs_on_linux_driver.rst0000664000175000017500000001354215251045254022412 0ustar00zuulzuul.. Copyright (c) 2016 Mirantis Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ZFS (on Linux) Driver ===================== Manila ZFSonLinux share driver uses ZFS filesystem for exporting NFS shares. Written and tested using Linux version of ZFS. Requirements ------------ * 'NFS' daemon that can be handled via "exportfs" app. * 'ZFS' filesystem packages, either Kernel or FUSE versions. * ZFS zpools that are going to be used by Manila should exist and be configured as desired. Manila will not change zpool configuration. * For remote ZFS hosts according to manila-share service host SSH should be installed. * For ZFS hosts that support replication: * SSH access for each other should be passwordless. * Service IP addresses should be available by ZFS hosts for each other. Supported Operations -------------------- The following operations are supported: * Create NFS Share * Delete NFS Share * Manage NFS Share * Unmanage NFS Share * Allow NFS Share access * Only IP access type is supported for NFS * Both access levels are supported - 'RW' and 'RO' * Deny NFS Share access * Create snapshot * Delete snapshot * Manage snapshot * Unmanage snapshot * Create share from snapshot * Extend share * Shrink share * Replication: * Create/update/delete/promote replica operations are supported * Share migration (experimental) Possibilities ------------- * Any amount of ZFS zpools can be used by share driver. * Allowed to configure default options for ZFS datasets that are used for share creation. * Any amount of nested datasets is allowed to be used. * All share replicas are read-only, only active one is RW. * All share replicas are synchronized periodically, not continuously. So, status 'in_sync' means latest sync was successful. Time range between syncs equals to value of config global opt 'replica_state_update_interval'. * Driver is able to use qualified extra spec 'zfsonlinux:compression'. It can contain any value that is supported by used ZFS app. But if it is disabled via config option with value 'compression=off', then it will not be used. Restrictions ------------ The ZFSonLinux share driver has the following restrictions: * Only IP access type is supported for NFS. * Only FLAT network is supported. * 'Promote share replica' operation will switch roles of current 'secondary' replica and 'active'. It does not make more than one active replica available. * 'SaMBa' based sharing is not yet implemented. * 'Thick provisioning' is not yet implemented. Known problems -------------- * 'Promote share replica' operation will make ZFS filesystem that became secondary as RO only on NFS level. On ZFS level system will stay mounted as was - RW. Backend Configuration --------------------- The following parameters need to be configured in the manila configuration file for the ZFSonLinux driver: * share_driver = manila.share.drivers.zfsonlinux.driver.ZFSonLinuxShareDriver * driver_handles_share_servers = False * replication_domain = custom_str_value_as_domain_name * if empty, then replication will be disabled * if set then will be able to be used as replication peer for other backend with same value. * zfs_share_export_ip = * zfs_service_ip = * zfs_zpool_list = zpoolname1,zpoolname2/nested_dataset_for_zpool2 * can be one or more zpools * can contain nested datasets * zfs_dataset_creation_options = * readonly,quota,sharenfs and sharesmb options will be ignored * zfs_dataset_name_prefix = * Prefix to be used in each dataset name. * zfs_dataset_snapshot_name_prefix = * Prefix to be used in each dataset snapshot name. * zfs_use_ssh = * set 'False' if ZFS located on the same host as 'manila-share' service * set 'True' if 'manila-share' service should use SSH for ZFS configuration * zfs_ssh_username = * required for replication operations * required for SSH'ing to ZFS host if 'zfs_use_ssh' is set to 'True' * zfs_ssh_user_password = * password for 'zfs_ssh_username' of ZFS host. * used only if 'zfs_use_ssh' is set to 'True' * zfs_ssh_private_key_path = * used only if 'zfs_use_ssh' is set to 'True' * zfs_share_helpers = NFS=manila.share.drivers.zfsonlinux.utils.NFSviaZFSHelper * Approach for setting up helpers is similar to various other share driver * At least one helper should be used. * zfs_replica_snapshot_prefix = * Prefix to be used in dataset snapshot names that are created by 'update replica' operation. * zfs_migration_snapshot_prefix = * Prefix to be used in dataset snapshot names that are created for 'migration' operation. Restart of :term:`manila-share` service is needed for the configuration changes to take effect. The :mod:`manila.share.drivers.zfsonlinux.driver` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.zfsonlinux.driver :noindex: :members: :undoc-members: :show-inheritance: The :mod:`manila.share.drivers.zfsonlinux.utils` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.zfsonlinux.utils :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.022185 manila-23.0.0.0rc1/doc/source/cli/0000775000175000017500000000000015251045336015243 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8462386 manila-23.0.0.0rc1/doc/source/cli/index.rst0000664000175000017500000000130415251045254017101 0ustar00zuulzuul.. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Command Line Interface ---------------------- .. toctree:: :maxdepth: 1 manila manila-manage manila-status ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8462386 manila-23.0.0.0rc1/doc/source/cli/manila-manage.rst0000664000175000017500000001244015251045254020464 0ustar00zuulzuul============= manila-manage ============= ------------------------------------- control and manage shared filesystems ------------------------------------- :Author: openstack-discuss@lists.openstack.org :Copyright: OpenStack LLC :Manual section: 1 :Manual group: shared filesystems SYNOPSIS ======== manila-manage [] DESCRIPTION =========== manila-manage controls shared filesystems service. More information about OpenStack Manila is at https://wiki.openstack.org/wiki/Manila OPTIONS ======= The standard pattern for executing a manila-manage command is: ``manila-manage []`` For example, to obtain a list of all hosts: ``manila-manage host list`` Run without arguments to see a list of available command categories: ``manila-manage`` Categories are shell, logs, service, db, host, version, config, share, and share_server. Global Options ============== ``--config-dir DIR`` Path to a config directory to pull `*.conf` files from. The set is parsed after `--config-file` arguments. ``--config-file PATH`` Path to a config file to use. Multiple config files can be specified, with values in later files taking precedence. ``--debug, -d`` Set logging level to DEBUG instead of the default INFO level. ``--log-config-append PATH`` Append a logging configuration file. If set, other logging options are ignored. ``--log-date-format DATE_FORMAT`` Defines the format string for %(asctime)s in log records. ``--log-dir LOG_DIR`` The base directory used for relative log_file paths. ``--log-file PATH`` Name of the log file to send logging output to. ``--use-journal / --nouse-journal`` Enable or disable journald for logging. ``--use-json / --nouse-json`` Enable or disable JSON formatting for logs. ``--use-syslog / --nouse-syslog`` Enable or disable syslog for logging. ``--watch-log-file / --nowatch-log-file`` Monitor log file changes. ``--shell_completion SHELL_COMPLETION`` Display a shell completion script (allowed values: bash, zsh). ``--state_path STATE_PATH`` Top-level directory for maintaining Manila's state. ``--syslog-log-facility SYSLOG_LOG_FACILITY`` Syslog facility to receive log lines. ``--version`` Show program version and exit. Manila Db ~~~~~~~~~ ``manila-manage db version`` Print the current database version. ``manila-manage db sync`` Sync the database up to the most recent version. This is the standard way to create the db as well. ``manila-manage db downgrade `` Downgrade database to given version. ``manila-manage db stamp `` Stamp database with given version. ``manila-manage db revision `` Generate new migration. ``manila-manage db purge `` Purge deleted rows older than a given age from Manila database tables. If age_in_days is not given or is specified as 0 all available rows will be deleted. Manila Logs ~~~~~~~~~~~ ``manila-manage logs errors`` Displays Manila errors from log files. ``manila-manage logs syslog `` Displays Manila alerts from syslog. Manila Shell ~~~~~~~~~~~~ ``manila-manage shell bpython`` Starts a new bpython shell. ``manila-manage shell ipython`` Starts a new ipython shell. ``manila-manage shell python`` Starts a new python shell. ``manila-manage shell run`` Starts a new shell using python. ``manila-manage shell script `` Runs the named script from the specified path with flags set. Manila Host ~~~~~~~~~~~ ``manila-manage host list`` Returns list of running Manila hosts. Manila Config ~~~~~~~~~~~~~ ``manila-manage config list`` Returns list of currently set config options and their values. Manila Service ~~~~~~~~~~~~~~ ``manila-manage service list [--format_output table|json|yaml]`` Returns list of Manila services. Output format can be modified using `--format_output`. It can be `table`, `json`, or `yaml`. Defaults to `table`. Manila Version ~~~~~~~~~~~~~~ ``manila-manage version list`` Returns list of versions. Manila Share ~~~~~~~~~~~~ ``manila-manage share delete `` Deletes a specific share by ID. ``manila-manage share update_host [-h] --currenthost CURRENTHOST --newhost NEWHOST [--force FORCE]`` Update the ``host`` attribute within a share. This can be used to alter existing share records if the backend or host name has been updated in manila configuration. A fully qualified host string is of the format 'HostA@BackendB#PoolC'. Provide only the host name (ex: 'HostA') to update the hostname part of the host string. Provide only the host name and backend name (ex: 'HostA@BackendB') to update the host and backend names. ``--force`` parameter can be used to skip validations. Manila Share Server ~~~~~~~~~~~~~~~~~~~ ``manila-manage share_server update_share_server_capabilities [-h] --share_servers SHARE_SERVERS --capabilities CAPABILITIES [--value VALUE]`` Set share server boolean capabilities such as `security_service_update_support` and `network_allocation_update_support`. FILES ===== The manila-manage.conf file contains configuration information in the form of parameter settings. BUGS ==== * Manila's bug tracker is on Launchpad. You can view current bugs and file new bugs on `OpenStack Manila Bug Tracker `_ ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8462386 manila-23.0.0.0rc1/doc/source/cli/manila-status.rst0000664000175000017500000000334515251045254020563 0ustar00zuulzuul============= manila-status ============= Synopsis ======== :: manila-status [] Description =========== :program:`manila-status` is a tool that provides routines for checking the status of a Manila deployment. Options ======= The standard pattern for executing a :program:`manila-status` command is:: manila-status [] Run without arguments to see a list of available command categories:: manila-status Categories are: * ``upgrade`` Detailed descriptions are below. You can also run with a category argument such as ``upgrade`` to see a list of all commands in that category:: manila-status upgrade These sections describe the available categories and arguments for :program:`manila-status`. Upgrade ~~~~~~~ .. _manila-status-checks: ``manila-status upgrade check`` Performs a release-specific readiness check before restarting services with new code. This command expects to have complete configuration and access to databases and services. **Return Codes** .. list-table:: :widths: 20 80 :header-rows: 1 * - Return code - Description * - 0 - All upgrade readiness checks passed successfully and there is nothing to do. * - 1 - At least one check encountered an issue and requires further investigation. This is considered a warning but the upgrade may be OK. * - 2 - There was an upgrade status check failure that needs to be investigated. This should be considered something that stops an upgrade. * - 255 - An unexpected error occurred. **History of Checks** **8.0.0 (Stein)** * Placeholder to be filled in with checks as they are added in Stein. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.847239 manila-23.0.0.0rc1/doc/source/cli/manila.rst0000664000175000017500000026770415251045254017255 0ustar00zuulzuul.. ################################################### .. ## WARNING ###################################### .. ############## WARNING ########################## .. ########################## WARNING ############## .. ###################################### WARNING ## .. ################################################### .. ################################################### .. ## .. This file is tool-generated. Do not edit manually. .. http://docs.openstack.org/contributor-guide/ .. doc-tools/cli-reference.html .. ## .. ## WARNING ###################################### .. ############## WARNING ########################## .. ########################## WARNING ############## .. ###################################### WARNING ## .. ################################################### ======================================================== Shared File Systems service (manila) command-line client ======================================================== The manila client is the command-line interface (CLI) for the Shared File Systems service (manila) API and its extensions. This chapter documents :command:`manila` version ``1.16.0``. For help on a specific :command:`manila` command, enter: .. code-block:: console $ manila help COMMAND .. _manila_command_usage: manila usage ~~~~~~~~~~~~ .. code-block:: console usage: manila [--version] [-d] [--os-cache] [--os-reset-cache] [--os-user-id ] [--os-username ] [--os-password ] [--os-tenant-name ] [--os-project-name ] [--os-tenant-id ] [--os-project-id ] [--os-user-domain-id ] [--os-user-domain-name ] [--os-project-domain-id ] [--os-project-domain-name ] [--os-auth-url ] [--os-region-name ] [--os-token ] [--bypass-url ] [--service-type ] [--service-name ] [--share-service-name ] [--endpoint-type ] [--os-share-api-version ] [--os-cacert ] [--retries ] [--os-cert ] ... **Subcommands:** ``absolute-limits`` Print a list of absolute limits for a user. ``access-allow`` Allow access to the share. ``access-deny`` Deny access to a share. ``access-list`` Show access list for share. ``api-version`` Display the API version information. ``availability-zone-list`` List all availability zones. ``create`` Creates a new share (NFS, CIFS, CephFS, GlusterFS or HDFS). ``credentials`` Show user credentials returned from auth. ``delete`` Remove one or more shares. ``endpoints`` Discover endpoints that get returned from the authenticate services. ``extend`` Increases the size of an existing share. ``extra-specs-list`` Print a list of current 'share types and extra specs' (Admin Only). ``force-delete`` Attempt force-delete of share, regardless of state (Admin only). ``list`` List NAS shares with filters. ``manage`` Manage share not handled by Manila (Admin only). ``message-delete`` Remove one or more messages. ``message-list`` Lists all messages. ``message-show`` Show message's details. ``metadata`` Set or delete metadata on a share. ``metadata-show`` Show metadata of given share. ``metadata-update-all`` Update all metadata of a share. ``migration-cancel`` Cancels migration of a given share when copying (Admin only, Experimental). ``migration-complete`` Completes migration for a given share (Admin only, Experimental). ``migration-get-progress`` Gets migration progress of a given share when copying (Admin only, Experimental). ``migration-start`` Migrates share to a new host (Admin only, Experimental). ``pool-list`` List all backend storage pools known to the scheduler (Admin only). ``quota-class-show`` List the quotas for a quota class. ``quota-class-update`` Update the quotas for a quota class (Admin only). ``quota-defaults`` List the default quotas for a tenant. ``quota-delete`` Delete quota for a tenant/user. The quota will revert back to default (Admin only). ``quota-show`` List the quotas for a tenant/user. ``quota-update`` Update the quotas for a tenant/user (Admin only). ``rate-limits`` Print a list of rate limits for a user. ``reset-state`` Explicitly update the state of a share (Admin only). ``reset-task-state`` Explicitly update the task state of a share (Admin only, Experimental). ``revert-to-snapshot`` Revert a share to the specified snapshot. ``security-service-create`` Create security service used by tenant. ``security-service-delete`` Delete one or more security services. ``security-service-list`` Get a list of security services. ``security-service-show`` Show security service. ``security-service-update`` Update security service. ``service-disable`` Disables 'manila-share' or 'manila-scheduler' services (Admin only). ``service-enable`` Enables 'manila-share' or 'manila-scheduler' services (Admin only). ``service-list`` List all services (Admin only). ``share-export-location-list`` List export locations of a given share. ``share-export-location-show`` Show export location of the share. ``share-group-create`` Creates a new share group (Experimental). ``share-group-delete`` Remove one or more share groups (Experimental). ``share-group-list`` List share groups with filters (Experimental). ``share-group-reset-state`` Explicitly update the state of a share group (Admin only, Experimental). ``share-group-show`` Show details about a share group (Experimental). ``share-group-snapshot-create`` Creates a new share group snapshot (Experimental). ``share-group-snapshot-delete`` Remove one or more share group snapshots (Experimental). ``share-group-snapshot-list`` List share group snapshots with filters (Experimental). ``share-group-snapshot-list-members`` List members of a share group snapshot (Experimental). ``share-group-snapshot-reset-state`` Explicitly update the state of a share group snapshot (Admin only, Experimental). ``share-group-snapshot-show`` Show details about a share group snapshot (Experimental). ``share-group-snapshot-update`` Update a share group snapshot (Experimental). ``share-group-type-access-add`` Adds share group type access for the given project (Admin only). ``share-group-type-access-list`` Print access information about a share group type (Admin only). ``share-group-type-access-remove`` Removes share group type access for the given project (Admin only). ``share-group-type-create`` Create a new share group type (Admin only). ``share-group-type-delete`` Delete a specific share group type (Admin only). ``share-group-type-key`` Set or unset group_spec for a share group type (Admin only). ``share-group-type-list`` Print a list of available 'share group types'. ``share-group-type-specs-list`` Print a list of 'share group types specs' (Admin Only). ``share-group-update`` Update a share group (Experimental). ``share-instance-export-location-list`` List export locations of a given share instance. ``share-instance-export-location-show`` Show export location for the share instance. ``share-instance-force-delete`` Force-delete the share instance, regardless of state (Admin only). ``share-instance-list`` List share instances (Admin only). ``share-instance-reset-state`` Explicitly update the state of a share instance (Admin only). ``share-instance-show`` Show details about a share instance (Admin only). ``share-network-create`` Create description for network used by the tenant. ``share-network-delete`` Delete one or more share networks. ``share-network-list`` Get a list of network info. ``share-network-security-service-add`` Associate security service with share network. ``share-network-security-service-list`` Get list of security services associated with a given share network. ``share-network-security-service-remove`` Dissociate security service from share network. ``share-network-show`` Get a description for network used by the tenant. ``share-network-update`` Update share network data. ``share-replica-create`` Create a share replica (Experimental). ``share-replica-delete`` Remove one or more share replicas (Experimental). ``share-replica-list`` List share replicas (Experimental). ``share-replica-promote`` Promote specified replica to 'active' replica_state (Experimental). ``share-replica-reset-replica-state`` Explicitly update the 'replica_state' of a share replica (Experimental). ``share-replica-reset-state`` Explicitly update the 'status' of a share replica (Experimental). ``share-replica-resync`` Attempt to update the share replica with its 'active' mirror (Experimental). ``share-replica-show`` Show details about a replica (Experimental). ``share-server-delete`` Delete one or more share servers (Admin only). ``share-server-details`` Show share server details (Admin only). ``share-server-list`` List all share servers (Admin only). ``share-server-show`` Show share server info (Admin only). ``show`` Show details about a NAS share. ``shrink`` Decreases the size of an existing share. ``snapshot-access-allow`` Allow read only access to a snapshot. ``snapshot-access-deny`` Deny access to a snapshot. ``snapshot-access-list`` Show access list for a snapshot. ``snapshot-create`` Add a new snapshot. ``snapshot-delete`` Remove one or more snapshots. ``snapshot-export-location-list`` List export locations of a given snapshot. ``snapshot-export-location-show`` Show export location of the share snapshot. ``snapshot-force-delete`` Attempt force-deletion of one or more snapshots. Regardless of the state (Admin only). ``snapshot-instance-export-location-list`` List export locations of a given snapshot instance. ``snapshot-instance-export-location-show`` Show export location of the share instance snapshot. ``snapshot-instance-list`` List share snapshot instances. ``snapshot-instance-reset-state`` Explicitly update the state of a share snapshot instance. ``snapshot-instance-show`` Show details about a share snapshot instance. ``snapshot-list`` List all the snapshots. ``snapshot-manage`` Manage share snapshot not handled by Manila (Admin only). ``snapshot-rename`` Rename a snapshot. ``snapshot-reset-state`` Explicitly update the state of a snapshot (Admin only). ``snapshot-show`` Show details about a snapshot. ``snapshot-unmanage`` Unmanage one or more share snapshots (Admin only). ``type-access-add`` Adds share type access for the given project (Admin only). ``type-access-list`` Print access information about the given share type (Admin only). ``type-access-remove`` Removes share type access for the given project (Admin only). ``type-create`` Create a new share type (Admin only). ``type-delete`` Delete one or more specific share types (Admin only). ``type-key`` Set or unset extra_spec for a share type (Admin only). ``type-list`` Print a list of available 'share types'. ``unmanage`` Unmanage share (Admin only). ``update`` Rename a share. ``bash-completion`` Print arguments for bash_completion. Prints all of the commands and options to stdout so that the manila.bash_completion script doesn't have to hard code them. ``help`` Display help about this program or one of its subcommands. ``list-extensions`` List all the os-api extensions that are available. .. _manila_command_options: manila optional arguments ~~~~~~~~~~~~~~~~~~~~~~~~~ ``--version`` show program's version number and exit ``-d, --debug`` Print debugging output. ``--os-cache`` Use the auth token cache. Defaults to ``env[OS_CACHE]``. ``--os-reset-cache`` Delete cached password and auth token. ``--os-user-id `` Defaults to env [OS_USER_ID]. ``--os-username `` Defaults to ``env[OS_USERNAME]``. ``--os-password `` Defaults to ``env[OS_PASSWORD]``. ``--os-tenant-name `` Defaults to ``env[OS_TENANT_NAME]``. ``--os-project-name `` Another way to specify tenant name. This option is mutually exclusive with --os-tenant-name. Defaults to ``env[OS_PROJECT_NAME]``. ``--os-tenant-id `` Defaults to ``env[OS_TENANT_ID]``. ``--os-project-id `` Another way to specify tenant ID. This option is mutually exclusive with --os-tenant-id. Defaults to ``env[OS_PROJECT_ID]``. ``--os-user-domain-id `` OpenStack user domain ID. Defaults to ``env[OS_USER_DOMAIN_ID]``. ``--os-user-domain-name `` OpenStack user domain name. Defaults to ``env[OS_USER_DOMAIN_NAME]``. ``--os-project-domain-id `` Defaults to ``env[OS_PROJECT_DOMAIN_ID]``. ``--os-project-domain-name `` Defaults to ``env[OS_PROJECT_DOMAIN_NAME]``. ``--os-auth-url `` Defaults to ``env[OS_AUTH_URL]``. ``--os-region-name `` Defaults to ``env[OS_REGION_NAME]``. ``--os-token `` Defaults to ``env[OS_TOKEN]``. ``--bypass-url `` Use this API endpoint instead of the Service Catalog. Defaults to ``env[OS_MANILA_BYPASS_URL]``. ``--service-type `` Defaults to compute for most actions. ``--service-name `` Defaults to ``env[OS_MANILA_SERVICE_NAME]``. ``--share-service-name `` Defaults to ``env[OS_MANILA_SHARE_SERVICE_NAME]``. ``--endpoint-type `` Defaults to ``env[OS_MANILA_ENDPOINT_TYPE]`` or publicURL. ``--os-share-api-version `` Accepts 1.x to override default to ``env[OS_SHARE_API_VERSION]``. ``--os-cacert `` Specify a CA bundle file to use in verifying a TLS (https) server certificate. Defaults to ``env[OS_CACERT]``. ``--retries `` Number of retries. ``--os-cert `` Defaults to ``env[OS_CERT]``. .. _manila_absolute-limits: manila absolute-limits ---------------------- .. code-block:: console usage: manila absolute-limits Print a list of absolute limits for a user. .. _manila_access-allow: manila access-allow ------------------- .. code-block:: console usage: manila access-allow [--access-level ] Allow access to the share. **Positional arguments:** ```` Name or ID of the NAS share to modify. ```` Access rule type (only "ip", "user"(user or group), "cert" or "cephx" are supported). ```` Value that defines access. **Optional arguments:** ``--access-level , --access_level `` Share access level ("rw" and "ro" access levels are supported). Defaults to rw. .. _manila_access-deny: manila access-deny ------------------ .. code-block:: console usage: manila access-deny Deny access to a share. **Positional arguments:** ```` Name or ID of the NAS share to modify. ```` ID of the access rule to be deleted. .. _manila_access-list: manila access-list ------------------ .. code-block:: console usage: manila access-list [--columns ] Show access list for share. **Positional arguments:** ```` Name or ID of the share. **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "access_type,access_to". .. _manila_api-version: manila api-version ------------------ .. code-block:: console usage: manila api-version Display the API version information. .. _manila_availability-zone-list: manila availability-zone-list ----------------------------- .. code-block:: console usage: manila availability-zone-list [--columns ] List all availability zones. **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "id,name". .. _manila_create: manila create ------------- .. code-block:: console usage: manila create [--snapshot-id ] [--name ] [--metadata [ [ ...]]] [--share-network ] [--description ] [--share-type ] [--public] [--availability-zone ] [--share-group ] Creates a new share (NFS, CIFS, CephFS, GlusterFS or HDFS). **Positional arguments:** ```` Share protocol (NFS, CIFS, CephFS, GlusterFS or HDFS). ```` Share size in GiB. **Optional arguments:** ``--snapshot-id , --snapshot_id `` Optional snapshot ID to create the share from. (Default=None) ``--name `` Optional share name. (Default=None) ``--metadata [ [ ...]]`` Metadata key=value pairs (Optional, Default=None). ``--share-network , --share_network `` Optional network info ID or name. ``--description `` Optional share description. (Default=None) ``--share-type , --share_type , --volume-type , --volume_type `` Optional share type. Use of optional volume type is deprecated. (Default=None) ``--public`` Level of visibility for share. Defines whether other tenants are able to see it or not. ``--availability-zone , --availability_zone , --az `` Availability zone in which share should be created. ``--share-group , --share_group , --group `` Optional share group name or ID in which to create the share (Experimental, Default=None). .. _manila_credentials: manila credentials ------------------ .. code-block:: console usage: manila credentials Show user credentials returned from auth. .. _manila_delete: manila delete ------------- .. code-block:: console usage: manila delete [--share-group ] [ ...] Remove one or more shares. **Positional arguments:** ```` Name or ID of the share(s). **Optional arguments:** ``--share-group , --share_group , --group `` Optional share group name or ID which contains the share (Experimental, Default=None). .. _manila_endpoints: manila endpoints ---------------- .. code-block:: console usage: manila endpoints Discover endpoints that get returned from the authenticate services. .. _manila_extend: manila extend ------------- .. code-block:: console usage: manila extend [--wait] [--force] Increases the size of an existing share. **Positional arguments:** ```` Name or ID of share to extend. ```` New size of share, in GiBs. **Optional arguments:** ``--wait`` Wait for share extension. ``--force`` Extend share directly and not go through scheduler. .. _manila_extra-specs-list: manila extra-specs-list ----------------------- .. code-block:: console usage: manila extra-specs-list [--columns ] Print a list of current 'share types and extra specs' (Admin Only). **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "id,name". .. _manila_force-delete: manila force-delete ------------------- .. code-block:: console usage: manila force-delete [ ...] Attempt force-delete of share, regardless of state (Admin only). **Positional arguments:** ```` Name or ID of the share(s) to force delete. .. _manila_list: manila list ----------- .. code-block:: console usage: manila list [--all-tenants [<0|1>]] [--name ] [--status ] [--share-server-id ] [--metadata [ [ ...]]] [--extra-specs [ [ ...]]] [--share-type ] [--limit ] [--offset ] [--sort-key ] [--sort-dir ] [--snapshot ] [--host ] [--share-network ] [--project-id ] [--public] [--share-group ] [--columns ] List NAS shares with filters. **Optional arguments:** ``--all-tenants [<0|1>]`` Display information from all tenants (Admin only). ``--name `` Filter results by name. ``--status `` Filter results by status. ``--share-server-id , --share-server_id , --share_server-id , --share_server_id `` Filter results by share server ID (Admin only). ``--metadata [ [ ...]]`` Filters results by a metadata key and value. OPTIONAL: Default=None. ``--extra-specs [ [ ...]], --extra_specs [ [ ...]]`` Filters results by an extra specs key and value of share type that was used for share creation. OPTIONAL: Default=None. ``--share-type , --volume-type , --share_type , --share-type-id , --volume-type-id , --share-type_id , --share_type-id , --share_type_id , --volume_type , --volume_type_id `` Filter results by a share type id or name that was used for share creation. ``--limit `` Maximum number of shares to return. OPTIONAL: Default=None. ``--offset `` Set offset to define start point of share listing. OPTIONAL: Default=None. ``--sort-key , --sort_key `` Key to be sorted, available keys are ('id', 'status', 'size', 'host', 'share_proto', 'availability_zone', 'user_id', 'project_id', 'created_at', 'updated_at', 'display_name', 'name', 'share_type_id', 'share_type', 'share_network_id', 'share_network', 'snapshot_id', 'snapshot'). OPTIONAL: Default=None. ``--sort-dir , --sort_dir `` Sort direction, available values are ('asc', 'desc'). OPTIONAL: Default=None. ``--snapshot `` Filter results by snapshot name or id, that was used for share. ``--host `` Filter results by host. ``--share-network , --share_network `` Filter results by share-network name or id. ``--project-id , --project_id `` Filter results by project id. Useful with set key '--all-tenants'. ``--public`` Add public shares from all tenants to result. ``--share-group , --share_group , --group `` Filter results by share group name or ID (Experimental, Default=None). ``--columns `` Comma separated list of columns to be displayed example --columns "export_location,is public". .. _manila_list-extensions: manila list-extensions ---------------------- .. code-block:: console usage: manila list-extensions List all the os-api extensions that are available. .. _manila_manage: manila manage ------------- .. code-block:: console usage: manila manage [--name ] [--description ] [--share_type ] [--driver_options [ [ ...]]] [--public] Manage share not handled by Manila (Admin only). **Positional arguments:** ```` manage-share service host: some.host@driver#pool. ```` Protocol of the share to manage, such as NFS or CIFS. ```` Share export path, NFS share such as: 10.0.0.1:/example_path, CIFS share such as: \\\\10.0.0.1\\example_cifs_share. **Optional arguments:** ``--name `` Optional share name. (Default=None) ``--description `` Optional share description. (Default=None) ``--share_type , --share-type `` Optional share type assigned to share. (Default=None) ``--driver_options [ [ ...]], --driver-options [ [ ...]]`` Driver option key=value pairs (Optional, Default=None). ``--public`` Level of visibility for share. Defines whether other tenants are able to see it or not. Available only for microversion >= 2.8. .. _manila_message-delete: manila message-delete ---------------------- .. code-block:: console usage: manila message-delete [ ...] Remove one or more messages. **Positional arguments:** ```` ID of the message(s). .. _manila_message-list: manila message-list ---------------------- .. code-block:: console usage: manila message-list [--resource_id ] [--resource_type ] [--action_id ] [--detail_id ] [--request_id ] [--level ] [--limit ] [--offset ] [--sort-key ] [--sort-dir ] [--columns ] [--since ] [--before ] Lists all messages. **Optional arguments:** ``--resource_id , --resource-id , --resource `` Filters results by a resource uuid. (Default=None). ``--resource_type , --resource-type `` Filters results by a resource type. (Default=None). Example: "manila message-list --resource_type share" ``--action_id , --action-id , --action `` Filters results by action id. (Default=None). ``--detail_id , --detail-id , --detail `` Filters results by detail id. (Default=None). ``--request_id , --request-id , --request `` Filters results by request id. (Default=None). ``--level , --message_level , --message-level `` Filters results by the message level. (Default=None). Example: "manila message-list --level ERROR". ``--limit `` Maximum number of messages to return. (Default=None) ``--offset `` Start position of message listing. ``--sort-key , --sort_key `` Key to be sorted, available keys are ('id', 'project_id', 'request_id', 'resource_type', 'action_id', 'detail_id', 'resource_id', 'message_level', 'expires_at', 'request_id', 'created_at'). (Default=desc). ``--sort-dir , --sort_dir `` Sort direction, available values are ('asc', 'desc'). OPTIONAL: Default=None. ``--columns `` Comma separated list of columns to be displayed example --columns "resource_id, user_message". ``--since `` Return only user messages created since given date. The date format must be conforming to ISO8601. Available only for microversion >= 2.52. ``--before `` Return only user messages created before given date. The date format must be conforming to ISO8601. Available only for microversion >= 2.52. .. _manila_message-show: manila message-show ---------------------- .. code-block:: console usage: manila message-show Show details about a message. **Positional arguments:** ```` ID of the message. .. _manila_metadata: manila metadata --------------- .. code-block:: console usage: manila metadata [ ...] Set or delete metadata on a share. **Positional arguments:** ```` Name or ID of the share to update metadata on. ```` Actions: 'set' or 'unset'. ```` Metadata to set or unset (key is only necessary on unset). .. _manila_metadata-show: manila metadata-show -------------------- .. code-block:: console usage: manila metadata-show Show metadata of given share. **Positional arguments:** ```` Name or ID of the share. .. _manila_metadata-update-all: manila metadata-update-all -------------------------- .. code-block:: console usage: manila metadata-update-all [ ...] Update all metadata of a share. **Positional arguments:** ```` Name or ID of the share to update metadata on. ```` Metadata entry or entries to update. .. _manila_migration-cancel: manila migration-cancel ----------------------- .. code-block:: console usage: manila migration-cancel Cancels migration of a given share when copying (Admin only, Experimental). **Positional arguments:** ```` Name or ID of share to cancel migration. .. _manila_migration-complete: manila migration-complete ------------------------- .. code-block:: console usage: manila migration-complete Completes migration for a given share (Admin only, Experimental). **Positional arguments:** ```` Name or ID of share to complete migration. .. _manila_migration-get-progress: manila migration-get-progress ----------------------------- .. code-block:: console usage: manila migration-get-progress Gets migration progress of a given share when copying (Admin only, Experimental). **Positional arguments:** ```` Name or ID of the share to get share migration progress information. .. _manila_migration-start: manila migration-start ---------------------- .. code-block:: console usage: manila migration-start [--force_host_assisted_migration ] --preserve-metadata --preserve-snapshots --writable --nondisruptive [--new_share_network ] [--new_share_type ] Migrates share to a new host (Admin only, Experimental). **Positional arguments:** ```` Name or ID of share to migrate. ```` Destination host where share will be migrated to. Use the format 'host@backend#pool'. **Optional arguments:** ``--force_host_assisted_migration , --force-host-assisted-migration `` Enforces the use of the host-assisted migration approach, which bypasses driver optimizations. Default=False. ``--preserve-metadata , --preserve_metadata `` Enforces migration to preserve all file metadata when moving its contents. If set to True, host-assisted migration will not be attempted. ``--preserve-snapshots , --preserve_snapshots `` Enforces migration of the share snapshots to the destination. If set to True, host-assisted migration will not be attempted. ``--writable `` Enforces migration to keep the share writable while contents are being moved. If set to True, host-assisted migration will not be attempted. ``--nondisruptive `` Enforces migration to be nondisruptive. If set to True, host-assisted migration will not be attempted. ``--new_share_network , --new-share-network `` Specify the new share network for the share. Do not specify this parameter if the migrating share has to be retained within its current share network. ``--new_share_type , --new-share-type `` Specify the new share type for the share. Do not specify this parameter if the migrating share has to be retained with its current share type. .. _manila_pool-list: manila pool-list ---------------- .. code-block:: console usage: manila pool-list [--host ] [--backend ] [--pool ] [--columns ] [--detail] [--share-type ] List all backend storage pools known to the scheduler (Admin only). **Optional arguments:** ``--host `` Filter results by host name. Regular expressions are supported. ``--backend `` Filter results by backend name. Regular expressions are supported. ``--pool `` Filter results by pool name. Regular expressions are supported. ``--columns `` Comma separated list of columns to be displayed example --columns "name,host". ``--detail, --detailed`` Show detailed information about pools. (Default=False) ``--share-type , --share_type , --share-type-id , --share_type_id `` Filter results by share type name or ID. (Default=None)Available only for microversion >= 2.23. .. _manila_quota-class-show: manila quota-class-show ----------------------- .. code-block:: console usage: manila quota-class-show List the quotas for a quota class. **Positional arguments:** ```` Name of quota class to list the quotas for. .. _manila_quota-class-update: manila quota-class-update ------------------------- .. code-block:: console usage: manila quota-class-update [--shares ] [--snapshots ] [--gigabytes ] [--snapshot-gigabytes ] [--share-networks ] [--share-groups ] [--share-group-snapshots ] Update the quotas for a quota class (Admin only). **Positional arguments:** ```` Name of quota class to set the quotas for. **Optional arguments:** ``--shares `` New value for the "shares" quota. ``--snapshots `` New value for the "snapshots" quota. ``--gigabytes `` New value for the "gigabytes" quota. ``--snapshot-gigabytes , --snapshot_gigabytes `` New value for the "snapshot_gigabytes" quota. ``--share-networks , --share_networks `` New value for the "share_networks" quota. ``--share-groups , --share_groups `` New value for the "share_groups" quota. ``--share-group-snapshots , --share_group_snapshots `` New value for the "share_group_snapshots" quota. .. _manila_quota-defaults: manila quota-defaults --------------------- .. code-block:: console usage: manila quota-defaults [--tenant ] List the default quotas for a tenant. **Optional arguments:** ``--tenant `` ID of tenant to list the default quotas for. .. _manila_quota-delete: manila quota-delete ------------------- .. code-block:: console usage: manila quota-delete [--tenant ] [--user ] [--share-type ] Delete quota for a tenant/user. The quota will revert back to default (Admin only). **Optional arguments:** ``--tenant `` ID of tenant to delete quota for. ``--user `` ID of user to delete quota for. ``--share-type , --share_type `` UUID or name of a share type to set the quotas for. Optional. Mutually exclusive with '--user-id'. Available only for microversion >= 2.39 .. _manila_quota-show: manila quota-show ----------------- .. code-block:: console usage: manila quota-show [--tenant ] [--user ] [--share-type ] [--detail] List the quotas for a tenant/user. **Optional arguments:** ``--tenant `` ID of tenant to list the quotas for. ``--user `` ID of user to list the quotas for. ``--share-type , --share_type `` UUID or name of a share type to set the quotas for. Optional. Mutually exclusive with '--user-id'. Available only for microversion >= 2.39 ``--detail`` Optional flag to indicate whether to show quota in detail. Default false, available only for microversion >= 2.25. .. _manila_quota-update: manila quota-update ------------------- .. code-block:: console usage: manila quota-update [--user ] [--shares ] [--snapshots ] [--gigabytes ] [--snapshot-gigabytes ] [--share-networks ] [--share-groups ] [--share-group-snapshots ] [--share-type ] [--force] Update the quotas for a tenant/user (Admin only). **Positional arguments:** ```` UUID of tenant to set the quotas for. **Optional arguments:** ``--user `` ID of user to set the quotas for. ``--shares `` New value for the "shares" quota. ``--snapshots `` New value for the "snapshots" quota. ``--gigabytes `` New value for the "gigabytes" quota. ``--snapshot-gigabytes , --snapshot_gigabytes `` New value for the "snapshot_gigabytes" quota. ``--share-networks , --share_networks `` New value for the "share_networks" quota. ``--share-groups , --share_groups `` New value for the "share_groups" quota. ``--share-group-snapshots , --share_group_snapshots `` New value for the "share_group_snapshots" quota. ``--share-type , --share_type `` UUID or name of a share type to set the quotas for. Optional. Mutually exclusive with '--user-id'. Available only for microversion >= 2.39 ``--force`` Whether force update the quota even if the already used and reserved exceeds the new quota. .. _manila_rate-limits: manila rate-limits ------------------ .. code-block:: console usage: manila rate-limits [--columns ] Print a list of rate limits for a user. **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "verb,uri,value". .. _manila_reset-state: manila reset-state ------------------ .. code-block:: console usage: manila reset-state [--state ] Explicitly update the state of a share (Admin only). **Positional arguments:** ```` Name or ID of the share to modify. **Optional arguments:** ``--state `` Indicate which state to assign the share. Options include available, error, creating, deleting, error_deleting. If no state is provided, available will be used. .. _manila_reset-task-state: manila reset-task-state ----------------------- .. code-block:: console usage: manila reset-task-state [--task-state ] Explicitly update the task state of a share (Admin only, Experimental). **Positional arguments:** ```` Name or ID of the share to modify. **Optional arguments:** ``--task-state , --task_state , --state `` Indicate which task state to assign the share. Options include migration_starting, migration_in_progress, migration_completing, migration_success, migration_error, migration_cancelled, migration_driver_in_progress, migration_driver_phase1_done, data_copying_starting, data_copying_in_progress, data_copying_completing, data_copying_completed, data_copying_cancelled, data_copying_error. If no value is provided, None will be used. .. _manila_revert-to-snapshot: manila revert-to-snapshot ------------------------- .. code-block:: console usage: manila revert-to-snapshot Revert a share to the specified snapshot. **Positional arguments:** ```` Name or ID of the snapshot to restore. The snapshot must be the most recent one known to manila. .. _manila_security-service-create: manila security-service-create ------------------------------ .. code-block:: console usage: manila security-service-create [--dns-ip ] [--server ] [--domain ] [--user ] [--password ] [--name ] [--description ] Create security service used by tenant. **Positional arguments:** ```` Security service type: 'ldap', 'kerberos' or 'active_directory'. **Optional arguments:** ``--dns-ip `` DNS IP address used inside tenant's network. ``--server `` Security service IP address or hostname. ``--domain `` Security service domain. ``--user `` Security service user or group used by tenant. ``--password `` Password used by user. ``--name `` Security service name. ``--description `` Security service description. .. _manila_security-service-delete: manila security-service-delete ------------------------------ .. code-block:: console usage: manila security-service-delete [ ...] Delete one or more security services. **Positional arguments:** ```` Name or ID of the security service(s) to delete. .. _manila_security-service-list: manila security-service-list ---------------------------- .. code-block:: console usage: manila security-service-list [--all-tenants [<0|1>]] [--share-network ] [--status ] [--name ] [--type ] [--user ] [--dns-ip ] [--server ] [--domain ] [--detailed [<0|1>]] [--offset ] [--limit ] [--columns ] Get a list of security services. **Optional arguments:** ``--all-tenants [<0|1>]`` Display information from all tenants (Admin only). ``--share-network , --share_network `` Filter results by share network id or name. ``--status `` Filter results by status. ``--name `` Filter results by name. ``--type `` Filter results by type. ``--user `` Filter results by user or group used by tenant. ``--dns-ip , --dns_ip `` Filter results by DNS IP address used inside tenant's network. ``--server `` Filter results by security service IP address or hostname. ``--domain `` Filter results by domain. ``--detailed [<0|1>]`` Show detailed information about filtered security services. ``--offset `` Start position of security services listing. ``--limit `` Number of security services to return per request. ``--columns `` Comma separated list of columns to be displayed example --columns "name,type". .. _manila_security-service-show: manila security-service-show ---------------------------- .. code-block:: console usage: manila security-service-show Show security service. **Positional arguments:** ```` Security service name or ID to show. .. _manila_security-service-update: manila security-service-update ------------------------------ .. code-block:: console usage: manila security-service-update [--dns-ip ] [--server ] [--domain ] [--user ] [--password ] [--name ] [--description ] Update security service. **Positional arguments:** ```` Security service name or ID to update. **Optional arguments:** ``--dns-ip `` DNS IP address used inside tenant's network. ``--server `` Security service IP address or hostname. ``--domain `` Security service domain. ``--user `` Security service user or group used by tenant. ``--password `` Password used by user. ``--name `` Security service name. ``--description `` Security service description. .. _manila_service-disable: manila service-disable ---------------------- .. code-block:: console usage: manila service-disable Disables 'manila-share' or 'manila-scheduler' services (Admin only). **Positional arguments:** ```` Host name as 'example_host@example_backend'. ```` Service binary, could be 'manila-share' or 'manila-scheduler'. .. _manila_service-enable: manila service-enable --------------------- .. code-block:: console usage: manila service-enable Enables 'manila-share' or 'manila-scheduler' services (Admin only). **Positional arguments:** ```` Host name as 'example_host@example_backend'. ```` Service binary, could be 'manila-share' or 'manila-scheduler'. .. _manila_service-list: manila service-list ------------------- .. code-block:: console usage: manila service-list [--host ] [--binary ] [--status ] [--state ] [--zone ] [--columns ] List all services (Admin only). **Optional arguments:** ``--host `` Name of host. ``--binary `` Service binary. ``--status `` Filter results by status. ``--state `` Filter results by state. ``--zone `` Availability zone. ``--columns `` Comma separated list of columns to be displayed example --columns "id,host". .. _manila_share-export-location-list: manila share-export-location-list --------------------------------- .. code-block:: console usage: manila share-export-location-list [--columns ] List export locations of a given share. **Positional arguments:** ```` Name or ID of the share. **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "id,host,status". .. _manila_share-export-location-show: manila share-export-location-show --------------------------------- .. code-block:: console usage: manila share-export-location-show Show export location of the share. **Positional arguments:** ```` Name or ID of the share. ```` ID of the share export location. .. _manila_share-group-create: manila share-group-create ------------------------- .. code-block:: console usage: manila share-group-create [--name ] [--description ] [--share-types ] [--share-group-type ] [--share-network ] [--source-share-group-snapshot ] [--availability-zone ] Creates a new share group (Experimental). **Optional arguments:** ``--name `` Optional share group name. (Default=None) ``--description `` Optional share group description. (Default=None) ``--share-types , --share_types `` Comma-separated list of share types. (Default=None) ``--share-group-type , --share_group_type , --type `` Share group type name or ID of the share group to be created. (Default=None) ``--share-network , --share_network `` Specify share network name or id. ``--source-share-group-snapshot , --source_share_group_snapshot `` Optional share group snapshot name or ID to create the share group from. (Default=None) ``--availability-zone , --availability_zone , --az `` Optional availability zone in which group should be created. (Default=None) .. _manila_share-group-delete: manila share-group-delete ------------------------- .. code-block:: console usage: manila share-group-delete [--force] [ ...] Remove one or more share groups (Experimental). **Positional arguments:** ```` Name or ID of the share_group(s). **Optional arguments:** ``--force`` Attempt to force delete the share group (Default=False) (Admin only). .. _manila_share-group-list: manila share-group-list ----------------------- .. code-block:: console usage: manila share-group-list [--all-tenants [<0|1>]] [--name ] [--status ] [--share-server-id ] [--share-group-type ] [--snapshot ] [--host ] [--share-network ] [--project-id ] [--limit ] [--offset ] [--sort-key ] [--sort-dir ] [--columns ] List share groups with filters (Experimental). **Optional arguments:** ``--all-tenants [<0|1>]`` Display information from all tenants (Admin only). ``--name `` Filter results by name. ``--status `` Filter results by status. ``--share-server-id , --share-server_id , --share_server-id , --share_server_id `` Filter results by share server ID (Admin only). ``--share-group-type , --share-group-type-id , --share_group_type , --share_group_type_id `` Filter results by a share group type ID or name that was used for share group creation. ``--snapshot `` Filter results by share group snapshot name or ID that was used to create the share group. ``--host `` Filter results by host. ``--share-network , --share_network `` Filter results by share-network name or ID. ``--project-id , --project_id `` Filter results by project ID. Useful with set key '--all-tenants'. ``--limit `` Maximum number of share groups to return. (Default=None) ``--offset `` Start position of share group listing. ``--sort-key , --sort_key `` Key to be sorted, available keys are ('id', 'name', 'status', 'host', 'user_id', 'project_id', 'created_at', 'availability_zone', 'share_network', 'share_network_id', 'share_group_type', 'share_group_type_id', 'source_share_group_snapshot_id'). Default=None. ``--sort-dir , --sort_dir `` Sort direction, available values are ('asc', 'desc'). OPTIONAL: Default=None. ``--columns `` Comma separated list of columns to be displayed example --columns "id,name". .. _manila_share-group-reset-state: manila share-group-reset-state ------------------------------ .. code-block:: console usage: manila share-group-reset-state [--state ] Explicitly update the state of a share group (Admin only, Experimental). **Positional arguments:** ```` Name or ID of the share group to modify. **Optional arguments:** ``--state `` Indicate which state to assign the share group. Options include available, error, creating, deleting, error_deleting. If no state is provided, available will be used. .. _manila_share-group-show: manila share-group-show ----------------------- .. code-block:: console usage: manila share-group-show Show details about a share group (Experimental). **Positional arguments:** ```` Name or ID of the share group. .. _manila_share-group-snapshot-create: manila share-group-snapshot-create ---------------------------------- .. code-block:: console usage: manila share-group-snapshot-create [--name ] [--description ] Creates a new share group snapshot (Experimental). **Positional arguments:** ```` Name or ID of the share group. **Optional arguments:** ``--name `` Optional share group snapshot name. (Default=None) ``--description `` Optional share group snapshot description. (Default=None) .. _manila_share-group-snapshot-delete: manila share-group-snapshot-delete ---------------------------------- .. code-block:: console usage: manila share-group-snapshot-delete [--force] [ ...] Remove one or more share group snapshots (Experimental). **Positional arguments:** ```` Name or ID of the share group snapshot(s) to delete. **Optional arguments:** ``--force`` Attempt to force delete the share group snapshot(s) (Default=False) (Admin only). .. _manila_share-group-snapshot-list: manila share-group-snapshot-list -------------------------------- .. code-block:: console usage: manila share-group-snapshot-list [--all-tenants [<0|1>]] [--name ] [--status ] [--share-group-id ] [--limit ] [--offset ] [--sort-key ] [--sort-dir ] [--detailed DETAILED] [--columns ] List share group snapshots with filters (Experimental). **Optional arguments:** ``--all-tenants [<0|1>]`` Display information from all tenants (Admin only). ``--name `` Filter results by name. ``--status `` Filter results by status. ``--share-group-id , --share_group_id `` Filter results by share group ID. ``--limit `` Maximum number of share group snapshots to return. (Default=None) ``--offset `` Start position of share group snapshot listing. ``--sort-key , --sort_key `` Key to be sorted, available keys are ('id', 'name', 'status', 'host', 'user_id', 'project_id', 'created_at', 'share_group_id'). Default=None. ``--sort-dir , --sort_dir `` Sort direction, available values are ('asc', 'desc'). OPTIONAL: Default=None. ``--detailed DETAILED`` Show detailed information about share group snapshots. ``--columns `` Comma separated list of columns to be displayed example --columns "id,name". .. _manila_share-group-snapshot-list-members: manila share-group-snapshot-list-members ---------------------------------------- .. code-block:: console usage: manila share-group-snapshot-list-members [--columns ] List members of a share group snapshot (Experimental). **Positional arguments:** ```` Name or ID of the share group snapshot. **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "id,name". .. _manila_share-group-snapshot-reset-state: manila share-group-snapshot-reset-state --------------------------------------- .. code-block:: console usage: manila share-group-snapshot-reset-state [--state ] Explicitly update the state of a share group snapshot (Admin only, Experimental). **Positional arguments:** ```` Name or ID of the share group snapshot. **Optional arguments:** ``--state `` Indicate which state to assign the share group snapshot. Options include available, error, creating, deleting, error_deleting. If no state is provided, available will be used. .. _manila_share-group-snapshot-show: manila share-group-snapshot-show -------------------------------- .. code-block:: console usage: manila share-group-snapshot-show Show details about a share group snapshot (Experimental). **Positional arguments:** ```` Name or ID of the share group snapshot. .. _manila_share-group-snapshot-update: manila share-group-snapshot-update ---------------------------------- .. code-block:: console usage: manila share-group-snapshot-update [--name ] [--description ] Update a share group snapshot (Experimental). **Positional arguments:** ```` Name or ID of the share group snapshot to update. **Optional arguments:** ``--name `` Optional new name for the share group snapshot. (Default=None) ``--description `` Optional share group snapshot description. (Default=None) .. _manila_share-group-type-access-add: manila share-group-type-access-add ---------------------------------- .. code-block:: console usage: manila share-group-type-access-add Adds share group type access for the given project (Admin only). **Positional arguments:** ```` Share group type name or ID to add access for the given project. ```` Project ID to add share group type access for. .. _manila_share-group-type-access-list: manila share-group-type-access-list ----------------------------------- .. code-block:: console usage: manila share-group-type-access-list Print access information about a share group type (Admin only). **Positional arguments:** ```` Filter results by share group type name or ID. .. _manila_share-group-type-access-remove: manila share-group-type-access-remove ------------------------------------- .. code-block:: console usage: manila share-group-type-access-remove Removes share group type access for the given project (Admin only). **Positional arguments:** ```` Share group type name or ID to remove access for the given project. ```` Project ID to remove share group type access for. .. _manila_share-group-type-create: manila share-group-type-create ------------------------------ .. code-block:: console usage: manila share-group-type-create [--is_public ] Create a new share group type (Admin only). **Positional arguments:** ```` Name of the new share group type. ```` Comma-separated list of share type names or IDs. **Optional arguments:** ``--is_public , --is-public `` Make type accessible to the public (default true). .. _manila_share-group-type-delete: manila share-group-type-delete ------------------------------ .. code-block:: console usage: manila share-group-type-delete Delete a specific share group type (Admin only). **Positional arguments:** ```` Name or ID of the share group type to delete. .. _manila_share-group-type-key: manila share-group-type-key --------------------------- .. code-block:: console usage: manila share-group-type-key [ [ ...]] Set or unset group_spec for a share group type (Admin only). **Positional arguments:** ```` Name or ID of the share group type. ```` Actions: 'set' or 'unset'. ```` Group specs to set or unset (key is only necessary on unset). .. _manila_share-group-type-list: manila share-group-type-list ---------------------------- .. code-block:: console usage: manila share-group-type-list [--all] [--columns ] Print a list of available 'share group types'. **Optional arguments:** ``--all`` Display all share group types (Admin only). ``--columns `` Comma separated list of columns to be displayed example --columns "id,name". .. _manila_share-group-type-specs-list: manila share-group-type-specs-list ---------------------------------- .. code-block:: console usage: manila share-group-type-specs-list [--columns ] Print a list of 'share group types specs' (Admin Only). **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "id,name". .. _manila_share-group-update: manila share-group-update ------------------------- .. code-block:: console usage: manila share-group-update [--name ] [--description ] Update a share group (Experimental). **Positional arguments:** ```` Name or ID of the share group to update. **Optional arguments:** ``--name `` Optional new name for the share group. (Default=None) ``--description `` Optional share group description. (Default=None) .. _manila_share-instance-export-location-list: manila share-instance-export-location-list ------------------------------------------ .. code-block:: console usage: manila share-instance-export-location-list [--columns ] List export locations of a given share instance. **Positional arguments:** ```` Name or ID of the share instance. **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "id,host,status". .. _manila_share-instance-export-location-show: manila share-instance-export-location-show ------------------------------------------ .. code-block:: console usage: manila share-instance-export-location-show Show export location for the share instance. **Positional arguments:** ```` Name or ID of the share instance. ```` ID of the share instance export location. .. _manila_share-instance-force-delete: manila share-instance-force-delete ---------------------------------- .. code-block:: console usage: manila share-instance-force-delete [ ...] Force-delete the share instance, regardless of state (Admin only). **Positional arguments:** ```` Name or ID of the instance(s) to force delete. .. _manila_share-instance-list: manila share-instance-list -------------------------- .. code-block:: console usage: manila share-instance-list [--share-id ] [--columns ] List share instances (Admin only). **Optional arguments:** ``--share-id , --share_id `` Filter results by share ID. ``--columns `` Comma separated list of columns to be displayed example --columns "id,host,status". .. _manila_share-instance-reset-state: manila share-instance-reset-state --------------------------------- .. code-block:: console usage: manila share-instance-reset-state [--state ] Explicitly update the state of a share instance (Admin only). **Positional arguments:** ```` Name or ID of the share instance to modify. **Optional arguments:** ``--state `` Indicate which state to assign the instance. Options include available, error, creating, deleting, error_deleting, migrating,migrating_to. If no state is provided, available will be used. .. _manila_share-instance-show: manila share-instance-show -------------------------- .. code-block:: console usage: manila share-instance-show Show details about a share instance (Admin only). **Positional arguments:** ```` Name or ID of the share instance. .. _manila_share-network-create: manila share-network-create --------------------------- .. code-block:: console usage: manila share-network-create [--neutron-net-id ] [--neutron-subnet-id ] [--name ] [--description ] Create description for network used by the tenant. **Optional arguments:** ``--neutron-net-id , --neutron-net_id , --neutron_net_id , --neutron_net-id `` Neutron network ID. Used to set up network for share servers. ``--neutron-subnet-id , --neutron-subnet_id , --neutron_subnet_id , --neutron_subnet-id `` Neutron subnet ID. Used to set up network for share servers. This subnet should belong to specified neutron network. ``--name `` Share network name. ``--description `` Share network description. .. _manila_share-network-delete: manila share-network-delete --------------------------- .. code-block:: console usage: manila share-network-delete [ ...] Delete one or more share networks. **Positional arguments:** ```` Name or ID of share network(s) to be deleted. .. _manila_share-network-list: manila share-network-list ------------------------- .. code-block:: console usage: manila share-network-list [--all-tenants [<0|1>]] [--project-id ] [--name ] [--created-since ] [--created-before ] [--security-service ] [--neutron-net-id ] [--neutron-subnet-id ] [--network-type ] [--segmentation-id ] [--cidr ] [--ip-version ] [--offset ] [--limit ] [--columns ] Get a list of network info. **Optional arguments:** ``--all-tenants [<0|1>]`` Display information from all tenants (Admin only). ``--project-id , --project_id `` Filter results by project ID. ``--name `` Filter results by name. ``--created-since , --created_since `` Return only share networks created since given date. The date is in the format 'yyyy-mm-dd'. ``--created-before , --created_before `` Return only share networks created until given date. The date is in the format 'yyyy-mm-dd'. ``--security-service , --security_service `` Filter results by attached security service. ``--neutron-net-id , --neutron_net_id , --neutron_net-id , --neutron-net_id `` Filter results by neutron net ID. ``--neutron-subnet-id , --neutron_subnet_id , --neutron-subnet_id , --neutron_subnet-id `` Filter results by neutron subnet ID. ``--network-type , --network_type `` Filter results by network type. ``--segmentation-id , --segmentation_id `` Filter results by segmentation ID. ``--cidr `` Filter results by CIDR. ``--ip-version , --ip_version `` Filter results by IP version. ``--offset `` Start position of share networks listing. ``--limit `` Number of share networks to return per request. ``--columns `` Comma separated list of columns to be displayed example --columns "id". .. _manila_share-network-security-service-add: manila share-network-security-service-add ----------------------------------------- .. code-block:: console usage: manila share-network-security-service-add Associate security service with share network. **Positional arguments:** ```` Share network name or ID. ```` Security service name or ID to associate with. .. _manila_share-network-security-service-list: manila share-network-security-service-list ------------------------------------------ .. code-block:: console usage: manila share-network-security-service-list [--columns ] Get list of security services associated with a given share network. **Positional arguments:** ```` Share network name or ID. **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "id,name". .. _manila_share-network-security-service-remove: manila share-network-security-service-remove -------------------------------------------- .. code-block:: console usage: manila share-network-security-service-remove Dissociate security service from share network. **Positional arguments:** ```` Share network name or ID. ```` Security service name or ID to dissociate. .. _manila_share-network-show: manila share-network-show ------------------------- .. code-block:: console usage: manila share-network-show Get a description for network used by the tenant. **Positional arguments:** ```` Name or ID of the share network to show. .. _manila_share-network-update: manila share-network-update --------------------------- .. code-block:: console usage: manila share-network-update [--neutron-net-id ] [--neutron-subnet-id ] [--name ] [--description ] Update share network data. **Positional arguments:** ```` Name or ID of share network to update. **Optional arguments:** ``--neutron-net-id , --neutron-net_id , --neutron_net_id , --neutron_net-id `` Neutron network ID. Used to set up network for share servers. This option is deprecated and will be rejected in newer releases of OpenStack Manila. ``--neutron-subnet-id , --neutron-subnet_id , --neutron_subnet_id , --neutron_subnet-id `` Neutron subnet ID. Used to set up network for share servers. This subnet should belong to specified neutron network. ``--name `` Share network name. ``--description `` Share network description. .. _manila_share-replica-create: manila share-replica-create --------------------------- .. code-block:: console usage: manila share-replica-create [--availability-zone ] [--share-network ] Create a share replica (Experimental). **Positional arguments:** ```` Name or ID of the share to replicate. **Optional arguments:** ``--availability-zone , --availability_zone , --az `` Optional Availability zone in which replica should be created. ``--share-network , --share_network `` Optional network info ID or name. .. _manila_share-replica-delete: manila share-replica-delete --------------------------- .. code-block:: console usage: manila share-replica-delete [--force] [ ...] Remove one or more share replicas (Experimental). **Positional arguments:** ```` ID of the share replica. **Optional arguments:** ``--force`` Attempt to force deletion of a replica on its backend. Using this option will purge the replica from Manila even if it is not cleaned up on the backend. Defaults to False. .. _manila_share-replica-list: manila share-replica-list ------------------------- .. code-block:: console usage: manila share-replica-list [--share-id ] [--columns ] List share replicas (Experimental). **Optional arguments:** ``--share-id , --share_id , --si `` List replicas belonging to share. ``--columns `` Comma separated list of columns to be displayed example --columns "replica_state,id". .. _manila_share-replica-promote: manila share-replica-promote ---------------------------- .. code-block:: console usage: manila share-replica-promote Promote specified replica to 'active' replica_state (Experimental). **Positional arguments:** ```` ID of the share replica. .. _manila_share-replica-reset-replica-state: manila share-replica-reset-replica-state ---------------------------------------- .. code-block:: console usage: manila share-replica-reset-replica-state [--replica-state ] Explicitly update the 'replica_state' of a share replica (Experimental). **Positional arguments:** ```` ID of the share replica to modify. **Optional arguments:** ``--replica-state , --replica_state , --state `` Indicate which replica_state to assign the replica. Options include in_sync, out_of_sync, active, error. If no state is provided, out_of_sync will be used. .. _manila_share-replica-reset-state: manila share-replica-reset-state -------------------------------- .. code-block:: console usage: manila share-replica-reset-state [--state ] Explicitly update the 'status' of a share replica (Experimental). **Positional arguments:** ```` ID of the share replica to modify. **Optional arguments:** ``--state `` Indicate which state to assign the replica. Options include available, error, creating, deleting, error_deleting. If no state is provided, available will be used. .. _manila_share-replica-resync: manila share-replica-resync --------------------------- .. code-block:: console usage: manila share-replica-resync Attempt to update the share replica with its 'active' mirror (Experimental). **Positional arguments:** ```` ID of the share replica to resync. .. _manila_share-replica-show: manila share-replica-show ------------------------- .. code-block:: console usage: manila share-replica-show Show details about a replica (Experimental). **Positional arguments:** ```` ID of the share replica. .. _manila_share-server-delete: manila share-server-delete -------------------------- .. code-block:: console usage: manila share-server-delete [ ...] Delete one or more share servers (Admin only). **Positional arguments:** ```` ID of the share server(s) to delete. .. _manila_share-server-details: manila share-server-details --------------------------- .. code-block:: console usage: manila share-server-details Show share server details (Admin only). **Positional arguments:** ```` ID of share server. .. _manila_share-server-list: manila share-server-list ------------------------ .. code-block:: console usage: manila share-server-list [--host ] [--status ] [--share-network ] [--project-id ] [--columns ] List all share servers (Admin only). **Optional arguments:** ``--host `` Filter results by name of host. ``--status `` Filter results by status. ``--share-network `` Filter results by share network. ``--project-id `` Filter results by project ID. ``--columns `` Comma separated list of columns to be displayed example --columns "id,host,status". .. _manila_share-server-show: manila share-server-show ------------------------ .. code-block:: console usage: manila share-server-show Show share server info (Admin only). **Positional arguments:** ```` ID of share server. .. _manila_show: manila show ----------- .. code-block:: console usage: manila show Show details about a NAS share. **Positional arguments:** ```` Name or ID of the NAS share. .. _manila_shrink: manila shrink ------------- .. code-block:: console usage: manila shrink Decreases the size of an existing share. **Positional arguments:** ```` Name or ID of share to shrink. ```` New size of share, in GiBs. .. _manila_snapshot-access-allow: manila snapshot-access-allow ---------------------------- .. code-block:: console usage: manila snapshot-access-allow Allow read only access to a snapshot. **Positional arguments:** ```` Name or ID of the share snapshot to allow access to. ```` Access rule type (only "ip", "user"(user or group), "cert" or "cephx" are supported). ```` Value that defines access. .. _manila_snapshot-access-deny: manila snapshot-access-deny --------------------------- .. code-block:: console usage: manila snapshot-access-deny [ ...] Deny access to a snapshot. **Positional arguments:** ```` Name or ID of the share snapshot to deny access to. ```` ID(s) of the access rule(s) to be deleted. .. _manila_snapshot-access-list: manila snapshot-access-list --------------------------- .. code-block:: console usage: manila snapshot-access-list [--columns ] Show access list for a snapshot. **Positional arguments:** ```` Name or ID of the share snapshot to list access of. **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "access_type,access_to". .. _manila_snapshot-create: manila snapshot-create ---------------------- .. code-block:: console usage: manila snapshot-create [--force ] [--name ] [--description ] Add a new snapshot. **Positional arguments:** ```` Name or ID of the share to snapshot. **Optional arguments:** ``--force `` Optional flag to indicate whether to snapshot a share even if it's busy. (Default=False) ``--name `` Optional snapshot name. (Default=None) ``--description `` Optional snapshot description. (Default=None) .. _manila_snapshot-delete: manila snapshot-delete ---------------------- .. code-block:: console usage: manila snapshot-delete [ ...] Remove one or more snapshots. **Positional arguments:** ```` Name or ID of the snapshot(s) to delete. .. _manila_snapshot-export-location-list: manila snapshot-export-location-list ------------------------------------ .. code-block:: console usage: manila snapshot-export-location-list [--columns ] List export locations of a given snapshot. **Positional arguments:** ```` Name or ID of the snapshot. **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "id,path". .. _manila_snapshot-export-location-show: manila snapshot-export-location-show ------------------------------------ .. code-block:: console usage: manila snapshot-export-location-show Show export location of the share snapshot. **Positional arguments:** ```` Name or ID of the snapshot. ```` ID of the share snapshot export location. .. _manila_snapshot-force-delete: manila snapshot-force-delete ---------------------------- .. code-block:: console usage: manila snapshot-force-delete [ ...] Attempt force-deletion of one or more snapshots. Regardless of the state (Admin only). **Positional arguments:** ```` Name or ID of the snapshot(s) to force delete. .. _manila_snapshot-instance-export-location-list: manila snapshot-instance-export-location-list --------------------------------------------- .. code-block:: console usage: manila snapshot-instance-export-location-list [--columns ] List export locations of a given snapshot instance. **Positional arguments:** ```` Name or ID of the snapshot instance. **Optional arguments:** ``--columns `` Comma separated list of columns to be displayed example --columns "id,path,is_admin_only". .. _manila_snapshot-instance-export-location-show: manila snapshot-instance-export-location-show --------------------------------------------- .. code-block:: console usage: manila snapshot-instance-export-location-show Show export location of the share instance snapshot. **Positional arguments:** ```` ID of the share snapshot instance. ```` ID of the share snapshot instance export location. .. _manila_snapshot-instance-list: manila snapshot-instance-list ----------------------------- .. code-block:: console usage: manila snapshot-instance-list [--snapshot ] [--columns ] [--detailed ] List share snapshot instances. **Optional arguments:** ``--snapshot `` Filter results by share snapshot ID. ``--columns `` Comma separated list of columns to be displayed example --columns "id". ``--detailed `` Show detailed information about snapshot instances. (Default=False) .. _manila_snapshot-instance-reset-state: manila snapshot-instance-reset-state ------------------------------------ .. code-block:: console usage: manila snapshot-instance-reset-state [--state ] Explicitly update the state of a share snapshot instance. **Positional arguments:** ```` ID of the snapshot instance to modify. **Optional arguments:** ``--state `` Indicate which state to assign the snapshot instance. Options include available, error, creating, deleting, error_deleting. If no state is provided, available will be used. .. _manila_snapshot-instance-show: manila snapshot-instance-show ----------------------------- .. code-block:: console usage: manila snapshot-instance-show Show details about a share snapshot instance. **Positional arguments:** ```` ID of the share snapshot instance. .. _manila_snapshot-list: manila snapshot-list -------------------- .. code-block:: console usage: manila snapshot-list [--all-tenants [<0|1>]] [--name ] [--status ] [--share-id ] [--usage [any|used|unused]] [--limit ] [--offset ] [--sort-key ] [--sort-dir ] [--columns ] List all the snapshots. **Optional arguments:** ``--all-tenants [<0|1>]`` Display information from all tenants (Admin only). ``--name `` Filter results by name. ``--status `` Filter results by status. ``--share-id , --share_id `` Filter results by source share ID. ``--usage [any|used|unused]`` Either filter or not snapshots by its usage. OPTIONAL: Default=any. ``--limit `` Maximum number of share snapshots to return. OPTIONAL: Default=None. ``--offset `` Set offset to define start point of share snapshots listing. OPTIONAL: Default=None. ``--sort-key , --sort_key `` Key to be sorted, available keys are ('id', 'status', 'size', 'share_id', 'user_id', 'project_id', 'progress', 'name', 'display_name'). Default=None. ``--sort-dir , --sort_dir `` Sort direction, available values are ('asc', 'desc'). OPTIONAL: Default=None. ``--columns `` Comma separated list of columns to be displayed example --columns "id,name". .. _manila_snapshot-manage: manila snapshot-manage ---------------------- .. code-block:: console usage: manila snapshot-manage [--name ] [--description ] [--driver_options [ [ ...]]] Manage share snapshot not handled by Manila (Admin only). **Positional arguments:** ```` Name or ID of the share. ```` Provider location of the snapshot on the backend. **Optional arguments:** ``--name `` Optional snapshot name (Default=None). ``--description `` Optional snapshot description (Default=None). ``--driver_options [ [ ...]], --driver-options [ [ ...]]`` Optional driver options as key=value pairs (Default=None). .. _manila_snapshot-rename: manila snapshot-rename ---------------------- .. code-block:: console usage: manila snapshot-rename [--description ] [] Rename a snapshot. **Positional arguments:** ```` Name or ID of the snapshot to rename. ```` New name for the snapshot. **Optional arguments:** ``--description `` Optional snapshot description. (Default=None) .. _manila_snapshot-reset-state: manila snapshot-reset-state --------------------------- .. code-block:: console usage: manila snapshot-reset-state [--state ] Explicitly update the state of a snapshot (Admin only). **Positional arguments:** ```` Name or ID of the snapshot to modify. **Optional arguments:** ``--state `` Indicate which state to assign the snapshot. Options include available, error, creating, deleting, error_deleting. If no state is provided, available will be used. .. _manila_snapshot-show: manila snapshot-show -------------------- .. code-block:: console usage: manila snapshot-show Show details about a snapshot. **Positional arguments:** ```` Name or ID of the snapshot. .. _manila_snapshot-unmanage: manila snapshot-unmanage ------------------------ .. code-block:: console usage: manila snapshot-unmanage [ ...] Unmanage one or more share snapshots (Admin only). **Positional arguments:** ```` Name or ID of the snapshot(s). .. _manila_type-access-add: manila type-access-add ---------------------- .. code-block:: console usage: manila type-access-add Adds share type access for the given project (Admin only). **Positional arguments:** ```` Share type name or ID to add access for the given project. ```` Project ID to add share type access for. .. _manila_type-access-list: manila type-access-list ----------------------- .. code-block:: console usage: manila type-access-list Print access information about the given share type (Admin only). **Positional arguments:** ```` Filter results by share type name or ID. .. _manila_type-access-remove: manila type-access-remove ------------------------- .. code-block:: console usage: manila type-access-remove Removes share type access for the given project (Admin only). **Positional arguments:** ```` Share type name or ID to remove access for the given project. ```` Project ID to remove share type access for. .. _manila_type-create: manila type-create ------------------ .. code-block:: console usage: manila type-create [--snapshot_support ] [--create_share_from_snapshot_support ] [--revert_to_snapshot_support ] [--mount_snapshot_support ] [--extra-specs [ [ ...]]] [--is_public ] Create a new share type (Admin only). **Positional arguments:** ```` Name of the new share type. ```` Required extra specification. Valid values are 'true'/'1' and 'false'/'0'. **Optional arguments:** ``--snapshot_support , --snapshot-support `` Boolean extra spec used for filtering of back ends by their capability to create share snapshots. ``--create_share_from_snapshot_support , --create-share-from-snapshot-support `` Boolean extra spec used for filtering of back ends by their capability to create shares from snapshots. ``--revert_to_snapshot_support , --revert-to-snapshot-support `` Boolean extra spec used for filtering of back ends by their capability to revert shares to snapshots. (Default is False). ``--mount_snapshot_support , --mount-snapshot-support `` Boolean extra spec used for filtering of back ends by their capability to mount share snapshots. (Default is False). ``--extra-specs [ [ ...]], --extra_specs [ [ ...]]`` Extra specs key and value of share type that will be used for share type creation. OPTIONAL: Default=None. example --extra-specs thin_provisioning=' True', replication_type=readable. ``--is_public , --is-public `` Make type accessible to the public (default true). .. _manila_type-delete: manila type-delete ------------------ .. code-block:: console usage: manila type-delete [ ...] Delete one or more specific share types (Admin only). **Positional arguments:** ```` Name or ID of the share type(s) to delete. .. _manila_type-key: manila type-key --------------- .. code-block:: console usage: manila type-key [ [ ...]] Set or unset extra_spec for a share type (Admin only). **Positional arguments:** ```` Name or ID of the share type. ```` Actions: 'set' or 'unset'. ```` Extra_specs to set or unset (key is only necessary on unset). .. _manila_type-list: manila type-list ---------------- .. code-block:: console usage: manila type-list [--all] [--columns ] Print a list of available 'share types'. **Optional arguments:** ``--all`` Display all share types (Admin only). ``--columns `` Comma separated list of columns to be displayed example --columns "id,name". .. _manila_unmanage: manila unmanage --------------- .. code-block:: console usage: manila unmanage Unmanage share (Admin only). **Positional arguments:** ```` Name or ID of the share(s). .. _manila_update: manila update ------------- .. code-block:: console usage: manila update [--name ] [--description ] [--is-public ] Rename a share. **Positional arguments:** ```` Name or ID of the share to rename. **Optional arguments:** ``--name `` New name for the share. ``--description `` Optional share description. (Default=None) ``--is-public , --is_public `` Public share is visible for all tenants. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151915.847239 manila-23.0.0.0rc1/doc/source/conf.py0000664000175000017500000002102715251045254015774 0ustar00zuulzuul# Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. # # manila documentation build configuration file, created by # sphinx-quickstart on Sat May 1 15:17:47 2010. # # This file is execfile()d with the current directory set # to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import eventlet import sys import os # NOTE(dims): monkey patch subprocess to prevent failures in latest eventlet # See https://github.com/eventlet/eventlet/issues/398 try: eventlet.monkey_patch(subprocess=True) except TypeError: pass # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('../../')) sys.path.insert(0, os.path.abspath('../')) sys.path.insert(0, os.path.abspath('./')) # -- General configuration ---------------------------------------------------- # Add any Sphinx extension module names here, as strings. # They can be extensions coming with Sphinx (named 'sphinx.ext.*') # or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.coverage', 'sphinx.ext.ifconfig', 'sphinx.ext.graphviz', 'openstackdocstheme', 'oslo_config.sphinxconfiggen', 'oslo_config.sphinxext', 'oslo_policy.sphinxext', 'oslo_policy.sphinxpolicygen', ] config_generator_config_file = ( '../../etc/oslo-config-generator/manila.conf') sample_config_basename = '_static/manila' policy_generator_config_file = ( '../../etc/manila/manila-policy-generator.conf') sample_policy_basename = '_static/manila' # openstackdocstheme options openstackdocs_repo_name = 'openstack/manila' openstackdocs_pdf_link = True openstackdocs_bug_project = 'manila' openstackdocs_bug_tag = 'docs' todo_include_todos = True # oslo_config.sphinxext renders options from all namespaces in the config # generator file; when multiple namespaces register the same option in the # same group (e.g. castellan.config and manila both register keystoneauth # session options in [barbican]), docutils emits "Duplicate ID" warnings. # The config generator deduplicates, but the Sphinx extension does not. suppress_warnings = ['docutils'] # Add any paths that contain templates here, relative to this directory. templates_path = [] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. # source_encoding = 'utf-8' # The master toctree document. master_doc = 'index' # General information about the project. copyright = '2010-present, Manila contributors' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. # today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. unused_docs = [ 'api_ext/rst_extension_template', 'installer', ] # List of directories, relative to source directory, that shouldn't be searched # for source files. exclude_trees = [] # The reST default role (used for this markup: `text`) to use # for all documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). add_module_names = False # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'native' # A list of ignored prefixes for module index sorting. modindex_common_prefix = ['manila.'] # -- Options for man page output ---------------------------------------------- # Grouping the document tree for man pages. # List of tuples 'sourcefile', 'target', u'title', u'Authors name', 'manual' man_pages = [ ('cli/manila-manage', 'manila-manage', 'Cloud controller fabric', ['OpenStack'], 1), ('cli/manila-status', 'manila-status', 'Cloud controller fabric', ['OpenStack'], 1), ] # -- Options for HTML output -------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'openstackdocs' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. html_theme_options = { "show_other_versions": "True", } # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". # html_title = None # A shorter title for the navigation bar. Default is the same as html_title. # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ['_static'] # Add any paths that contain "extra" files, such as .htaccess. html_extra_path = ['_extra'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. # html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_use_modindex = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, links to the reST sources are added to the pages. # html_show_sourcelink = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'maniladoc' # -- Options for LaTeX output ------------------------------------------------- # The paper size ('letter' or 'a4'). # latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). # latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass # [howto/manual]). latex_documents = [ ('index', 'doc-manila.tex', 'Manila Developer Documentation', 'Manila contributors', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # Additional stuff for the LaTeX preamble. # latex_preamble = '' # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_use_modindex = True latex_domain_indices = False latex_elements = { 'makeindex': '', 'printindex': '', 'preamble': r'\setcounter{tocdepth}{3}', 'maxlistdepth': 10, } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151966.0231853 manila-23.0.0.0rc1/doc/source/configuration/0000775000175000017500000000000015251045336017343 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151966.0241852 manila-23.0.0.0rc1/doc/source/configuration/figures/0000775000175000017500000000000015251045336021007 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8482392 manila-23.0.0.0rc1/doc/source/configuration/figures/hds_network.jpg0000664000175000017500000047404215251045254024052 0ustar00zuulzuulÿØÿàJFIFÿÛ„ÿÀç&ÿÄ¢ }!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùú w!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þþ( € ( € ( € ( € ( € ( € ( € (  —·özt&âöâ;h†~i,@ÎØÑA’WÇ!#Vr:-yþ¡ñ$,še‘›âíŒiŸU‚<»)õibn9^xæfñLjebÑÜÁl ÎÈm`eÀÜ-ÃãêÄûÐð™ø—þ‚_ù'aÿÈ´Âgâ_ú ä�‡ÿ"Ðÿ Ÿ‰è%ÿ’vü‹@ü&~%ÿ —þIØò-ð™ø—þ‚_ù'aÿÈ´Âgâ_ú ä�‡ÿ"Ðÿ Ÿ‰è%ÿ’vü‹@ü&~%ÿ —þIØò-ð™ø—þ‚_ù'aÿÈ´Âgâ_ú ä�‡ÿ"Ðÿ Ÿ‰è%ÿ’vü‹@ü&~%ÿ —þIØò-ð™ø—þ‚_ù'aÿÈ´Âgâ_ú ä�‡ÿ"Ðÿ Ÿ‰è%ÿ’vü‹@ü&~%ÿ —þIØò-ð™ø—þ‚_ù'aÿÈ´Âgâ_ú ä�‡ÿ"Ðÿ Ÿ‰è%ÿ’vü‹@ü&~%ÿ —þIØò-ð™ø—þ‚_ù'aÿÈ´Âgâ_ú ä�‡ÿ"Ðÿ Ÿ‰è%ÿ’vü‹@ü&~%ÿ —þIØò-ð™ø—þ‚_ù'aÿÈ´Âgâ_ú ä�‡ÿ"Ðÿ Ÿ‰è%ÿ’vü‹@ñ§‰AûG<ô6v>Ç óìAô4­iñ Tˆ�wmkv™ä®ûiO¶õ2DíûŒú“@Ö“âýU)•¬î›Au„ÞÞ‘L ‰òxU,’·h訠€ ( € ( € ( € ( € ( € ( € ( € ( € ( Àø:;þPQûrÿݳëaþÏ´ûý@P@P@P@P@P@P@P@ψüKm ÂoŸ2··è€d¯�pÀ‚°†_žfR‹´–0Ô5+ÝRá®ogy¤9ÚŸ.%<ùpÆ>H�uÉË6æ%ˆ( € ( € ( € ( € ( € ( € ( € ( €;Ï øÊ}=£³ÕK›ò¤íºK‹Aü<òÓ@½ g2FŸêI!`bGI$�ÖHäUtt`ÈèÀ2º2’¬¬¤`H ‚(ÔP@P@P@P@P@P@P@P@P@€?ðtwü £öåÿ»fÿÖÃýŸh÷ú€ ( € ( € ( € ( € ( € ( € (  ½cT‡GÓç¾› c]°Åœ®* pH Ã.À‘«¾ÜPÏ··—÷S^]Hdžw.ìzÊŠ9Úˆ $j8TUQÀ  ´P@P@|ÿm¢ÚSãWÄO‚ú¶µâ-áÁ¿ øQø�cájþñÄ¿|H‡ÄWúG�ïüUáû«hŸ¼7á]"ÓÄ>&´ðΧ¢k^4Ö|Iáíï\ƒÁú/‹ü3ãpžûþ oÿúÔԿeO…Ú�ôâ?>öúËT»¼¸1D�£Ü]\j’O<‚8ÑL³Hò>Ü»3d� Ÿðê�ø'gý?Â?üßÿòÆ€øuGü³þ�áþ oÿùc@ü:£þ ÙÿF�ð�ÿ7ÿü± þQÿìÿ£GøGÿ‚›ÿþXÐÿ¨ÿ‚vÑ£ü#ÿÁMÿÿ,hÿ‡TÁ;?èÑþÿà¦ÿÿ–4ê?à�ŸôhÿÿðSÿË?áÕðNÏú4„ø)¿ÿå�ðê�ø'gý?Â?üßÿòÆ€øuGü³þ�áþ oÿùc@ü:£þ ÙÿF�ð�ÿ7ÿü± þQÿìÿ£GøGÿ‚›ÿþXÐÿ¨ÿ‚vÑ£ü#ÿÁMÿÿ,hÿ‡TÁ;?èÑþÿà¦ÿÿ–4¨ÿðOŸ�Ñå¿ý™<;ìïñH‚{¯ ë> ÕüKkàíCRŽG¾·Ðþ%øûb_ øïÀºÕîÛ?i·š|>%·Ò®o/<â�xºÅP_¾'ÁñŸá€>'Ŧ6‰/Œ<;i¨êZÜ}°èZô&KhBôE¾M^´ÔtÈï–õ-Véa‰f¨ªÐ@P@èÞñC2è·Oû‰Ëcþªà�ÆÜg�ÿ3 ÈÄÿ*«ÉPZ € ( € ( € ( € ( € ( € ( € ( € ( € üÿƒ£¿å·/ýÛ7þ¶ìû@¿ÔP@P@P@P@P@P@P@x÷�õ3q¨Å¦£~æÅÊàÝN¡Ž{.^êÏ(îh€ € ( € ( ›c�ù<�ø(·ý†?e_ýRWúe@ä?h€ß³…-³¦y'RÒWÄÞ Õõ½µ=<\[›ëzn­<ø~Ñ~jn¡à¯Ú#öø“ñÇÿ~|tø;ãï‹? %X~)|/ðWÄßx§â'ÃYšäÙ,^?ðV‡­ßø—ÁҵⵢÇâ-3Ncr y ¥Añ·ö’ý�f} HñGíñóà·ìýáŸjÇ@Ð|Eñ·âŸ�¾èZÞº,î5¢é¿ŽõÝOÔµa§Ú]_:ÎâkÁgmqraò!‘ÔÑ|ã/|DðŸ†ü{ðÿÅ^ñ×�¼e¡éž&ð‡�<®iž'ðŸŠü7­ÙèhÞ!ð߈´K«í]Ðõ{ ˆ/´Í[K¼º°¿³ž›[‰a‘€<¿ã?íCû4~Îi×_´?íð/à5¶®’I¤Ü|gø·à…Ðj‰ùr¾�/Žä € ( € (È螺±G�•ÑÔá•Ô†V±R±ô^�~º¦™e|Ý<*e`,é˜çP=dp¾«ƒÐÐ�P@P@P@P@P@P@P@P@øÿGÊ ?n_û¶oýl?Ùö€?¨ € ( € ( € ( € ( € ( € ( € ù»U¹7z•ýÉ9óîî$_d2¶Åú*mQßP ( € ( € ù·ö8ÿ“Èÿ‚‹ØcöUÿÕ%q@¦TP@Èïüƒÿ(£øQÿgÉð—ÿTÇí@—ð£þLÿ‚+økö7økð«[ý³þÅãïþÌÞø}«è?ðοµ…ÏÙ<_¥|,Ó¼9¤jZ| ŸFŸÈÖ –ÏíöÚŒÚ\»>Ñ ì–Œ³�æûþ yÿ*ªÿÁiÿì¶Zÿéƒöh oÿƒt¿h¯ˆßðJ_Úƒörý™þ>ësà Á]þü/ø×ðÆWåí|;áŸÚVÓ£ðÄzv÷y,ì5-sÅ:}ÿÁßÙÀÒj“Ü| ñF¤tÍ&ç˪ÿðE¯ùXƒþ ïÿc%—þ¬«ªñoø,Ãfÿ‚ÑÁuþÁ)ôÝzòÏàÇì‡û4üXø±ñÏYÒ§Ÿ>ø“ñ7ÀVú¦�¨ÝÇfÛ.ÓH»Ôfí.Ù§“ͱ—Æ~'´X‡›qoz÷—ü‹ûJøŸÇ°GÄØÇ⹞Çã‡ü»ã‡Œþx³ÃÚ„¾v¯¥x/Z×uíÁɨ³6õþÇñM¯Ä߇Öå6Zéž²†7(¡"þw¾9jß²ŸìËÿêý½|_Ó­¾7[øB¾�ã=/±Ùh^ñÖ›ak¥êqhWQør€?¬Š( €?ÿà›_òeëŸÄýZž8 ¹( € ( € (Ø>\™4»»f$ýšózçøc¸‰HQíæG#têÇ“ØÐ( € ( € ( € ( € ( € ( € ( € ( € ( Àø:;þPQûrÿݳëaþÏ´ûý@P@P@P@P@P@P@PËä’I$’NI<’ORO­P@P@óoìqÿ'‘ÿÿ°Çì«ÿªJâ€?L¨ €?‘ßø=þQGð£þÏ“á/þ©�Ú*€?S> ÿÁ9ÿàŸ—ì%ðŸÅ:�ì%ûßøšÿöIð&¿}â+ßÙ‡à•Ö»{®Ý|Òµ�jïWŸÀï¨\j׃½ôú”×y5ã½Ô“4ì\€¿ðKÏùUWþ Oÿe²×ÿL³E~Îx§þ ›?ü�þ ‡ý…l~éÒŸÚ›öqý�¼3ñ¿öfÖ4²öþ!¼ñN…my?Š>i—öæ+¸OÄÍÁtí&(®¬à�ÇúO€u›Ë„·Ñ ŸðkOí}©øËö¾ÿ‚¶þÚŸ´Î­™©Ø~Ì>ø¿ñÛÄíoö]òøêþÿâ'Œ/l¤0¥¥þ¨¾Õ|I©ØÆ-ímµ Ë›[X­í£†(À1àŽðL¿Ú‡þ ÷ªþÙðUßøo¿Ú‡öñwíûL|IÐ4ÛŸÙ·_ñ†µÏøf[Í#ÇÖ“¨x�Ãþ5ð^¡uà? êºÞ…àÏ éîtôºðMÚ´I¥ÚúöøOãÏø!�üs¢þÌ_þ=xûã÷Ã/ø)Á_4ütø¬÷?ð•xóâ߉5½]ðþ¿ã}BçY×n5ψOñÁ^)ð*ß^jú†§{kñrÃWÕGŸ«  öŸÅÏø/_ÄŸÙKö�ý£eßø.WüétïÙú4³¿ÅOƒµO‰ÿ ¾$xVÆÿZ†/x¤|[ñž§á�Ùø§B›D¾Óîüm5oj£WðŸ‹ü¤ngÒ?1ÿb|;ý»¿àà�Ù¯öÎÿ‚G~ÆÿdoØŸà׆å¿ý ¾#_ü:ƒáÂßk£Fø‘§ø³þÿ øoRÕ< £7Ä­Äžøy§ø—Ë}©-–§ã�Wº=´ö§úÐ@ø÷ÿÚÿ“+ø+ÿ\þ êÔñÅ}É@P@P@£ðÜœk#<§�=ÏÛA?Žå@Ÿ@P@P@P@P@P@P@P@P@~ÿÁÑßò‚�Û—þí›ÿ[ö} ßê( € ( € ( € ( € ( € ( € ( €>_ € ( € ( €>sý�-î#ý°¿à¢ÉÑÁs¬~Ë&Þg‰Ò+�'à¬ñËäÈÊ_)þI<²Ûål(ô²€ ( € ( € ( € ( Èø'½Å§ìcðfÞê ­®"O‰ ¸‰áš2~)xÝ€x¤Ut%X0 £*AèE}½@P@P@¡ðßþc?÷ÿÛêõ ( € ( € ( € ( € ( € ( € ( € ( € (ðþŽÿ”~Ü¿÷lßúسí~ÿP@P@P@P@P@P@P@òýP@P@â:•�Ž~|SÕþ:|,ð«üD‹Æ¾ð¿ƒþ0ü'´Õ4kþ&°ðuþ³qàß|;×øoe7ÚaŸÄ¶þðÏÄÏø—â‰,á‹í~𭦛aámSPkKxÏÃ6M7šÚ|6øáï…?üðבܧ‡| á­ÂúCßKÆ¥ui£ÙCfº†­w6ë¬êOê΢`ŽMGT¹»¾™|Û‡ Ú€ ( € ( €=Cá¿üÆîÿ·ÔêP@P@P@P@P@P@P@P@Pàüÿ((ý¹îÙ¿õ°ÿgÚýþ € ( € ( € ( € ( € ( € ( € (åú( € ( € ( € (  ­í纚;{hži¥m±Å–v=x°–'Tb&€?(à¡?ðV�„±4zÏÃ?†‰¡ücý¨¡Š[Ytpo>|#¿xÈŽçâí„ÑÉ«øŠÍÙeOéW–×ÈPÿmj:6Oû7‡^fœ\èf™·¶Ê¸u¸Î5yTq¹œÖ8T‹TèÊÖxÚ°•=qOÔ¹?�¼]ñÿ%à‰É2/«çœ\£*s ¦ç–äÕ²–iR””ªâ Ú’ËhT…m?ÚkaS‡´þlîà²ßðRë«›‹“ûSx–q<³˜m¼ð hLÒ4†+xÁ!‚=Û"‰~Xã ‹Àý-|9Œcõg .X¨óK™JNÊ×”ž6îOvÞïSøÞ~?x»9Îëž.<ò”¹a—äÑ„y›|°ŠË­«Ú1Z%dAÿ�ÿ‚–ÿÑÕx³ÿ /†_üÄSÿˆGá×ý_ü*Ì¿ù´Ÿø�~.ÿÑk�ÿŸÿ�Áÿ�ÿ‚–ÿÑÕx³ÿ /†_üÄQÿ�ïú&0¿øU™óhÄ{ñwþ‹\oþäÿüîø|ü·þŽ«ÅŸøI|2ÿæ"�ø„~Ñ1…ÿ¬Ëÿ›Cþ#ß‹¿ôZãð‡'ÿçpÃãÿॿôu^,ÿÂKá—ÿ1Ä#ðëþ‰Œ/þf_üÚñü]ÿ¢×ÿ„9?ÿ;ƒþÿ-ÿ£ªñgþ_ ¿ùˆ£þ!‡_ôLað«2ÿæÐÿˆ÷âïý¸ßü!ÉÿùÜðøÿø)oýW‹?ð’øeÿÌEñü:ÿ¢c ÿ…Y—ÿ6‡üG¿èµÆÿáOÿÎáÑÿÁbÿà¦2ºEíOâù%‘Ö8ã� Ýäw!QÀå™ÙˆUU± I¡øIáÊM¾Â$“m¼^b’Kvß×tK«ã׋Òj1ãLsm¤’Àe ¶ôI%—]¶ôIn~¸|1ý©mßÙÇÀºíÿ+ý±>"ü?ðæµhuŸ…²7‡¼/ðÎÏö‡øáä:˜gñ›/‚íî~|=–aö}OXÖ^Ã]’%º·OìBM k•f\3ÁœC�¯ÃÞp–_�ÄQŸ±Í8¯‰Ì§�d¼ÉóGQc%Ï—½N•R‚|²ýý5[Øþå“ñŸˆœ'–ḳÅÞ<Ír¼&"XÉ8 ƒÉéñWrµË,U)eðžK•Ê^íjø‡Kâ§õZ¯ õ�ÜOÙ7ö˜ÖÿlOÙCàÇíâ é^Ô¾$_ü\uðÎ�uw}e£é~ø³âÏh6­zD÷÷ÿØ~Ó¦Õ¯„6v÷º´·×Vzv™g4}·àœuÔxKŠ3.¡‰«‹§—ÓË“ÄÖŒ!:ÕqYV ^J÷aOÛâj*P¼å J�J“R©/êO ¸¿Ǽ“ñf+GW6«›µƒÃÎu)У‚Ï3,» V§½V¯Õ°”¥^§-8T®êN�*4åP÷Zù#ïB€ ( € ( €=Cá¿üÆîÿ·ÔêP@P@P@P@P@P@P@P@Pàüÿ((ý¹îÙ¿õ°ÿgÚýþ € ( € ( € ( € ( € ( € ( € (åú( € ( € ( € (·SéÚ^•«ø‹_ÕôŸ x_ú}Ö¯âOx‡PµÑü?áý"Ƹ½Ôõ}VúX,ì¬í`Gši§™8Õ¤vHÕÝvÃáëâ«ÒÃahÕÄb+Ô�*(S�ZժͨÂ�*pRœç94£§&Ý’9ñX¼. _�ÄPÂa0´§_ŠÄÕ… >�8¹T«ZµYF�*pŠrœç%¥vÒ?˜/ø(Çü ï[‡Ä_a�OQðÿ…åYô�~Ñánt¿x²6ÌWzwÂËic‚ûÁ¾`6ñmÊÅâ�Kxm%œZƵýWáÇ‚pWÎøÎ•ÄÅÙÃ)¥R1y¶m‡’këµiШ£eB¤1:Ÿ‘ß>*|FøÕã�{âWÅkÞ=ñ׉îÚ÷Zñ/ˆï¤¾Ô.¤U^nÑ£šÃ„—¬ª<®t!8Ëšub¹gÝ,+ð÷F”ñ< Ï0´ÕåˆÈêåøøéÒ4–wOR\Êpå§BmÊœÒVI¿ˆ~+þÓ>7øä|eÿ‚*~Éß !2¢¿ñ¿ìáñ#ÃÚEÛ3ùJtýkQÖ Òu(Þ_Ý$Ö·1<¡¢W.¬£ìò¾Ágkþ#Ä/ÃgøüËŠjptxmdXŒÿ,cÂK9Ëëfº±Ã¾\/¶�ZtãF§±½5Í~õF¤~Ë�¸Ï„ð§€1|+•äüGÄ)ñŒ¸Ÿ ÂØ(eÑÇC‡sl6U�¡,RæÇ}^T*Ö–"“Ä8ÖueN_¸r¥/çþ¿v?˜€?¼ÿø$/ü¢ëöGÿº÷ÿ­ñ.¿ƒµ¬ø{P·Õ´ [SÐõ[GY-u=þëLÔ-¤VWW·¼²– ˜]]Õ£‘X2«�ε8Šr¥^•*ô¤­*u©Æ¥9&¬Ô¡5(µfÖ«fm‡Äb0µc_ ^¶´p­‡«:5`ÓM8Ô§(Î-4ši­RgÜÿ ¿à¨··Á¸–ÃÃ?´·Ä/h±ÜxWâ}å¯Å¿ Ýio‘>Žt¯‰6¾'K2æØ½´¶úKé̱I'‘,27™_šøiÀÙ»u1<;€¡^üñÅe°–U‰�Tù£[ÚåÒÃsÔŒ­%*ª¢º\É­Ò2OH(õƒö»ÿ”]Á îÿÿõ¡ü5_—p§üœ¿?îÄÿÕ$ý·Ž¿äÍøÿy?ÿZ¬!ù?_¨Ÿ‰yÿðH_ùE×ì�ÿuïÿZâ]xÑÿ'/‰?î�ÿª ¨ÿQ¾ŽŸòfø;þîýj³ÃôB¿.?m ( € ( € õ†ÿóÿ¸wþßP¨P@P@P@P@P@P@P@P@P@€?ðtwü £öåÿ»fÿÖÃýŸh÷ú€ ( € ( € ( € ( € ( € ( € ( —è € ( € ( /âLj|!á�´g‹> øPxóÀ>ýŸ>/x‹ÇiRñŸ„4_êZ—‰|&ÓÉòBY‰­ŒÁs=#õ¬<*Pæz/iw¡üxêßðM?ƒßµ¹ñŸü;ö�ðOÄÿí+yµ�øeo�:þ•ðËö“ðr�h÷º%ŒZÝÅ¿‡|u§hÓßAk7Š£½ÒOB®cø·ï(V›£WÁT­9,3…ZîÒ›Ãáâýœ?Îúþd”*`ª¨¥véâ&’³½šgÍ•ôGÈ…P@U|ý‡?kÿ�“['Â_ÙÇâß‹¬îÞ8â×ÓÁúž‹áyqå‹�xŠ-#ÂV{ÃïZ€ya¥'ËGeùŒÛ�xO"Ry¯åXYÅ6è<]:Ø»-ùpxwW;mîQ–ºnÒ>×!ðçŽøšPY ç˜êsiG°°øÞÜÙ†-PÀÂûûøˆéyl›>þÒà�ß³¯ì‡=¿Œ¿à¥ÿ´o„´­WIjþÇÿ³Öµiñ㿊.–×ûJËAñ–§§vœäÓzÊNíãôŠÆÑÌ8³…ñ˜l,p8LO‡|-ˆÁà ã*x.'ëøš8:rŒ)©CÞÊ2Tàš�Ô"­øÓ_¯€…~°~×ò‹¯ø$ýßÿþ´?†«òîÿ“—âÇýØŸú ÄŸ¶ñ×ü™¿ï'ÿëU„?'ëõñ  ï?þ ÿ(ºý‘ÿî½ÿëCüK¯àÏ?äåñ'ýÑÿõA•ê7ÑÓþLßÝÃÿ­Vx~ˆWåÇí¡@P@P@¡ðßþc?÷ÿÛêõ ( € ( € ( € ( € ( € ( € ( € ( € (ðþŽÿ”~Ü¿÷lßúسí~ÿP@P@P@P@P@P@P@òýP@P@áµ�ü™Ÿí³ÿfwûHÿê«ñ}OÿÉkÁÿöTðÿþ­°‡Äø—ÿ&ãÄû"x¯ÿTXóüåã‘ât–'xä�ÖHä�Šiá¯gçÇpÆYÏ«u0Têeu&Û»•J™eLêÊÿj¤¤ú'cô¼“Æ?ø~.oç^ÎÑQ¥˜Ö¥�ѧ«F4hçT³ t"—Ù£EîÓgÑŸðXï‹>.Ž%øÉû'þÀß®ZU}C\øŸû5Ùj>#¾$âyÆ¡¥xŸI±´Ô$…¤H¯aÒÑÝ„¢+µ¾~åXFÿ²8§ŽrH¤Õ:9oNž{±öupÕg*iÙ¸:«™i̺}UOó¼rŠÏø#Ã.$›iÕÄç#N®.¯óKÚÑÆP§ ®-¨Ô�q¾ek;cþ 5ûjñŸøLà’³MôÓ††ñüã¿|<‰í9 –0éžÔ[M½HmBžf“„R©ÿˆ}ÅÔŸû'ŠœGz ‚ÃcÚŸW7SOÚBÿòí¤’Òì¿øŠü]·øÂ5%+Æ£ËóA–_•ÏòçÃi.&ñ§ˆhNI:X )ÑÍ+sÝ/g†ÁÔÅbå–ä…YP�Tqr¨�·á\Þ<`å. ú9ðž&rUó<Ò­lNK‡ä³~טRÀàa:Wö•hG,EJQ”cIŸX§í+áŸÙ÷N–ßâWíCÿ«ý“<]k žG‡ÿ`?Ùûã×�´�AC4v2ëM­j^ ð—‰4Û£<ãûkFÖt›mAv\}¦Þád.øsŸTR˸kÄî)ÂI«â8ëŠá‘àjÁï5EQ§ŒÅaêFÑýÍj5e cË(´}ºâì ÒpÍøËÁnÇB/— á�UâlÎ…Uv©¼GÖ+eØ]óKý£ˆ¡ ªÒç„Ó>_øÅÿ:ý’\ð«NsÁf¼KšP”n×û^qb¥K3â_¸±òT£Z•<Ç"àì� ò§þÁÃôðu*Âj÷XÚ'¹chÔš_ÿÃZÁ0´><9ÿ¤¸×náý妱ãŸÛOã5ÀódùdŠ÷ÃzV…‘yoeÒßté&öIä;âU?iþªø“_ýãÅЋÒT°\“ÇE³†&­gVnÎ^ëV¼VŒüçýxðw þéà¤ñ3ް¯™xƒŸËW¼ja(a• �Šº…ä�Ú“Ö(ôߊ?ðT_Ù[ãN¥á�_âü ់uxÃ? <1uwûB|S³m'ÀÞ‚k_ x~Òô{æ·Ò ¸š8n.’{éC“su;#ÎË<4â|žž&–[âNe…§ŒÆâsLa�å“Uq¸¹)bk·V´Ú•YE7¸Á[ÝŒOc9ñ—‚ø†¶¾sàîOŽ«—å¸<£:œSœÓt2ìe &*Ž’”hÆrQœÔªÊþü塿_ðÖÿðL]w�ÿÁ(ŸE¼¸æóZð/í¥ñžÄFaâÝ4ÿ jZÚ5ºK pÁxÍpÏ#›‹äÅÄ»£þªø“CýÛÅZø(ã¸?'�ïñ:˜šu•i4Û”*IrÁûªç�þ¼ø=‰ÿ|ðMáç/âb2ßx‚�¹~K[ ,|Rð�Ž]ÝæÕíüJ°x®âÝcÄ1Ǥ«\™ Nä¤s—°ñ‹ïCÀùí8«Êœ>i–bç²J”°×ÂÆMêÝV£k¥«V¯¬ý3?v¦[â_ U“´jàñy&s�§«nUã‹åÆÎ {©P\÷åoE.o®>-ü"ý�ÿk?ÙWö?ý›eoÛËàÌ>&ý–›öƒh4¿ÚzÏųþ«ã—øéñCñõ®�§ê:Þ‡yáÆ×´9,§Ñ-áÒïu]?^¹šÖQ{¥bê+”ʳn+á^'âÎ"â~ÍÞ‰–CÍW†ç†Ïi`–I€¯�•j”èÖŽ!P®§ÒuaJ¥©.J¾ë—Üç™ñÇp' p_‰yqœø£–�ÓÆpÅ|Éñ&i†ÌᇥW‡žâpΜ°ñ�•ébg(?iCßPü”ý£a¿ÚŸöQh.¾6|!ñ‡|1|öãHøƒ¤µ—‹~ki{M§6›ãß ÜêÞyuy#¸´Ó®µ]Y¢oÞéñH’"~©ÃÜkÃQÍ›6Ãâ10Rö¸ ¼ø\Æ‹ƒj§´ÀâcKjrN3©r¤žÕi¿Ãø³ÃŽ4àžYñEŠÂàê8û Òƒ§ŽÊ1 ¢R¤èæx)×Á¹U‹S§Jua]ÅëI4Òù6¾¤øsûÏÿ‚BÿÊ.¿dû¯úÐÿëø3Æ�ù9|IÿtýPeGú�ôtÿ“7Áß÷pÿëUž¢ùqûhP@P@P¨|7ÿ˜Ïýÿöú€=B€ ( € ( € ( € ( € ( € ( € ( € ( € üÿƒ£¿å·/ýÛ7þ¶ìû@¿ÔP@P@P@P@P@P@P@|¿@P@P@x_ícÿ&gûlÿÙ�þÒ?úªüG_SÀÿòZðý•%ÿɸñþÈž+ÿÕ<ÿ9JÿFÏò( €>þÿ‚_~Îý«n‚_>"Å%×ÃýKPñ‰¼e¦Ã<öÒëz/�ü'­ø·þã=¬�]Ckâ+ý"ÇDÔç´¹µ¼¶Ò¯ï®l®"¼†~Ä®!Åð¿ç9¾^Ôqôá‡Ã`ê8ÆJ�ln*Žë²R‹–�YÖ§FP•XB3‹ƒ‘úƒœ'€ãox{ Íbç•Õ«‹Æfc)Aâ0ùv Žú¯4gbªÐ¥‡­(N!B­IÓš©š·7í—ûQü\ñ·‰~ üCÓõ/ÙóáÃ]^óÂý’|jÞðÃ=/C¼tÓñž™àé.d¿>—ÆþÒüE¨x2-RYî©a¢ê7·I¤ÝùÒ•Ò&°´–{©íe»Ÿ xƒļ–æY”Õ|b©‹ÁÔŨ¨}y`±50ôñŽ’Œ}œëS„}¬l¯V3šQRPŽþ4p®YÁ¾!g>OMá²÷K˜QÀ9º¿Ù¯1ÁÑÅUËãYÊ~Úž­Iªæv¡*Prœ ç/êÿþ ÿ(ºý‘ÿî½ÿëCüK¯ä¿?äåñ'ýÑÿõA•Þ?GOù3|ÿwþµYáú!_—¶…P@P@z‡ÃùŒÿÜ;ÿo¨Ô( € ( € ( € ( € ( € ( € ( € ( € ( Àø:;þPQûrÿݳëaþÏ´ûý@P@P@P@P@P@P@PËôP@P@Pg¶Óu [FÖô­?^ðÿˆt�OÃÞ#Ð5kxîô½wÃúÕœº~¯£êV²«Gqe¨YO5µÄ2+Ç$nRDxË#kB½l5z8œ=YÑÄaêÓ¯Bµ98T¥Z”ÕJUiÉYÆtçÊ2Z©$֨ÆÃãpØŒ.�úBâ(R£…âÌ®x×K4ÊÝ*XЉ+s×ËêºXiÔ–ó� Fžü¸usøç�¾‰˜\U|F7�3¸eʤ¥8dyÚ¯[ IÉßÙá³Z*¾.�ëtñX\e]¹ñnÍŸ�?àŽ_ðQo…êâóösñŽô‹ræ ká.© üK‹Q‰$dYh~ÔoÍT8‡‚«+^–iJ¾^àÚ½§_N8M6n™Æÿkkÿ=ç~ø¯‘ºŽ¯ âó*0¿-|’¶6URv½<6¬ñúî£S Ùü;Ûáï|øíðæg¶ø…ðWâ×�.#ßæAã/‡1ð¼Éå™Ä›âÖôk]†Úä>åM¼ùÇ•&ß´Áç¹&`”°ÎUŽ‹µ¥ƒÌp˜”ïËk:5¦µæ�¿ÅèüçÃI•IÃ4áìó-š½ã�Êqø9+s^ñÄaéµnIßM9eü®ÞK^©áŸ¬ŸðE¦¶ý¾¼qo4¶÷ÿ >>ÍðÈñM Ñ|ñŒ‘M ±•xå�Õ^9•ÑÔ2�@5ùoŒqRàl\d”£,Ó"Œ£$š’y¶4ÓѦ´ièÑûÑæR‡‰¸ ÂN3ŽKÄÒŒ¢ÜeG!ǸÊ2Vi¦“M;§ª:Mþ _ð§öƒÐ4OÁJf�'öЏÒ,CÒ¿i_†wÖ¿ ièöðÞµ˜ÔïtõÓ|=ñ1¬'’Ö ;L×o¼5¥F­y«kQx‹W¸º–÷š·‡9¦C^¾7î#«Ãñ­7Z¯æP–cÕëJPçöp›©_.SŠ“©R�¸ÕI«Ê–QYÕǤӺugJí5Ê•ùGÀ>qSá/£‘Ö©xå}•Ï/�×Á_?êT¤¤¬ã‡¥^Éß�ÙsÐ?ðDÿÛÄvM«|ñ?ìÓûJ莮Öz×ÀßÚ Áæ™~K¶»ñTÞ€ÈÊÖÇç‘#_¶Û.Ö‘ãÑxÉÂXyû,ç Ä\;Y;NŽu�ã(Ô§­Ÿ40«+&¥²¿¹-/dòÿ‰yãÌ]7_‡qœ#ÅØf›§ˆáÎ(˱4jé{B¦6Xݧ ÚKÚCÞµÚò�sþ ÿ$ðôÿf¿ý”<{q!šæ Ú«à�A¾ÑÖ9[í^ñV­j!fpm® ÞEê’ÎIãGeõ(ø±áåxóCŠ01V‹ýõ,nV’m{¸Œ-)][Þ�¹ ì¦¢ÚG‰‰ð+Ŭ,¹*ðNg'Í8ß [.ÆFðiKßÂckÕ·îK›–¢»¦ä“k�?ðKßø(PÕH?²Æßµ°Ü%¸:XC\|ÚØ�è¨|µ+µ¯ÃöÛcí,±¿ø‰|콯úדr®ŸZ^×âåþ ½³×µ?‡ÞøSgüA¿½²¡þ¢ñ;×›ê2t~-qúºÑZΪ|Ö‡ÆÔN¿Eÿ‚CÁHõéZÙCÇÐ:Io:֧௠ÄZå�#+?ˆ¼S¥Àñ©F7$�¢”{§…$�›’·ŠþPIÏŠ02MIþæ–7ýÛ7xáðµdž¾êjóÕE6�»ðþxµ‰“�> ÌâÓŒÚ+eøHÞm¥ib±´bÒ·½$ù`¬æâšoÖbÿ‚%~Ùš„š¿Æ�oöqý›4Kxâó\øåû@x#DÒ,c�wÈnï¼7�âˆG’i$¡X¢‘Œœ(o-øËÂê*Y=!â*Ò’Œ(ä¹2µY¶ì¹!‹X&îì’Ѷұî/£¿á©:üAˆá>ÃÆ.u1ë�Œº=çí9ñ–êÏâwí¨éw"ÝîÆ‡m|ú¿ƒþKvÉ-Ž£e¥Ýø£E¾³^[éº^¯ µå¢§áÖqÄUhâ|FâZ™Ý*SUaÃyDg–ðý:‘º�¶”,^`£¤á:�ÃV„ïR¥'(IÕñs‡¸J�|„\G†ëÖ¦èTã þtóŽ+«F|®V…G_”ÊmJ�Ztjcpõ)òÔ�5ã �åàµóÏuû}øÖêêinnn~üžââyiçžoƒž’i¦šBÒK,²3<’;3»±f%‰5ÕàÜcÁÆ1QŒs<ö1ŒRQŒVm‹J1KD’Ñ%¢Z#‹é )OÄÜÂs”§9ä¼3)ÎMÊR”²”¥'w)I¶Ûm¶ÝÙý5Á!å_²?ý׿ýh‰uü½ãGüœ¾$ÿº?þ¨2£û_èéÿ&oƒ¿îáÿÖ«ð§ÆO|%‚ïÄ:ÿÁ?‡µ=Xñ–½âÍ;PÕ¢_é±_ßAZm«Å£�nÂÑ$˜^+“ý À¼/Ãu¼4θ·5Àc1ø¼§™N4(g†[N½,. RŸÕª:täÝY§WØÎVµÔ¬�äï¸×Œ0þ2pßäy¦]–`3ÜMNX¬WeYÍl5lv/F¥hýv’«V1�8ÐúÍ8_™§fzWÀÚ3á?Šÿhï|)¶ý±þ|_ø©¥xwãF…¬øÃ?ðOÝWà�‰¯5ox;ÄÖšð‡ã$ºÆ§cg„tË©§H¥º·×í,ÛMµ�㻉Ï{Ãù®‡ð™¤¸G6ÊrʸŒž½~'Žég8hRÅâðÓ¡|¢4iÔ›¯í"¢ÚŒ¨J~ÒQN-§ q^I�âÌvI=ȳÜꆈ0ØŒ³á…~ÆT¯€Àbéâysùb+R§7±œ¤£)Ç ~ÊjiŸÃýgŸçHP@¿áŸÚãß‚ì“NðwÆÿ‹ÞÓãµ²²ŽÃÃ?¼g Ù%–›A§Z%®—­ZÀ¶º|ðÙ[ª­bvŽ�ƒäâr‹7S’å8ªŽS›ž'.Á×›�GÍRnUhÊNU$“œ¯y5y6Ï{Å9üOû>h¸É³ÿ„§ìäùàM“úÐ$ûãuqÿª'ÏíÕ~ö¿óóû-çÛ—ãú·7Ãîï¶›‡úÿÇžËØÿ®Ü]ì_üºÿY3Ÿeñs뼿½·Å®çâ/Ú'ö�ñ}™ÓüYñÓã‰ì+˜ÇÄ_¼k­Y˜/"ò/!6Ú–·s ŠîÜÜÆSdñ~îPÉÅuáø!ÂOÚarL£ ;Æ\ø|·F|Ðwƒæ§F.ñzÅÞñz«3ƒÅ|Qާì±ÜIŸã)8Î.ž+8ÌqÜjG–¤y+bgYÇÝšµ¥Ñã•ëžP@«ÿðZ�ù?OÙ'ýŸÿõLø2¿.ðwþH|/ý�sïý[âÏÛ¾�Ÿòrñßö$á�ýP`éÃþ ÿ(ºý‘ÿî½ÿëCüK¯åß?äåñ'ýÑÿõA•ÛGOù3|ÿwþµYáú!_—¶…P@P@z‡ÃùŒÿÜ;ÿo¨Ô( € ( € ( € ( € ( € ( € ( € ( € ( Àø:;þPQûrÿݳëaþÏ´ûý@P@P@P@P@P@P@PËôP@P@P@PógÿÒ0ñn§à¯€žñ©ðþŸâ±á�R_øímµøFõi`Óu¯²?ÏýŸ{4vóýÙ þ¨ð‚|S[„úöž':�|·©…úÍ%ƒÀsRúÅ%*”yÖžÒ Ê;¤x¹C‰úHð>.Çÿfc«`ør\Ãê´±¿S­,Ã4ä¯õJò�G#×ÙT’Œ¶lû;à§í¡ðvëö–“à�‹?à ú?Ä?ëZ×�þËà½_ö(ðçÁm;Sø‡}c¯xZÖÖãâæ‘fϧ¸ñ0XíZ+–·ñë[ik,ƒQMÿ'œp~oYÖ€êà0thàsUŒ¥Æ8Œâ¥<'C)G*«4ª/«k$ã͇‡5[/fí÷|=âA>.—ã|PÃæ™Ž#™ärËëø{…áúU³Z”ñ88BYå w¤þ¹e¦ã‹¨áE7í•ÿŽ_‹_¾$ü ø�â/…ßü®xÇ^¾–ÇWÐ5ë)lîScºÁe#¯‘©èÚŒj.ô}kN–ëJÖ,$‚ÿM»º³ž)Ÿúã*Ͳìï‡Ìò¬]n :UèMN:¥Í ¥ïS­M¾J´j(Õ¥4áRšiç™oÃy¦/&Ï0œ·2ÁT•:ølM9Sš³j5i¶¹kaê¥í(b)9ѯIÆ­Μ£'çè@P@P@×Ã_†_~1xÛ@øqð·Áú÷Žüsâ‹èôý Ã>°›QÔ¯®$#t†8‡—kckë�GS½’ßMÒ좞ÿQ»µ²·žxø³Ë”`«æž.††ƒ©_ˆ¨©Ó„VÊïYNOݧN U*ÍÆá)Ê1~–Q“æ™öc…Êrl'2̱•,6 JUkT“ÝÙi pW�ZÕ(Ѧ¥V¬áN2’ýÿ‚ÊëÚ·ûüT´Ðõ};Zÿ„GÂßü ®]iW){emâ¯ü-ðž‰âm!.â&)®4MfÖïIÔ6&×R³»²˜%ŴѧÀxCBµË'Z•J?[Åf¸ê« Ë ‹ÌñU°Õ\^ª5¨Ê5i·ñSœ&¯&ÿUñû†ÄxŸœÃ ^–#ê8,�-ÄÎŒÕJpÆà2lAN>짇ÄBt*¥ðU§Rœ­(I/êþ ÿ(ºý‘ÿî½ÿëCüK¯å�?äåñ'ýÑÿõA•ÛÿGOù3|ÿwþµYáú!_—¶…P@P@z‡ÃùŒÿÜ;ÿo¨Ô( € ( € ( € ( € ( € ( € ( € ( € ( Àø:;þPQûrÿݳëaþÏ´ûý@P@P@P@P@P@P@PËôP@P@P@Pó3ÿ7Ѿ#ø‡þ Cû'hŸ&•NËý¥,E ’§Zœÿáûð©FZ¿y=X7ǯ†m“ÿ¶¯íÉÿÕý³|®â"þÅÿðCZÝj ý¶áøâ Ã}›EðÿÄ ß‹ÓØò¤Cã�‡ºŒï‚1Ú_[–�FæÞŇ»—ñ‡�x)Fž3ƒe�Ð�¹«WÀC+ÇTùà±õ°p¾úae¯K1šø}ôpÌa:¹ˆ�á¬T¯É‡Âæ•3¼¶—ow1ÊðÙ…Kyãa§[ê|ƒ¯ÿÁ2ÿd}E�¾ÿÁZÿdíq$vh ø£guð¥£O4þî{¦ñ?ŠÃ¼PG>'vës*[…‚½ˆÇõ”ý¥ ΕàÕñÌ–~>5¾“Á‰¤øfãÄ—p\ÚhÖ·š£½ýå­Í­«M,Deâö]‡­†Âf!ÇÙv3¯ …Åpï-\_Õ⧉úœ3Úâc‡ƒŒëJ’„%JÉœðð 7Åa±xì§�ü-Î2üèÇ�Àñw=ÅMÓÁÿhTyz¡ƒ–.qœ0ð©Yºµ!8AÉÄåÿáÑ¿èí?àžÿø•ÞÿåtÿÄVË?è–ãßüEëÿòó�þ fuÿE¿…ßøšá?ù˜’ø$׈lå‹þÿÛÃþ ¥à{Y$O.]ö°Ó Ííº0û|šM¥�…nVö{Ú&’Þ{‹$—6±¤ÀHï~)áæŸÕ8#Ä\l’wT8^§,$׸ªÊx¨òFm4¥ÎÊ2|º$Ü|ÅS”~¿âW„YlV–+�¨óÔŠ½t!O5RT“‹p”éÝÎ KVâè¿`oØÓÂ{¤ø¿ÿYýžô¨¢Ã¼_>|Løñ<ÑòÞ\- ®‚«,ŠöªË™aynŒˆÂÂE˜|uÅø­2Ÿ óú­èžq™eÙ$Sîý¿·ÑZOut£f½¢iÇÃ.ÀÝçÞ5ðµÇWÊ3~%”—hýYa­&œí.Vçtý“R÷¿þÎ_ðJ_ÙkàoìûûCx–óö«ý¯´�Ú)þ+ÇðÛMÓo<-ð?ÀÚ ø/â�7ÁÞ1ŸÅvÒY¿Ä� Åy¯jQG &Ÿ¨jó\ØE{qz–2Ggö¿ Ä(q6uŸdhpÇ Õáõ•¼Æ¥Hbs¬m?íŒ5L^ad§ýŸ‰p¡Mºî¥:J5#4çÉôÙŸ ø)Áœ9ÂüSŒ©Æ¼wCŠÞv²šTj`¸w.­þ¯ãhà1òÆÁÓþÖÁƦ&¬VR«^S¥’¨©µOŸæ¯ÿÁR|qáÿ ë_ c_‚¿ aχúõ›éšÕÿÂ+[½oãoˆô¶•%[üyñÿÂa~°b6÷Ú=·‡µXɸVÔÞ³ÇôxO ðUñTs/ÎsN4ÇК©F¬£G&ÃÔ³Nxl�þ©Ošïšg^“÷v¥gò8ÿ³.”pdžåxšnŽ"®E â8‹E´ÕX*øúqX:X‡˜fžÎxœ= øjÕ©'ñS§ˆ£)-âzŒ¾3þÏúgŒlÍ<¥Ì�ÁƒÉóÚ¸L-LGâ÷ÔêaèO ìxû/§KêÓ¥PöPX¨SöN�QŠŒl¹U¬z™‡p½~6ŽcÄÞhRÅâiãþ±á^mV¿×!ZqÅ{j¯1›©WÛ©ûI¹ÉÎ|Òr•îù¿ø^¿²¿ý�ø"¯þ+“â/ÿ5ÕÑý‰Äÿô#ñ‹ÿ_ÿÌgúÉÁôS}?ñSæ¿üÞð½eú/ðE_üW'Ä_þk¨þÄâúøÅÿ‹/ÿæ0ÿY8/þŠo£çþ*|×ÿ›Ãþ¯ì¯ÿEãþ«ÿŠäø‹ÿÍuØœOÿB?¿ñ`åÿüÆë'ÿÑMô|ÿÅOšÿóy濵Ÿ‹GŽÿàžÿµ}÷Àß‹_ðO¯ü/ÐuO€‹ñ£Cý–e/|ñeíÖ§ñcHO‡My®êž7—I¸û6¯kª]GöÝYdÓaÖ¬íŸNŸQKšôxW õ=áhgYWa³*ôóÏìzÜMÅ,ç ÓÊ«<Ã’…,jÇš”©ÅòW¢�IQœ•HÓq<Ž8Ç,ËÂÞ6©Ã™ç…øÌ› [†Wa¸3‚s.ÇT�lﲯi‰­™J„¹+´״Ââ-F8Špt¥ULþbëúHþ< (õƒö»ÿ”]Á îÿÿõ¡ü5_—p§üœ¿?îÄÿÕ$ý·Ž¿äÍøÿy?ÿZ¬!ù?_¨Ÿ‰yÿðH_ùE×ì�ÿuïÿZâ]xÑÿ'/‰?î�ÿª ¨ÿQ¾ŽŸòfø;þîýj³ÃôB¿.?m ( € ( € õ†ÿóÿ¸wþßP¨P@P@P@P@P@P@P@P@P@€?ðtwü £öåÿ»fÿÖÃýŸh÷ú€ ( € ( € ( € ( € ( € ( € ( —è € ( € ( € ( æÓþ )eã=Gþ }ûØ|<×´O øâïÁ_!ð·ˆ|I Üx£AÑõ—ñ_��þ­áëM_@¹Ö, “æšÂ kM’uùVî#óWõG‡sÁÓðOŠg˜P­‰ÁG�³ ¼Mr­àækVªÆR­8bUZ«0š©SÛF|õçÏ+ËšW»æ¿á¦ÿeOú<_ø%çþ*·â7ÿ4õÓþ­ñ?ý>%âÎËÿù”äÿ\8/þ‹ïÿñLf¿üÚðÓ²§ý/üóÿ[ñÿšz?Õ¾'ÿ¢GįüYÙÿ2‡úáÁô_x7ÿŠc5ÿæÐÿ†›ý•?èñà—ŸøªßˆßüÓÑþ­ñ?ý>%âÎËÿù”?× ÿ¢ûÁ¿üS¯ÿ6žmûYxâßâüßö°Õ~~Ñ¿±ÏÄ?†žÕ>Gñ“Âÿbï~Ïž"¾¹Öþ,i|>kŸk>56“ý“U²Õ/“w‡õ½¶6º¥‚¾™&©Ñôx[,·�xZ–uÃÜ]—æ8ªyãÊ19ïa3ì<#G*¬ñü¸j8%%ÏJtàÿÚ(ûò¥RÕ'ÇãŒÊ9Ï…¼m_‡x³€³\£[†Vƒá�ñÜ/‹©(ßÁhdÛ?‚z§„ô_‹W?~EðûVñÔ7×ÓüPÞ)ñàÓ.¼G›g¨_ˤÅ77Iies;' +ú»Ã9e�ðk‰gœÓÅVÊ£‹Î^>–Â8º˜e„À{HáåRt骭|.sŒo»Gð·ŒÐÎj}"8:ŸVÀáóÉåü=®¾e“ÀRÆ<~iìg‹�ujÊ‚—ƩӜ­´Yëž!ñí!c¯ë–^*ý°¿à�6¾(³Ö5;_[kÃÃ1k–úõ½ìñkk1ßø_G«E¨%ÄzŠ^�v—‹2Ü�0zópøN� 3Âð—Ž’ÃN•9aåCë.„¨Jt¥EÓÆò:N›‹¦áî8[—KÆ+Å´ñXšxÞ<ú2CN½hbá‰ú¢ÄÃ’�xâ\·Ú*ñª¦ªªžú¨¤§ï\Çÿ„ãã�ýOüçÿ}x;ÿ˜*ÛêY/ý><ýØ¿þm9ÿ´¸�þ‹ï¢ïß�ÿçhÂqñÇþ�'þ óÿ¾¼ÿÌRÉè‘ñçîÅÿóhiqýßEß¿ÿÎÐÿ„ãã�ýOüçÿ}x;ÿ˜*>¥’ÿÑ#ãÏÝ‹ÿæÐþÒâ?ú/¾‹¿~ÿ�§‡þØ·Ÿµ‡ˆaÏÚ+Pƒö€ÿ‚_|Mø£êWã.�ûÛ¤¾6[­Cân‰ã}sáÿéšU·üT�½ÔC\Ô-žm"ÏÄ ¦‰¦BþÏÃ…°ükÃôå‘x•–çU¡›ÿdVâù8à¹iåµÞaÉøª•eþÎÔ_±§$ªÎƒ©ef¾s�jq¶/Þ+«'ðs8áÊrŸÐàóf*usŒ2ʽ¤ð¸4aþ×8ýf¬¨SÅ*<Òæ‹þlkú$þH (õƒö»ÿ”]Á îÿÿõ¡ü5_—p§üœ¿?îÄÿÕ$ý·Ž¿äÍøÿy?ÿZ¬!ù?_¨Ÿ‰yÿðH_ùE×ì�ÿuïÿZâ]xÑÿ'/‰?î�ÿª ¨ÿQ¾ŽŸòfø;þîýj³ÃôB¿.?m ( € ( € õ†ÿóÿ¸wþßP¨P@P@P@P@P@P@P@P@P@€?ðtwü £öåÿ»fÿÖÃýŸh÷ú€ ( € ( € ( € ( € ( € ( € ( —è € ( € ( € ( æÏþ )ÿ Èÿ‚ß~Ç'á˜ð›|@ÿ„+àü"+ã¶ÖÁÇ\ÿ„¯Çb#o«ëK¥yŸñôtÄkÍŸê�jþ¨ðïê_ñø§ûGë_QúÎuõ¿©{'‹ö?SÀsý]Wj�µ·Ãí%÷?‡¼\þÒÿ‰‘àì�©<Ïê|9õí']`>±ý¡š{?­¼*x…Fÿ±N¥¾Óügmð¼aâ³ã¨¿à�ð›Ÿk§Æ?ÛÚ×ÄÕ×?á*:¥ÑñöÊÜ@.Uþ×ûgöˆœ …çœ%÷WY÷Õ0¿R~9ýKêÔ>©ì(åÞÇê¾Ê?Wö<²åö^Ë“ÙÛNK[CÔÌ!Âï�þÒ�Ñ›ûGëxŸ¯ýg›¬O×}´þµõ…(ó*þßÚ{^o{Ús_S›û/ì¯ÿ<¿àßoüüGÿã5ÓÍÅüxÿÁ9ÿ$qòpWòýÿð§5ÿäC쿲¿üòÿƒ}¿ðwñÿŒÑÍÅüxÿÁ9ÿ$œü¿Eÿü)Íùû/ì¯ÿ<¿àßoüüGÿã4sqG?ðN_ÿÉ'/Ñÿ s_þDó_ÚÎ7‹þ ïûW��qÿÁ/ǶÕ>ÂíoØÓPø�wãqt>,ið­þÜ—ð� ëUl:1Òá :vëµQ^‡ ;ñï m¿µ<óûýo§—ÇËý•[ûC‘Â^ßø>ÎþÅ5í}‡´÷#Ž/…¼mþ­¯±]nÿXŸÕÍjf<ÿÛt?²}¢©ªÿÛrûvŸ°úײ¼Ò?˜ºþ’?�€ ý`ý®ÿå_ðHû¿ÿýh WåÜ)ÿ'/Å�û±?õA‰?mã¯ù3~ÿÞOÿÖ«~O×ê'âA@ÞüþQuû#ÿÝ{ÿÖ‡ø—_Áž4ÉËâOû£ÿêƒ*?Ôo£§ü™¾ÿ»‡ÿZ¬ðý¯Ë�ÛB€ ( € ( €=Cá¿üÆîÿ·ÔêP@P@P@P@P@P@P@P@Pàüÿ((ý¹îÙ¿õ°ÿgÚýþ € ( € ( € ( € ( € ( € ( € (åú( € ( € ( € (ù³ÿ‚НŽ_þ }û¯Ã)¼'oñ¼ðxFoÛk~‹\ÿ„¯ÇbÛx~êËZŸJÇÔzeݽã'J­ÍTxwõ%àŸ¼Åb¥€úÎuõµ‚•(bÝ©à9ÖUã:1«o…Ô„¡}Ñü=ââÌŸÒC�ÖQ,sGƒáϨË2…yà'ûC4öo ,éâ%Bÿ£8Tká’=?Æ^"ø‹üW޵ø Yñ¼^$×cñ‰×¾ |MŸ\>*MRé|Bu™®5Ù.&ÕN®/£,ò<Ò^yÏ+³–cÁƒÃçÏ …x*^9ýIáè<'°Î2èÐú«¥‡ö1�KÙr{5’…’I¦aŠáˆãñ±Ì«ý´V/±ÿYáüÞXŸ®ªÓX¯¬Jx—)WöþÓÚ¹7'S™¶ÝÎoþoÙcþ‚ßðo¯þˆÿüº®Ÿ«q?üúñãÿ9ÿ)8þ¹Áóÿè½ÿˆîkÿÍÿ 7ì±ÿAoø7×ÿ �Äþ]Qõn'ÿŸ^<áç/ÿå!õÎ ÿŸÿEïüGs_þhøI¿e�ú Á¾¿ød~#ÿòê�«q?üúñãÿ9ÿ)®p_üÿú/â;šÿóA濵ž¡&§ÿ÷ý«äø©ÿÁ/æøUmª|mÿcO‡¿¼)ãyn¥ø±¤†æúêÿ\—ÃÒlÖUx¿¶,nÙt‘âôãÜë ô8Zš§Ç¼,³º~%,ÒTóÏìiq~?/Å`ÔVU[ûC’0¢± ô]4ýŒâ½¯°u9¡GUu¼-ãgÃu¼–K Ü3þ±G€2¼×˜ÊrÎèdûIÔÄË í]VqúÅ9¿aõ¥K–rLþbëúHþ< (õƒö»ÿ”]Á îÿÿõ¡ü5_—p§üœ¿?îÄÿÕ$ý·Ž¿äÍøÿy?ÿZ¬!ùUaa}ªßYiz]•Þ¥©êWvÖv�am5åõýõäÉoieein’\]]Ý\IÖÐG$ÓÍ"E3²©ý>¥HR„êÕœ)Ó§ T©R¤”!NNSœç&£F)ÊR“J)6ÚHüZ•*•ªS£FœêÖ«8R¥J”%R¥Z•$¡ táå9ÎMFŠr”šI6Ò?¦ïø'×ü¶G�@øÍûwØÝé:|‚×WðÇìÙezÖž#Õ¢o.âÎëâÖ©c(›Ã:|Ɇ—Ázlñø…ƒˆ5ëÝêÚÿÃòÿ4x…ã¥:ß'àš‘­[Þ¥ˆÏå*Þ±”rºsN5äžØÚ±t4æÃÓ¯BºþÊð›èÉ[õn ñ"”ðØr¾…c7 Me¤á,êµ9)a¡%¬²ê3X­TqupÓ�L4¿¦+K]/IÒt�ø{EѼ1áXA¤øoÂþÓlôoøI¶EŠÛMÒ4»`³²´†4DH ‰UUUU–±ŒF.½\N*½\N&¼åV½zõ'Vµj“w•J•*9Ns“ÖR“m½Ùý»„Âapj,†…¥ 8l.•:z`¹aJ�Q�:tà•£EE-‘%btP@P@z‡ÃùŒÿÜ;ÿo¨Ô( € ( € ( € ( € ( € ( € ( € ( € ( Àø:;þPQûrÿݳëaþÏ´ûý@P@P@P@P@P@P@PËôP@P@P@Pò™ÿŸøÅâÙóþ —ð7ão‚ìt-KÅ > üñŽ�aâ{[ûßÝêzGˆüy=´Ŧ•©èº�Å‹¸ÄñYjº}Ã/ÝD~jþÁðk(ÃgÞfÙ62uéás,Ó5ÂW©†•8W…:¸\e*R«Nµ8Í/…ΕH®±gùûô‡Ïñœ-ãnCÄY}<5lnM’dxü-,d*ÔÂÔ­CšJ¯ 5°õeM¿‰S¯JMm4|�ªÁ[5MsSÔu­kþ ßÿ°Ö5�búïTÕµmSöG›PÔõMOP¸’îÿQÔoîþ#Mu{}{u4·7ww2Ëqsq,“M#ÈìÇëéxWJ�:thñÿ‰´¨Ò„)R¥KŠ•:t©ÓŠ„)Ó„2õBJ0„RŒb’I$‘ð¼q¯‰­Wˆð¯ÁzøŠõjV¯^·έjÕªÉέZµg›Ju*Ôœ¥:•'')ɹI¶Û(ÃÖý#{þ Eÿˆv¿üð«Oø†õpüPÿĵÿó—üF·ÿF—Á?ü@ÿü*ðõƒÿHÞÿ‚Qâ¯ÿ<*?âÕÃñCÿ×ÿÌÿ­ÿÑ¥ðOÿ?ÿ ‡ü=`ÿÒ7¿à”_ø‡kÿÏ �ø†õpüPÿĵÿóÄkôi|ÿÄÿ§ñþ u㯊Ÿ¾&~Îú'ì»ûüðGÅËŸÝxâÿöwø#«|.ñ&¯7ÃÿYx·Ã&êîÏǺ†“ö-FÒ[xί¢jMma©ê°Ø5”÷­r½yO†Ø³<ËsúÜKÆ9æ7*Ž28(gùÍ,ÏIcðÓÂbyc< :°ç§5'ì«SR�:N§<`¢pgÞ1fY× fü+‡àßxk.Ï'—O1«Â¼;_&Å×–W�§ŽÁóÎ�Z}�XJ+Ûáë8R­^4�9Ts_š5ú)ùP@½Úïì�ñÛöÀÿ‚ÿÁ>üðE€?o‹�{Y”�?Â^ Ò&ý¢¼:�¯xÏÄ“¡°Ð´´Na´ºŽ­4-§èZ~«ªÉoa7á´x§#á.;ñk2Ï1°ÂÑÿŒ4)/Þb±•Wâ°ÂaÓç¯SXóZÔéEûJõ)RRšþ™ÄðGñç†dü5—TÆâ?ãfË]þë—ЗáÖqø¹/e†¢¹eÊŸ5jò‹¥†¥^»�)~í~Á¿ðL/€¿°•��‹Ø>0þÒÙ2jµ�5F�àÙo-ÄWúW­ éî#Ò Dy¬¦ñ]ГĚų܃>›¥j2èÿ€ñÿŠÙßΦ “žUÃê»ËiT½LR„¯ ¹�h¨ºòºSXhÛ FJ6�Z”ÕyTøUàg øqN–c]SÏ8ªTÿ{œW¥jX8Ú¥ Ÿ 7%†‚NTåŒ�ñ¸ˆ9Þt(Õ–?£rÍ,ò¼ÓÈòË#’I»»¥™‰$ýM~V~âG@P@P@ê ÿæ3ÿpïý¾ P € ( € ( € ( € ( € ( € ( € ( € ( €?àèïùAGíËÿvÍÿ­‡û>ÐïõP@P@P@P@P@P@P@/Ð@P@P@P@Ç‹>|(ø�¨Ûk?> |ñö¹i¦Úhðë¾7øgá/kK¦Xù¦ÒÇûS[Ó/o¤<òEl²¬I<ïhÒ¾}Ly�eÔž/ÍóL 7QÑÁæ¼5'RI)MÓ£Vç’ŒS—/3QI½âf5ÙµuŠÍx$ÌñJœi,Na•`1µÕ(9JÕlM •8¹ÉÆܱr“I6ïËÿÂ…ý›ÿèØ¿fÏü1ÿ¿ùC]_ëWÑIŸáã0ÿ惇ýFà¯ú#ø[ÿü§ÿ™þ/ìßÿFÅû6á�øuÿÊ?Ö®(ÿ¢“>ÿÃÆaÿÍþ£pWýü-ÿˆþSÿÌ�ÿ öoÿ£bý›?ðÇü:ÿå ëWÑIŸáã0ÿæ€ÿQ¸+þˆþÿÄ)ÿæ@ÿ… û7ÿѱ~ÍŸøcþò†�õ«Š?è¤Ï¿ðñ˜ó@¨ÜÿD â?”ÿó Â…ý›ÿèØ¿fÏü1ÿ¿ùCGúÕÅôRgßøxÌ?ù ?Ôn ÿ¢?…¿ñÊù�?áBþÍÿôl_³gþÿ‡_ü¡£ýjâ�ú)3ïüN+ŠÆ×ž+‰Äbñ5y}¦#Z¦"½NHFœ9ëU”êO’œ!óIòÂ1Š´b’÷ðX[†¥‚˰x\�?±Â`°ôp¸j^Ò¤êÔöT(B�*~Ò­IÕŸ,5IÎr¼¤Ûms�A@P@P@P¨|7ÿ˜Ïýÿöú€=B€ ( € ( € ( € ( € ( € ( € ( € ( € üÿƒ£¿å·/ýÛ7þ¶ìû@¿ÔP@P@P@P@P@P@P@|¿@P@P@P@P@P@P@P@P@P@¡ðßþc?÷ÿÛêõ ( € ( € ( € ( € ( € ( € ( € ( € (ðþŽÿ”~Ü¿÷lßúسí~ÿP@P@P@P@P@P@P@òýP@P@P@P@P@P@P@P@P@z‡ÃùŒÿÜ;ÿo¨Ô( € ( € ( € ( € ( € ( € ( € ( € ( Àø:;þPQûrÿݳëaþÏ´ûý@P@P@P@P@P@P@PËôP@P@P@P@P@P@��> xᾑý¿ñÆÞðƒæùÛ~4ñ&�ám#Ï1¼¾Oö–¹{cgæùQI/—çoòãwÆÔbÿÌgþáßû}@¡@P@P@P@P@P@P@P@P@~ÿÁÑßò‚�Û—þí›ÿ[ö} ßê( € ( € ( € ( € ( € ( € ( €>_ € ( € ( € ( € ( € ( € ðØÃÀ? ?hO†:gíWñÂø�ã¿‹¯ŽçÐ5/h:_ˆÓá×Ãm'â‹t|:ð-®±¤¬^Ó¬|=§X\xÆ÷N´¶Ôÿá½ð—ÿ*(ÿ…ðGþˆç¿ü7¾ÿåE(øðHGÁß…€ŽA|$#¡û"€>+ý£|#ð÷öhø�ð#â‡Ãhß¿áqürðÇÀ¿Šžð†‘a¡xcâ-¯�ü1ãy|'âm[DÒ´åÓãñ÷ƒ¼[¥èÓZøÎ8­5=OÁÒë¾ׯ5+AávðèÐôP@¡ðßþc?÷ÿÛêõ ( € ( € ( € ( € ( € ( € ( € ( € (ðþŽÿ”~Ü¿÷lßúسí~ÿP@P@P@P@P@P@P@ó$ñfšœÅ,‘õÌnTç�ÎG ú Š€ ( € ð½{Åß|sñÄ_?g½7À¯âßh~ñ'Ä_üQ›X“Àž¶ñ‹ëKá_ Yè^¹·ñ7‹Ÿy²=å`vÚ(¿øgñ TñUß�¼ã=×Â_~kº…¾#økOÕ£×t5Ô5_é>)Ñ3xÛÅ_üCâ�/O×¾(Ç?‡<àÍÚo^x®¥cḀ:�ð[_Û÷Ã>øƒã³§À߆ºÁoø&ìÝÿø¹ðŸö�ðŸÆ�7âÆ�âüXñ×ߌ?íÆŸâÿ.kh<--÷€ü[âZÜèÒèÒ?ˆ|-âX¼_i„€;/‹?ð[ÚËö·ý©þ|TøOð'Qø×ðûö†ÿ‚uü&ø?â†þøëãO‡š'†¿à¡þñ‹´›ïˆß ü/¨øŸãÅ�ü´ð?‹´‹Í?á^Öþ3êòxn×ÁÞ ð¶¥ª¦Œà�¿àªÿðPÿ‹ßÿcÏÙëÀÿ>|=ø§ûA|Qÿ‚„ü*×>&~П³ÏíaðƒÀž(Ñ¿e‡¿~)|#øÿðÃà�ÄoøãNƒà/ˆžø™s¢x�À^0Ô5­U|c§^éº_Ä-6×Ú�΢�û#ÿÁGÿmÿÛWö¬ÿ‚KxŽ×Ä¿¾|#ý¡cÿÚçâ_Ç¿‚Úw�ügâ;|@øñËÂßüww¡øª‰Zl¶vÒÝXÙj_PÒ5!àKM[ÇPxÒ‰·÷‡®¼ úÁÿ"ÿ�?ìkÿgñû>ÿé¿ÇÔôP«|8Œˆ5Y±ÃÍk<òbIØ�N<áÓžyí@•@P@P@P@P@P@P@P@P@~ÿÁÑßò‚�Û—þí›ÿ[ö} ßê( € ( € ( € ( € ( € ( € ( €<Ŷ&Ã^½\Óý¶"F7-Î^LE¸F1Ù;tÕP@ó�ìw4¯ûbÁD¢ydx¡Ö?e�&6vhâó> NÒyhITÞß3ísrÙ4ú]@8>?ÿ‚Ù~ÚÚÏíßû^þÿ±—üNÛVýŽõOZxóÇ0~Üÿ ¾›�;ǾÓõý Uo |MøJ-íD÷3êZX²ÒËÿ‚¢ÁOt¯ø'wÀo‚üð‘?j/ˆ_´¯Ç…ß>ü"Ðþ#CðöOˆ^!ø£i©j:f­câäðgÄ/+I·±°·M†/a½Ô5­ Á®¬ÿ´¢¸5übÿ‚Çüv¼ý°>9þÄÿ°?ü�Æ¿·oÅŸÙ_@ðN¥ûJkiûI|+ý›¾ø\ñÞ�·¤xgÞ*ø¡¡êxâ÷È’{ SIÐ.®uM;V†ÛN’ÇL¼Ô¢û»þ ×ûr_þÞ_|AñÄÿ³oÆÏÙCâ'€¾"ø“á_ÄoƒŸôÛ SGñ_†ÊKÛïøž]/HÓü}àÙÍé±µñ>�§éàë:fµ¦\iÖæÆ)ï>ú €?)þÍ+þÞðPhžY8_öRÆÎÌ‘ > Ü»ˆ�’±‡r]Â�¹‰c“Í}q@P@~ÄŸ>~ÓÿðJß‚_~9øKþ�†~$]Ö¼5ý½âo }·UøsûEê_<uý³àýgÃþ ·þÆñ¿ƒü9­ùš¬Ú‡öwön« ö‘w}atôbÿÁ7?bEñ6©ãø ¡¯ˆu¿Ú§Wýµõ«Ñâ_uŸÚg^øs«|&Ö~#êÚhñWö^¥¥à-]Ñî¼ {e?Énõ�WÄ'Âð’êzÄ 'øþ 'ÿ}Ö/#˜èO�?ðMoø'÷Åˤ“ãGÁýVÔ|Wðá챤Ýj?þ(øgTŸáÏÁê_>x7Á׺?Ä-ÿIñ�ƒ|c«âÝÆÞšÃâ•Â[]Å}â‹ÝÕíbù#ö£ÿ‚6üºøey§~Çß>ÂqâOÚ/à×ÇÿˆÚ/Çÿ�¿¶?…tŸx“áG…|AàÕñ÷€¾/| øŸ©|AøûCëZ6µø«ã§†¼)âýgâ¨�Q4oj×ö~!ÑÀ<ïàwüëö#ýœ¿eï�_³ÇíýâŸ�_¼kûM|wøƒð–_|mñÏìàtï‹¿µ7Œ/î5Ÿ€²÷�4¯ˆ ~3ø£@¹ð¶«á¿†óø6ÏSûoÄÛ=/O—Ä>c=†•dú/â¯ø&Oì5ã=#ÇÞ×¾iÍ¡|Ný˜üûø×GÒ/øg/ƒüT÷ï©©k7Ú•µµÜ ü5ÿ‚wþÇ¿üKð?Æ~øI>™ãÙÓTøß¯|)ñ^§ñ#âÇŠüI§x‡ö�Ótm#ãg‰<]®x»ÇZî§ñSľ<Ó|?¢Ùßø‹â­×�u½:-6ÔhWú[&â�àø&?ìAðÖãö`¼ðÁ{Ÿ _~Æ·çýœõ 'âŸÆh5/Ãñ‹ÅxÓâV“©ê'âÞüDðߊ¼Q<š½ç…¾'Oã? ÚÏåǦéVVÐà rðR/ùþÆ¿ö³ïþ›ü}@@P@{·ƒ,M–ƒlX÷Œ÷Ì=¦Ú°‘þõ¼p·o½ß©ê¨ € ( € ( € ( € ( € ( € ( € ( € ( Àø:;þPQûrÿݳëaþÏ´ûý@P@P@P@P@P@P@Pã�ßéâþÝs§w|ÒÚ—ÜÂGœ žLp‹Ð@P@6þÇòyðQoû ~Ê¿ú¤®(ôÊ€ ÿ?‹ïxãÃ_ð^¯ø,äž ÿ‚Åüÿ‚BÍw¯|MCÅ_þ~Ïí>7ÇÃ�%­ü?¡[þÐ>9ðEŽ“qà¦yué¼36¡wwˆm“RŠÞ-PècàÏÂMþ ÿØý³¿c‰ðU�?ðVO|IÑüa ÜüyøQá/�³ø:|gàý1¾ h~!ð7À?øçÃÐ]x;âW‚µ?‰:ˆµ›˜5mv´éâÎ[?DÌø/ÿ™ø�ãïø*Wí—ÿ›ø5ñkGÕ£Ó¿àˆß²—ÄÍsö…ÑõËy•aýªü3ñ3Wý›¾øs\�Ãhx¯Bð_Ƭu)Ú=cLñ�ŸÚ Â_›À«¿k­7þ %ñ“þ YûZëÚ?ü3ö˜ÿ‚/ÿÁE>§…<)ñsâmÇÅO ~Ο h«;]ÚßÃ~&¶Ò|i¯G¢|Wц´o Ý ?xø£J»ðþ»7‡µûË«ý^Üï¿ø7{ößý§ÿk߇Ÿ¶Wƒ~?|cÓ?k~Ë¿´­ÿÁ¯�?¶–�àKOXþѾ ´¶ÔšMI´Í*ÚÓG½»Ñ¬¬|;®�FÞ;�BM7ÇzT:¶¯¯ÜC·¨EÔPåÃ�ù?oø(_ýtý“ÿõJÜÐ×”P@â¿ðJ�ù0ÙÛþÀþ6ÿÕ¡ãzý  â¯ão‰>&iðPoÚßÁÿ ~1üWø&>2ÿÁÀ_ðL_ƒ?|GðwÆÚÇ�YüÖõŸƒzwÄ¿‰Z?ŠluŸx»Oñf±ÿ…~!xÆþ÷Å©áøŸÀQkqø[Æ(Òµ 9øqû[ÁBu«OÚ÷Uñçí#â|{ðŸìÛÿ�Ôj_„×_µ7í¯üDð?¼ñrÿöjñGÃ?Ù‡OýŸô„?±,ŸüI |4…ÿü3ñæÆëã„|M¨kú~±­ø®[? èYßüo þпðoÇ_ˆ_?m/�ß¼]û.þן´ÿŽu�KöŠø½â�k¾<ðì‡ðkãTžø{á|Qð¤öŸ~%EâïI5¬À|,ÿ‚‘þÛIàßÚvóöpøÙñ¿ÆúÿÆ¿ø%Œþ8üÒ¾!þÒÞ4ý¯þ!IûPx㇇¦ø²þ‡Ä¿> ü<øMûH|"ýœ¼sâ]{Çÿ²ÿìç¢ø£áï�G…|%«Ëçk smnöíûP]xKözÓ/¿`¯Û‹öÆý¤¿e¿mïÙ_Ã´ïÆŸ�_´Åïx_á¯ÃßüñÞ±ã x_þ gðÛÇ¿~øÅ¿ô¿‡ û@ø‡B·×À/ëÚo�ti~iÞ.Õ´»0èþýãŒ^9ý…~xƒã?ÄÝ/ã.¥?Œ¾.Aà‰º‹>#üB¹ñ?Á뉞'_…ÑëŸ~)ü,ø3⿊Ú߆|(l¼sñ^Oiv?m¼;gã›[½\ëÒê—`§tù¿ÿ"ÿ�?ìkÿgñû>ÿé¿ÇÔô·áý!õ�N @�O�w ÏÉn„oäti GŽŽá�ʬ@ЊªŠªªTUPª�€ª 8�@ @P@P@P@P@P@P@P@P@~ÿÁÑßò‚�Û—þí›ÿ[ö} ßê( € ( € ( € ( € ( € ( € ( € ñ¯øUôé$Ôl#ݧÈÛ¥‰6NǦü»3ݰÀˆ‘<²À%P@xì—£Þi?µÿíïq~«ñ4²¿‰tˆJ—> ‘os“F÷Ú©nÅ&´‘èíñ·Äø'Oüçã�µÿ‰?a?ØÛâŸÄoÝC{âŸüGý˜~ x߯Þ%¼·³¶Ó­îõÿx›Áž»¬ÝA§ÙÚXÃ>£s,Vv¶ÖÈë "€z‡ÀßÙ_öaý˜müIgû5~Î?¿g›OÍ¥Üøº×ào‡¿ ­üUq¢%ôZ,þ$ƒÀ>Ð"×&Ò"Õ5(ô¹u5º{Ôo’Ñ¢[»� ×ßÙïàÁïüJñÏÂO�ÿ>øÛã>º¾(øÃã‡? <à�üWñ2_kZ¢x‹âWˆ|3¢éš·ŽµÔÔüKâ=Eu]꺂ßkúÕØ¸­ô“€rÿ?d?Ù;ö�¿Òõ_Ú#ö`ýž>=jz×EÔ~4|ømñJÿGµ¼âÛK¼ñdžµÛ�><’L!´’IJ<�w³ëžð'�þø[Hð?ÃøSá÷‚¼?nm4ø#úG…<-¢Z´�3[iÐlì4�6ÜÍ$’˜l­!ŒÉ#¹]ÎÄ€utPåÇÃÝò?Ûcöúñ*„›GÔõ¿Ù¯ÃðÝÃæ4qëžø¥jÆ“<†5„_ÙiÞ(ðî£5¼RJñYëZ|²ùfáV€>§ € ( *ÿ‚zÿc|?ø¦~Í—÷Pé¿þjÞ8Ðõÿ ÞÌ`Õï|-¨üFñn§àŸ‰:=•ß—{ªxÇšíµî�â[8§Ò[‡Ä^ žñ>x/ã÷Ží´ë…º¼à_ øÞ]Vñ—Ù]·?�%˦êz…÷Œ|%âÝÚúÃBø�ðÏÆÞ'øoãý#LÕd´—WÑ ñW„5-+R¼ðæ¯6Ÿ§ÝjžÕßRðÝþ¡¦iµÎ“&­¢è÷Ö ÿ UcÿG]û}ÿâg|mÿ技øb«ú:ïÛïÿ;ãoÿ4TÃXÿÑ×~ßø™ßù¢ þªÇþŽ»öûÿÄÎøÛÿÍðÅV?ôuß·ßþ&wÆßþh¨ÿ†*±ÿ£®ý¾ÿñ3¾6ÿóE@ü1U�ýwí÷ÿ‰�ñ·ÿš*?ኬèë¿o¿üLï�¿üÑPÝ;ö7²Ó¯`½_Ú—öî¼03k¨þØ¿o,§W�£xç·“ÄXu(íµÔ¤°É¶h$Šhã‘@>›ðW‚éýßÿ£Ãßø’/øŠêÖý}ÿ¢‹ëY�Öäíÿ«ßîß\þÏÿ‘7ûû§ðÿyüoÞŸÔgü"ÿ d÷úëÿ�×ê'ð€Â!áÏúGÿ®¿øýðˆxsþ�‘ÿßë¯þ?@ü"ÿ d÷úëÿ�Ðÿ‡‡?èýþºÿãôÂ!áÏúGÿ®¿øýðˆxsþ�‘ÿßë¯þ?@ü"ÿ d÷úëÿ�Ðÿ‡‡?èýþºÿãôÂ!áÏúGÿ®¿øýðˆxsþ�‘ÿßë¯þ?@ü"ÿ d÷úëÿ�Ðÿ‡‡?èýþºÿãôÂ!áÏúGÿ®¿øý~DÿÁwïµO†?ðJoÚ£Ç5¿øÆzü(ïìoøCÄ:߇|E¥i~Ñÿ4�Cû;XÒ¯íoìþÝ¥_ßi·gž?´XÞ\Ú˺äFù<¯[ ™­l=j´+Cê<•hÔ�*�æÌ°p—-H8Ê<Ñ”¢ìÕâÚz6�è¿¢nW–g_HËsŒ»›eØŸõ«ë~e„Ãã°X�cÁ\Gˆ£í°¸ªuhUöUéR­OÚS—%jtêFÓ„d�ø!þ©ñ;þ Mû+øãâ>¹âxÏ[ÿ…áý³â¿ø‡[ñˆµ_ìßÚ?âþ‘§hk­ýÕýçØt­>ÇM´ûDò}žÆÎÚÖ-°Á)ÀuëbxS*­ˆ­V½iý{ž­j“«R|¹–2æ©7)K–1ŒUÛ´RKD�},²¼³%ú@qö[“娧.ê¿WËòÜ&‚Ãûn áÌEoc…ÂÓ¥B—µ¯V­jžÎœyëT©RWœå'úíÿ‡‡?èýþºÿãõõçó Â!áÏúGÿ®¿øýðˆxsþ�‘ÿßë¯þ?@ <%áÕ �2,�YnX~*Ó@öºu…—üzYZÛíFÇ·Ìê¡›Ž2Iâ€.P@P@P@P@P@P@P@P@P@P@€?ðtwü £öåÿ»fÿÖÃýŸh÷ú€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( âëþwÿ?ô‹úücþnÿõÿD¹þ™ι?¯ú>§ö‹_³ŸæhP@P@P@Pâçü1ÿ(|ý¯?î€ÿëP|¯‹ñ þHüßþéÿú´ÁÓ?C¿ùHß¿îîÿÖ‰Ãþ çÿ”>~È÷_¿õ¨>5Ñáïü‘ùGýÔ?õi�¦'ü¤oˆ¿÷hÿë Ãí}¡üÌP@P@P@P@P@P@P@P@P@P@Pàüÿ((ý¹îÙ¿õ°ÿgÚýþ € ( € ( € ( € ( € ( € ( € ( € ( € ( € (øºÿ�ÁÏý"þ¿ÿ›¿ýÑ.¦_ó®Oëþ�©ý¢×ìçùšP@P@P@ø¹ÿ Ê?kÏû ?úÔ+âüBÿ’?7ÿºþ­0GôÏÐïþR7ïû»¿õ„âpÿƒyÿ埲ý×ïýj�tx{ÿ$~QÿuýZcCé‰ÿ)â/ýÚ?úÂpÁûG_h3P@P@P@P@P@P@P@P@P@P@øÿGÊ ?n_û¶oýl?Ùö€?¨ € ( € ( € ( € ( € ( € ( € ( € ( € ( € þ.¿çp_óÿH¿¯Æ?æïÿ_ôKŸé—üë“úÿ£êhµû9þf…P@P@P@~.ÁÃò‡ÏÚóþèþµÁJø¿¿ä�ÍÿîŸÿ«Lý3ô;ÿ”�ðëþîïýa8œ?àÞùCçì‡ÿuûÿZƒã]ÿÉ”ÝCÿV˜ÐúbÊFø‹ÿv�þ°œ0~Ñ×ÚÌÁ@P@P@P@P@P@P@P@P@P@P@~ÿÁÑßò‚�Û—þí›ÿ[ö} ßê( € ( € ( € ( € ( € ( € ( € ( € ( € ( €?‹¯ùÜüÿÒ/ëñ�ù»ÿ×ýçúeÿ:äþ¿èúŸÚ-~Ι¡@P@P@P@‹ŸðpÇü¡óö¼ÿºÿ­AðR¾/Ä/ù#óû§ÿêÓLýÿå#|:ÿ»»ÿXN'ø7ŸþPùû!ÿÝ~ÿÖ ø×G‡¿òGå÷PÿÕ¦4>˜Ÿò‘¾"ÿÝ£ÿ¬' ´uö‡ó0P@P@P@P@P@P@P@P@P@P@P@€?ðtwü £öåÿ»fÿÖÃýŸh÷ú€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( âëþwÿ?ô‹úücþnÿõÿD¹þ™ι?¯ú>§ö‹_³ŸæhP@P@P@Pâçü1ÿ(|ý¯?î€ÿëP|¯‹ñ þHüßþéÿú´ÁÓ?C¿ùHß¿îîÿÖ‰Ãþ çÿ”>~È÷_¿õ¨>5Ñáïü‘ùGýÔ?õi�¦'ü¤oˆ¿÷hÿë Ãí}¡üÌP@P@P@P@P@P@P@P@P@P@Pàüÿ((ý¹îÙ¿õ°ÿgÚýþ € ( € ( € ( € ( € ( € ( € ( € ( € ( € (øºÿ�ÁÏý"þ¿ÿ›¿ýÑ.¦_ó®Oëþ�©ý¢×ìçùšP@P@P@ø¹ÿ Ê?kÏû ?úÔ+âüBÿ’?7ÿºþ­0GôÏÐïþR7ïû»¿õ„âpÿƒyÿ埲ý×ïýj�tx{ÿ$~QÿuýZcCé‰ÿ)â/ýÚ?úÂpÁûG_h3P@P@P@P@P@P@P@P@P@P@øÿGÊ ?n_û¶oýl?Ùö€?¨ € ( € ( € ( € ( € ( € ( € ( € ( € ( € þ.¿çp_óÿH¿¯Æ?æïÿ_ôKŸé—üë“úÿ£êhµû9þf…P@P@P@~.ÁÃò‡ÏÚóþèþµÁJø¿¿ä�ÍÿîŸÿ«Lý3ô;ÿ”�ðëþîïýa8œ?àÞùCçì‡ÿuûÿZƒã]ÿÉ”ÝCÿV˜ÐúbÊFø‹ÿv�þ°œ0~Ñ×ÚÌÁ@P@P@P@P@P@P@P@P@P@P@~ÿÁÑßò‚�Û—þí›ÿ[ö} ßê( € ( € ( € ( € ( € ( € ( € ( € ( € ( €?‹¯ùÜüÿÒ/ëñ�ù»ÿ×ýçúeÿ:äþ¿èúŸÚ-~Ι¡@P@P@P@‹ŸðpÇü¡óö¼ÿºÿ­AðR¾/Ä/ù#óû§ÿêÓLýÿå#|:ÿ»»ÿXN'ø7ŸþPùû!ÿÝ~ÿÖ ø×G‡¿òGå÷PÿÕ¦4>˜Ÿò‘¾"ÿÝ£ÿ¬' ´uö‡ó0P@P@P@P@P@P@P@P@P@P@P@€?ðtwü £öåÿ»fÿÖÃýŸh÷ú€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( âëþwÿ?ô‹úücþnÿõÿD¹þ™ι?¯ú>§ö‹_³ŸæhP@P@P@Pâçü1ÿ(|ý¯?î€ÿëP|¯‹ñ þHüßþéÿú´ÁÓ?C¿ùHß¿îîÿÖ‰Ãþ çÿ”>~È÷_¿õ¨>5Ñáïü‘ùGýÔ?õi�¦'ü¤oˆ¿÷hÿë Ãí}¡üÌP@P@P@P@P@P@P@P@P@P@Pàüÿ((ý¹îÙ¿õ°ÿgÚýþ € ( € ( € ( € ( € ( € ( € ( € ( € ( € (øºÿ�ÁÏý"þ¿ÿ›¿ýÑ.¦_ó®Oëþ�©ý¢×ìçùšP@P@P@ø¹ÿ Ê?kÏû ?úÔ+âüBÿ’?7ÿºþ­0GôÏÐïþR7ïû»¿õ„âpÿƒy¿åŸ²ý×ïýj�tü=ÿ’?(ÿ¹ÿýZcCé‰ÿ)â/ýÚ_úÂðÁûG_f3P@P@P@P@P@P@P@P@P@P@øÿGÊ ?n_û¶oýl?Ùö€?J|I¬~Ñ?þ-ü Ó~'xßáŸ�¾xwáŒÞ1ÿ…_©'„¾!x·ÇŸ,ËÃ×p[xjÛBñ¿âmfýouÛ] Ãɧø”•ÿ‡zxCþŽ“öÿÿÄÖøåÿÍ%ðïOÑÒ~ßÿøšß¿ù¤ þéáú:OÛÿÿ[ã—ÿ4”ýø(×ý~Éú¤.hô€?™ÿø,‡í7ÿðçü{þ {ûþÅ?µò~Èzgí�¥üwµñß�äøðcãÚ[j^Óô}{BÕÿ<9{w ‚Ö OLû‹â� A)Õåἒʈ_ÃoÛ?þ ]ÿîÿ‚�~Êÿ°§ü«ã/ŸÛ/àíáŒtÙßö­ðGÂ=àGÄ/ |VðTt—>ñçÃÏìðaÓ¯ïuß hÞFŸõȓƚ»kâ©"Ò¼CáØÀ>˜ø•ÿ~Ã_ üñ EÖ|ûZk~|i¶ýžþ-þÙÞø >©û"ü6øµ.¡•uá�|G—Äö~'”i—óÁÞ­ x[ÑçK­>ëJ¿Ô¬µm"æüË>/ÿÁf>+ø/þ sð�þ ßáoÙ“ö†ñWÁ�CàÉÖ¼c©xKáO„¼E­ø×]ñ÷Œ4=Á¿´ƒµ©þ"X´²·Ã}=u«OøäGo­ÿnYø¦ÞÛÁú¥¿‡tû­HÔþ%Áß°×ÂÿüBÑuŸþÖšÇÁ„m¿g¿‹¶w†>Oª~È¿ ¾-K¨C¥]xcÄŸåñ=Ÿ‰åeüðAw«hÖôyÒëOºÒ¯õ+-[H¹¿ýžø�â ­#áo�|UáÛø’ûKðнÕ~ü@øoâMKN ¡ÍâMFÊÛâ ú�Ôš'…t™Þàšð[9¼7ÿkýž¿moø(ßÄ¿|døÛñ§ã§ÄO‚^ðÿÂß…¸ø»ñÇÇëñ;Äþðï†ß ¾è>ðÆ¡¯bé1Û,æÏB±•á·�TÕäÖu]>-@êÏÁu~¯ì¯ûrüTð'ìíûYè_´oìGàxõÿŠ_²GÅ¿ƒúGƒ>;øמ¾Ö<ñ[Æ>oÞøv�–ð@~ÒŸhŸÛ›Ã_ôï|Xñ7Ÿ‡þýžþ(ø·àŸÃ= âo�üWàMFÓ⮥âVð‰ôïXh¾Ô ðY“Wñ=Þ¯®xZÂx­./u4ÑÀ1¼qÿãý•|+£~ËÖ~ø!ûeüqøáûY|ðßí5ðûöQøðCGø¥ûGxgà�‹´Ïí�øçâO†4_ˆ)௠Øj:pk¸­¡ø�ªßý�~Ðm…»Å,€k_ð_Ø[Mÿ‚~üFÿ‚‹é6_üWð³àçĽàçÅÿ„ÚO€´öˆø_ñ;Yñ.‡ásàï|<ñï�ü£išž™wâ-.óP–/Ýiïa%Ïö]î§c{anðŸí÷ÿšøµ®xGöø‰ûÛ|~øðóâÿü[àgì·â¯üoýŸ<#áÝö¢øã]$ëWþ5ø~&èÞ0¿Ö> øâÒòÕ<3ñKÃö^ ñ-ÜÖW¿ÙSÙ@‹=Àí'ìÅÿø+ûa|ý¤¾üð§Å_øoöY×áð7ÄoÚV Â0þÍz¿Å0–�¬|'ø{ã3ã‰<_ãøUn.OŠÛJøÿ¦ˆ,CÜø Ç­øQüB÷Å~þßñóûÿÚ@?gïý5|B Ð ( € ( € ( € ( € ( € þ.¿çp_óÿH¿¯Æ?æïÿ_ôKŸé—üë“úÿ£êhµû9þf…P@P@P@~.ÁÃò‡ÏÚóþèþµÁJø¿¿ä�ÍÿîCÿV˜#úgèwÿ)á×ýÝßúÂñ8Á¼ÿò‡ÏÙþë÷þµƺ<=ÿ’?(ÿ¹ÿýZcCé‰ÿ)â/ýÚ?úÂðÁûG_h3P@P@P@P@P@P@P@P@P@P@øÿGÊ ?n_û¶oýl?Ùö€>þý�?äùÿà£_õýû%ÿê�¹ Ð þS?à·P|qø]ÿ`ÿ‚>þØÞý�kÏÚ¯áoìÑ¥þѺŸÅ+Ù3à7‹þ5ø›I>*Ò4ohz|‘èÐÚøwMÔµ �A¯-m|Eâ=íz~Ÿ©Of÷ja` í+Âß¶ücþ ›û ~Ôž=ý‹?hØköÿ‚p]øçâo†Gíká˜>|xøÓñ§ÆQøz]>ÆËá�¼½ÔôMJÕüà‹ßµË&§¢Ûèú‰‹ø‹ûkÄúV‰`ø‰ûN~ÌÿðVÛö/ý¶~~Ò_³ïügãíé§ü~×üu&©ãŸ‰:üîÓö~ð?‰¼1®é:Gìçð�IñuŸÂï�¾.Õu; ÛOøÀ¿|a«CÉã-ZÂóD±Žäö"ÿÚÃðZ/ø&çíñ7ì1ûpjß¾)ÿÁ0<û(x…´oÙÿ^¼ñ¿À�‹Wüx/íÿh? =äü(д;]OB×5mcÅ–q�êÿÚz|Z„Ú^¯cdøïûN~ÌÿðVÛö/ý¶~~Ò_³ïügãíé§ü~×üu&©ãŸ‰:üîÓö~ð?‰¼1®é:Gìçð�IñuŸÂï�¾.Õu; ÛOøÀ¿|a«CÉã-ZÂóD±ŽäûµøKâ½câ×ìá†_¾x‡Å³uÅ�øYñ_ÀúŸ‚¾-èÝ¿�îôðÿ‰| vgÕ´�vmBÐý—L•ZòxnlÜB²\Tù,ø7ÿÝý­4Ÿø /ücö�øEðcâ‡Ãø*üÇÿ´Ç† |_ðãÆø·ã?k?µwÆm{âGÀ�áÖ«¥é~7Ôí~'ü8»Ò|Sáï ¶“.¥ã[ƒÃ^·{_ˆÓÍvò…?à™?¶Ö©ÿjÿ‚Jøå?gÚïFñ·ì;ûr|lø¥ñ·öwøw§øËà—íŸgðƒÇŸ ÕäñïÁ}3^³ð¿�,þ$øvÃÂv>½Ñl£×VãÄö>'Ñà}/OÔ/-@?PþþÄz—ÆŸƒŸðWÏŠ¿ÿeø*W„þ&ürÿ‚||^ý–>üJÿ‚¢üoյώ_´^·âŸ†z�Æ�àí7áÄ+[ßø2ËÂÞ)Òô¿xwž,ñܺ펱Mœ+s­ÁáÀœ|AáÚúëþÅÿ·øÁðöý²¡á�Šð«<§éú¿�¼_ðãÄ£VðTš§Š-ü9o•†‹¯µÕƒÚé77‘€|ÿû]Á0¿m߂߲oüƒáGìåð'ã7�§ö‹_³ŸæhP@P@P@Pâçü1ÿ(|ý¯?î€ÿëP|¯‹ñ þHüßþä?õi‚?¦~‡ò‘¾ÝÝÿ¬/‡üÏÿ(|ý�ÿî¿ëP|k£Ãßù#ò�û¨êÓLOùHßîÑÿÖ†Ú:ûCù˜( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( Àø:;þPQûrÿݳëaþÏ´ú§^ø7öoý«?i/ˆ¼Y£|>ðwí¥| Õ<ãŸê¶^ð爾x?ľ ñ/€%ñV©ö-Fñ½žŸ§i^+Ó¼?­êv×Þ/ðö¯¨x2=q<ñ? zWü7oìAÿG“û*âC|"ÿæ¾€ønߨƒþ�'öTÿĆøEÿÍ}ðÝ¿±ýOì©ÿ‰ ð‹ÿšú?á»bú<ŸÙSÿáÿ5ôÃvþÄôy?²§þ$7Â/þkèÿ†íýˆ?èòeOüHo„_ü×Ðÿ ÛûÑäþÊŸø�ß¿ù¯ þ·ö ÿ£Éý•?ñ!¾ó_@ü7oìAÿG“û*âC|"ÿæ¾€ønߨƒþ�'öTÿĆøEÿÍ}ðÝ¿±ýOì©ÿ‰ ð‹ÿšú?á»bú<ŸÙSÿáÿ5ôÃvþÄôy?²§þ$7Â/þkèÿ†íýˆ?èòeOüHo„_ü×Ðÿ ÛûÑäþÊŸø�ß¿ù¯ þ·ö ÿ£Éý•?ñ!¾ó_@ü7oìAÿG“û*âC|"ÿæ¾€<�â߉þ~Ö¾0ýš<1ð3â/„>+…ß´7€hkÿ |S¡øÇÂÞ ð_‚<7ãvÓ®|UâMãUÑ,¯üi¯jZW‡|áoíüUâ´ë>%ÑtË¿ xÇzׇÀ?Aè € ( € ( € ( € ( € (øºÿ�ÁÏý"þ¿ÿ›¿ýÑ.¦_ó®Oëþ�©ý¢×ìçùšP@P@P@üÓÁÍ¿¶WŸ…Ÿ±»û_\>±ñŸöŸŸÀÚ–‡ Ø\"¿„|ðßâ§„¼{©øïÄJb—fŸ«êþ _øvÅžÖ}cQ»Öu )f·ð–±ü×ÄÜç …É*dò|øÜÑД)Åÿ†G*õ4~ìçCØÓŽŽrs”[T¦�íϠ熼AŸx£…ñ”†x9­V.´YŽm�dŽSC)Á>hÞ¶™¼ÏU*�ÃQ§†£V1ža†‘õ¿üЮŸðGÿÙ$RŒ�ñýJ°!Ô¯íAñ¨2º°Y[r•<Œsƒ�=ä�Ê/ÿSýZcOÏ>˜m?¤gˆŽ.é®i«4ÓàN³Mnš³Lý¢¯³?™‚€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € üÿƒ£¿å·/ýÛ7þ¶ìû@à¼?µGüsöo°ý™´¿ø&_ì�cûSéŸãd_´�©ü ñ‡Ç  ÇágøC'Ãîlü/â ßDO¾¿ñÂjñß.¬úµ˜·:Uɘù»ÿ‡‚ÁÎ?ô…ß…ø®�ˆ_üÚPÿÿƒœé ¿ ÿñ]¿ù´ þ ÿ8ÿÒ~ÿâº>!ói@ü<þqÿ¤.ü+ÿÅt|BÿæÒ€øx'üãÿH]øWÿŠèø…ÿÍ¥ððOø9Çþ�»ð¯ÿÑñ ÿ›J?áàŸðs�ý!wá_þ+£âÿ6”ÃÁ?àçúBï¿üWGÄ/þm(ÿ‡‚ÁÎ?ô…ß…ø®�ˆ_üÚPÿÿƒœé ¿ ÿñ]¿ù´ þ ÿ8ÿÒ~ÿâº>!ói@ü<þqÿ¤.ü+ÿÅt|BÿæÒ€øx'üãÿH]øWÿŠèø…ÿÍ¥ððOø9Çþ�»ð¯ÿÑñ ÿ›J?áàŸðs�ý!wá_þ+£âÿ6”ÃÁ?àçúBï¿üWGÄ/þm(ÿ‡‚ÁÎ?ô…ß…ø®�ˆ_üÚPy¡ÁUÿàëÿ é餸gþ G£øwJŽG–=3Bý…¾1izK&Ñ$‰g§üD·¶Y*‡uŒ3m]ÄàPÇü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@ü=çþßÿ¤`æ•|oÿç—@#ÿÃEÿÁÅðÕ_ðÛŸðå­þ›þŠ÷ü2/í=ý±ÿ$çþ'ü�¿ávÂ)ÿ$ëþ)�ùǯúWü„¿ÓkÈþÂʵ¶þ¥íOú ç­ÏþíõOƒÚ{/÷Ým~/xýþ"¿ˆ?êüBÿõ—þ¡ÿÑ;õl»êßò:ÿXÞ~§õÿùÿ·½ÿ÷ÁýÑõÇü=çþßÿ¤`æ•|oÿç—^¹ùàÃÞàíÿúFþiWÆÿþytÃÞàíÿúFþiWÆÿþytÃÞàíÿúFþiWÆÿþytÃÞàíÿúFþiWÆÿþytÃÞàíÿúFþiWÆÿþytÃÞàíÿúFþiWÆÿþytÃÞàíÿúFþiWÆÿþytÃÞàíÿúFþiWÆÿþyt‰â_ø,÷üuà¿xƒÆ>2ÿ‚phÞð‡„ôMWÄÞ*ñWˆÿc¿ŒÚ?‡¼3á½Â}S\ñ½«^üOŠÏKÑ´m.ÖëQÕ5¹b¶²±¶žæy(�†¬MŒÄIƆ…lMy(¹8Ñ¡NUjIF)ÊMB2j1M½’lõr—0â\ó&áÜ¢”kæ¹þm—d¹e Õ§B³ ×G‚¥:õ¥ 4cS^”%V¬ãNšns”b›\OÂ_ø/Wüåñû×¾1ø û|3øÙá 7[¹ðΥ⯅_²ïÅ?ø{Oñ%�†›ª^x~óVðÿÅkÛ;}f×KÖt}FãN–U¹†ÇUÓ®^1Ü,ü>w—gØj˜Ì²¬«P§^XiÊtªQj´)Ò«(òÕŒdÒ…jo™+;µ{¦}g‰q�„ùæ‡xß/¡–æ¸Üª†u‡¡‡Çà³O/Äã1ØU]| jôc)brÜ\)MTЧ¸¨Î ú�ü=çþßÿ¤`æ•|oÿç—^±ùðÃÞàíÿúFþiWÆÿþytÃÞàíÿúFþiWÆÿþytøËûG|gÿ‚�þÖ¶•¯Ä/‰ÿ³=ß�¿à 67Þfý•î¾ kº–�¥'ÃMËÄpxf_€ºýþ¯ªj¾ƒÂºeÏ�|Eá}VçSÓuË}K\Öõ‹kÍP¿µ“ðʘjYߊpÙšS¡B«öxzŠð«  V£EÆIÅÒ©(¼EX4áV.¤^•.ª¸<ëá‡ÐO/θ"RÂæ™¶_�Îp•=ž'ˆâŽ&©—fy”kД*Ä£Z9FN¤1ñÁU‹SÂ(¿×?ÁP¿à꿇>Ó|ð÷þ #á�x?FûgöG…<ûüZð¿†ô¯í û­WPþÍдOˆ:]�ÛµKëÝJóì¶±}¦þòêòm÷Èÿ·Q¡G N4pôiP£ òR£N©ÃšNrå„ciJRvJòm½[gùq™f™žs�­™gŽ;5Ìq>ÏëüˈÇcqÆ•<=mŠÅT«^¯²¡J•|õ%ÉJ�:q´!®ŸþóÿoÿÒ0?óJ¾7ÿóË­Nÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòèÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòèÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòèÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòèÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòèÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòèÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòèÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòèÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòèÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòèÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòèÿ‡¼ÿÁÛÿôŒüÒ¯�ÿüòè‰ø‹ÿÄÿƒ¥¾x7Xø�ñwöðgÂ߇žþÏÿ„ƒÇdÏ‹žð†…ý¯ªØèZOö¿ˆ5�Švºm‡öž¹©éº5‡ÚgOµjz…•”;§¹‰ƒ3̰™F ¾aŽ©*X\?³ö³Œ'QÇÚÖ§B…5)Êõ*Áh�“»Ñ6}_pWø‰Ågp®–;>Î>»õ -lVN¯ö~_‹Í1\Øœ]JXz\˜,"¢ö•#Ï(*p¼ç³á×üþ–øÃàÝâ7Â/ØÁŸ¾x‹ûCþÿü>ý“>.x³ÂïöF«}¡jßÙ Ñþ)Ýi·ÿٚ晩h×ÿf�þË©é÷¶SmžÚTS,̰™¾ †a�©*¸\G´öS”'MËÙV©Bw…EÆÕ)Mj•ҺѦoÁ\Cáßf|ÅXJXû'ú—×ð´qX|m:_Ú~4Âòâp•*áêó౸z�ÙÔ—$¦éÎÓ„¢»oø{Ïü¿ÿHÀÿÍ*øßÿÏ.»Ï”ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€ø{Ïü¿ÿHÀÿÍ*øßÿÏ.€Úÿö¼ÿ‚·þÕðB�ø,Gü=7ö_ÿ†nÿ„þóÿ +þ,§Ž>Âgÿ Gí‡áŸøYßò9x—Ä_ð‘Â;ÿïÃßùý�û#ûwý3íÚv¾@÷ù@P@P@P@P@P@P@P@P@P@P@P@P@|]ÿ"ÿ”w~Þßöeßµ'þ¨ïW‹ÄŸòNçßö%Í?õ¹úg‚¿òy<%ÿ³›ÀúÔåGâçü…ÿ(îøÍÿg£ñÿTwìé_áOü“¸ßûb?õ.?¦¿hüžNÿ³g“ëSÆgôé_¦ŸÃ!@?ðrgüÿÇ^ ñ§üoöwñ>§à­{Âv~ð—ÇëÏ x’ûÂ~/Ò.§»Ò~|9ø¡á}fÂúËQ’âê kAøeâk *ê ë{ü5¨[Z]éòx¢ïOüwÄŒ‚½‹Šò겡RŒhÑÌ*²£Z ¸apتSŒ£+µ:xZ±ƒRQöRIÇÚ¸ÿ¤B�rœÏSÀ2ÀPÌð™…\Ë1áxì,Ã.ÄBñæs‘cðÕ©U ¡Nx\^y�­ˆ§:S¬ñ´gR�e€§[÷¯þçûCüPýª¿à›?³ÇO�Å¿ˆ¾&ø³Eøƒ¤x£Ä6öQéí¯Íðûâ÷ĆÚn¹k q­jú7„4íC_žÒ;[+½rãP»²°Óíg†Æßï8;1Åf¼7–c±³U15aˆ…ZŠ<¾Ñáñ˜Œ4g$´çœ(ÆU´\ÜœcÔWògÒGƒ².ñ¯ŽxW†pÓÁäy~''Ä`0sªë,$sŽÉóºøZ3’çú®˜Ö£„�GR­<,(Ó«VµHʬÿLëé�À ( € ( € ( ÅÏø8cþPùû^ÝÿÖ ø)_âü‘ù¿ýÓÿõi‚?¦~‡ò‘¾ÝÝÿ¬'‡üÏÿ(|ý�ÿî¿ëP|k£Ãßù#ò�û¨êÓLOùHßîÑÿÖ†Ú:ûCù˜( € ( € ( € ( € ( € ( € ( €?àèïùAGíËÿvÍÿ­‡û>ÐïõP@P@P@P@P@P@P@P@P@P@P@P@ñwü‹þQÝû{Ù—~ÔŸú£¼u^/É;ŸØ—4ÿÔçéž ÿÉäð—þÎoÿëS•‹Ÿðjü£»ã7ýž�ÄOýQß³¥|g…?òNãìuˆÿÔ¸þšý òy8kþÍžMÿ­OŸÓ¥~š …ø¹ÿ Ê?kÏû ?úÔ+âüBÿ’?7ÿºþ­0GôÏÐïþR7ïû»¿õ„âpÿƒyÿ埲ý×ïýj�tx{ÿ$~QÿuýZcCé‰ÿ)â/ýÚ?úÂpÁûG_h3P@P@P@‹ŸðpÇü¡óö¼ÿºÿ­AðR¾/Ä/ù#óû§ÿêÓLýÿå#|:ÿ»»ÿXN'ø7ŸþPùû!ÿÝ~ÿÖ ø×G‡¿òGå÷PÿÕ¦4>˜Ÿò‘¾"ÿÝ£ÿ¬' ´uö‡ó0P@P@P@P@P@P@P@~ÿÁÑßò‚�Û—þí›ÿ[ö} ßê( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (âïø)ü£»ööÿ³.ý©?õGxê¼^$ÿ’w>ÿ±.iÿ¨5ÏÓ<ÿ“Éá/ýœÞÿÖ§*??àÔ/ùGwÆoû=ˆŸú£¿gJøÏ ä�ÆÿØëÿ¨9qý5û@?äòp×ý›<›ÿZž3?§Jý4þ (ñsþÿ”>~ן÷@õ¨> WÅø…ÿ$~oÿtÿýZ`�韡ßü¤o‡_÷wë ÄáÿóÿÊ?d?û¯ßúÔèð÷þHü£þêú´Æ‡ÓþR7Ä_û´õ„áƒö޾Ðþf ( € ( € ( €??àá�ùCçíyÿtÿZƒà¥|_ˆ_òGæÿ÷OÿÕ¦þ™úÿÊFøuÿwwþ°œNðo?ü¡óöCÿºýÿ­Añ®�ä�Ê?î¡ÿ«Lh}1?å#|Eÿ»GÿXN?hëíæ` € ( € ( € ( € ( € ( € ( € üÿƒ£¿å·/ýÛ7þ¶ìû@¸ß>%xá7…îügñÄúg„ü5g=­£êZœ’¤_ßJ Óô½6ÊÚ9õ _WÔg" ;HÒ­o5=Br!³´žO–€>>¸ÿ‚›þÇ6³Ïm7Œþ*y¶óI¾_ì³ûVÏ™´oåÏÁ9 ™7)Û,2I‹‡�Ùbü<ûö5ÿ¡Óâ¿þ"§íeÿÎB€øy÷ìkÿC§ÅüEOÚËÿœ…ðóïØ×þ‡OŠÿøŠŸµ—ÿ9 ?áçß±¯ýŸÿñ?k/þrÃÏ¿c_ú>+ÿâ*~Ö_üä(ÿ‡Ÿ~Æ¿ô:|WÿÄTý¬¿ùÈPÿ>ý�ètø¯ÿˆ©ûYó� þ}ûÿÐéñ_ÿSö²ÿç!@ü<ûö5ÿ¡Óâ¿þ"§íeÿÎB€øy÷ìkÿC§ÅüEOÚËÿœ…ðóïØ×þ‡OŠÿøŠŸµ—ÿ9 ?áçß±¯ýŸÿñ?k/þrÃÏ¿c_ú>+ÿâ*~Ö_üä(ÿ‡Ÿ~Æ¿ô:|WÿÄTý¬¿ùÈPÿ>ý�ètø¯ÿˆ©ûYó� þ}ûÿÐéñ_ÿSö²ÿç!@Ýð{ö¹ýŸ~;êËáÿ†Þ;¹¼ñ¶𭝆¼Yை ¼K¨éštém¨êG‡¾&øWÁúÖ±e§M, ¨]iV7�Ø‹›Wºx£º·i>‘ € ( € ( € ( € ( € ( € ( € ( € ø»þ Eÿ(îý½¿ìË¿jOýQÞ:¯‰?ä�Ï¿ìKšê sôÏäòxKÿg7€ÿõ©Ê�ÅÏø5 þQÝñ›þÏGâ'þ¨ïÙÒ¾3Ÿù'q¿ö:Äê\M~Ðù<œ5ÿfÏ&ÿÖ§ŒÏéÒ¿M?†B€ ü\ÿƒ†?埵çýÐýj‚•ñ~!É›ÿÝ?ÿV˜#úgèwÿ)á×ýÝßúÂq8Á¼ÿò‡ÏÙþë÷þµƺ<=ÿ’?(ÿº‡þ­1¡ôÄÿ”�ñþíýa8`ý£¯´?™‚€ ( € ( € ( ÅÏø8cþPùû^ÝÿÖ ø)_âü‘ù¿ýÓÿõi‚?¦~‡ò‘¾ÝÝÿ¬'‡üÏÿ(|ý�ÿî¿ëP|k£Ãßù#ò�û¨êÓLOùHßîÑÿÖ†Ú:ûCù˜( € ( € ( € ( € ( € ( € ( €?àèïùAGíËÿvÍÿ­‡û>ÐèÞ§®6½ÿð·‚µ{+-CMøyûx�â7ƒ¤¹··–] Å^>ø¿¦ø'ÄÚµ‹<HµÏ xVÃF†üLn,t«Í{N±k{Ok‘ênÜÜÛÙ[Ü^^\Ciii ·7WW2ǽµ¼´³Ü\O+,Pà JÒK,Œ±Ç³»Ð�üý£¿g¯Ú_ÃÚ¯‹¿g�h hZËøs[ñ?Á/Šø«áíÄ1ØÙêrh:®µàMs^Ótýe4ÝGOÔK»¹†ùlo¬îÌ ¨$pOñˆt hçŠüW®ið¿†t�KÄ>$ñ'ˆu+-@ðþ�¢ÙM©k湬jS[iÚN‘¤éÖ×ú–¥qoeaeo5ÕÔÑA’(?ðßâoÃŒž Ð>%ü!øƒà�ŠŸ$´µ½ºÓ.®´øbÿTе‹{mJÊ÷O¸ŸN¿¹ŠÛK«Ig·–4íèÌø¿ã¿'„þxWÇ~>ð§„'|6ø7à�âgÅÿˆ^øUðã–ö÷~(ø�ñ#Åš�¼á»[»ë].Òç_ñ_‰ïô½G·ºÔ¯¬´ëyµûhæ¾¼µ´�šââ(Ü¡ð÷ˆtèŠü)®i&𿉴�7Ä>ñ'‡µ+-k@ñ�­YC©hú懬i³\éÚ¶‘«i×6÷ún¥aqqeeq Õ¬ÒÁ,r0ÆðQ}qüû*ø§â>Ÿgi7Š>ø÷à—Ž¼¨ÜA —Š´ÏŒþ³³Õ¬%–)ŒµŽ¥¨éZ„j¾N­ êšÇ‡õ$¹Ñõ�JÎäî:( € ( € ( € ( € ( € ( € ( € ( ‹¿à¤_òŽïÛÛþÌ»ö¤ÿÕãªñx“þIÜûþŧþ ×?LðWþO'„¿ösxÿZœ¨ü\ÿƒP¿åß¿ìô~"êŽý�+ã<)ÿ’wÿc¬Gþ åÇô×íÿ“ÉÃ_ölòoýjxÌþ�+ôÓød( ÅÏø8cþPùû^ÝÿÖ ø)_âü‘ù¿ýÓÿõi‚?¦~‡ò‘¾ÝÝÿ¬'‡üÏÿ(|ý�ÿî¿ëP|k£Ãßù#ò�û¨êÓLOùHßîÑÿÖ†Ú:ûCù˜( € ( € ( € ü\ÿƒ†?埵çýÐýj‚•ñ~!É›ÿÝ?ÿV˜#úgèwÿ)á×ýÝßúÂq8Á¼ÿò‡ÏÙþë÷þµƺ<=ÿ’?(ÿº‡þ­1¡ôÄÿ”�ñþíýa8`ý£¯´?™‚€ ( € ( € ( € ( € ( € ( € (ðþŽÿ”~Ü¿÷lßúسí}ýü¥:ïþÑÿ§ÿëEêtòüOûb·ìcÿžý¥sâ��Pßh^ ¾²¿–X…†¡á¯†ÿ|_§ß_²ßx~ÚC-¸â Ä/ø!OŠgØ þ ¹âïø'¿ìùûH|ý >þ׿°çìõñSBñ'Á_‹¾ ø¿ákÚïözø{'†>7hUð^¿®éú7ˆ> ÛhŸ¾/jÚ\×ܦŒÞŠ C¥G§5°§ø«ö±ÿ‚™ÁEtOø.‡Ä?…´§ÃƒŸ²_ì?'íCû0xOöXÕþxOÆ_ð¿4Ÿ‡¼}§|D×¼añ~êÿHø—ðãľ"ðå€Ôü¨øSÔ|=¥ø“_³·Õ¼/u£xcPƒÄ€/~Í¿¶Oí§û6Á9àÙ�ƒ_±ßÅ ü:¸ý°¾)üqø1ñׯžð�Žü%­ØÞük�GðÖ©â(u�_[é~ »ñv«â[½/á÷‹<­ø¢C—Ä–>}¥õ€Ñþý«?à·ž$øÑÿxý†íÿo_…+ã_ø''‚-h þÕSþÉŸ GŽ~ i×þ"x#àdŸ c„|*ð¯‡+xZ8‡ÃÖ¯a¢]ø«À¾;ñgÃ]wYÓ4ù&¸:m§ˆu\kÑé‰4°éßÚFÊÝÚ#4üQøwVøµûÁLà¥ÿðY…Ÿð�x‹áïìµÿaø­û=þÛ ´u{¦ñ'ì�ñ÷ÅMÿ‹,ìcòŒ×¿¼wa¥ë6ÖÏ3Guâ{ßj7fÏDðö¹,àhxþ <¿°ìŸðs×íåð: üQÔdý¢c›ß�W·oq¨øÄWŸ4¿èñ­ëX\Ù\j¾±Ò|Y�–ÎÖòÅüAga•þŸý¦/­À=ïö'ÿ‚ª~ÙÿkÙ·ög?·_‰¿l þÚ_~)h>:ø¦ßðN/~ÍW°í+iðÊ÷ŵÿ]øÏá7Ãïüuøwsâ#?‡ôÛ/� JãB–»}§Yj6:^¸ù£ûüpÿ‚’þÊðKø(/üSá?í©â]nËáGü{Å:¿Ç¯ƒ÷Ÿ>k?ðµÎ«ãï‚ú'ÇŸŠ¾3ñƒ5ÿi�Ä»_è_ÚÞðÃèz_ƒ,ü16±ámGH{�PÎûb¿ðV_Ú_þ3%»|^Ñ?áÒŸð»gý‡–Óþ¿}‰hûØÉii<`~" ÿÂÂ/ÿ ` þ£}ˆ‹Ã£ ¾@ñןø+¿ü ãGÀø&§ÂŸü_🄿ioø+÷íOûSx�áïÇOˆ?>ëß²§ì�ð�Æv^ðç‡<-ðÓ@Ð|'áOˆ>)–×Jñ‰4 _âø‡SÕ´äm?XÕîÄ:¹áÀ¯<5ÿÿ‚„~˵üwþ ÇûOþоý¥¼ð—þ ³ñ_öãý•ÿk�à�€>xÎÃQð¯‚ç1økÇÿ ü3kªü-½}#ÄWRjZ,�£ÝZ\/„å:ôz½Ÿ‹­ô_~}|Vø«ÿý¯?àÚßÚwöäý²¿j¯ xÿÀÿf øoÁŸ³÷‡~|<ðv§aâoþ׿¼5qñ߯<)m Í¨x›Æ)áoÚÃðßÞÐü  øgUðõ¯Új—w vÁÿà Ÿÿà£þü7ø1ñª×àwìgÿìý‘fo‡Ÿ> Ïà¿ß|eý®þ+ø‹áV™£ê·~:ðv¹â_‡_<'á�NÝü?Õ|9âo¹Ðµ_QKOŦø`÷Kþ �ÿ&3ñ£þÂõxü5 Ð ( € ( € ( € ( € ( € ( € ( € ( ‹¿à¤_òŽïÛÛþÌ»ö¤ÿÕãªñx“þIÜûþŧþ ×?LðWþO'„¿ösxÿZœ¨ü\ÿƒP¿åß¿ìô~"êŽý�+ã<)ÿ’wÿc¬Gþ åÇô×íÿ“ÉÃ_ölòoýjxÌþ�+ôÓød( ÅÏø8cþPùû^ÝÿÖ ø)_âü‘ù¿ýÓÿõi‚?¦~‡ò‘¾ÝÝÿ¬'‡üÏÿ(|ý�ÿî¿ëP|k£Ãßù#ò�û¨êÓLOùHßîÑÿÖ†Ú:ûCù˜( € ( € ( € ü\ÿƒ†?埵çýÐýj‚•ñ~!É›ÿÝ?ÿV˜#úgèwÿ)á×ýÝßúÂq8Á¼ÿò‡ÏÙþë÷þµƺ<=ÿ’?(ÿº‡þ­1¡ôÄÿ”�ñþíýa8`ý£¯´?™‚€ ( € ( € ( € ( € ( € ( € (ðþŽÿ”~Ü¿÷lßúسí}ýü¥:ïþÑÿ§ÿëEêtã_ðPÿø%†�ÿøóûxÛãÄý)ÿg?ÙâWˆþ,xÓöZÖ¾YøÛôg‹oí4‹ Aãêþ6³Ñ´ÿ økû&K[ï ê¼acâ� Ä>,Ð57ŠÏ[fä?´Oü·öcñÇ_ØŸö‘ý�|;ð+þ ÿñgö=øñkñZûVøû.ü?Òt¯�ÞºM6ü'ñö•ðó[ø>òÛkö_öFŸâ�FûÄSøgG×<]e¦èr7‰.§ˆüwÿñ©ø»ûy꿳ßü;â—ìáû3ÿÁGn|_â_ÚcöfðÿÁO‡þ2:ß�øáWü Ÿð«~Ëÿ SþÏ„’ü,þÞÿ„Ÿþ-Çü,í/7ûwû/þïý�oögö�Ö´Ê? à€Ÿð¯>Á¾ÃYkÿæ>8|LøËý·ÿ #û?þ÷ü,_‹ ñCþ¿ìßø\·¿ðªÿ±öÿaÿl}¿â?ö†´ÿ²ìqýŸ@T~ÎÿðIÏøP~+ÿ‚¶xŸþïü%ðô¯x»Æ_aÿ…Yý…ÿ /þ�âf‰ý›öŸøXúÏü,ß°ÂÅûWÛ>Ïð÷í_ØþOÙmÿ´<Û¦?à™_±7ü;ŸöøûÿÂÌÿ…Åÿ NÃÆö?ð²?á ÿ…{ÿ 7ü&_|kñÍÿ„?þ¿cfÿÂaý�³þ�WíŸÙßÚí~×öP ý™?à”þø%«ÁOíþ'øòÇãÏßø)ÇÇOˆ_›EÖgÓ->ûý‹ÿà�¶ìýñ/់hßø*—ÆßÚ³áçÀï‡? >|Ó>x;özðÆšúT~Ó5ߎð‡x£Å:‡ÇŸx{B‚ÞZñ<º\öÚ½´:ýÀ»Ô$¾7 9üÿ‚j¿þ ÿÁGÿeSûdë8ý�¿oX?h oÃ_õ߀ž·Ö¾|Tøíc¥icât­¼k'ˆ¾$Ýø+MÐ4´Ÿ IaàoÞ^iPêò[Zj³\]ÊæÁºCÿÁ'"ÿ‚pÃ]ëcâÌ´ãþÖ�ûbÿž”ë²|^“\žÙõãðÇþ½�ð²cðկŖ�ˆ> ?èì|6>“øåÿ?øwñ'öfÿ‚zü+øUñãÆ?³ÇíÿÈÐ|eû0~Õ ðf�¯j:v»¡xgºŒõ|,ñ¥.ƒâ¿|KÕ<%¦x§Äžºñ +ý­ØßX½Ðïuý/]Ïø3ÿUÕ<=®þÛŸÿioÛ Å¿µWí¯ûk~Í>2ý”õÚ/\ø?á/†>øQð›Äþÿ„rÛDøuð+Á~#—G²··½³ðö³®BÞ4‰õù|9h–× ö­âm[[Ýoø#fïø"Xÿ‚:ÃGcþ-òxþ/þ~çÆåøÉý«ÿ ‹þ‡|Â9öøYüÈ_í‡þAtwÂßðG‡øWû[~¿¶'ÀßÚ,|1ø‰û3~˾ ý�ÿiM!>ÿkøköÐø5à øoïˆ,í>'ø~O†ž&Ò%ÑZÑ|A3üL’ÂïMð�Í®¥¦x+=lëø*7ü˜ÏÆ�û|!ÿÕãðÖ€?@( € ( € ( € ( € ( € ( € ( € ( €>.ÿ‚‘Ê;¿ooû2ïÚ“ÿTwŽ«ÅâOù'sïûæŸúƒ\ý3Á_ù<žÿÙÍà?ýjr£ñsþ Bÿ”w|fÿ³Ñø‰ÿª;öt¯Œð§þIÜoýޱúƒ—Ó_´þO' ٳɿõ©ã3út¯ÓOá� €??àá�ùCçíyÿtÿZƒà¥|_ˆ_òGæÿ÷OÿÕ¦þ™úÿÊFøuÿwwþ°œNðo?ü¡óöCÿºýÿ­Añ®�ä�Ê?î¡ÿ«Lh}1?å#|Eÿ»GÿXN?hëíæ` € ( € ( € (ñsþÿ”>~ן÷@õ¨> WÅø…ÿ$~oÿtÿýZ`�韡ßü¤o‡_÷wë ÄáÿóÿÊ?d?û¯ßúÔèð÷þHü£þêú´Æ‡ÓþR7Ä_û´õ„áƒö޾Ðþf ( € ( € ( € ( € ( € ( € ( Àø:;þPQûrÿݳëaþÏ´ú«ñ»C¸ð‡Ä |{ð>µðê×â^•à�ü9»ðOÅÿ ᯊ>ÔµïxŽ]>ÓÅñYkw¾ño‚µ­=5o ë±ø_ÅZí¦½â?ø“Bµh<ø~ó…Çí�ûZ%Äémû*~Í—É4©oq'ü3ÁvòO»¦x?áEMä<±…v‡Î—Êf)æ>ÝÄølŸÚïþ�;öiÿʼnx3ÿœ5ðÙ?µßýwìÓÿ‹ðgÿ8j?á²k¿ú4ïÙ§ÿ%àÏþpÔÃdþ×ôiß³Oþ,KÁŸüá¨ÿ†Éý®ÿèÓ¿fŸüX—ƒ?ùÃPÿ “û]ÿѧ~Í?ø±/ó† þ'ö»ÿ£Nýšñb^ ÿç @ü6OíwÿF�û4ÿâļÿ΀ølŸÚïþ�;öiÿʼnx3ÿœ5ðÙ?µßýwìÓÿ‹ðgÿ8j?á²k¿ú4ïÙ§ÿ%àÏþpÔÃdþ×ôiß³Oþ,KÁŸüá¨ÿ†Éý®ÿèÓ¿fŸüX—ƒ?ùÃPÿ “û]ÿѧ~Í?ø±/ó† þ'ö»ÿ£Nýšñb^ ÿç @ü6OíwÿF�û4ÿâļÿ΀:ã�~Òº%Ÿ‚?h-àÀ�†ã_ðçˆüg§xkö˜Ñ¾1ø»Ç àÏé>,Ð|¤Ëoà�h^ðæ¹«èºdž7ñ-õι¬Üxf cÁ^ðÞ™ªxšÓâO‚À>ßÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hÿ…¯ð·þŠW€?ð±ðïÿ,hùùÿƒ‡à¥>ýŸ?dIÿg„Zÿ†üYñSö¾Ò0Ñu_ kx†ÓImKHµ¼½ò,õm@¤²×£À™&7!Èþ­�pöøœT±Ê”›Ã¾ B¯4b•hN”ÝEh'+)ËV|oÒ¿ÅñcÅ%�ð”1O+Ér-,v&iÓÍñ9fužâešàU*Õ¥,»‡Ì0ÑÁÔÄ*8‰Ó¥ÍSJñ‰ûCÿ _áoý¯ácáßþX×ÙŸÌáÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐã¯üãÆ¾ ñgüOö±ðÿ…|[áŸëÚ‡ü(Ÿ°hž×´­gW½û/í/ðnöëìšn�wsysök;k‹¹ü˜_ɵ‚iäÛNëñ¾ FSáÚ0Œ¥'õ F)ÊNÙž »%vì“~‡ô§Ñ½7Ò'ÃÊØŠÔ¨Q‡úÛÏVµHR¥nâhGš¤ÜciJ1Wjòi-ZAÿñ¯ƒ|'ÿ“ý“¼?â¯øgÃZöŸÿ Ûíú'ˆ5í+FÕì¾ÕûKüd½µû^›¨ÝÛ^[}¦ÎæÞî:ó­g†x÷E*;ÆPá¦3Œ£%õûÆIÆJùž5«§f®š~�ô¾¯Gô‰ñ¶µ*ôgþ©rU£RiO—�¸få©(Ë–Q”]›´“OTÑûÿ _áoý¯ácáßþX×ÙÍaÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐÿ _áoý¯ácáßþXÐñÏÿ¤ÿ‚�üDý½~4^Á#¿b;øŸÁúÏŒ´ ünø‘ss`Ú_Šü[àßi~$›A´ñò>•àï† |M éúÏŽ7ügŒ³ügfà슒¯W…,ud¯í+aêÆ¤©©4Õ 6­8Ï_â”鸧qj¿ú_ôjð‹†¼á?I/ó åuèexŒ eÒ©ìÖ -Íð°t1“¡ÆyžwÄX e\>O•ßÙQÂã#Z¥:¸Úôå•ÿCðK¯„º7ì9û | ý–þ%|jø)âŸü0�âA×ußøâÖç·’øÛâï�þ"Ù¦“q¯Ã êóGe§xºÎÂæKÍ"ÅžöÖäÅ€Å#þ�ÂùM|�"Àåxš”ª×ÂýgÚT æéIׯb1+‘Ô…9¾XÖQmÂ>òvV±üY㿈9WŠ~+q_d˜<Õç¯%ú¦4ŽúQÊøw(ɪÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�ðµþÿÑJðþ>ÿå�~ÿÁÎ>,ð·Š?à…·‡ü#^%ÐÿÒDüÿˆááßþ|ÄŸ é"~?ÿÄpðïÿ> ?âO…¿ô‘?ÿâ8xwÿŸñ§ÂßúHŸ�ÿñ<;ÿÏ‚€ø�Óáoý$OÇÿøŽÿçÁ@ü@éð·þ’'ãÿüGÿóà þ tø[ÿIñÿþ#‡‡ùðPÿ:|-ÿ¤‰øÿÿÃÿüø(ÿˆ>ÿÒDüÿˆááßþ|ÄŸ é"~?ÿÄpðïÿ> ?âO…¿ô‘?ÿâ8xwÿŸñ§ÂßúHŸ�ÿñ<;ÿÏ‚€ø�Óáoý$OÇÿøŽÿçÁ@ü@éð·þ’'ãÿüGÿóà þ tø[ÿIñÿþ#‡‡ùðPÿ:|-ÿ¤‰øÿÿÃÿüø(ÿˆ>ÿÒDüÿˆááßþ|ÄŸ é"~?ÿÄpðïÿ> ?âO…¿ô‘?ÿâ8xwÿŸñ§ÂßúHŸ�ÿñ<;ÿÏ‚€ø�Óáoý$OÇÿøŽÿçÁ@‹ðH/ø7¿áü_þwíãß�ð¡¿áSco�ü=ñ;þ¯øZð³3×Xø{ý‡ý‡ÿ ïþ¢ÿÚ_ÛòáýŸþ›ñÅÕ8«ûGÚ`a‚ú‡ÔíÉ^Uý§Ö¾µ{óR§ËÉõuksss½­¯õÒOèïƒðýKú§⸗ýkÿXý§ÖrªYgÔ¿°¿°¹9=–;íþ³ý³.noe콄mÏí'í'ü@éð·þ’'ãÿüGÿó௷?—þ tø[ÿIñÿþ#‡‡ùðPÿ:|-ÿ¤‰øÿÿÃÿüø(ÿˆ>ÿÒDüÿˆááßþ|ÄŸ é"~?ÿÄpðïÿ> ?âO…¿ô‘?ÿâ8xwÿŸñ§ÂßúHŸ�ÿñ<;ÿÏ‚€ø�Óáoý$OÇÿøŽÿçÁ@ü@éð·þ’'ãÿüGÿóà þ tø[ÿIñÿþ#‡‡ùðPÿ:|-ÿ¤‰øÿÿÃÿüø(ÿˆ>ÿÒDüÿˆááßþ|ÄŸ é"~?ÿÄpðïÿ> ?âO…¿ô‘?ÿâ8xwÿŸñ§ÂßúHŸ�ÿñ<;ÿÏ‚€ø�Óáoý$OÇÿøŽÿçÁ@ü@éð·þ’'ãÿüGÿóà þ tø[ÿIñÿþ#‡‡ùðPÿ:|-ÿ¤‰øÿÿÃÿüø(ñoþ ÿ÷ü/ÿ‚«ÿÃCný£ü{ð#þ7ü*lmð?‡¾'ÂUÿ Cþfzë°ÿ°ÿá]ÿÔ_ûKûcþ\?³ÿÓ~#ƒxº§hûL 0_Pú�¹+Ê¿´ú×Ö¯~jTùy>®­nnnwµµþ£úIýð~©TâœWÿ­ë´úÎUK,ú—öö''²Çc}¿Ö¶eÍÍì½—°�¹ý£äý¤ÿˆ>ÿÒDüÿˆááßþ|öçòàÄŸ é"~?ÿÄpðïÿ> ?âO…¿ô‘?ÿâ8xwÿŸñ§ÂßúHŸ�ÿñ<;ÿÏ‚€ø�Óáoý$OÇÿøŽÿçÁ@•¿ðToø ¾£ÿˆðÃKÏüañ_Ç¿„Ÿµh:ÿÄ ¾[øçÀ~6³Ó´ö°ðÕɳñ'‹4Óqâië–æòÞ{©¼1âuûçñ¨WÂæ¹wì½¶Š…FIºj¶ñq§Uë±4ç%¼£F¦ü§úgôÍr¬ÿ€ÿÒDüÿˆááßþ|ÄŸ é"~?ÿÄpðïÿ> ?âO…¿ô‘?ÿâ8xwÿŸñ§ÂßúHŸ�ÿñ<;ÿÏ‚€ø�Óáoý$OÇÿøŽÿçÁ@ü@éð·þ’'ãÿüGÿóà þ tø[ÿIñÿþ#‡‡ùðPÿ:|-ÿ¤‰øÿÿÃÿüø(ÿˆ>ÿÒDüÿˆááßþ|ÄŸ é"~?ÿÄpðïÿ> ?âO…¿ô‘?ÿâ8xwÿŸ~-ÿÁ ¿àÞÿ…ÿðUøhmß´�~†ÿ…M�¾ð÷ÄïøJ¿áhÂÌÏ]cáïööü+¿ú‹ÿilˇöúoÄpoTâ¯íi�† êS·%yWöŸZúÕïÍJŸ/'ÕÕ­ÍÍÎö¶¿ÔI?£¾ÀOõ/êœSŠâ_õ¯ýcöŸYÊ©eŸRþÂþÂääöXìo·úÏö̹¹½—²ö·?´|Ÿ´Ÿñ§ÂßúHŸ�ÿñ<;ÿÏ‚¾Üþ\ø�Óáoý$OÇÿøŽÿçÁ@ü@éð·þ’'ãÿüGÿóà þ tø[ÿIñÿþ#‡‡ùðPÿ:|-ÿ¤‰øÿÿÃÿüø(ù²ý°?`ÏÙÃö�ÖfÚåþ)øGø{âA-ÿÒDüÿˆááßþ|ÄŸ é"~?ÿÄpðïÿ> ?âO…¿ô‘?ÿâ8xwÿŸñ§ÂßúHŸ�ÿñ<;ÿÏ‚€ø�Óáoý$OÇÿøŽÿçÁ@ü@éð·þ’'ãÿüGÿóà þ tø[ÿIñÿþ#‡‡ùðPÿ:|-ÿ¤‰øÿÿÃÿüø(ÿˆ>ÿÒDüÿˆááßþ|âß´—ü§ð·ö|ý�¾>||·—�¼\~|ø§ñ|xPüðî‚eñoüþ �ø]ÿ=ý�¼gññ¿k|>øÓâ/„ðŠ/Ã|I€Ð< ðçÆð�ÿnx ìŸkÿ„ÿû7û'ûçÈþÉûgö”ßnû-Ÿ‰Â&ËkãêacƒtqÕ0Š”*ºÊJ� 5n~gN›M¼C�/+·*wÖËõ¤Gƒ8ox×+á<._ˆéæ<-‚â)cq}<¶t§‹Í³¼µáU x¼dgG(�eUÕ‹“¯({4©©Kôïþ tø[ÿIñÿþ#‡‡ùðWÔŸ‚‡ü@éð·þ’'ãÿüGÿóà þ tø[ÿIñÿþ#‡‡ùðPÿ:|-ÿ¤‰øÿÿÃÿüø(ÿˆ>ÿÒDüÿˆááßþ|ÄŸ é"~?ÿÄpðïÿ> ?âO…¿ô‘?ÿâ8xwÿŸñ§ÂßúHŸ�ÿñ<;ÿÏ‚€ø�Óáoý$OÇÿøŽÿçÁ@ü@éð·þ’'ãÿüGÿóà þ tø[ÿIñÿþ#‡‡ùðPÿ:|-ÿ¤‰øÿÿÃÿüø(ÿˆ>ÿÒDüÿˆááßþ|ÄŸ é"~?ÿÄpðïÿ> ?âO…¿ô‘?ÿâ8xwÿŸ`~ÛŸðC¯ Á?à…ðWïøF¿h¯|}ÿ†�ÿ†ûoöïÃ�;á÷ü"ð§ÿl? ý›ì¿`ñ‡‹?µÿ·áiOçù¿`ûö4>_Ú¾Úÿfþ÷( € ( € ( € ( € ( € ( € þ.¿àПùÈWýÚoþü½~1áüÔ?÷IÿÞ™þ™~Ñ_ù³ß÷�÷È?´Zýœÿ3B€ ( € ( € ( € ( € þ.¿àПùÈWýÚoþü½~1áüÔ?÷IÿÞ™þ™~Ñ_ù³ß÷�÷È?´Zýœÿ3B€ ( ƒ?à©>ð·�?àœ·>›âïhþ%°Òÿe�¾.Ólõ½>×R·°ñO‚¾x£Å~ñ œWQʶÚφ¼K¤izBëOÔì-o-¤Žh•‡ƒÅiVáÌö5©Â¬a”ãëEN*J5hajÕ£Q&�§N¬#RZÆQM;£õŸó~YãO…U²ìf'Z¿ˆ#—W©…­R„ë`3<û—æ8:’§(¹á±¸M|.&Œ¯ Ô*Ô§8¸É£ñûþ Bÿ”w|fÿ³Ñø‰ÿª;öt¯�ð§þIÜoýޱúƒ—Ñ¿´þO' ٳɿõ©ã3út¯ÓOá� € ( € ( € þ.¿àПùÈWýÚoþü½~1áüÔ?÷IÿÞ™þ™~Ñ_ù³ß÷�÷È?´Zýœÿ3B€ ( Ã?ø8ÃÀ¾ñüö�ñŽ¿àï ëž.ðÏÁ‹ßø§Xðö‘©ø�Á7šÿíðƒÃºíß„u»Û9õ? Üë^Ô5 VŸFº²—Rѯ¯4ËÇšÊæhá¼E¡B§ fUªQ¥:Øw‚• ³§ T êf8:uÉ9Ss§)S›ƒ‹”$âïÑýQô2ÍsLÒ‚òÜ&e�ÂåÙ¼8š–m€Ãc10Y¥<q7 O1ÂÒ© Øaq”hâ°ðĬhâiS¯MF¬#%ÔÿÁ¼ÿò‡ÏÙþë÷þµƺ×Ãßù#ò�û¨êÓp}1?å#|Eÿ»GÿXN?hëíæ` € ( € ( €>.ÿ‚‘Ê;¿ooû2ïÚ“ÿTwŽ«ÅâOù'sïûæŸúƒ\ý3Á_ù<žÿÙÍà?ýjr£ñsþ Bÿ”w|fÿ³Ñø‰ÿª;öt¯Œð§þIÜoýޱúƒ—Ó_´þO' ٳɿõ©ã3út¯ÓOá� € ( € ( € ( €?àèïùAGíËÿvÍÿ­‡û>ÐïõP@P@P@P@P@P@Å×üÿ9 ÿ»Mÿß—¯Æÿ±.iÿ¨5ÏÓ<ÿ“Éá/ýœÞÿÖ§*??àÔ/ùGwÆoû=ˆŸú£¿gJøÏ ä�ÆÿØëÿ¨9qý5û@?äòp×ý›<›ÿZž3?§Jý4þ ( € ( € ( âëþ ÿœ…ݦÿïË×ãÿÍCÿtŸýéŸé—íÿ›=ÿyÿ|ƒûE¯ÙÏó4( € ü\ÿƒ†?埵çýÐýj‚•ñ~!É›ÿÝ?ÿV˜#úgèwÿ)á×ýÝßúÂq8Á¼ÿò‡ÏÙþë÷þµƺ<=ÿ’?(ÿº‡þ­1¡ôÄÿ”�ñþíýa8`ý£¯´?™‚€ ( € ( € ø»þ Eÿ(îý½¿ìË¿jOýQÞ:¯‰?ä�Ï¿ìKšê sôÏäòxKÿg7€ÿõ©Ê�ÅÏø5 þQÝñ›þÏGâ'þ¨ïÙÒ¾3Ÿù'q¿ö:Äê\M~Ðù<œ5ÿfÏ&ÿÖ§ŒÏéÒ¿M?†B€ ( € ( € ( € üÿƒ£¿å·/ýÛ7þ¶ìû@¿ÔP@P@P@P@P@P@_ðhOüä+þí7ÿ~^¿ð‡þjû¤ÿïLÿL¿h¯üÙïûÈ?ûäÚ-~Ι¡@P@P@P@P@_ðhOüä+þí7ÿ~^¿ð‡þjû¤ÿïLÿL¿h¯üÙïûÈ?ûäÚ-~Ι¡@PÅßðR/ùGwííÿf]ûRêŽñÕx¼Iÿ$î}ÿb\ÓÿPkŸ¦x+ÿ'“Â_û9¼ÿ­NT~.Á¨_òŽïŒßöz??õG~ΕñžÿÉ;�ÿ±Ö#ÿPrãúkö€Éäá¯û6y7þµ~ן÷@õ¨> WÅø…ÿ$~oÿtÿýZ`�韡ßü¤o‡_÷wë ÄáÿóÿÊ?d?û¯ßúÔèð÷þHü£þêú´Æ‡ÓþR7Ä_û´õ„áƒö޾Ðþf ( € ( € (âïø)ü£»ööÿ³.ý©?õGxê¼^$ÿ’w>ÿ±.iÿ¨5ÏÓ<ÿ“Éá/ýœÞÿÖ§*??àÔ/ùGwÆoû=ˆŸú£¿gJøÏ ä�ÆÿØëÿ¨9qý5û@?äòp×ý›<›ÿZž3?§Jý4þ ( € ( € ( € (ðþŽÿ”~Ü¿÷lßúسí~ÿP@P@P@P@P@P@ü]Á¡?ó�¯û´ßýùzücÂù¨î“ÿ½3ý2ý¢¿óg¿ï ÿï�hµû9þf…P@P@P@P@ü]Á¡?ó�¯û´ßýùzücÂù¨î“ÿ½3ý2ý¢¿óg¿ï ÿï�hµû9þf…P@ÁH¿åß··ý™wíIÿª;ÇUâñ'ü“¹÷ý‰sOýA®~™à¯üžO ìæðþµ9Qø¹ÿ¡Ê;¾3ÙèüDÿÕû:WÆxSÿ$î7þÇX�ýAË�é¯Úÿ'“†¿ìÙäßúÔñ™ý:Wé§ðÈP@P@P@_ðhOüä+þí7ÿ~^¿ð‡þjû¤ÿïLÿL¿h¯üÙïûÈ?ûäÚ-~Ι¡@Pâçü1ÿ(|ý¯?î€ÿëP|¯‹ñ þHüßþéÿú´ÁÓ?C¿ùHß¿îîÿÖ‰Ãþ çÿ”>~È÷_¿õ¨>5Ñáïü‘ùGýÔ?õi�¦'ü¤oˆ¿÷hÿë Ãí}¡üÌP@P@PÅßðR/ùGwííÿf]ûRêŽñÕx¼Iÿ$î}ÿb\ÓÿPkŸ¦x+ÿ'“Â_û9¼ÿ­NT~.Á¨_òŽïŒßöz??õG~ΕñžÿÉ;�ÿ±Ö#ÿPrãúkö€Éäá¯û6y7þµ.ÿ‚‘Ê;¿ooû2ïÚ“ÿTwŽ«ÅâOù'sïûæŸúƒ\ý3Á_ù<žÿÙÍà?ýjr£ñsþ Bÿ”w|fÿ³Ñø‰ÿª;öt¯Œð§þIÜoýޱúƒ—Ó_´þO' ٳɿõ©ã3út¯ÓOá� € ( € ( € þ.¿àПùÈWýÚoþü½~1áüÔ?÷IÿÞ™þ™~Ñ_ù³ß÷�÷È?´Zýœÿ3B€ ( ÅÏø8cþPùû^ÝÿÖ ø)_âü‘ù¿ýÓÿõi‚?¦~‡ò‘¾ÝÝÿ¬'‡üÏÿ(|ý�ÿî¿ëP|k£Ãßù#ò�û¨êÓLOùHßîÑÿÖ†Ú:ûCù˜( € ( € ( ‹¿à¤_òŽïÛÛþÌ»ö¤ÿÕãªñx“þIÜûþŧþ ×?LðWþO'„¿ösxÿZœ¨ü\ÿƒP¿åß¿ìô~"êŽý�+ã<)ÿ’wÿc¬Gþ åÇô×íÿ“ÉÃ_ölòoýjxÌþ�+ôÓød( € ( € ( € ( Àø:;þPQûrÿݳëaþÏ´ûý@P@P@P@P@P@Pñuÿ„ÿÎB¿îÓ÷åëñ�æ¡ÿºOþôÏôËöŠÿÍžÿ¼ƒÿ¾Aý¢×ìçùšP@P@P@P@Pñuÿ„ÿÎB¿îÓ÷åëñ�æ¡ÿºOþôÏôËöŠÿÍžÿ¼ƒÿ¾Aý¢×ìçùšP@|]ÿ"ÿ”w~Þßöeßµ'þ¨ïW‹ÄŸòNçßö%Í?õ¹úg‚¿òy<%ÿ³›ÀúÔåGâçü…ÿ(îøÍÿg£ñÿTwìé_áOü“¸ßûb?õ.?¦¿hüžNÿ³g“ëSÆgôé_¦ŸÃ!@P@P@ü]Á¡?ó�¯û´ßýùzücÂù¨î“ÿ½3ý2ý¢¿óg¿ï ÿï�hµû9þf…P@‹ŸðpÇü¡óö¼ÿºÿ­AðR¾/Ä/ù#óû§ÿêÓLýÿå#|:ÿ»»ÿXN'ø7ŸþPùû!ÿÝ~ÿÖ ø×G‡¿òGå÷PÿÕ¦4>˜Ÿò‘¾"ÿÝ£ÿ¬' ´uö‡ó0P@P@P@ÁH¿åß··ý™wíIÿª;ÇUâñ'ü“¹÷ý‰sOýA®~™à¯üžO ìæðþµ9Qø¹ÿ¡Ê;¾3ÙèüDÿÕû:WÆxSÿ$î7þÇX�ýAË�é¯Úÿ'“†¿ìÙäßúÔñ™ý:Wé§ðÈP@P@P@P@€?ðtwü £öåÿ»fÿÖÃýŸh÷ú€ ( € ( € ( € ( € ( € ( âëþ ÿœ…ݦÿïË×ãÿÍCÿtŸýéŸé—íÿ›=ÿyÿ|ƒûE¯ÙÏó4( € ( € ( € ( € ( âëþ ÿœ…ݦÿïË×ãÿÍCÿtŸýéŸé—íÿ›=ÿyÿ|ƒûE¯ÙÏó4( € ø»þ Eÿ(îý½¿ìË¿jOýQÞ:¯‰?ä�Ï¿ìKšê sôÏäòxKÿg7€ÿõ©Ê�ÅÏø5 þQÝñ›þÏGâ'þ¨ïÙÒ¾3Ÿù'q¿ö:Äê\M~Ðù<œ5ÿfÏ&ÿÖ§ŒÏéÒ¿M?†B€ ( € ( € (øºÿƒBç!_÷i¿ûòõøÇ„?óPÿÝ'ÿzgúeûEæÏÞAÿß þÑkösüÍ ( €??àá�ùCçíyÿtÿZƒà¥|_ˆ_òGæÿ÷OÿÕ¦þ™úÿÊFøuÿwwþ°œNðo?ü¡óöCÿºýÿ­Añ®�ä�Ê?î¡ÿ«Lh}1?å#|Eÿ»GÿXN?hëíæ` € ( € ( €>.ÿ‚‘Ê;¿ooû2ïÚ“ÿTwŽ«ÅâOù'sïûæŸúƒ\ý3Á_ù<žÿÙÍà?ýjr£ñsþ Bÿ”w|fÿ³Ñø‰ÿª;öt¯Œð§þIÜoýޱúƒ—Ó_´þO' ٳɿõ©ã3út¯ÓOá� € ( € ( € ( €?àèïùAGíËÿvÍÿ­‡û>ÐïõP@P@P@P@P@P@Å×üÿ9 ÿ»Mÿß—¯ÆÖgb-ÚÂ<�»cGG’pblA[xýÁ  ïøLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€øLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€?�oø4ÿZÔ´�øoì럳ý£þkÎýͼ»ü¯øhÏ/ý|RíÛæ¿ÝÛ�ß6p1øÇ„?óPÿÝ'ÿzgúeûEæÏÞAÿß þÂá3ñ/ý¿òNÃÿ‘kösüÍøLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€øLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€øLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€øLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€øLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘høöÿƒOõ­KHÿ†÷þιû?Ú?á–¼ïÜÛË¿Êÿ†Œòÿ×Å.ݾkýݹÝógŒxCÿ5ýÒ÷¦¦_´Wþl÷ýäýòì'þ?ÿÐKÿ$ì?ù¿g?ÌÐÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€øLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hãßø(o‹|AsûþÜ–ójá¸ý�i˜eO²Y.ø¥ø-ãd‘w%²²îF#r°aœ©¼^$ÿ’w>ÿ±.iÿ¨5ÏÓ|ÿ“Éá/ýœÞÿÖ§*?¿à×_júWìñ~ÞÂïìð¿í…ãù™>Ïk.eo‚ß³ò3nše#A´0^2I'ã<)ÿ’wÿc¬Gþ åÇôÏíÿ“ÉÃ_ölòoýjxÌþ‘ÿá3ñ/ý¿òNÃÿ‘kôÓød?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€øLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€øLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€?�oø4ÿZÔ´�øoì럳ý£þkÎýͼ»ü¯øhÏ/ý|RíÛæ¿ÝÛ�ß6p1øÇ„?óPÿÝ'ÿzgúeûEæÏÞAÿß þÂá3ñ/ý¿òNÃÿ‘kösüÍøLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€?¿à¾^&×5ø$Çí_gy{ç[Mÿ +Ì�ìÖ‘îòÿi_ƒ’§ÏºH1"+|¬3Œ‚Aø¿¿ä�ÍÿîŸÿ«Lý3ô;ÿ”�ðëþîïýa8œ?à�¾&×4ÿø$Çì¡gg{äÛCÿ ×Ë�ìÖ’mó?i_Œr¿Ï-»Ès#³|Ìqœ <=ÿ’?(ÿº‡þ­1¡ôÄÿ”�ñþíýa8`ý…ÿ„ÏÄ¿ôÿÉ;þE¯´?™ƒþ?ÿÐKÿ$ì?ù€øLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€øLüKÿA/ü“°ÿäZ?á3ñ/ý¿òNÃÿ‘hÿ„ÏÄ¿ôÿÉ;þE þ?ÿÐKÿ$ì?ù€øLüKÿA/ü“°ÿäZø÷þ âß\þÀ?·%¼Ú†øn?cßÚfSì–K¾)~ xÙ$]Él¬»‘ˆÜ¬g*AÁ¯‰?ä�Ï¿ìKšê sôßäòxKÿg7€ÿõ©Ê�ǯø5׾•ûü_·°»ûrÑ4ø(Å_x_â_Ã�~ǾðO�¼9¤xÃÃ>ñçƒ~0ü@ñv“ ø’Ñ5�ø£Â¼á»Ím´;Í6MjßCѦÒ4í]¯ì4½oÄ:u½®·|¡ÿ �þ uÿEKöÿÃ3ûAóò þüëþŠ—ìÿ†gö‚ÿçå@™ðN�ø"ÿí»ÿÚÿ…Åÿ ¯ö“ý•¼wÿ Ÿþ÷öïü,ƒŸû+þ×ü&ÿÙÙðŽ|TÑ1öïøNµ·ý³íYû—ÙüœOæü¯ ðž …þ»õLN+õï«{O¬û/sêßXääöTéü_X—75þÚÚß÷Ï~�|Mã·ú¯þ±d¹Oþªÿm}Oûf ëÛŸÙ?XúÏ×±˜¿àÿcÐö>ËÙÿ¯??¹Ëúiÿ �þ uÿEKöÿÃ3ûAóò¯ª?&¶øIÿ1[ˆïâì+-¨–3s·Áï�Ð\IpeH&—ãeÄpÊɸG,–ó¢9 ÑHBÝüøŸ/ÄÝÄcV°Ó´Ÿü9ñï‹~|IÒ´MMµ¿Øü@ðúé¾ ÖfµÓï5?_™-µmçTÒô}hiZ…¬:æ�¤kßiÖÀ¿@P@P@P@ xGWý°ÿhÿ i¿g ö^ðgÂ?_x‚AñwÂÿü{ã]sHðþ·yá¯øI59| ã¯øÃÃYÕt�ZóOðüâ+›]M}WU³Ö®uMHßÿ…Gÿ:ÿ¢¥ûÿá™ý ¿ùùPÿ �þ uÿEKöÿÃ3ûAóò Ì¿ø'GüöÝÿ‚mÂâÿ…WûIþÊÞ;ÿ…Ïÿ ûûwþÁÏ‹�ý•ÿ ëþì¿ì�øG>*h˜ûwü'Z�ÛþÙö¬ýŽËìþN'ó~W†xOÂÿ]ú¦'ˆú÷Õ½§Ö}—¹õo¬rr{*tþ/¬K›šÿ mmoûçŽ?H>&ñÛýWÿX²\‹'ÿU¶¾§ýгõ�íÏ쟬}gëØÌ_ð±è{eìÿ‹WŸŸÜåý4ÿ…Gÿ:ÿ¢¥ûÿá™ý ¿ùùWÕ�€øGÿ9ÈÏÅ/ØCç¿h,ã¾?âùu   |n½Ð`øïá¿�+á�;Çß³-�®³ñNïÀ7×þÔ¼/«x2Oˆ^ñO†àÖÌö˜u Åq©á½wuÖ�¯éš�•ž¯â é>%Õ€9íAÿ‚�|Uðç…þ%ü8ñ'ì{àOøûÚGŒ<3á_x7ãÄi:‰-XÐañŠ<'ñÁ~¼ÖÛC¼ÓdÖ­ô=m#NÕÚþÃKÖüC§[ÚëwÀð¨ÿà§_ôT¿`ÿü3?´ÿ?*ó/�²—ü‹ã‡Á¯‹_|Añ‹ö!Òt‹ÿ ¼yð»[Õtoƒ_¯¦i<+ªøORÔ4£{ñ®êÈjVVZ´×6&îÖæÔ]GÚ š-ñ·.? ~�©)Bž7 ˆÂTœ-ÏbhÎŒ¥dãÍ͸ó&®•ÓZÿ q'„¸§†¸¯B†'Ã9þOÄ8L6+Ú}[‰És6eB†#ÙN�_aV®ë{*”ê{9K’q•¤¾eÿ‚~ÿÁ,?oOø'‡Á¯üøeûAþÈž6Ð|Oñ7Yø£wªøïà߯VÕíõ}k¾ ð�ÆŸl|?ñsF²þÍŠËÁ60‰mdºûUÝæùÚ/&8¼®áì/ `jàp•ë×§W<\§ˆö|êu(Т⽜!Uj黹kk%÷Þ4xÅžxÛÅ8+Ïò¼§)Æeù‡©a²uŒXiá°™Žk™B½O®âqU}¼ªæÕ©Ë–¢§ìéÒ´¹å/¹ÿáQÿÁN¿è©~Áÿøfh/þ~U[|$ÿ‚˜­Ä wñ?ö–ÔK¹ŽÛà÷Çè.$€82¤Kñ²â8edÜ#–Kyцh¤¡îþ |O—ân�â1«XiÚO�~ø÷Å¿ ¾$éZ&¦Ú߇ì~ xýtß ë3Zé÷šŸ‡/Ì–Ú¶ƒsªiz>´4­BÖsFÒ5ˆo´ë`_ € ( €>@ðޝûaþÑþÒþ/~Îÿì½àÏ„~&¾ñƒâï…þ'ø÷ƺæ‘áýnóÃ_ð’jrøÇ^ ðÿ‡†³ªéµæŸáøÄW6ºš<ú®«g­\êš�¿ÿ �þ uÿEKöÿÃ3ûAóò þüëþŠ—ìÿ†gö‚ÿçå@™ðN�ø"ÿí»ÿÚÿ…Åÿ ¯ö“ý•¼wÿ Ÿþ÷öïü,ƒŸû+þ×ü&ÿÙÙðŽ|TÑ1öïøNµ·ý³íYû—ÙüœOæü¯ ðž …þ»õLN+õï«{O¬û/sêßXääöTéü_X—75þÚÚß÷Ï~�|Mã·ú¯þ±d¹Oþªÿm}Oûf ëÛŸÙ?XúÏ×±˜¿àÿcÐö>ËÙÿ¯??¹Ëúiÿ �þ uÿEKöÿÃ3ûAóò¯ª?ð�þ s‘ŸŠ_°†3Î> ~ÐYÇ|Åòë@ZŸí3sð·Âß­~4龟â_ìÝsàëØü8Ô�¼+â×ø�g¥Þü/½ðÄþ+žÆÿçÅ-­Øhú®•â™Gü#:í¾¨±jþ"ðôZ_ˆõpžóáWü¶êá®4ÿ~Ã:%¬é ©£Þ|7øûâ›�1ÞÚâżIÄÿÇ®%µÁ–(uAá_ØV9ßG°wkhÀ*ÿ£ÿ‚�ÑRýƒÿðÌþÐ_üü¨æ_Ûöÿ‚…þÙÿ³�Ä_Ù«Ç¿c/ øSâOü"?Úº÷„¾ üo_ØÂã¿ xúÇû<ë?õ=4}«Rðµ��ßÚlgÿA¸¹ùSùSGågyMó,ÄåxŠ•hÑÅ{z”y=¤}†"–"<¼ñœu•ÅÞ/ÝnÖvkï¼/ñ3ð¯Žr><ÉðXÇ1È¿´þ¯ƒÌ–!à«jdù†M[Û,-l=ÝÐÌjÕ§ìëC÷ЧÍÍhÈýŽ¿`ø(_ìaû8ü:ýš¼ ñËö2ñW…>Â]ý•¯x·à߯öñ ÿü&>;ñ?�¯¿´�ñ�LÓOÙu/ÞYÚ}šÆô{a7›?›4†I”ÑÈòÌ6W‡©Vµ/¶ä©[“ÚKÛâ*â%ÍÉGIV”U¢½Ô¯wvÏ_“Qö+[_÷”2êUj{JÓýôêròÖ1úkþüëþŠ—ìÿ†gö‚ÿçå^©ð%«?…_ðRÛYÖçPñïì3®ÚÀ’ÊÚ5ŸÃ¯�¾ŸT‘"v‚Á|M?ÄÏÇ ¥Ôâ8eÕ�„¼FÖ;ܦ‹¨¼kk(¤|ø© ümøaàÿŠ^‚æÓIñv›%ÚXÞKgqu¦ßY^Ýi:Æ—qs§Ü]é÷RézÅ…þž÷v77wFÛí³I‘±ôê( € ç xWU𞥨iF÷ã]Õ�Ô¬¬µi®lMݭͨºŽ/´A4[ãn\~ü3RR…Øøâæ�eý›—‚l.aÚÉuö«»Íó´^Lqy\9ÃØ^ÀÕÀá+ׯN®*x¹OìùÔêQ¡EÅ{8B<ª4"ÕÓwrÖÖKï¼hñ‹<ñ·ŠpWŸåyNSŒËò /RÃdë°ÓÃa3×2…zŸ]ÄâªûyUÍ«S—-EOÙÓ¥h)sÊ_sÿ£ÿ‚�ÑRýƒÿðÌþÐ_üü«ß?"&¶øIÿ1[ˆïâì+-¨–3s·Áï�Ð\IpeH&—ãeÄpÊɸG,–ó¢9 ÑHBÝüøŸ/ÄÝÄcV°Ó´Ÿü9ñï‹~|IÒ´MMµ¿Øü@ðúé¾ ÖfµÓï5?_™-µmçTÒô}hiZ…¬:æ�¤kßiÖÀ¿@P@P@Õø_Ä’è·K ÎϦÎàO%„ N>Ó óµ—þZª�ÞÆ0Atˆ¨ã¯üÊßðBoÛ‘”†V³++)YOí…û>�AG ŽäPïýP@P@P@|ýâ}Aµ-nöbÛ¢†V´·ʈ-Ù�ôYÌŸÞ•ºtP@P�~Õ¿òkŸ´Ÿý�/Œ_ú®üE@Æ›âïü?ÿ‚jXxóÂ:‡öOŠüû Zø»Ã¯Ù,oÿ³ý‡¾|1ý­|?ðCãv½ÿ·øãÿøõûAj?³×Á߈·Å}gÂߴψÿgÿ† í¼ èŸ|áé/´�{â½_ÂÞ²ÖgÓBý‚k;å{‹ èûþ wûXx‹öåÿ‚}þʵoŒ´�7Dñ§Æ/…Zfµãm;E†kmñ}Ö‰iq5ÍÅŽ‹©x“@Ôõ-"Â{»É¬4ë»k9oo¹”Ác¯ù ~Úö´—þœ<9@hP@P@P@PŠÿÁ*?äÀ?goûøÛÿV‡�èùRý–ÿ઴OǯøLmþ7ÿÁw>:þÍ_ö�ø³ð³Ã| ÿ�ðÇ é~о#ßøWÀ.>.ø_öMñ…®&Ô¬E¢ßjx™®´–BúõÔ/çM@¦¿ðP�Cþ Ÿðkþ ûüøOÿ`ñ¯‚þÁB>;þÐÞÒ¼.¿±·ìwâøg¯ |<ð2üGð߇¼;­øŸá®¯âˆikä>mSÅÚ´µÅ­¢êw·ww³Jm‡üÞø'çüÓãçì�ÿ#ýµ¼UãÏ„ŸdÿÙ·Vøu☿e›íWÆ|IýïÄ�jZ?ì«ðKÄúLJ^°ûŸØº½ä> °dò|9impfŽ€>Wý™à¬·Ÿí«¢þÊþ~Ôz�|}ûrÁGࣞð_íOª~Ï¿ µÝoá—ì—û|1Ñ>.øcÂÞøE¯øG¼ñ?ˆthºTÏÄ� _x®Æ1v%øåû>þÒÿ´/ì¡ñ7Ç~ðý·„´/‰ÿÀŸ\øzÏÇö~²–}?Óø“÷Z%ί¥i’ÿeE®&§6—oa§Ïm¦Ù€|÷ñŸþJŸü{þÈ7ÃýeÐÞšo‹¼Cðÿþ ©aãÏêÙ>+ðOì5kâï j¿d±¿þÌñ†þǬ躇Øu;kÝ6÷ìZ••µÏÙ5 ;»Ÿ/É»¶ž’'þf?à–ðR/�?µV¡û\ü[ÿ‚æüuÕ~3|Sñ/ÃÝCâì�ükÁúwÃÿß/ˆb½ñÂûKøöVѼ%£è^+Ñ,.tþ$è~:ÓWE‹T“PÒõ«mFÎ éoXÁ^ôOø*×Ãoø'­�üsâ~ø“ûxóö¨ÿ…‚a_Øuõ�ûÂÿÀ6ž·Ðåø[%½þ�-œ¢õõ«�V;Ñ,b#k f–€3þÁx|û8ünÿ‚¬þÏŸ·oícâI¼wð7ã–µà/Ù=tÿÙoÆ>#K? hß mvO}©~Ïß3ºø'àü]ø¿âÿˆŸµ�ø5‡4� ã¶_þøKðòjZ¶±¢øUñ~·®YéöPð´)©kZ˜öK@‘ÿ±×ü†?m?û?�ÚKÿN ´( € ( ÿ‚TÉ€~Îßöñ·þ­Ðò¥û-ÿÁT?hŸ�_ð˜Ûüoÿ‚î|uýšþ*¿í!ñgág†þ øþ !à/ŽþÒü;¡|G¿ð¯€\|]ð¿ì›â \M©X‹E¾þÔñ3]i,…õë¨_Κ€?Mà¡:‡ü?à×üöø#ðŸþ Áã_ü.ÿ‚„|wý¡¼7¥x]coØïÄ?ðÏ^øyàeø�á¿xw[ñ?Ã]_Ä?ÒÖ È|4Ú§‹µh5k‹[EÔïnîïf” Ûø+¼ÿðOÏø)§ÇÏÙþ Gûkx«ÇŸ >þÉÿ³n­ðëÅ1~Ê77Ú¯Œ>2ø’+û߉4Ô´ÙWà—‰õ�>½aö9?±u{È|`ÉäørÒÚàÍ|¯û2ÿÁX?o?ÛWEý”>ü$ý¨ôÿøûöäÿ‚ŽÿÁG< à¿ÚŸTýŸ~kºßÃ/Ù/ö:øc¢|]ðÇ…¼9ð‹_ð�„<-yâèþ&Ñt¨5Ÿ‰¾ñ]Œbìx…gÕ7IfûÏÿzý¬¾2~Ö¿²¯‹uÚSÐ|KñËö}ý¥ÿh_ÙCâoŽü1áûo h_5ÿ�><¹ðõŸ�ìü)e,ú‡'ñ'‡n´K�_JÓ%þÊ‹\MNm.ÞÃOžÛM³ø[öØÿ‘»þ ¿ÿaÏø'�þ…àýÿ‚Ä~Ð?eø&_í‡ûB|ñoü Ÿþ|,ÿ„“À~.þÁðωÿ°µ¯øI¼?§ý³ûÆZ7ˆ|1ª¡ß]Cö}gEÔm?{æyjFèøãÿèý­¾)þÖ¼ àMþ ÇñûãÄ¿|ñî­{ðsÄðIüð΋âí[àö½keâ;o‹ú÷ì¿àO ê|ñÖµ£üAÑ4¿øK?±þ#]ø2ÓÃWֺLJ5ýJÎàköhðV�ÁR?kØ·ÆðXë?ÿc þÊ¿.u?øbOØ«O¾ø»¦|gÒî|QâOk1é l®ü#g¦™.‡¹ êóê¢ç¿·ûÜšø»Ã_ðqý·†à™_¶}‡ÅoÚ×_ƒþ [àß~Õ~øuoû+x—RÒ4˜ü7ã�SKø-i6»á/Ùòóöj”iÚE¬PMuã}B}Å<ÏO%Ó4ŒúñËö½ÿ‚‘x'ÆßðD_ˆ6ÿ>xöý±>+þÆÿþ)øAøMá�câwÆMWâßÁþ#|^ñGÄø“E›Ãÿt�®éÙ~ð·Á�x{QX5MSX¿ñ}œqé^±þ™¨ñïþ µÿ&WðWþ¹ü@ÿÕ©ãŠû’€ ( €< ö­ÿ“\ý¤ÿì�|bÿÕwâ*î4ßx‡áÿüRÃÇžÔ?²|WàŸØj×ÅÞÕ~Écý™â ü�YÑu°êv׺mïØµ++kŸ²jwv7>_“wm<$NüÌÁ,?à¤_j­Cö0¹ø·ÿÍøëªüfø§â_‡º‡Ä/Ù:ø$׃ôï‡þ%¾_Å{â/„ö—ðÿì­£xKGмW¢X\è3üIÐüu¦®‹©&¡¥ëVÚ�œ(ÒÞ4°ÿ‚½èŸðU¯†ßðO[ø,çÄü'ñ'ö>ñçíQÿ þ¿°ëë ÷…þ*/€m<o¡Ëð¶K{ý:[9EëëW:¬w¢XÄFÖ@Í-gü8ÿ‚ðø;öqøÝÿYýŸ?nßÚÇÄ“xïàoÇ-kÀ_²zéÿ²ßŒ|F–~ѾÚìžûRýŸ¾xƒÂé5÷ÄÚ”‘üMÕîï  ËÿôJÄfø(¿üöéðì=ð#á�íkáÿ‚µïø%¿Çø(ÇÇ¯Ú Qýž¾ü@Õ¾+ë>ý¦|Gû?ü3ø_mà{ýDøsà�I}¤ ßêþðÅ–³>šìYß+Ü]GßðK¿ÚÃÄ_·/üïöSý«|e¤éº'�>1|*Ó5¯iÚ,3[h‰ã]ÿQðŸ‹î´KK‰®n,t]KÄš§©iÝÞMa§]ÛYË{xð5Ì  ûÈcöÓÿ³øý¤¿ôááÊûB€ ( € ( € ( Çø9[Pkßø oíÅŒZ[ f‹L“–0�Û ö{’Üû*FþBîÃø�躀 ( € ( € ( €>`bX–c’Ä’}I9'ó  € ( €<›ãß…5Ÿ| øÑàoÀ—^ ñŸÂˆÞЭ¤šhî5Ÿx?XÒ4ÈâæHmàI¯o �¦¸š(b ^Y˜yf‘û@~É:ïìO¡~Ï:ý­¿gÿ„¾/ñ7ì¯cðoĺwŽþ(|?ð÷Œ~xƒQø[ÿ ÷ľ(ø{â�øcÄZ_ˆü®�JÃÄ׃¬iÚÞ‘¨xU:V£kt¶À–±çÃ?ŠŸ±ÏÃÏ€¿¼ÿ!þÂZßìùð-<- Yü8ºý˜ÿfkMo_ø{¡ëßj¾ˆ7_¶µ¬é—Úæœ×ú\~'k=R÷J’ñ5ìîÞÕ-ÜîßOûø‹þ kðÏþ 1ÿý”¬ÿá]~ÈÞ1ý•ÿáNÿÂÑøCqý±ÿ oĘþ!Âwÿ þôÙÿÙþ_öGü#ðƒß}«?oÿ„†Ûb _ìÙ¤~¼aÿ(ñe·üÓöJñ¯ü<ã»ñaì ø�ðwGÿ…?ý½ðøøtº�ãF·ÿ ïÙö6ªº©¶ðOÚ0lF› å%$öiú4ÿ"çJ¥;{Js…ïnxJ7µ¯nd¯k«Ûk£óÏÃ_ðOŸÙcá/ÁÏÙ;ß³�üöqøûA~Îß²·Å¿Ø«Ç_4ø¿g�éÿgo‹¿µ?Š�†§øYâ��7 àx[Åš‹jþñV›ãÍzM;SÞ^iºŒookfÈ?pdoŠðN/Ù öqøû*|"ý±¿f›ß|ð‡>xbmOö‰ø;yâ}´»uŽó]ÕþÃâ{{{�x£Xšû]Õ—O³µ³}WS¹[+ko&Þ0SöFÑn-¬?h�Äéwáo‹ßµ§ÇŠß5¸9±ñO€Dý‡><~Ïß³Gì­ð¿à�Ç��ÿ~üRøssñÃ/ð?ĝоð'Š4�VÛâ7ŠuÌúŠ5ý3R:~«£jº?ˆü;«Çnú_‰¼)®øÅz Þ¡áí{HÔ¯?!¿g/Ùçâ'ì{áü0ý™?à䝨[áÿ¯üYøŸñnÇÂ^ ý˜?fŸˆŽ�¬|Rñ]÷Šõ›GñN½ûeG¨jQAsx ŠG·´‰–/2+;e“É@ÑoÚL~Å¿´wí1ÿèý¤µoø)o쟠j¿°W�¾)øãRðì_>êQüfÔ>(ü2²ø{y z¤4˜þ&›sk&¼ŒšG�’égJÁd± AÀ,|,Ôa?ÁFißÛþÛþ Mû%xƒþ'àwÁ�ƒð–Šÿm?á ÿ…K5ìËâFñä5íÿøH¾Òʺ9ðf…ý—å5MO$*ROfŸ£Oò.tªS·´§8^öç„£{ZöæJöº½¶º?;t?ØGö;øà¯j¿?à³³'ÃOÚ‹áíÙûQþÚŸ¿h‹[Ÿ€^&Ò|iûZiðŒ|Pø1⯄>%øï¦øûÃz—…V *ïÄQøÃ—÷wVVWöÚf™\X]2ÔOø'îµÿùý‚g#àN�ÿýœ~+x–ÿÆŸ>+|Vø¹â�Ž¿4_|Vø¿ñ_ÅZ‡Œ<{ã{ýGñ”šVƒ¡ªj c¤hv2Ý&“¡iÚ]„ú†©{ΩxËjÞºøÑâïø)ÇŒþjG�|ñóÀ~øoð³ÅÚ©§ÞxSÆ^'ð¿ìñ¨x3_�Þ$ŽèèÚÞ•¤x«]ƒÃ:�ˆ4ëÙô+?é¾$ðÔúŠkžñŽ˜ì:Gíû$뿱>…ûü ðoü‡û k³çÀ´ð¶�gðâëöcý™­5½áG}ªøEþ Ý~ØzÖ³¦_kšs_éqø�¬õKÝ*KÄÔ#³»{T·pºüQsû kßðS/†¿ðQ·ÿ‚�~Ê ðßöDñŸì´ÿâŸÂ —V_üH�âxõ¾"‹ð 5táÒO†O‚/EÈ'P>"¶ìDØi94’m¶’I]¶ôI%«mè’ÜãÿfÝöøâïø)?‹íÿà¦_²g�þ ñ�Ä�œ?>hËð�µ¿‡«àcáãxŸ5±ãæ´uc©ýŸÁF`ÂËû6Eå$ÓÙ§èî9ÂtݪBPm])ÅÅÛU{4�®š¿“?9>$~Ÿ ¼Sÿéý›?àšžÿ‚ïþÅø'ð?Bð×ü&Zž£ðÓà·ŒüCñ?Ç~ øÛ}ñ§Â^/°¹—öÆÐ.|¦é×ï£è×ÞŽÿÅQj‘ésßI¬[�I¬-Y'ïÇÀ/Ûà…>ø7Áÿ¿à¤±×ÇߌvCS·ñGÄï xÓàçÁí+ÆwwÞ Õ.ôOì¿…ö?|‡MЮ´�ÉoŠõ†Õo4ɵœÚ>¦tûP*ý‘´[‹kÚ#Æq:]ø[â÷íiñßâ·ÃÍnl|Sàk¶V^ñf�!?éÞñ"h÷·…µÈAÓ|Qá«­'ÅZÆ¡áÝoHÔï@>¸ € ( €>Dý‡><~Ïß³Gì­ð¿à�Ç��ÿ~üRøssñÃ/ð?ĝоð'Š4�VÛâ7ŠuÌúŠ5ý3R:~«£jº?ˆü;«Çnú_‰¼)®øÅz Þ¡áí{HÔ¯?!¿g/Ùçâ'ì{áü0ý™?à䝨[áÿ¯üYøŸñnÇÂ^ ý˜?fŸˆŽ�¬|Rñ]÷Šõ›GñN½ûeG¨jQAsx ŠG·´‰–/2+;e“É@ÑoÚL~Å¿´wí1ÿèý¤µoø)o쟠j¿°W�¾)øãRðì_>êQüfÔ>(ü2²ø{y z¤4˜þ&›sk&¼ŒšG�’égJÁd± AÀ,|,Ôa?ÁFißÛþÛþ Mû%xƒþ'àwÁ�ƒð–Šÿm?á ÿ…K5ìËâFñä5íÿøH¾Òʺ9ðf…ý—å5MO$*ROfŸ£Oò.tªS·´§8^öç„£{ZöæJöº½¶º?;t?ØGö;øà¯j¿?à³³'ÃOÚ‹áíÙûQþÚŸ¿h‹[Ÿ€^&Ò|iûZiðŒ|Pø1⯄>%øï¦øûÃz—…V *ïÄQøÃ—÷wVVWöÚf™\X]2ÔOø'îµÿùý‚g#àN�ÿýœ~+x–ÿÆŸ>+|Vø¹â�Ž¿4_|Vø¿ñ_ÅZ‡Œ<{ã{ýGñ”šVƒ¡ªj c¤hv2Ý&“¡iÚ]„ú†©{ΩxóÏí à}WãtðR_ˆß ^/ˆ¾ ø•¬~Ë2xÄ^ ÿЧNñ¿ü(+Áz¿ÄÕðÚ#^ÿÂvÚXê>OøD†®5i:ç�4϶øÃBÕô[0¦¿à¡~5ýˆÿnoØÓö�ý�gÿ‚‚þÊÿ _ãÇ€áðšøúo‹? *ÁÃ_°—Æÿ€ß ´Ý?úÇÁ½;ö~ý™¾ë>.ð¾‰á™|?¡i1|SÓÿjÏêþ¸°ž=+Q›T�@Õn/†�%œÑ¨¾’â jøCyû |ÿ‚‚þÙŸ·¬ßðR/Ù;Z‹öµøsû?^¯‰ák£`f;зŒFsŠXÛ šj馻­PJ2„œgFKxÉ8É]]];5tÓô<Ëö–ýœ¼1ñº_؇Jðü›öøQàOØïàŒ¾ ø_RøKðKâ6¤~.|øZŸ eñLj|M/í�áu]Å^v§­ÜérÛè_m‡NþÛÖ>Ä·ó²OÝ�‡ß¶·ì£¦x#Áú�¿nïÙ3â'�ô_h–~7ñž…ñoá…,üeâ}B¶Oø¿NðEŸÄ?ÿÂ+§ëš•®¡®Aá¸u½n?Ú\®šº¶£ŸÛfùóöð?‰>~Éß<)âÝ+PÑ5Ûm#]Õ®t�ZÆçKÕ¬m¼Sãx«JƒVÒ/£‡QѵUÒu«©hº¥½¦­£Þ™ôÍZÊÏQµºµ„ëj( € òo�~Ö|yð/ãG�¼;]xƒÆ þ#xSB¶’hm£¸Ö|EàýcHÓ {‹™!·�&½¼‚6šâh¡ˆ1ydDV`åšGíû$뿱>…ûü ðoü‡û k³çÀ´ð¶�gðâëöcý™­5½áG}ªøEþ Ý~ØzÖ³¦_kšs_éqø�¬õKÝ*KÄÔ#³»{T·pºüQsû kßðS/†¿ðQ·ÿ‚�~Ê ðßöDñŸì´ÿâŸÂ —V_üH�âxõ¾"‹ð 5táÒO†O‚/EÈ'P>"¶ìDØi94’m¶’I]¶ôI%«mè’ÜãÿfÝöøâïø)?‹íÿà¦_²g�þ ñ�Ä�œ?>hËð�µ¿‡«àcáãxŸ5±ãæ´uc©ýŸÁF`ÂËû6Eå$ÓÙ§èî9ÂtݪBPm])ÅÅÛU{4�®š¿“?<|5ÿùý–>üý“¼9û8ÿÁq¿g�ß´ìíû+|[ýмuñóO‹öxñŽ—ñ¯övø»ñSø¡¨øj…ž(øóp¾ñ'…¼Y¨¶¯àÿi¾<פӵ1-åæ›¨Æöö¶l“÷öFø§ÿâý�¿g�ß²§Â/Ûöi½ðWÁ_øsá׆&ÔÿhŸƒ·ž!×ÛK·Xï5Ý_ì>'··¸ñŠ5‰¯µÝYtû;[7Õu;•±²¶¶òmãå?dmâÚÃöˆñœN—~ø½ûZ|wø­ðó[ƒ›øÄší•—‡|Y£ÈOúw‡6jdmwÀÿü'àx§Áú`²V±»ñ÷ˆ]–Å5K0ÌÝjTqu¹e )Q«Vºƒº�eáã(ÊŸµub靯¼DñË‚¼9ÅSËqõ1Y¾q&�|«&Xzõð¥xÔÌ*WÄP¡†•EÊéáÝIb§«¡�Wðgü>·þ £ÿF_ñÿO�üº¯¹ÿ‰tâ�úd?~aÿÌGæŸñ7\ÿD×ÿà9OÿƬ!:“¡‰�§«àÏÔB€ ( € æõo†> ñÝê^x—ÀÞñ5Õ�™Œêž'ð7M‰å¸“ÍÔ5k;ƒga É<ì¾jDåuC#�Í'&£Ü›I$®Ûz$’Õ¶ôIn)J1‹”šŒbœ¥)4£¥vÛz$–­½ÕŸŒ?િðK_‚uO‡:?Ágøí>�þ�­xçáGÃß„ÍàÕÒI#ºÒô _ÄZdþ"ŽÀǶmkL¶ŸA»gFÒµ=B?0ÃûVEàGg9u,ÃW/É}¿½K™Ko²i8Ô­F†ªÃóßÝ¥Vq¯?kJ›²ÎOôŸðû‡³jùV†mÄU÷+æ94pRË]tÚ�>#Œ ñ^ÎÞõzå…�×°­Y]¯ÿ‡ÖÿÁ4èËþ#á ð#ÿ—UìÿĺqGý2¿0ÿæ#çÿân¸+þ‰®)ÿÀrŸþxŸ–_ðMÚþ Íÿòÿ…Õý§à?Žÿ´7ü-ïøWGü%¿¾xwþø@?á<ó³ü߉Þ0ûgöÿü&±ý«oöwÙÿ±-³ö¿<}›äø_è™Å<7õëñ~Q˜ýwêßdžccõ¬|7¡VþÓÛûß ¹÷Óú ÇoÚaÀ¾5ÿª¾ÏÂ,σ?ÕŸíËÿeâ²|Wö—öÏö=½¿/ö³úŸöSöWöÜßZ©ü>_õ7þ[ÿÑÿ£/ø�ÿ„'À�þ]WÖĺqGý2¿0ÿæ#ù÷þ&ë‚¿èšâŸü)ÿ爿ðúßø&�ýÄoü!>òê�ø—N(ÿ¡æC÷æüÄñ7\ÿD×ÿà9OÿÆÖÁ`qô°y6ˆ2üNiŠ«�Âbñ8¼m<>•z³ÂapØŒF&0thЫRq§/‡?à�·ì¡û~Í~7øMûG~Íþ#ø‘ãürñ/ÄM+\ðLJ>kv¾Õ¼ðÏÃV:T×~(Ômµï Õü%®^Io fÍ!¾·’73Kp«ò^ý$‰ƒ¯”bð/À¡ “#g–SZÝ¿v6íù³ŒsIýx�jóÌ�%«mæå�/¥Ï7eÃ|BÔ¼6ÿ¼)áj:Ň‚õŸxw@½Ô�†O‹Sþ ¹Ò4ëû¨õ(×I»¶Ômìõ;=GM³ü_=Ée“bêQ§Œ¡ša!ˆ¯„§šàa_û7ŠÂF„±”puëÓ¥õ�ªýf„jÔ§Mº°•9NœéÔŸô_ ñ8‹KW/Åd˜ùá0¸úÙgS ý±�Àã牎]ˆÌ0¸jÕþ§õï©â¥B�Y*©Q© ±§Z�ZTúºñ¥ ( € å|Cðïá犅ψ|sáOj6žÒçŸRñGŽ4o\XxB²ÞÝ\_kzí´‘iº]¢››ÉŒ—Aý¢vy¯WJ•Zõ)Ñ£Nu«UœiÒ¥J©R¥IµBœ œ§9I¨Æ1NRm$›2­ZŽ�\F"­*(S�ZÕëT…*4iS‹•J•jÔq…:pŠrœç%Å7&’¹ø™ñ[þ çÿ³økã�oÁ>ø«üd±Ð&û ß|ðßá5Ÿƒ5»ø‹-áðãø’ëKÕ5 2ÞQäê›ìµ­q¦Ëy§½µíÏîO€\a˜à(c1X¬¯)«^<ÿQÆÏ,]?ƒÛLJ­N�I-]/i)ÓV�E œÐ�ó^{ô¨ðÿ)Ìñ9~ �ç´pÓöÚym,pŠ‘ºŸÕe‹ÆP­Z”_º«û(Ó«g:.¥' “ó¯ø}oüGþŒ¿â7þŸ?ùu^�üK§Ðó!ûóþb<�ø›® ÿ¢kŠð§ÿž'å—üGö„ÿ‚sÁ<¿áuiøã¿í ÿ {þÇ‘ÿ oÁï�Þÿ„CþøO<ßìÿ7âwŒ>Ùý¿ÿ ¬jÛý�öìKlý¯Ïfù>ú&qO ýzü_”f?]ú·ñá˜ÃØý_ë èU¿´öþ÷ÃnE½ôþ‚ñÛö˜p/�꯳ð‹3àÏõgûrÿÙx¬Ÿý¥ý³ý�ooËýŸìþ§ý”ý•ý·7Öª—ßýMÿ‡ÖÿÁ4èËþ#á ð#ÿ—UõŸñ.œQÿĊïÌ?ùˆþ}ÿ‰ºà¯ú&¸§ÿÊùâ/ü>·þ £ÿF_ñÿO�üº£þ%ÓŠ?èy�ýù‡ÿ1üM×Ñ5Å?øSÿÏÑm?ààïØ²ÂÖÚÆÇàíeeeo ¥��¤ ­­m-m£Xmí­­áñjC¼¢E 1"Gh¨Šª þ%ÓŠ?èy�ýù‡ÿ1üM×Ñ5Å?øSÿÏ…Ô?à·¿ðN ZúïSÕ?cߊ:–¥q-Ýö¡¨x7àuåõíÔîdšæîîã]’{‹‰¤fyfšG’G%�‰$ÑÿéÅô<È~üÃÿ˜ƒþ&ë‚¿èšâŸü)ÿç‰Oþ[ÿÑÿ£/ø�ÿ„'À�þ]QÿéÅô<È~üÃÿ˜ƒþ&ë‚¿èšâŸü)ÿç‰ñoü;þ =û þ×±çÅÿÙïáGì×ã/†~?øƒÿö�õŸ|#M7Dÿ„Sâ�‚|oª}¥¼;­®²?´´_ j:D?c#3ßÄ.?ÑLõàq?Ñ‹ŒóŒ�—`8‡‡(bñVöUkUÍiS�±ÆaëÔæ©G.«R<ÔéN+–œ¯&¢íä¿Wð?éãá_†þ(pÇq?ñžq‘äßÛ_^˰8^Åâ±Ú<=›eXoe‡Ì3œ.§±Æc°õçí«Óä§Js§ÍV0„�ø'�ü{öý‘ÿcÏ„³ßÅÙ¯Æ_<ðûþÿíÿèÞøFún·ÿ _ÅxßKû3x‹[mdÿfè¾%Ó´‰¾ØN'°”[ÿ¢ˆ(á�£äù.ÇñWÅáþ³íjÑ«šÕ§/mŒÄW§ËR¶]J¤¹iÕ„_58ÚIÅ^)Iž8}<|+ñ#Å'ãNà~3Éò<çûê9v; ØLVû;‡²œ«ípù~sŠÁÓöØÌ"¼=�zœôêÂu9jÊp�Ú_ðúßø&�ýÄoü!>òê½ÿø—N(ÿ¡æC÷æüÄ~QÿuÁ_ôMqOþ”ÿóŧÿÁoàœMõ¦§¥~Ç¿´ÍJÂâ+»COðoÀë+ë;¨d‚æÒîÛ]Ž{{ˆdU’)¡‘$�ÕY0�ø—N(ÿ¡æC÷æüÄñ7\ÿD×ÿà9Oÿ |ŸÆ^ñ�¾xC⮥á;OøóÀ—C²Õ~#éÑ5-Vú/G«ø›ÃÚe®±~m¢Úµ…õ¤'KÔô}CRü›ŠxR· cq7˜a3¨Ö¥…Ì1yd13Á`±õã^¥,¾¶&µPxÇK ^¤©Sæöj•HJ^Ö�XSýׂ8ë Æ¹v0YV? y–¾;)Àg50tó,Ë+ÂÏ F¾m‡ÁáñêG.�|n•ò꾿þ%ÓŠ?èy�ýù‡ÿ1ÿuÁ_ôMqOþ”ÿóÄòÏŽŸðV?ø&·Æ‚_¾Aû*|Rðdÿþ|AøkŒ4ï‡ou K㯠jþ�Ķ6kâ}5®ï4'Õ©klº��ž{Tˆ^Ú—óãäÇý¸£�Æà¿Öއ×0˜œ/¶‡ö‹•¬Q�/kõHÞTùùÒæ�ÚK™n} }5ø'…¸¯†x�ðgæk‡8‡%Ïž[ˆyE:ŠÊ3,6`ð5ê,ilìßÁÒj‘Ü�Fóë7}Š3 žçÉᯢ·ðö® ñVM˜{\]LW¶­Æ�=½’_W«îÇØs§Ìµ›\º]þ…ãoíàoø¯/âz~g °<=„È^[–WÊ14+¼.e›f^�ES•j«4XyCØÊÐÃS—´|ܰûëþ[ÿÑÿ£/ø�ÿ„'À�þ]WÐÿĺqGý2¿0ÿæ#ñßø›® ÿ¢kŠð§ÿž#“þ aÿÓ�ÖHÿc/‰èÁ‘ÓÀßUÑ”ä2²ë@«È ‚"�ø—N(ÿ¡æC÷æüÄñ7\ÿD×ÿà9OÿŒ<1Ì89Q§ŠÍòÌË0¯F¾*^Ymld0J5kâó ñžœ(`ðô¨Ô”ªÔšæäŸ³Œ£J´©þ“À4å> Ë[�çYFS…Äap53¼êyn.©šcëÑÂà2œ,éã*ÔÅf8ºøŠ0†Œ%Éí){YBUðЭ÷Ž£n–z…õ¤lÍ­åÕº3à»$¼JÍ´*î* ¶ÎWægìå:( € üQÿƒ‘å·ÿýÚ¯þ¶Àºþ“¨ € ( € ( € (åú( € (]‘Gi©ß^Xé:6‘gq©kZæ¯yo¦èÚ6™gÜ^j:®¥w$V–Vv¶ñÉ<óÏ*$pÇ$ŒB#0ºTª×©N�s­Z¬ãN•*P•J•*M¨Âáå9ÊMF1Šr“i$Ù•jÔpÔjâ1iP¡BœêÖ¯Z¤)Q£Jœ\ªT«V£Œ)Ó„S”ç9(Æ)¹4•ÏæÇþ 'ÿÆ·ÒÄ¿a-W3¸Ñ¼cûMÒg WÚÁ‹I�6ùÝn~ ßF׿y¼)e‹Gñ{PøsàrJ†uÆÔ®ýÚ¸^oEÖÍä¾/æú…7o…bêJõp‹ø£Åï¤Ä›Åpç†õùcïÐÆñb^ô·�Jy %ð­ãý«V.OÞ–”mCÿ—mGQÔ5�BÿVÕ¯ï5MWT¼ºÔu=OQºž÷PÔu ÙÞæöþþöåå¹»¼»¹–K‹««‰$žâyY]ävcý;N�:4áJ”!J•(F�:tãS§NQ„!¥BJ1ŒRŒb’I$U«V½ZµëÕ©Z½j“«ZµYÊ¥ZµjIÎ¥Zµ&ÜêT©6å9ɹJMÊM¶ÙJ¬Ì( € ( € (ôö%ý޼ñCñGíEûUkz—ÃOØ·àüàø«Ä±k¯|cñ¤E%Ò¾ ü-F–ÍSÄzñu­GHŽãûN ntË›˜õ=7óÞ3âì^_[ Ǧ|:øCðÏCøËào�<3¶? ü*ø{§þο­´ý"ÈG ©k—–¶V2x‹ÄAú�ͼ[Áa£éúN•að|sÂXNðŸŠà«ÔÌ3lʶQ�Ï3œN¸¬ÓSˆ2ÉT«;¹{:”æ°ôš§JR•JÕ*Õ©ú‡†\yŽãŸ¸¤°Ôr¬‹'Ãgùw pöË’åt¸S9…*íªØš�§Mâ±RŠ•iÂ1„iaéP£Kú¼¯ã“ý ( € ã>(|Nøcð+áî±ñkão�ô‡4ÿL×µ©±>¥vRG·Ñ<7¥Ä$Ô|C¯ê)#°Òt›[ËÛ‡I Vòù2(õr\“5âÂŽY“à«c±µß»JŒt„JUkTv§BŒ.�JÕe pV¼®Ò~q.GÂyV#:âÇ–eØeïׯ+J¥F›… =(Þ®'VÍRÃÐ…JÕ|°i6¿�_ø(·üâ‡ípšÏÂ/ƒvú·Á¯Ù�äšÖçA†éañçÅKpLbóâf¯aq$qi1¨’?é2èÑuÍCÄÏšúoö_‡~e\ ¨æy§²Í¸‰%8×qæÁe³ß—/§R)Ê´^�Z*«I{ xdê*Ÿçw‹~?ç¼,FK’{|‹„[•9ac>\Ç9§{sfµ©IÆy­VYBr ›Y«Œ”i:_‹µû!üòP@P@PìçÀO„Ÿ?àŸ <-ûm~ÔÞ±ñ7í âÔ‡]ý‹¿e¿ù�oxt¿Ú+âΗÿiYxKB½ÿNð^ƒ~šUÆ·cå¤ßiº°Õ<9ù{šæ{šâx3†13ÃdVèq‡a­+)s*œ?•U’ösÅW‡¹Œ¯V4a9Bk–)b? 8g#ʼ.Èð^"qžž3ŠqÊ8Ÿ¸3xÝÅÆTx¯;£í©àpÕ?y—᪪2ÄU§�—<éVÂ~¡Á~,üAøëâ?ø)Å¿Šž$¼ño�¼u«þ̚߈õÛÑosu-÷Ç(¢‚ÚÚÝ"´ÓôÝ>Ò+}?JÒìa‚ÃLÓmml,`‚ÖÞ(—òϲ¬I—pU–aá…Àà©q =]¨Åa7)JMÎ¥J’r©V¬Ü§V¤¥9ÊR“oöÿ¢¶yšq&mâ¦y�bêc³<Ê¿ â1xš–Ns’âhÆ0„TaJ�(F4¨Ñ§Ò£J¥N1„"—ô_ͧö P@æ>8üý˜þ_ü]øýã{ø"̼lrwâjþSËoáÏxz-×úþ³våKx�­”n¥©ÜYé6w÷ÖžïpÞsÅ9�<¯$ÁTÅâgiT’÷(a©^ÒÄb«Ë÷t(ì¦ù§+S¥•e rùŽ-ãà|¢®uÄ™�,�ãJßÅckò· . Þâ±3¶�‚å§jÕçJ„*U‡ñ¯ÿÿ‚²|`ý¶/o<á8¯~~Ív7xÒ~iwßñ7ñ�µ›}®½ñSX´qý»¨ÈëÕ¿†í¤>ÐÝ-V8õ�VÈøŽóûKÃß rn ¥Oˆöy§Ê?½ÌjC÷XG(ÚTrÚSW£›Œ±3_Y®œ®èÒŸÕáþsx±ã—ø‘Z®_…ö¹' ¹Ê)Uýþ=BW†#9¯M¥ˆ¨Ý§ 7õ,3PJ8Šôþ·Sò^¿U? ( € ( € (õköJý˜>ü.øS'íãûoé3?Á=*âh?g¿�Ws�3ĵ—Ä�?|�éðBñ\^Û|$ðýÔpIâcéZ€f±óomaºÒu�Ëø«‰sLÏ4\ÁuRÎjÅ<û;„}¥˪YJ¤¤œa,Ö¼\–ª*´íÏhNQ«GöÎàì—&ɉ~"Гáê”x[†ç/cŠã|Ú•ÜiF.2© � 5ŽÅºN�[º|Õ!ЯúUÿqý§þ*þןðR¿Ú/ã/ÅÍR ½sSý�þ!éz‡¥ÂÖ^ðG„´ÿ‹އàÏéeä]7Ãú,wˆ#i&»½»žóVÕ.¯umBúöãóo¸k+áO 2L£*¥(ѧÅ8:µëÕ|øœn*¦Q�{lf.­—´¯YÅ]ÙBŒ)RŒ)S„#ûÑóŒs®:ñ“‰3üò´gˆ­Àù…6Œ]<]�¥ŸðïÕ²ü ¿c…éK•7)Ô©*•ëN¥zµ*Kú[¯åCû”( €"Ô/t�DÖ¼Uâ�sFðŸ„<5aq«x›Å¾%ÔmtoøJ´ŒÍuªê·ÒÁgi1ÌÒÊ€pXªå†øl6#ˆ£„ÂP­ŠÅb*F• = s«ZµI»F�:pRœç'¢ŒSlæÆcpyvŽÇâ°ø,”ëâ±xªÔèaðôi«Î­jÕetá«”¤’î.ÿðQoø.ÿŠmõï�Ÿ°æ£ªx[Ás}§Kñí ð\é7ñ¬<Ã{k„‡PðG†'RKx†æOj@Ä,!ðÌvóÜk_ÕÞø!C/ö×Ò¥ŠÆ®Z˜lŽñ«„ÂKIFy„¢åOˆ‹µ°Ð”°”õö’ÄÊIQþñ{é+‰ÍV'‡<;­[–¾z8Î&å� ~>:ÆTò˜MF®_…’nøÊ‘†>µ×±Ž 1”±ÍŒÓKq,³Ï,“Ï<�4ÓLí$³K#’YdrÏ$’;wrYØ–bI&¿£’QJ1J1ŠI$’I%d’Z$–‰-?�%)JR”¤å)7)JM¹JMÝÊMêÛz¶õoVGL� € ( € ( ·bŸØÛTý©¼W¯xƒÅþ"�áGìÓð’É|QûA|wÖV84xZÓ.“¥Ít­­ã¿´cKð¶�kýì·w+|úmݵ¹¶¹øÎ2âú\3…¡C ‡y§æ³xl‡$¢Ü«ãq/OkV1÷©`p×ö˜šòtà£R—4Eð÷€kqž7ŠÇbÖIÂ5ŒâŽ%Ä%6[‚�åì(Êk–¾eŒ·±Áaaµæª:U!Iý±¢~ÙZgÆïÛsöýŸþxqþþÆ¿k�€6_¾Ã$§Pñ÷ü.? ÇñkâEÜŸé߼桨ÈoTðü½í•»Ï¨ßëÚ¾³ñµ¸B¦MÁœuŸg˜…šq~w¹ìó|ÆI{<ý˜hÿ„?³u�æt¯†OÂoˆÿÚž.Ò†´Öþ(ëV¾Vñ ì‘ÝCáød>ÑæX<¸u]JÍuÛ�ì¸SÃÞ §O_ˆøw4â C÷¹•L×/öxW%iÒËiOýŒ,Üeˆ’úÍeÍyR§/aó÷Ån:ñ_ÄŠÕrü?qnIÂ�©ûœžŽI›{lr„¯N¾q^Eõš—JpÂAýO.[Fµh,L¿'?á’jÏú6_Úÿ ÇÄþfëõ_õ¯…ÿè¤È?ðñ—óAøwú�Æ¿ôGñGþ#ù·ÿ2ü2OíYÿFËûAÿá˜ø�ÿÌÝë_ ÿÑI�áã.ÿæ€ÿQø×þˆþ(ÿÄ6ÿæ@ÿ†Iý«?èÙh?ü3ÿù›£ýkáú)2ü#ÿó7Gú×ÂÿôRdøxË¿ù ?Ô~5ÿ¢?Š?ñÍ¿ù�?á’jÏú6_Úÿ ÇÄþfèÿZø_þŠLƒÿwÿ4ú�Æ¿ôGñGþ#ù·ÿ2ü2OíYÿFËûAÿá˜ø�ÿÌÝë_ ÿÑI�áã.ÿæ€ÿQø×þˆþ(ÿÄ6ÿæ@ÿ†Iý«?èÙh?ü3ÿù›£ýkáú)2ü é’øOö~ø#¦NÒYøSÊV9¼Câ[Ÿ:s®øÿÄâï|G­\\]²JÆÒ «É>ß«jÞŸp…>£‹Åã1/5âLæ¢ÅgÙÍH¥Ã†»†ŒcÒæ”`½�*^7ˆ\WŒ± ]‚ŽGÁü=Eàx_‡hɺx,"²–+>i}g4Ærª˜¼D¥6¤ù#:�ÚׯïÿðCÏùJ/ìÃÿu«ÿYãâÕx^4É´âOû£ÿêÿ*>Ÿèéÿ'“ƒ¿îáÿÖWµop|ð£áo‚#ÿó7Gú×ÂÿôRdøxË¿ù ?Ô~5ÿ¢?Š?ñÍ¿ù�?á’jÏú6_Úÿ ÇÄþfèÿZø_þŠLƒÿwÿ4ú�Æ¿ôGñGþ#ù·ÿ2ü2OíYÿFËûAÿá˜ø�ÿÌÝë_ ÿÑI�áã.ÿæ€ÿQø×þˆþ(ÿÄ6ÿæ@ÿ†Iý«?èÙh?ü3ÿù›£ýkáú)2üß ’eÕ\jN5©GëR„yÔéUÂáóÍ_�ÿþ'þÓ¼_ñ«ãˆdñŽ|gö»ë€†ßNÓ, Ao¥èŸæHš_‡ô;áÓô�>7�Ãm ½Ä×W’ÜÝOú.E‘e¼7•a2|§°ø,9aóT©9>jµëÔ²ukÖ›u*Ôi^NÑQ‚Œcùñ6sÆæ?ˆsìSÅæ9…^z’·-*4â¹hápÔ®Õ.š�*“|°�ç)Ô”ç/èÓþ µÿ‘köòÿ»]ÿÒÿ޵üéô“ÿš/þî/ýá×C¯ù¸¿÷hÿïÎHõüºl…øã’WHâG’G`©j]݉ÀTE™‰à '¥|1ûs~ßß ?a½M1¼1«|eøÿªéËsáo„~µ¾¹Òôs{-â—ˆ,-® ðþ’¥Í®ƒ¸ñ¼¯l¶–0iWw:þ•úGxq˜ñ�x׫‰£”ätªrâ3,Lᕹ_¿C.¡9Eâk^ñ•Wˆ Ô½¥IUŒpõ?ñGÅü§Ã¬,°´0˜Œû‰«ÒæÂdø8T•,?5ã¼Þ®uÄŸÚ8ÌL¹£‡ °¸šx,¿åÍ&_…å”0Øxi¢r«ZIÖÄÕ­^S«/�áñÇý ž+ÿÂwWÿä:ú¯`¿è3 ÿ…ù3å?³3/úãð’¿ÿ+ø@üqÿBgŠÿð�Õÿù�¯`¿è3 ÿ…ù0þÌÌ¿è_�ÿÂJÿü¬?áñÇý ž+ÿÂwWÿä:>½‚ÿ Ì/þQÿäÃû32ÿ¡~7ÿ +ÿò°ÿ„Çô&x¯ÿ Ý_ÿ�èúö þƒ0¿øQGÿ“ìÌËþ…øßü$¯ÿÊÃþ?Йâ¿ü'uþC£ëØ/ú ÂÿáEþL?³3/úãð’¿ÿ+ø@üqÿBgŠÿð�Õÿù�¯`¿è3 ÿ…ù0þÌÌ¿è_�ÿÂJÿü¬?áñÇý ž+ÿÂwWÿä:>½‚ÿ Ì/þQÿäÃû32ÿ¡~7ÿ +ÿò°ÿ„Çô&x¯ÿ Ý_ÿ�èúö þƒ0¿øQGÿ“ìÌËþ…øßü$¯ÿÊÃþ?Йâ¿ü'uþC£ëØ/ú ÂÿáEþL?³3/úãð’¿ÿ+ø@üqÿBgŠÿð�Õÿù�¯`¿è3 ÿ…ù0þÌÌ¿è_�ÿÂJÿü¬?áñÇý ž+ÿÂwWÿä:>½‚ÿ Ì/þQÿäÃû32ÿ¡~7ÿ +ÿò³ôkö@ý�| §x/^ý²?mø5¯þÊ¿ ï$³ð׃nú�iï‰ö¢I´Ï„Þµ›ìú¯ö—Ò¯Œ¼Ug[ØÙÁek¨X kþüû‹8·SC„x.Tq¼O˜ÁOŒ�-| å²²©šc¤¹©{u'„ÃM·9Ê”'χ¡Šý_�8-¥—âxûÄXâ2î Êj:xL¾\ØlÃŒsˆ^TrL²ä¯õg(5�ÆÓŠ�:q«Ni{<^+òÿíuûZ|Fý°þ*7ÄOæx{CÐô›Oü0øiá˜VÏÁŸ þèåÓ@ð_…ìbŠÞ1oc }¨´O©Þ˜Åie†›aô¼)¹ e‹/Á:˜ŠõªË™f8–çŒÌó ¶uñ˜™·'Í9|ÔœiBÊó›�IüwqÆmÇ™ÓÍs(ÑÂá°Ô!€É²ŒU<¿%ʨ]arü8Æ+–œu©UÆ2­Ròå§MR£Kõ_þ Îÿ“ÌøÛÿfwñ'ÿV§Àúü³éÿ$VWÿeN ÿU9ÙûÑ'þN>uÿdNeÿ«Þ?®:þ4?Ñ €<£ã÷Ç�…_²ÇÃ[�Šßµ=ZÓFýô>ð‡†4©µïˆ5Xb¦�á@ѼÎûáZ¶¡>Ÿ¡iQÜ[Üjú®›iZp�Jõ\e4ªI8Ÿ'Æ]t&ÂâçT¾Ôÿ´¸ €¸[�°ê¥,V0ÎêÓåÅgêPUR’÷è`i¹ËêxWö£Ê­mzµiŸùÍâ—Š\oân.Tkà³ «†èUçÀðþ–*T[‹~Ï™UT¡ý¡�Káœá eu…¡JS­R·æ�ü ~8ÿ¡3ÅøNêÿü‡_£ý{ÿA˜_ü(£ÿÉŸ�ÿff_ô/Æÿá%þVð�øãþ„Ïÿá;«ÿò^ÁÐfÿ (ÿòaý™™пÿ„•ÿùXÂã�ú#|]Ò‹->æeÔn4íJ²–é”ÊöÚ}¤LÅ!@?ªü áNÏxK1Åç9Y™â©ñ/ N¾7 J½XP†[”U�Τ[TãRµY¨­ªMîÙü5ô™ãž1áž<Êp=ÄÙÎM‚­Â8 ]\.]�¯…¡SS9ϨÏ*t§º²¥‡¡NSjî¡Ú(üVÿ‡“þß¿ôx´'þïòu~Íÿï�?è’Èð݇ÿäçoø‹ž'ÿÑyÅøwÅÿòÀÿ‡“þß¿ôx´'þïòuñøþ‰,‡ÿ Øþ@?â.xŸÿEçáßÿËþOû~ÿÑáþПøs¼MÿÉÔÄ;àOú$²ü7aÿùÿˆ¹âýœQÿ‡|_ÿ,øy?íûÿG‡ûBáÎñ7ÿ'Qÿï�?è’Èð݇ÿäþ"ç‰ÿô^qGþñü°?áäÿ·ïýí ÿ‡;Äßü�GüC¾ÿ¢K!ÿÃvÿ�ø‹ž'ÿÑyÅøwÅÿòÀÿ‡“þß¿ôx´'þïòuñøþ‰,‡ÿ Øþ@?â.xŸÿEçáßÿËþOû~ÿÑáþПøs¼MÿÉÔÄ;àOú$²ü7aÿùÿˆ¹âýœQÿ‡|_ÿ,øy?íûÿG‡ûBáÎñ7ÿ'Qÿï�?è’Èð݇ÿäþ"ç‰ÿô^qGþñü°?áäÿ·ïýí ÿ‡;Äßü�GüC¾ÿ¢K!ÿÃvÿ�ø‹ž'ÿÑyÅøwÅÿòÀÿ‡“þß¿ôx´'þïòuñøþ‰,‡ÿ Øþ@?â.xŸÿEçáßÿËþOû~ÿÑáþПøs¼MÿÉÔÄ;àOú$²ü7aÿùÿˆ¹âýœQÿ‡|_ÿ,øy?íûÿG‡ûBáÎñ7ÿ'Qÿï�?è’Èð݇ÿäþ"ç‰ÿô^qGþñü°ûOöƒø×ñwã—üçá‹þ1|Hñ—Ä¿ÃzøÇE:÷ŒµëýwT:N—ðaî4í9®ï¦–V´±ŸQ¿šÖ% ’òᣠe|ü~A“eY/‹Y¶)˰™výGÂVöJ¡OÚÕÍÔjTQ‚Kžq§'¼”"žÈýŠx‡=â?²~}›có|güD¼~ë8üM\MoaG‡Ü©Rç©&ù)Ê­IB;EÔ›_?+ö3ùäý`ÿ‚ÊQfû­_úÏ«òï?äÚq'ýÑÿõ•¶ý?äòpwýÜ?úÊç‡öÿ_Á‡úŒP@šü†´û iÿúW Ÿ¶wü öÞðgí…ûWø?µWÇOø[Ÿ´§Ç_ xkÃúGÄOXé:‡ô/Š)ÒômL²‚õa´Ó´Í:ÖÚÊÊÖX­í Š(Ô"_Ýü!À|Œá.Åâ¸c%Äb±\;’bq5êà(N­zõòÜ5ZÕªMÁ¹Ô©RRœäõ”¤ÛÕŸåÿˆ(x‹—ñç`0ÃÇÜV'Ä<ŠÅ׫‰Äb<4á EzÕ§*•*×ÄQÅÖ¯Vr“mέYÎ¥I=e9JNí³ò¿W? ?©�ø6×þE¯ÛËþíwÿKþ:×òïÒOþh¿û¸¿÷„m}¿æâÿÝ£ÿ¿9ý#×òéý²PQàÏùtßû|ÿÒ ªþ ?áñÿðRßú:¯á%ðËÿ˜ŠþýÿˆGá×ý_ü*Ì¿ù´ÿ+?â=ø»ÿE®7ÿrþwü>?þ [ÿGUâÏü$¾óGüB?¿è˜ÂÿáVeÿÍ¡ÿïÅßú-q¿øC“ÿó¸?áñÿðRßú:¯á%ðËÿ˜Š?âøuÿDÆÿ ³/þmø�~.ÿÑk�ÿŸÿ�Áÿ�ÿ‚–ÿÑÕx³ÿ /†_üÄQÿ�ïú&0¿øU™óhÄ{ñwþ‹\oþäÿüîø|ü·þŽ«ÅŸøI|2ÿæ"�ø„~Ñ1…ÿ¬Ëÿ›Cþ#ß‹¿ôZãð‡'ÿçpÃãÿॿôu^,ÿÂKá—ÿ1Ä#ðëþ‰Œ/þf_üÚñü]ÿ¢×ÿ„9?ÿ;ƒþÿ-ÿ£ªñgþ_ ¿ùˆ£þ!‡_ôLað«2ÿæÐÿˆ÷âïý¸ßü!ÉÿùÜðøÿø)oýW‹?ð’øeÿÌEñü:ÿ¢c ÿ…Y—ÿ6‡üG¿èµÆÿáOÿÎàÿ‡ÇÿÁKèê¼Yÿ„—Ã/þb(ÿˆGá×ý_ü*Ì¿ù´?â=ø»ÿE®7ÿrþwü>?þ [ÿGUâÏü$¾óGüB?¿è˜ÂÿáVeÿÍ¡ÿïÅßú-q¿øC“ÿó¸?áñÿðRßú:¯á%ðËÿ˜Š?âøuÿDÆÿ ³/þmø�~.ÿÑk�ÿŸÿ�Áÿ�ÿ‚–ÿÑÕx³ÿ /†_üÄQÿ�ïú&0¿øU™óhÄ{ñwþ‹\oþäÿüîø|ü·þŽ«ÅŸøI|2ÿæ"�ø„~Ñ1…ÿ¬Ëÿ›Cþ#ß‹¿ôZãð‡'ÿçqí¿ðUŠßþ2üÿ‚i|@ø™â­CÅž-ñwìÕâ�x‡U¼[[UÔuÛïÉgyª;M·²Ò­®î­të yä³±·ób³·GD˜ñ|/Êòü£:ñ—aiáp¸N"Ãa°ô¡Í'N„0\ð¥í*Jueʤå9ÊÎrkv}�YÞkŸðç„Y¦q�«�Çc¸G‹ÅV¨¡WS2têVöTaN„'8R§:táxÂ)ü(ü^¯ØOçÓ÷óþ Îÿ“ÌøÛÿfwñ'ÿV§Àúüéÿ$VWÿeN ÿU9ÙýGôIÿ“��Ù™ê÷†Ï뎿�ô@( å›þ Áÿ+ý¸gÿÛûãßÂ/ƒß´ˆ|ðçÂ_ð«?áð½�‡| }i¥ÿo|øsâm[ʺÖ<-©jRý·]Öu=AþÑ{7—%ÛÇ—E×ÞxuÁyïdY®m‘añ¹†+ûOë™â1°•OaœfjW�M:k’…t×,Ôw“mÿxÛâïˆÜ/âwdyâ²ì«ý‹õ\<.[R~³ÃùN2¿,ñ*µ¥í18ŠÕ_=IYͨÚ*1_�¿ðøÿø)oýW‹?ð’øeÿÌE}ÿüB?¿è˜ÂÿáVeÿͧåñü]ÿ¢×ÿ„9?ÿ;ƒþÿ-ÿ£ªñgþ_ ¿ùˆ£þ!‡_ôLað«2ÿæÐÿˆ÷âïý¸ßü!ÉÿùÜðøÿø)oýW‹?ð’øeÿÌEñü:ÿ¢c ÿ…Y—ÿ6‡üG¿èµÆÿáOÿÎàÿ‡ÇÿÁKèê¼Yÿ„—Ã/þb(ÿˆGá×ý_ü*Ì¿ù´?â=ø»ÿE®7ÿrþwü>?þ [ÿGUâÏü$¾óGüB?¿è˜ÂÿáVeÿÍ¡ÿïÅßú-q¿øC“ÿó¸?áñÿðRßú:¯á%ðËÿ˜Š?âøuÿDÆÿ ³/þmø�~.ÿÑk�ÿŸÿ�Áÿ�ÿ‚–ÿÑÕx³ÿ /†_üÄQÿ�ïú&0¿øU™óhÄ{ñwþ‹\oþäÿüîø|ü·þŽ«ÅŸøI|2ÿæ"�ø„~Ñ1…ÿ¬Ëÿ›Cþ#ß‹¿ôZãð‡'ÿçpÃãÿॿôu^,ÿÂKá—ÿ1Ä#ðëþ‰Œ/þf_üÚñü]ÿ¢×ÿ„9?ÿ;ƒþÿ-ÿ£ªñgþ_ ¿ùˆ£þ!‡_ôLað«2ÿæÐÿˆ÷âïý¸ßü!ÉÿùÜðøÿø)oýW‹?ð’øeÿÌEñü:ÿ¢c ÿ…Y—ÿ6‡üG¿èµÆÿáOÿÎàÿ‡ÇÿÁKèê¼Yÿ„—Ã/þb(ÿˆGá×ý_ü*Ì¿ù´?â=ø»ÿE®7ÿrþw]x‹öºý£ÿjOø$oíO®|zø©®|BÕ4ÚWàO†ô»«Ë- F0hW¶·zÅÖ—,>Òt[{ÛIuKKKãôW;nm ‘ ˜£Ûò”8S‡¸gÅn¡‘å”p«ðîw‰«N½njð”iFªxšµ¥ ªr”/vROv}Ö+Žx³Œü ãLOgXŒÒ¶‹¸o Fu)á°ü¸j��yÑ”pt0ñ© V„*Z¤gïÂ-[•[ðF¿r?™O¬?`¿ù>oØÃþÎÃöuÿÕ¿àêù~8ÿ’+Œ?ì–âýTâÏ·ðÓþN?‡ÿö[p§þ¯pú!ëŸòÖ?ì)¨é\ÕþqŸëá—@P@Š?ðr/ü £öÿÿ»UÿÖÃø@ÒuP@P@P@|¿@P@Èçücÿ'™ðKþÌïá·þ­OŽý—ôwÿ’+4ÿ²§ÿªœ�ÿ;þ–ßòqò_û"rßý^ñ!ð^ƒ üý�~ ü,øËñãá¦�ñ÷ö•ý¥ôÝcÄÿ²ÿìÍâíKUÓ~ø7à÷‡µ´�Sö ý¢­|=©i>*Õü!ªëŒú'¯‡vWšE¿Ä‹¨e—ûi4¹µ=oÁ]Oâ4ø=ûXü$Óî _7Á�x×Äž)Ôþ|sø{ipºÎƒà½#Åw>ñö�îœúuþ©q±à¯?<Åñ‡…¼k_<ÌøÃƒq•éasJy³Ž#4ËkÎÏÛQÅ6§ËQF£Ã'8á¹ÿÙ1ÕYá±2õ¸káÿޏ Ó#ÃpÎOáÿˆx -|vI[!SÂd™Æ•×Õñ$¥MNŒ§F8Ʃϩÿ·ákJ�N—¡êRx;ó<q‡ŒZò\ƒŠË28J¤éP§Z®†-£8By–kõyFXœEG*~΄¥8S«Vž‡/5Zóý“+àÿ¾�Ü#✻�q-Hѧ[WCŠÅçéÎ¥<Ÿ#úÔ% Š…_kŠ„)Ô­B…\f+Ÿ–†Ÿ�~Ø¿±Àÿø(¿ì¹üþ Qðµ<ñóÀúí¦ŸûB~ÇžþÄÐô¿ˆškKñUž�á yôßxoâþ‰kŽ|ão iü=oªè^-Óµ?M¤§† ÷ø7Å4ò¬ã‰Í²:Ž%B¥Zµð˜ì¾rä–/-úÄœ°xÚ6’�ÎöÔÕ*þÖŒ©Vu‰áo>�ÜW<áü»‘q5Ô£M*0Øì³6§iqõH(æv'š2§ˆ�:“ú½W_ ì11¯B?Ÿž<ø¹û3~Æ_5¯Ùgá·ìëðGöÃø�ð¾òOþÙ´Ç7ñî¯à‹O‰ûPx»ö{ý™¼-à¿ø0h7¿ RVÑüSñÃUÔ¯µ˜ülo´Û? Ëš�é?¢dù�ø³šcñØ ï0á ËêË „yd£O2ÇâTT£Ï‰‡,�E Ó­Š�µx|4gK J•Zξ&?’qSáß�.W–f|9•qÿˆÙ­c3çP•lŸ+Â9Êöx:œÐ�7R�\>~Åbñ’§_Z½ 2Ã`æûïØ&_Ú;â×ìÇãØGIñ$Ÿ³wíwñWøEâÿøÃ\»ñ׈?a¯�žðÞ­ñÅ^ñWŒ.c¶ñ�~k? t-wÇŸ üa® WÅ…ô;ß ëº«k:ׇ4XrÃx�Äç— ñö*®y‚§�­�Ès˜ÒQÅãc u%†ÃÔiÉÊ8º´ªaëûZ˜,w»[WR•hm�ð«…|aá쟌|,ÁPáœÆ®e‡Êø£‡g^SÀeÓ�jPÆbè§(KF½,tiá• 9ŽZܰøJ…*Ô*~Äüfý¯?àšßðK/‰zOì9ðëö,ðŸíAyáE·ýªþ+x®o]kz>±¯é6:¥¦ƒ,þ,ðOŒádøò÷AÔÇŠuÿG¨|<ð‚´¯øLÓµay©ê:.…ð™>U⌘œÇ8Ägu2¼¯ R¤0ŠU14òØbÔyèàp8L<àŸ±Œ©,V6~Ò¼#*s›ÄÖ|‡éüAžxOôyÁe?…áª9ÞyŒ¥J¦:Q¥‚«œTÀ¹{,Fg™ãñp©(ýbq¬ðYm?g†©8U§N8,:ö�æ/Ûþ á‹þ7ý›?jÏø&UöŠŸ±çíK¬Ë§ügðÖ£¨ÃaàÙ^+mX×µ?�Ú3ëZ…¼þø_£Cá�øsâ�©ï#�À>9´ÑtßÙXØë7žÑ4á_x›ÃÌÛ0á¾3XìË ‚Ž"Ÿ°¯Uâ1ØL]:.®a1u¥)UÀcu)ÎtaFµ,V’ tëeÇ pg‹YSÆ>K,Éñ¹”ðµ~µ… °¹f?W¨ãÞ;B� Ó.~Þu:tñ1zø,b�IR«‡üÿ´ý¯¿aKMjãá·ÂïØ‡À¿d‹kÅðÝÇÇO‰~%ø£¡~Õ¿¬4ùžÇRøÓà?øoÅþÑ~è>!v½¿øwàè|)«K©ø~/øƒÅ ¢_êw^ÓEÈ2Ÿøó.©Å9�æÏ¥õŒÂ¾)'^(«ïÒËñ¸nyFµ\4hС‰‡Õ=‹­Bx£îoØÏþõá�ˆ_´Æ¹ñÇ:¸ñÏüÃß ´Ú?Àu«Û/jÿ¼ â)|Um/ÁŠ:†•6›§øKâ?Á½Á>*Óþ9ëž}>É|+¥è¥¤~ ×|oöO ü®eã7pþI›pÞs…�>:˱‘Ë¡™F�?ªO (JrÌåG•Q©ŠPP–FŒ0˜ˆbðØ¿dáN­ Ÿs“ý¸3Šø�!ãÇN¯†9¾_<Ú®O,Mo¯ÓÆB¤iÃ%†#žXŠX)Uu!Œ”ñ1øJ˜fÛªµhb©{ÿÂÏø)—ü?öÓñå×ì‘âïØá×€¿cßêÓ|:øûDÞÁ¡øO]פšDÑtˆQèžð_…~ üÑÖÇIºø£ðŸU–×GñT¶–'Ä¡á�¾•§< ú÷ƒž&bxª•nÏ«F®y‚£í𸶣 æx(5žÕEFÆa[�´”cˆ¡%VQu)b*Ïð?¤/ƒ8>¯‡â®ÃN� fX�«c°”êÓɳ)©N—°”ܪG/Ç(ÏÙBr”p¸˜J„g5ð´iýiâïùB·ÂûHGÄýR6µôØOù�ffuk‹Ûèã‰X,­ä¾7c0¸³œ5|E*Uñõrº*3šU15hæø ]XQ†ótðÔ+V�•£6Úº¿ï?FÌ¿‹ñs‡qxl-zø\®†w‰ÌqéÊTpt1i�¡SQ.Zq­ŒÅPÃÓæw�J‰E;I¯íj¿…Oôè( €54?ù hÿöÓÿô®ÿ=Û_CÖ!á«ã<Ó´Ÿø&ÇÏx³âŸÅ�‰î·7ˆ|?ûhþð†¯ñ7ÄÞ3·¼×5¼K¨üñ‡‚ô�R×ÂþÔ.5OáÿÄ�4ø>æÿA𮵡é~ô8KÅÞ"ນ¯ñunk< 1ptñu¯ŽÁæT%<#VR”òú¯Om'^T"©ÏÏB\«ÊãÏøKÄjYð#-Èéæup¸œÆ¶ƒYfa“â—=\~/¡Bžm‡NÿW„p°ÅMÕ§‹öx¨ó¿…<7ûc~Þ:ÔåøzŸ°†,ÿb­BWÒ<)ñ.ãÆ?tOÛã^ÒYO²ý /~%iþ/±ð_‡5MV)_ÆúGÀY¼ ©x:!ý›¡ë:Ôv’ÜXØþ�“p÷‰¼]“ÔâŒwæc�‚Åä9> /–SÃ5í0ˇƒ�îñPåT¹áˆ¯Jƒ†#,UYÏÊx‡‹|à ¥ÁY_‡Oe]G€âŽ!̤±YÍld_²ÆK*ÅUŒÿ{‚šœ«û)á0Õñ1©„ÁCF�<\þ¯ý‡¿à�Þ"ø‡ûoxãá§ÅÿÏã�سág‚| ûFxKö‘°dðÆ—ûEþψ®~éòjzéñxOâóøCźÆ[k;_�§‚|Cªè±x~/ø>VùúÞ7g_ æY^k†�=Àc?²£7‡¦°ö^Öó*ôc͇Xœ¨Ê”èE,=zõ°¸ŠTg„�Ztþ¯ôkáüï�rlï"ÆJ¿…¹®_ý»*QÅUx¤åì*a²|6"\¸·ƒÌ!‰…jx©ÉâðØ\>; _ }:ªýµá/ø)‡ü'ã¿Ä}CöCñ7ì#ð·Ãß±¦©ªÿÂðãö‹½²ðÖ˜úÛùŸÙÖŸäд¿hÞ6øcáM_U2êø·añRëÇˤÝé¾8×´ÏKu¨eüÍüMβ ñÄóÜÆY­H}—KŽŽk‰ÀÙÕöØz°«áªÎ«‚ÀÓŠö´yT*Ž•ýž'Åo8sŠ©øiO†2xäTªeæY¼2ì²Y2MQú¾*�Jž2�:ŽT3δš¡ˆçuUzJ¾&ŸÁ??à”úìñóãï�j/øÛ[ÿ‚jüðŸ„þ*ü2ø“¥O¤]|iøÑ©üBñï…< ûh° ,×\øá7�íF>5‚Ê×H»øq£xÛÄ—þÕou+�7Ðáÿ¸‚=W'­…–mÅ“¯†ÀäxÉRçúÂĹRRÆÒ‡+Äc0õ:tRxÊ•é’Ì-\W `iâ)O„¥�WÅaã5*´)cS,êÁk]áqÏšÎJ”šV³ÜßCü¿GÇY•\-zx }~Ã`±s§(ÐÅWËãžËN„ÚJ¤°Ë…öÜ·Puáù®—ôG_ÌÇöhP@Gƒ?äeÓíóÿH.¨üÉ< àoüMñ¯„þøE»ñŒüqâ#¾ЬB­[]×/¡Ó´ËšW޼û«ˆÕ縖+kx÷Ïs4PG$‹þ�c±¸\·ŠÌ1µ¡‡Áà°õqXšó¿-*`êT›²mÚ1vŒS”�£äÒâÖ[–ãsŒÃ•e¸yâó ÇCƒÃS·=|N&¤iQ§ÚŒy§$œ¤ã+ÊrŒSkô#ÄÞ.ÿ‚~Ëž<Õÿg ŸÙøþÜž,øw©MàÿÚoö‚›ãg�>xFø�§ÜGŒ¾~̺�¡³—X_†×Ñ&�â‹9šêŸiÚç‡l|3}¦\j–šá¹.sâ‰xŒ~k‘æðàžÂÖ«†Ë%,¯ ™c³,E%g,Dq.Ê0æÿh•±ÃҨㅧOZ…lD?¦x�‡¼&ðk •ä|M�Tñ#�±Øz8ÌêÎñÙ>Y“ak»ÆI`ÕÜêr²ÃFxºô”±µªà0Øœ6§{ðÓþ ]âÚö£ø þÎ^)ñ7�?b¿ÚSž$ø¡áÏŽºî�§Ïã�_Ã�WGÒþ2|øçcáøí´(>,xCTñ‡4ÿ‡zµ­–‰áωöþ#²¸²Hmt w\¸â‡‹¹¿ Cˆ2.:ÁÓÄq&MF3ʱ8JjŽ?öÓ„(J§$!J„e°ÅºÔiS„°ÐÅRt(ã0ê…oJ§€YÕá>'ðÇ1«…àþ"ÄNž{ƒÇÕxŒw ý^œêbaKÚÔ©[8N�LÃâ+Ö© m\eŠÄåø·‰Ã~‘øŸöžÿ‚|øÙâoø'Û~ÉzoÄ¿xäü,øçûW¾ƒ¦kwžøš“½·ˆ¼9cñ&›OŒ:®½áÏ,üGñÃGBÓü{s6�áxu=CIÔ4 /ó¬Ÿþ#ˆ”³n Ë3üË ‡ÂÊJ• 6kŒÉð¸¼DR›Àexl$¡‡•JTÜS©‰•89Jœkb¥Vs’ýsˆ?â_|#¯‘p¦s¹>;ŽŒlV3"Ëø‡�ÂͺqÍ3¬f>1P¥^´fãK µaVt0P£ q—Áÿ´Ïü‡Çl­Á~ñÔ·ÿðO¯‰_ ümû@ÙþÕþ8¼·×4�Ù“áoÃK âÖ‰ñ‡ÅÚtvzn¿¥h~Öt�_àç‹ï¥²¿ñæ�¨Ã ø“Y¿Õ´øÞãÞàï1Ù^_™åüaJ¾a�ÀaæòºüІ/Š…HÑþÍÌ¥ËÓ”%.ycgMT…*5Õu_ìÕO–ñ èÉ–çY¶Mšø[ ”åy¦.šÎð¾ÖXœV”±ÛXx;Te†à|+“ÂúÞ¹„çoÂÖ>/‘|2>¿.¥ã7d•x¦�a2|F"1Æä¼0²œ¨â°|®tã[‰§:¸WЧ',4qÄJ¯5)×­„N£ùþq[èïÂVéÒtðù§·RНŒ…Ò©…”S¯K©}sÚQ§†�J¬éüŸý0u¸Ï_!Ǽ«�±qÄb³¸Ö®ªâòE†pœ°¹}LSœ«ÒÇBvÂÖźÿÙþÇ[¢Ö?ðœEðâo ßø ›­ÃÞ5ŸMŽOÙ}}\Œø “ýgŸ`ñy•:o‹àùdØ/«¬"�´––.Œcˆ©‹¥M':4�)Êj¥:xêÕ,ëü Ãèë™ñ'ú—Ì05j«,Àøƒ"Ì~·,{—²†>¶_ˆ”ð´°ëJJž&º¯JåJµl·Jë õçì ÿÚðWÂþÑ_¶7üÏ@þ þÈ> ñ„üKà}rãWñß‹<¨Å¥êž0Ò5 k-gÇÿ 5½NëGÓþØøn¨ü]ñ»§h±Ù4¶³xs^ø¾-ñâ¾7 Ë0Ü3Nyvu�¢å›Öpö’Ë%:WÀJ¤\jÔÅ8º´ñ.T0²¦”V*£–ô^ú/arÞ*ÎqœiV–mÃyV!G ÃÆ§±ŽuAVúÞk SSÃÑÁFJ…\¨£‰ÆÂ³”傤£Œú[ᦟÿ§ÿ‚ÖøSÄ?þüÕÿàž?´¦™ k> øâ_ø{Àþñ§§ØBóÙê¾(ðw�/ÓÀu [(!Ô<ð³Ç1ëýŸ†nu+¯øÞÇZÓu_x[çs:>2ðNY–ñn;ˆ3z˜lD ëáq9¦33Yt«É:³l»í0”–&êtýª¡RKRx|DéÂ__“b>�$g9Çeœ)�ÑÆa!V8\v$Ëòg›Ç ,M|‡7Ë],}ya,êÍVt*Œ%‹£O„§Z¬?˜ox7âWŠ¿gߎ>¶ð�Ç?€þ3ºðÄïXËs6‘5ôvðê^ñŸ„®/a¶¾Ô<ñÃ7š_Œ¼ªÝZÛË{¡j°$È.­®BÿHøwÇn:Èa˜FÃæXY¬.m‚„›� W/4kQRnUÅC÷”®ã%[çRxyÍÿx·á¦3Ã(©”Ê¥\^Oާ,nC˜ÔŠRÄàœÜ'CáÒúö¥¨â£8ʆ)S¥ONœTà¡?òk¿ðJïû4ý{ÿV&£^_ÿÉMâwý•4?õ¹âŸü‘¾ ÿÙ‰ÿÕ¥Cò‚¿Q?? Ïø7+IÕ&ý­¾=k±iײhšwì™ã]#PÕÒÖfÓlµ]oâgÂk½M»½T6Ö÷Ú­®�®\éֲȳÞA£êrÛ¤‰crÑþô‰«Ip~QAÔ‚­S‰pÕiÒrJ¤éQÊóhV©_šP¥:ô#RI5 U¦¤ÓœoýQôH¡Z^ gؘҨðô¸;B­u :4ëb3¼Š¥ S¨—$jV†:P“R©¥Õ9µýi×ñÁþ……ü@Ápÿå(¿´÷ýÑ_ýg�„µýçà¿ü›NÿºÇþ¯óSü¹úEÿÉäãû·¿õ•ÈÏ3OþÎ?±w€¾x‡ö–øauûI~Ô|%cñWáÇì¶þ;Öþø à×À[ûÙí|=ñ·ö†ñ/…¡ßêß/­¾ü%ðýΞÞ"Ò-5yüO©ép¥ôþð3Ž2ân+âÊüÀŠ9n+çþßâŠØzX¸áÜ'ìkQÁQ¬¥J^ί>ï·Åb¡QЩ†Ãajâ§õY‡œÀ¼ †ñÅL&'7Åç|Ÿê¯áñ•°Ū”þ±‡ÄfUðîˆ*´=ž.~ÿÕ°X*´V&Ž3�£�¤ÿþÍ^ ý§þi_¿àŸÿ|_§ëÚ�þ|1ý¢¿bù|AwñÄ^?uí?Á>8|ñ^¬#ñ�Œ>^øçR°ð÷Äo øºmľþÒ>':Õ·„ôfþÔæÄqwxqŸàrþ8Ìiñ æîQÂq,ºŽ€«”éâpØHû9F”¥ Ö§'Z¬ðÓxŒ5j’¡WÌ/ð‹ü+™æ¾e¸K�²ÂxW̰Y¥ �ºupxÌ|½¬%^1©KV+BÊqÂc0ôa‰¡˜KõÛâ%‡üþµ¡|ø%ñ÷àF‡ûpþÚ_ôoxûB¼ðï…¼[¤xÀÉ=݆¥ãIm~"ÛÝx_Á~µ×!»ð§�Ñ4iüyñ[´¼¾–ÞÓLÓ¯ßÃ_™Õã|Tâ™å¼'�ÆäYm/iRŒ0¸Êùt0˜rQXÌÛ‚¾"¥jÒpJ„XF¥HÑ¡NIT­/Ù¨ø}áG�ÜO8㼫.âŒâ¿²£ˆž7/ÂæÕ1ù•X¹¼¿"˳+a(áðñU$ñ5#B¬èÒž#Z.T°ðùSþ ÿÕøuñKá'Âßø(Gü_ÃÞ0ø�ð£â�¼5à�Œ_²Æœu{^ðޱãOYø*ÏÆ? ômNëTñ…u� øßUÓôo‰ÿ Ÿ[Ôü†.í|oàü9áí#Q¿ñFAâ/øwÅáÎ;Åbó,¾5áOWZ¦?†¥^Ζg€ÇTæÄâ°Ž2�IШê^”gN�,>.3�ÉÅ^ø{âßSã 08›6–¥\¿G+Áãká¯ù.k–RäÁàqÑœgFž*ŒiZ´©Ö­_��:§É^2ñ7ì!û$ü@Öÿeí[öw·/Åo†÷‰á�Ú»ã]߯ïü*ø[ð÷â\QA7Š>~Ï6~Í©ø¯ÄþšdÒøã¿Ø[ÇãÏ�¼£ËâO‹ÿi/øE4¸4[=GÀž°×¾!øSÆ:n“§Ãã‡Z¯-�®¿w¢ÿÂGâ%”ø¥›ð¦aœpç‰q„±Ùf®/šàèB”shœªÑ¡Ó�,4ç�§õ*Ч…Š«N¶Nž" 3ï²9Êx{‹ü•Xå¹Ö:Ž4ȳ TëÏ!�J°¡ˆÄÎu§_N–WVKûJ…J¸Ù<=\>?V®¢·í_Å/Á¿à—¾8пc~Ìiû\üTµÐ4K�ÚSâ–·áoxÃUørÁ? 1˜ÌøWâ&{J� q^o,ó”G.–"œ*:~Veˆ�*®´0r� ѧ,= .ÃxËÅ96;Œ°|C�,5 έ%,Û‚©˜Æ„¤ñ2ÊòÌ'& ¥,;Œ£*R�ˆ”'C EXÊ‘ú–oŒú;ðGe~f'J†'_"ËsYD±PŠÂG;αΦeF¾.3„ãZ2ÄK ”ñXº˜J�eøgÿý‰¼{ÿÝý¬¦ýŸ|]­êž:øMñ/DÔþ!~Ë?õ«K+-[Ç>Ò.-m¼cðëÆÿÙvzv…'ÅŸ„׺†›»q ÙÙØx¯Âdž|o�áùõMKCÓWðÅ,G:œ=ÄiË<ÃÑ•|1Fµ0Ôíí¡Rœ)¬n5Qû(ÅWÃóÕöq–´ê~ô€ðK ÀÊ—p¥°á¬^"8\Ç/s«ˆþÄÆÖ¿ÕêR«QÔ¬òÜcN”}¼äð¸¿gGÛN8¼=*_Q|"ÿ”<~×ÿöv³ÿþ˜õJúŒÛþNß ÿÙ-žÿéè‘É…ã¿û-¸cÿQ꟔ú‰ø‰öüãIÕ5¯Û¿ö5³ÑôëíRîÚƒà^­5¶Ÿk5äñizį ëºæ£$Vé#¥Ž�¢iº†¯©Ý2ˆltÛ»Û—ŽÞÞYäøö­*<Åó­R øk;¤¥RJukåØŠ)§&“�ZÕ)Ò§çRq„S”’yáu Ø�¸� U+Ný¾¿f�ÜèšO‰­ü5û/ü×çðÞ¿Ú´/C£|høÍ¨Ë¢kV§‹�'VKf°Ô`?ë¬î&�ø«û À:áþ}…�j¸ibxƒ4¡E r× ëd¹55ZŒ¾ÍZN\ôåÒqLÿ>¾”بà|Uá|lðÔ1�Âp¦KŠ–|6*8~#â²Ãb!öèWPtªÇíS”—Sþ �û8Z|wÑ?gø,—ìÃa{âï‚~-øá´w‡tyµK¯…^ðëþ%ͦéñ\E¥h?|C¬xÇáwÆ´¶{-7Á¦ø†âÅ´í?ÅzÆŸù‡YÕo |A̲^$—°¡Œœò¬Ã[HÒ®ªªù~e*µ—Õ+©óʬ¤£õ|bÄÎþͶx¹Ã˜ü(Éø“ƒ¡õ¼N_NæU‚ÃûÕ+á¥Aá³\š4)'�Ã:|‘£:Ÿ[ËÞ•�g{ÿðCŸÙžÛÂ>#ñ‡üËãÆ¬¿ ¿fßÙ“Àÿ•¢ø‹Q_ëšo�|KoțûÁ¾ðmæ½ý© =¦¡â[í;IÓ&¿»ÑüAegúO�o�Ãä¿ê† µN;6xlFcìå«—ЭK‡SqºŽ#^•Ò�ùã…„êÊ1�|<çøïÑÃlËÄëþe‡Ä`ò¼‰c0™Oµ„èË1Íq8zØ S§rÊx\¿ [N¼Ü}œñ•iÑ„§<6.¿.?à§Wú×�ÿn½{öĻֵ|ÿ‚…ü3øeñ‹öKø“¨Y\ipÛü<ðG�4/ ø£ösÕt‹‰§ƒÂ_¾ øšJóÆž·�î®ßÄòx–ú4ÔfÕ ³ò<Åà²|nyÙžywãVGëQ•Øœ<2«iÕQ”jQ§_ëñ„Suðø™TzaŸ/¿ô¦Àf£8b0Ø<Ê®-Ñža*´á:8Џ_ì¹Ô›Œpج)-q±æýQÿ‚&|WÑ?bWÖÿh¿Ú3â/ü*πߴǎ~~Ê¿ |;©ÛHÓü_øß¬xª »oiV­å˜<ðcÃð•IãßÜ´>Ð4Ïj†âöK½.âÌoãö;šO"᜿ <lj(â+c\p�•|FS5<#§IJn¦1ž-Ó·5:m5T¦åËôWË3<’Ÿñžm�§”pv# C-çÇÔ† �ÌhâéÊž:5k8AQË•JØVüµq9§Õé¹Ô¥V0ü­ÿ‚‰þÀž?ÿ‚q~Öÿ¾ÞhzõïìÝñŸÇÞ*ø«û-üSšÆò} öÏⳫx³Å?uÌ|Nøq¯ÜkfËM½½mgÅž“Iñ]¼ T†Ç_8ß <º|�«K‹ÂU¯ŠÉå7k†ÄNXŒV-µÏ‰¡^uqWs©‡«%òádÞ_JO qðÍ¡â.WB¾+Ž¡…Áq iÆue€Åá)à ‚ÇJ1OÙà±XXPÂJVTèâ¨EÎ|øÚq_Ñ—üáæŸÿÄý–|QûJþ×Þ8·ø%©~ÖŸþ|5øQà[Ý´VZ–µ{«hŸ õ¿x~ÊXõˆ5 bçÆZç‰|S‹ | ðŸÃ:Ï‹"Ë8w‡(jÏ'XÚrÄàá*õ1xÜG³–' …öiû\>ž2•Z|ЩWÚ¸þîŒjTý èéÁ˜¯øK:âÞ/ÄÿaÓâ—VŽ1© -[…öÐÁãqÞÖQT1xêÙ„á 5T*Q ¨©Ú®"t©#ÿ<1ñ¿áÇÆ?Œ? ¿j}.ÿFý©|3ñ ÅZ×Ç!ªüoâÿøƒTñEçÆ?ßI ¼~ ðGÅë�FëÆþñ�öUÍ–¨Ú}°·“LžÎÛ÷3¼“2àÌ·/ÊÕ>+&£&i�Œ¿{[”çS(ÊÓ•,Ê£©‹ŒÚå�IÕÃ]J„£柤' q&Mâ.q›gr¯‹Àñ"Xü“3œ?q<aN²¸Ê¥Ù5%K:J\ó¥NŽ2ΨN_Õ'üãMø}áßÙ“Uÿ‚h~Ø5O x«þ uð«ã·‰¾|�®-|[áï�ZÿÃûo‡ž+ñ�Æ©™sàÿ‹V𾝬ü1°Öb²Óõãà}gUÐåŸ[¾½±¹üÆÜ~ˆxª´²,3Åχ²Õ‡Ï³,eR›”1jšU]4áìðqÂÏ'yV¬ð÷q®_ê_£nYšp—áãÄøÕ€§Å™ÃÅp¾Q�œ(Öä©€u\¨Æ¬£SÚæ”p•1Ô°pMG ‡Ž.Êx×ÍüÊ꟱Ïíû>|ºý‚¼wàms]øõà}zßÀž¶Ð4[Ƶøãà�4Ù|9ø¯ðÙ6mÖ<1ãÅgu©ËÿÅ#â;_økÄ«¤êžÔm­ÿqð¿�òœ×‚¨Ë2ÇapXÎÁSÂfѯRT0˜:q¥…Ì[NTq#N3”b’Æ*´cisÿ3ø×áV}‘x�‰†Q–c³,¿Œ³*¸ì†Xj5+º˜ì¬«ãr§(Ũâ0¸©Ö•8Îm¼¾T1ž•½Ÿõ ûY|_„ðK»ÿø"_ÁÏ‹–¶ŸðP?ÚöYø‡ñ‹Lðe†¨þOĈ|;ãÿø³ã/Ák=~Y!µðÑøçá{�ˆ~Ë{—gâ»- ź�ÛZµŽ·3-q†uˆã~*Îø’†_^¾W…• ΄©û£V† "¥€U¥Q¸Ó§€£†¦•L5jq¿²«„åö “’œT)©^ßæ–{ÁüW�ã,W æ^/‰ëæ�IN­\ÓŒ¬åG‡«;{z8þu‰§‰“Q•9º•eZœ¿¥ŸðW�Ú¾oÚ3Æÿ³/ìg§¡üBø&–™§xwâçí7c<ÚŽ³ñGö™ºøugàŸŠ |!©ÎÒøA¼½¥‡ÄÏ]Í}©|@ø‹j–‚ÛC¹¼Ö¿ž<+áXñfœy‚…|Ÿ!Àæøú¹^„^*®1âÁůvž †¯Ч8Å׆ ”¿uVpþµñÇŽeÂ~äžæ5p¼AÅ9žA•ÐÎñµ'9ÇC/XGÂiûõ±¸ÌfkV¥E)G S1­ßP§Sªñwü¡[áý¤#âþ©Zýo ÿ'‹6ÿ²ÿ«™ƒcÿåòû:9§þ³Ñ>ý™f�‹µ¯Æ üø;á鵿kó ¯ï�^=Â^·šÖ<_â�D)‹Kðþ‹é%ÍÄ„Íws-¦“¦A{¬ê:u…×Úq'å\+”âsŒß8jµ8&�lV"IºX\5=êW¬ÓQŠ÷a:µ% TêN?œðg|qŸ`ø ÂËŒÅKš­FšÃàp‘”U|v6­¹hápñ’s“÷ªMÓ¡F51iRŸ÷£û#þÉ? aÿƒvß¾#j—º„–º¯Å‰wÖñÃ≾-†ßÉ“PºTy—Lðö›¾kO øvÖy¬ô›rn5 J÷WÖuà~5ãL×�óyæyŒ•*4Ô©eØ rn† åuN ¥í+T²–'(©×¨—»N”(Ñ¥þ¥øqáÖGá®AO%Ê"ëb+8WͳZ°QÅf˜ÕWZ¢NJŽ’r† Jž“w•Zõ1ŠßG×È P¦‡ÿ!­þšþ•Ã@ÆßÁÚ áÏì×ÿÌøÝñâ¶— \x#Rý®i¿j~$×ííå�áÝÇŒ~+ø¿KÓ> Ù\Ý–ú¤Ö±ë©ÃÙxRûÄO,¥þÙβȼÉp]ZñÆSáNÆÓÃД“Ì#„Êð•jà'ëQW§ÌéRÚx¨aÓº¹þnpçe<#ôŽâ,Ó;£…–]WŽxÃ-­‹ÄÆ2YTñùÞ>�Òœæœh¼5nHׯ½<\S‹NÇÆÿðU?Ø?ưOí­ñi“JÕuÙÃö«ø™ãŽß>!ù7·šEŸŠþ#ê7~+øŸð+^Öå�¢‡ÆžñeƹâXÞÞÞê>*øi©Xjv×—Ú‡‡üSm¤|�€\g„X"�XËûÕ*Q«VÞæûï¥G‡x÷˜a[Ÿ*1�W‚¯‡n |ã%O ‰£8`ç5ËJ–"…oÞc½ŸðNßø7þ AûÝülý«þ Kðâ·íáñ'áw†Zn»¥›ýSÁZ‡ˆÿá Ò>ê:ï„®.mvÏ AâO|`ø�ºŒ–«á‡,Ÿð� 3RÒµm<|OŒ\P¸ßŠ0R–gC&úÖSˆ–?1Äû)cžÓMÕÃІ•(N§9R¯^� S¨ÿIú=ðSðׂsN*âÊÐÉq1×õ­FçÄ6ŸtÍVü.¡âO ü_±Ôáñç†üI:Õlµ“m¹´¸†/ÝüÎ2|eøº4ðøŒš2Âf˜^eí.s�ic¤¥iºY‡4±ç(¥{\:ÿwi/ý"8ˆ2¯slË7•\Vˆ¥~I�å~ÊX téáá–ÅÆô•|©BJ´á)Jpö¹i‹‹—õÇû|.øuñ{ö ñŸüöŸø»{áŸÚ#ö©ýž¾)|vðwÃx­¥þßøðŸÅ:¶‚ÿ í|B^[hañ�ÿ�¬uŸŽÃ;¹WXÔ¼%Šÿµítû >ð¿óo‹ØÜñ†mšd8Y×Àå˜|6Ìðð•L-|l'<o«ãy}¦4ã&êÊXJ|õi´ÿŒ$˸š¯ ãr¼câ5�Žeñ„êâ1XªóJ„°í_ë4ñ|ð«‡ÄAÊ�zU#Z3p—1ýfþÒß4¿ø)—üGÅÿ°/Ã�š_Åßø(üÓÄÿ|e©XG©yÖh/†ßõ)bøOqâ“'ö/Œ4ù¼âïüÔ|K5ú7‡þ*ij¾5}&êÅçºþÍ3‡…ãñÆG–Ï •>%­ŽÊý¥)Ç Z¶½Uj\¼”ç^5a^¶›¾8¥J®šåÿO2NŽ7ÃÚ^q6qOžÇƒhe¹ß±­NxÜ>†Ä`pø¨ÅOÚV§†� ˜l>.ª¶6xZ¯2¬ùÿž?ØöBø“ûsþÐ>ø5áÿ ø¯ÃúV½|xŸ^Ñ/´]kà–‡¤_y4Óüo¦ê6«7‡|m§½½ï‡ô¯ êðÁuâ£mcµm>Ó{öqâg`83ýmÂã(b#‹Ã5•à�H}b¾g*~î­ÍÎÂÕ’úý¯ì)BsNW§ÏþpÿƒL[›üÏÿ‚kxcÅú§íQðçâ熼emð×À?³½Ô´Æ�Z„ïƒþüø~¿Ûž8ÖüK ðÅq¥x‡ÃÐÞøV-!faâ3®�6HßM—Pšëoó¼—-àŒáæ~ÇO5ÀÕÀåøU87�Åâi7†� ZqK ùqÏ“T!AU‹öžÍKø7Á^â<çÄ®Y/Ö05²,ʆgšã�:Š9v],e,L/ JXØóå‘ÂI©bjb] ÇÙ:Ò‡Ï?µßíEÿ ñûe|eý·­¼ Âß|TÒ¼'à�‡¾ XÊkú§Ã†cSÒ|ñâtî¨.~$xÓCº‹S¹Óí¡†×Á¾—CðP¹×'Ðæ×/~CÀþ ÅðæM_<ÇV¯N¿RÃÔ§–Ê*œ(`¨J´°˜ŠñnRxœM:δ#îû T&¥VsTþûé-â>‹¸‡ ÃYf W Â5ñt«g›«S˜âa‡†? †’Q„pX:¸xáêNÓúÖ*ŒªÓ”h›«÷§üËþJ�ì—ÿh÷ý”¿õ×kè¼)ÿ‘gÿÙyÅú‘@ù/ÿäuÁök¸+ÿQq&ü/þ ½ãÛ·âLš—ˆXðoìãà+Ødø¡ñ"ÞÞ8佸E†ê‡¾ šíZ ßëPIÚ."·Ô-¼)¦\Ŭj–³Ïw¡iÞ¾%x�‚à\³–“£ŠÏñ´ßön_)6¡Ü^?{ÑÂÒ’|�r„ñUbèÒ”TkU£‡ƒžf>'g<ÕÖ#¹uX¼ã5„u&”f²¼¾U=Éã«Á§:Š5a�¡%ˆ¯ Jxj�îÂ~ðoßxOá�Ã_ Xx/áÇ€´{}ÁÞÒÕŦ—¦[dî–Y^[‹íFöf–÷SÔ¯g¹¾Ôu ‹›ë뛛˛›™¿…3,Ç›ã±Yžeˆ©‹ÇckJ¾'U®z•%ä’Œ#”)Ó„cN�8Æ�8ÆŒWúu“ånA–`rlŸ K–eØxa°xJ)¨R¥—“”ç9ÉÊ¥Zµ%:µªÎujÎu')=ªâ=  €:�È˦ÿÛçþ�]Pñyÿ ñ—ÁMöѼðÅMJ.ø•ð÷_ðÇÁO]Ÿ+Wð_�Ìl÷Ö~ÔÝ“þ­{ÅÞ—Ä:^�âK)!Ö’òÚ×ÃZ\ØñEÜ3ÿløï�Î1\íòÜExá08ÚU³œJ1Å`%îÂ¥hÃÞ­K‹ö¥FW¤”ž*jøXJ?æçÑ3áüˆ¿UÎp˜Yãó,º¾‡s L#9àsH>z”pòŸ¹‡­˜`^*„qµiJ1ÁRvÆÔŒ¿þ1þÉ?`/Ž?ÿcOŠöú‹êÿ õígWømãmFÜAÆ¿‚^)×µ=WÀ_t©Ó6º…Ö© Ìú'�Îk—о!é>!Ò59#½U/8Ÿ›p•�:4s.uhÕÃÖ¯ƒ¯^¥zèSZÉJu§C5wõˆ{ZŽ/MIý&¸+1ÈxóÄÍb1?ÆŽ"†.|õ!†Ì0ØjX\VYR³ºŒ£O N›q_Tª¨ÑRXJ®?×Gì3ðÃâì7ÿËÕ|qñ_Aø9ûgÁ@î~%hÿ±Ï„¾%jZ~�¤|{×þx¯Qø# Ï¦Ë ±hþ!Ôíü§øGŒ¼I…â®0•ªœ+á²Lòÿ­Ð‡´–.xyVÅc«ûJjRž ûÈÂZÂ1£ˆÄF^έ×õÑãƒñ¼áô1åZ˜\gfóo¨bj{(`)âá†Àå˜gJ«ŒiãñÖ£:‘÷jNxŒ.QöÔ,ÿ‰o„Úlú‚í<)«i> ð÷Œü¨k>ø›á¿[ÝÚxÛÃÿtRêËâF•ãkMC•·ŠâñzjÓk+¨*]Ís?Ú�v\FOõ?†XŒ›Àü?ý‡háh`©á±Ÿ*­K1¤¿áF8˜­«Ï*µäÚ^ÒaZ R©øÆŒ'á#ÿÁ(¾!üdÒ¼!ûax³ö[Óþ2|4øqw¬Þé¾8ð§Á‹�Š3ëß³�¿ÄèZ9&ƒÀþ(ñ_ÃËø¯OŠ+«�áoˆ´�TÒ¡½šÚÎä/±F'޳¼nEÔÂGBÊÑŠž¾mmc'I«ÂTëÖ£UI·lMzXºÐç¦Ôß÷ç�˜\ûá� å¼ORT±óÁâjåØiÎTó 6E:©åôë)5R5pÔ1Rú¦—áêrV‹‚þBü á߈>#ñü+Ô~xŸÃ¿4O7Ãü¸Ñî“Æ¾ø£¦Ý¦“ªxã@E’÷í‘êXþÉ)EªéW~«dòØÞÁ3ep§eIÃn!¥ˆÃáhSÃ_3§*�„2¼NšúÝ ÜÏ÷Té4çFSåö¸iQ­ËQç�ø}ŸðbøN¾�ÄÖÆ[%­ S©S;Á⪵€ÅaùbýµZéªxˆSçö8Øb0ò|ô¤c?µö�ñÇöGÿ‚'kŸ²_‚üM§|Býµbý•N¿ñá÷‡µki¾3Û~ÉV?4[Ú/‡V:KË«ëÑ|ø[ñK_øá+û}FÎFxum{ÀóM¬i±hçø¯‰3Œ—?ñŸýB·ú³[<ÁÔÆÓÃÆpž# Ñ¥Š®ÛPö8œÒžŠ�&éÔöµ¥MKÚEÌÿG8?‡ø�…|*Ë8WûSþ¹ÐáœÂŽ]W*u)ás:”ñð8d“©íðy%\^*Ñ�ZJŽ5\}”£Lþ6ü)öoZxu|×-|A•…­´ g»þÕ�RX"Ñít{+8Ú[‡»ó­à±³¶„ÊîñÛÅò¿½°˜¼l¿ŽÁ×Ã<²xJxœ>"”¡ "Á{%R�XKÝ…:£i+òÆZ¨¤íþZã°®6Å噆³ªxúØ<^´*TÇ<ÅW•*´jCß«W,EâÒç�J�G'$ßõïûtüø§ÿÿ‚J]~Êžø©¦|Mÿ‚„ÿÁ>µÙ×ãOÆ‚ñ—Ljþ x7Á—>4ðçÀZÌÖúÏŠ"8L],TéÓ¼mN�Y~ò…;)ÐÃW¡îÇÝGú©’dyÆoáuâŒÁÓâ,wO'ͱª)âð³Çà+àiV«iÞ¶"„²ÄÖ»§ŠÆa±VœÓ™ü¸~ÉÿŽc,*2„åG F“æÄfS�£Í—ÓÂßN¼mFÓ•iV¦¥ýÿÁÇÚÍÆ±û1üøð{â{|Fø3û|hø-§ÿÁA¼棫øÿÁqx»áL0þÉŸ~.ê“Ƕ¡àd×äþÚñ·�&¥þ#ñ?‚|G©Cjt9®lÿ‰x7–Ï�rŒïˆ¨R£•b3Úøªî4ãKCVS­‡J2^Ê8L7ƒ«^’mQÂ.i¯g¿úIâWœSð»>á®Ä×Äç¸NÃ`°±�i×Íq8 1§‡Å·(KÛϘå¸L†»Iâ1íÆut_ˆß°÷†>7x¿ö²ø §~Îa×âí¯Ä_ë¾ÔŠK&“¡Ç ÞÇ«k ñ9�“þ(íDµ¿¾ñdnÞ]߇âÔ,ŒsµÒÛÍý½Æ˜¬— ¹å^ iå3˱q0M*•ý¼:40Íßý®­iSޝ†»§;ÅEÉšÞà¸�Ç3C…–}O6Ââ0udèá¾­UVÄbqŠ-?¨ÐìñÑnÓÃ*´­'5 tßðTŸÚ·áWíçÿø…ûJüÐ`Ò>øáÅ¿ì¿eã«{ĺOÚ[TøaãïjMñÎÒH ±µð�£k‡�~ÞË.¯¬x“º\:íæ¡§é×7‡ô¯Ä~�Ü+š`©æSˆ¯*9ng‡ž_„À¸Ëý²X|EŸÚNWäöXyÃÃ4¤êº˜™ÞŒ_éO¥od™•\«‚0¸hâs|—O6Çfjqÿ„øâ°˜Š_ØÊ¾ÓÛb©ÔÁfÅ'AQÁÓj¥ITT>Žÿ‚„ÿÉ®ÿÁ+¿ìÓõïýXš�~‹À?òSx�ÿeMý@�ùŠòFø/ÿdN'ÿV•�dOÙâïí¥ñ“Fø9ð‹KŽKëˆÿµ|Uâ�HK†<ákˆ!ÕhŸþ i«•d°_xׯW6ÑÃâO‰þ2û+cò\³é%�ÇñŽe‘a³n©›`ñ½½˜ÃYkΦ§LhBOõY§Oé*c*u$Ÿ�Áy?dß| ý¾õ¿ÛÂêÿÆŸ³wíãáφRx[â,wVÐ|ñoá·€4ÿÚ|&mf).!²ðçŽ|£é¾<øR³Ï†¥r…zxÊi:øxå9¢ÃÕ¥›aãOšš£Bt)CZšjxjô+IƆR_eÁ~Û|°ý ?९ãMGNµÑ£ºÖ¼?5‰úO¤ࣀÀð•F¾>¦&–i�“Qœ°)S© 4Þ–#*²–žòÂÓ’’äÄÁ¿�ú'ðNe,Ó4ãÌC¯†Êèàëä™tS�8f˜šõhÔÆTkjØLhBw„±µ`á/iƒ©ø™ÿ·ø§oÿ2ý¶5¯Žº¬#ñ¯Åoé?þxÛM’k�x÷ö8ñ6‹ioû2jÿ µÑuO x{Á6©áM}ô™.íl>!iÞ)·½½»Ô&’æn¿£ÕLªŽWŸeê‡RÌ\Æ�xû:òÀ¡…Œ#%û<.%bé׃�èâ*þñ¥Z’8>–TsÌFwÂù³©OÖÊ¥G(­†ŸµÂÃ2©RXœlªNTý®;ð°µ¹q8J¹Máë³úÿƒ|þ$êt/\üdñî‹ðóàgí+ñÁß¾i>.½¸Óî>'~ÓŸðŽøŸ]Ôt¿‡H@‰¥oxy´¯_“¶»„4¹õm:[(þé[(Äc2,.>׈0¸|U\[¢”�ªKÚÒ§Šå¼¹½¤1šÁ¡UjŠ0­NSú¯¢N?ÂåüOŽÅMPáLn+C±-Áb3ØËØW«‚çjžÊ¦ŠšÿxÅO‡¤çSV0þnh¯ÙÇÿðO_Ú[âßì}ñ2-jé<=âßxûà�Ä�íKñãào�¼M©kÞøˆ5«„�5ïéWœþø¯»O&‹ã}2én&¸¶Ô4ûëϱðа‡ G†[£‡Í2Iâ&¨®XK�Åb*bV2 éÔ©Jµj˜|O*~Í,4æï]Ÿ}(¸5ʸÊ\gˆÅdœIK NX—ÍRvg�ÂRÁË/©+5F•|6–/Ï(ûYKJœm…“Ö‡ü#áljdOÙÆ?þ?x§ÃžÒ¿h¿Š?ô¯Ù«À_µ(<7§]üB×­µO‡^ Ö¬®n ½ÕtÍoãN³âË ZŦéoªŸxu|C$º òIoù�ö[žq&_•å4£ŠÅä˜\U ÇN£©V¬á_ê ‘58eÐ¥RµIÅÊ0«Š¯MòJ�[þ×ô^á|ç†x?5ÎóÚÓÀà8“‚Äå9v-ÆŒhÑ¡ ˜oíI{F�*™¼ëÑÃÑ„”%RŽ U{Hb(ÛøèÖ`x“ âÖâG:�ˆúÞK]FQÃÕáöݪhÉ%ªaé,&. ]cèb¥QÎs•ZŸÖïüÖã[ý†|_ûþÐ?á5ÇíéáoÚ3Mý�<)³q£|_›áü~�Ã~$|5 =­å–�¢êÞ*µñG…;�>i5kx£L󬯞ý¿ž¼z¯”c8¾Ùpö¸ü]NŽ}^Šæ¤«*‰a¡UÆé×ÃÑ«J–"£Ò ® )*”ù#ýeô\ÃgÙÔyÕOc•fY½jü-†Ä¾Jï*MãjQSiýWˆ£Z¾ŒUæèc±�‹¥YT—òOqð'âÇì×ãŸ~È<)>…ñ¯à&±gð¿Yдë+¶µñnŸfÇÀ¼AÖ·àïŠ~�Lñ/…5-PÝû�.Kx5M6þÊßúÂn*Àgü–¡‡Åd:^e‡æŒ‚¢©PÅ4Ú塊ÃR�hÔiª«I7ì$ÏåOø5áoó‰Ô§‰Å`¸«0Ågy6-Âu^)æX—_�Œ’“ž'�¯<7±NU¥Aá+É/¬Á?ëûÄ_~1þÉðFOþÁß ~(Åá�ø(÷ísð7ö†ñ×Á„÷ú–¡7‹5ÝWMÐt_|eø]ð™mØÛh>2Ñ~]¶ƒ¦]ǪXYXü^ñ+ø–ÆíŒÒKò‡‰¼EC‹øÇ3Ìòê1–_…§GCJŸ+Äap’T>½ˆ¨£ð×ÄVq£Vª‹ŽXJ2´¢‘ýÕà¿âxÃÜ—&Î+Ê®:¶#2Äá+ÖæX\n>ý—„¤äýü.§ˆ¡AÉO ~&ŒäÏãápÐux>ÏÀÖhë¦ØèÚFж²&©eqdF—6‡}`±‹ˆµë F ´ÝVÊH…äz¼7POÚCŠþÝá\VKˆáœ›‘Jœ2U–ÐX4œ¡B�5Nt«µhƾp�<_7½ð«Îù¹™þkñƈðœeÄ8>'…YñÍñRÌ�Ix‹Ã¯Å8¯õ[m#KÓôM/ÄZx“R×ôi´?æNáÚ|OâÖežð¥i`¸w%ΣšÔÆ(¹S®¥Z>ß…äqQ¥›ÕXÿa r*9dœåý�*ŸÚwŵx/ÀlŸ†8ë Ë‹x�‡'‘ÒËå5ØWxlÇê)Êuò /+úÍHs¼FuÎ+ÛV¥�ð‹þPñû_ÿÙØ~ÏÿúcÕ+öÌÛþNß ÿÙ-žÿéèÍùü˜^;ÿ²Û†?õ©ù‰àÿø£âм;àè:ŸŠ<_âÝgOð÷†¼;¢ÚÉ{ªëZÖ«sžŸ§XZÄ Íqus,q¢Œ(ÎçeEf¤âñxl�Æ×§†ÂahÔ¯‰ÄV’…*4iEÎ¥IÉ裦ßÜ®ô?À`1¹¦7 –åØjØÜ~;K „ÂaàêVÄb+MS¥Jœ#¬¥9É%Ó«i&Ïî;þ �ÿßðÇìðüø£Æ–ú/‰?jßé¡/Œs_í¸¸Ú­<« 5e`*;ÇF“Æâ©¨ýj²öq”ðÔh¹~–“žO$òIï_’½P@~(ÿÁÈ¿ò‚�ÛÿþíWÿ[à]IÔP@P@P@òýP@#Ÿðq�üžgÁ/û3¿†ßúµ>8Wö_ÑßþH¬ÓþÊœoþªrCüïú[ÉÇÉì‰Ëõ{ćÄÿ°Oüöˆý€®µm#À_Øž:øYâKÿíOü+ñ¡¾:!Ö 0Û?ˆ<5©éóèxc_šÚÚÞÒîæ{¥êVÐÀ5Mú{M>âËíxçÃLƒŽ¡J®7Û`sL=?e‡Í0ŠÛÙ^RT14¦œ1XxÊRœbÝ:´äåì«SŒêF›øeã'øcRµ µaó<“WÛâòL{¨¨:ü±ƒÄàëÒj® (B0œâªÑ«ÇÛáêÊ�)S›öÿÿ‚¤~з÷…4¿ƒþ(°ð¯ÂOÙÃGÕ´Íe¾ü2·¿²Ò|ey ^�CÃ|P×onå¹ñ†�á{èlµMÂzu‡…ü&·a§ëšÏ†õ}OHÐ.4’á_xs ÇÐ̳,v#?Äaj*¸j5ðô°™|*ÁóS©W ˜‰â'NIJ1©ˆö «Î„ôKï¸ãé=ÅÜU–br|›-Âp®JT1˜Œ6.¶?5�ÅÆ­éRÁÒÂÓ­ã9ÒÁýiEÚ–&Ÿ¼åàŸÿloŠ|¬|)o ü"øÑðW\ñ-�Ž/>~Ñ ü)ñ§áL>Ò`û>“ãÝ#ÂÞ.´¹]ÅúlB5‡YÐî´én~Ïgý¢—¿a²û?ÝñO‡ü;ŵð¸ìž/ š`”c…Íò¬KÁf4a ûHAVQ© ªu�V•IД¦èJ›œù¿/à�¸»€°¸Ü·)­�Çd™‹œ±ÙwƒŽe“â'Vš£V¤°ò�*´åV’�:ê…zPÄÂ㉅eJŸ'’ü~ø×ñ+ö›øŸañ[ãˆGˆu¿ xlx#áχtí/HðÇÃß„^Y!”ø3áWÃÿ Xé^ðf�s-½´šµÖŸ¦¶¿â'´°>$Öµìí?ì³ÂÞðï âq9†Ìnk‹çXŒß6Äý{1œj5*‘U¹)BÒI:²§J5+4•YÍF)_x³ÅÜwƒÁåY�\¿-ÈðÍár ‡²Ü¢œéE”ÞU­V«£ãBkÎŽ9:éÊsrýmý–¿à»¿´ßì÷ð§LøAãxöƒðÿ„,­-¾ë?î5‹ox\é-çxzÛRÖm%º_é^¹†ÅôHîí,¼Aaoi•¿‰£·ƒN];âx»ÀÞâ<}lÓ/Æ×È1xªŽ®.žK€­VNó­ #©†• ÕåUÓÄ*S›çö*nrŸéô™âÞʰù.k—ax«‚¥8 ¸¬]li‡¡Õ<=L|ic!‰¡F<° «a]ztÒ§õ‰S�8Süïý³ÿm�Úöóø£¥üLøýâ[¨<%k§|4ømá;+½ á�Ã; LƺµÏ†|=y©k×^(ñ P['‰|iâMc\ñ¡+¤é÷º?…¡±ðå—Ñð/…¼?ÀÓž3 *Ù–oV›¥<Ëq•r·=< k“ –^ÒNu«É^¿²n™ò&øÝÅ~&Bž >O�Qª«Ã&ËåVPÄV…ý�lÇUª˜Ú”ný”<>–¢Ã{hª§¢x/þ /ñËÂþð_‡|OàßÙçãn­ð«A›Ãþ#üøðçâ÷ÅO‚Úƒ|?Ã�ø¯HºÖ´Ý/O»H/4Ý3W—\ÓìžÎÊÊ+Q¤ÙÛéѬßÂ~Í3Q(Õ�hË.¥‡qt+*°§7Šsž2£¥KÚâ*{*|¿»¾ÿƒ‹k-á¾™ kÿ ~øûâ¦�`úv‹ñ{ÅgˆašXå¶0\ßkÞðö±¢[^j×Í“êøwZðž�v¶¥$ÒCJ%‹òl×èñÃø¼|±9fsŽÊ°u&ç<½áéã£M6›§…ÄT­F¥*kU^8¹Æêó’V?xÈþ–œU€ÊáƒÎx{,Ï3 4£N–j±u²ÙUq‹J¶; Kˆ£^¬�œÞxJÎÔâåuøkâß‹¿> |lñ?í#㯈þ-ñ?ÇŸxŸNñv­ñNëR6'µÕt)# [xf]4ë_h Š-|áÏ [i:7…íá_ì«8.eº¸¸ýS†8‡xS(¯“åØ8Ö¡Œ‹Že[©âqŸ49,d�8Ó�.INÜ0ðS©ËIJ¥IOðÞ5ñ7‹¸ï>Ãqo˜K‰Ëçäø|¶UpxL™Â¬kFYtUYÖ¥_ÚÂ�IâçZ¦.¤©Òç®ãFŒiý�âïø)¯í7â]ÆèpüøWñƒâ>ŒÞø—ûSüøðÛá¿íUãí*}=4‹ôÖþ7h >&°Õ/ô¨¢°>&ð¯ü#¾*Ó#Š �\Ò/íà»�ä'à—ÊuaN¶‡Ëkb#Š­‘ÐÍêG(©VBS£:SÄ·û°ŸÖ½¬#î¢V>þŸÒKÄHS¡R®…qyÎ <‰q9çÔhTÖ¤iâ!^ž1©/~¥5�ö5'ïT¥&Ýÿ94mJðî™i£h–úf—b�­�ªlŠ?2Gži’^[‹›‰eº»º™¤¹»ºšk«™e¸šYõ<¿/ÀåX,>]–áhà°8Jj– ‡‚§J”.äùb·”ç)T©9^u*Ju*JSœ¤ÿÍslË<Ìqy¶q�Äf9–:«­‹ÆâêJ­zÕ,¢¹¥-¡N…*Tâ£N�S£J¥B?¹ß~|Oý¤à•³¯Áσþ¼ñg޼aÿñíž›§Û)Kk;uø%h÷úÞµ|TÁ¤xFµ_ë½áK[ (¤–F-±ò\Ã;Ëx{Äþ ÍólL0¸,'‡øÔ©-e9<æJ�0øª×­+B�(^S›Iiv¿yʸo9âß8S Èpu1Ù–?ÅlÎ�*PV…8.‹«ˆÄT·- .©^½KB�8¶ÝìŸôÙû~Ä¿ ÿ`�„2|6ðÄ~(ø�â¤Óï¾2|W–÷�5Û8¥i:< Ò6�à­îní´=&9äY®oµ ®õ ëÛ™ÿ—8û�3.;;¹ŠO —á]Jy^[sC BM^u$’öغü±–"³I6£Nš…(B+ûkÂÏ òo 2/ìüXÌÛ©UÎó‰Ã–¦;¾Zt`Ût08g9Ç ‡M´¥*µe:õjMýq_~žP@jhòÑÿì)§ÿé\4þwŸ·§üŸ7íŸÿgaûEêßñ�£œÿ$WÿÙ-Ãÿú©Âä‰òqü@ÿ²ÛŠÿõ{�?Aeø.í/û7|$²ø-âïxö€ð…ôëK‡—¥Õ-|Aá´ƒ ¾Ó.µ[ž?x{÷v–W5�ýœÞž–°ÚXøšÖÒ×M‡OüóŒ<áþ'Ì*æ¸e|‡Ѝêã =<^ VOš¥ªJ¦Tq[n¬©b#Jr÷Ýi)άø}ô•⾠ʨdyž]†âœ³J42÷ŠÅUÀæ8J�-,/סG FŒR�WÂJµ8%J8�ctéþr~ØßµçÇOÛ·ã%‡ÆÚÄ–š¾£ám/RÐ>xöw/Ã_„ú±q Æ·oà \êµÌz߉žÓO>,ñ޽«kž,×âÓtÍ.m^i:6…¦ýx[ÃÜ 9ã0²¯˜æÕiºṞªš�R·=< qPÃB¥—´“•ZòWƒ¯ìÛ�ò~&xÛÅž&S§—ãc†Ê2*5Uxdùsªáˆ­ û*ÙŽ&¬ÝLeJ7~Ê 40Еª,7¶Šª{‚¿à¤_´ƒü9à}7PðßÀ/‰¾3øIá´ð‡Á�>ü5ø¥ñÇà—…íå7VÃo‰.Ñ5WOÑô«ß*óJÓu¤×¬´÷µ³µ¶�4ëK{(óÍü%á\×1Æf”jg/1�Xæ_Ø9�Ô(æ »R®±4'GMƼ—5xR�(V¨åV¬gVR›× ñçŽ2<£’b)pÿàr‰QžN¸£)Y¥|¦Xh¸a¥‚ÄÃ…¬§…‹äÃT¯*õpô”hÑœ(Â4×ÅúÄ/ˆ¾ø±©|{´ø…ãKŸŽš×ŽGĽwã£â ÛψzÏ�áh¼Gâ'u¸óí"·¶ÓôÍ:Õm´MEµµðþ�¦XhV–Út_K“ð_ dy-nÀåt?³1pœqÔ± ëǺ�Tç üÖ¾0ØisèÖÿõ�+ÄÿdžÎuVškïèÚö‹þ›yyk¥ê:ŒZOŠ´mêîÇ1h±5¬V?�ãþ޹|s­—çÙ†)ó< L5mHE»ºt1’­BQ‚ÕA×£ˆ¨•¹çRIÊ_ÐY_Òç‰ðÙlpù¯ å9®g |‘̨ãqu*’JÑ«‰ÀC‰ŒêKIUXlN”¥ÍìéÑ‹Q�á·‰~7üeñ§ÆÝkö“ñÄÿxƒãæ¿â�?ÆWÿ§Ô†Ÿâ›moDx¿áš,Ze�…4o Á½�„¼9á‹-#AðÝŒ o¤éÖÛçi¿\áÞáÎÉ+d8 +`±qœscT15³7RœÞ:N…XºmÂ4£N)ÅÉS¥i9~ž%qwñ(Í3:”3éË(†[*˜<6L©TU©Ç,‚©:”e©T•yÕ«‰«5Z½NH(ýoâ_ø)Ÿí)¬éž-½ðÞ™ð+áGÆ_ˆ–³XüGýª>~Ïÿ ~þÔž<¶¿ÓßHÖŸ\øÃ£xiu{=_[Ò_û>ëÅ>µÐ<]apÜx^ѯ¢Ží~:~ ðs•JT±C†Êëb#‰­‘PÎjÇ(«R 8¹Ñ�*˜‰8Ù(Í⽬U¹jE¤×èTþ’> Æ4kVÂðž3:ÃagƒÃñ>+‡¨Ë?¡F¤d¦©b)×¥„‚›“”鬰œ¯ÏJJRRùköUøóñ3ö,ø…á�‰³¾ºÞ×ü0—ŸeU’ÿEñ�¨L.5�ÆuÔÌT¿a>=ÿÁÁ_µ·Åo†ÿ€þø/á§ìõâŸh£FñŸÅßE­ê?ãß ÙÜj?ïu»él<«7ËÓ4ý_V³ñž±áø{ßjZ^´šV«¤þ=‡ú:dTñÞ×Äž'.Œù£‚Ž C(¦Ÿ³«ŽR©)ZÓ•,¸¿rTåi/è,_Òï‰êåžÃ™.6•7 æ3Æc1XHͦ½­ ±Â”á(ÝJœkf8˜)/ÞF¤[ƒüoýœ¾6|Jý”Ò|ýž›Z±ñ7‰¾~Ì¿ ¼ð+á7Äoé7 w£jÿ´éÖ·Þ=‡G¾Hµ; x‹W½ð`ÖmtÝzãÃwæ�£j:ÉeÞp†ƒÅâgœgqË¢¡—à³ÌÁc²ü"ù£NŽ8z0tc/yP­íh9{Ò§&®}îoô„ãüϘ`0páþ–o'S6Ìxg*–Yšæ5%IÖÄcåŠÄÕX‰ÃÜxªÇ£x´bÚ>]¯ÕOÃé«ãüëâíéûUþÉ:”—þø5àïø'ß쑨ü_ø«ö5–ÏÃZKøw_’ Dk�,õøŒFÖš›þ‘ö8ÍÆ»k>�§KÏó~UÇÙwp·bjû£¨üBñ-î—£\øÓâ]ÇØ5}uôMÃIÓ¼/á­Jðå�ßp„ù7B¾'R9ÖqŠ£S [_xz8ZÊÕp¸\$§Z1�hû˜ŠÕe:•¡ziR¥:”§ùoо;qˆõ0Ø<%)ðïàq±”2ü6.UqxŒu sPÆã±Ð§‡”燗ï0¸z0§GRÕdë×§J¼=¶oø(n•­kñülñïìsû/|Lý±,ô�I‹ö›ñž‹ã­þ,¹ðõµµ–‡ãŒ|/ãO ü1ø·ñC±²Óì´Ox‡K·ÔtûM:ÊÌÅ=”r[MçVðvž˜>âÜ÷…òìÕÿ†Uƒj¾pw‹§†›­B¥ªr©Nœªæ6¥zµ18…m׌¨a�ÞûŸø/ïÂ<bÿ‚wü&½ý³Ç…ÓÂRüe¹Ô|1g·g©i¾5Óm ÓtŸhLz…¦ƒðÏÁ^•µ 7FøU¡éZ¶±¥Cà»×Ö ×b×¼OªxÖ÷Å^%ñwŠõÝoöðÆrÆpÝL2Í(f±�öÆ'¶:¤,é4éµ,40³^Ó Uðµ[­ ²¯)U—ó÷xÓÆ|SÆ9wÒż“‘ÊK‡ðx’ž,¥Qµ^2U“†2®6›öY•JÔ•µÿ ¿ƒ5ý.ãX¹¹½Õ<7©=ÍПåâ N–®K„ãž%Ãp½zŽur4éM:s›�J1ÄóFœiTm9Sx)SœÓ�Zug+Ÿsÿ ØêE�ð˃qœk†£PâiF½6ªÓ„aGSÉ:Ó­IEÆc Ô ãJ…Z0�Ÿ„þÅ¿µïÆØcãN£ñÇáOˆ¯5ÿxËY×µ¿Œ)ñQÕ8j-Õ[\ñn­ñ;Sžõ5�wĺ޸í®ÂQöèu‹ Yc{9ãÓüí6¬Çx_Â8ΧÂpÀ¼.„Þ' Š£$ó 8ùEFx÷ˆ©ºØŠÑJÕU*U(¨ÑŒ)Ó¥ARø<³Æ¾=ËøÞ¯ÔÌÖ;2ÅSXt{m7O†Ûöjžð•N§Â(åÔg,E,Lg˜Ã0’jy—Ö�6¥‹š|’s§*2 £…t~«Q�ó­8ò�Vãõ™BY½zqÂVÁΜÞQS*ƒNžNðJªqÀS’ö�TêÃS–5b>»R¦"^µñö¿ÓGÂ| ý”¿gÿ†?±_�¾.h·>øÛ¬ü$Õüâ�Š~=ðN ]µ¯…~ø™ñÅ>$Ö~|ñä¶Öü ðæßD’çJµ´Ð­uë-9´û�”‡ƒPÅ,¿ÄaÄöC•ÍK’W’ÃÑ„`œ)Ó­^ªN¤aO÷1•8P«J‹•,=J•—ÝTúDTÁ<×1á_øW…ø£;§(æ|I†„±xš“©%Rµl>¥ TéN­Uíç Õ14kb+âébjAIüA§éö:M…–—¦Z[Øiºm¥½�…�¤I­��¤Iµ­´1…Ž( …(£@B€¯Ù°øzL= .�<> J� = 0TéQ£J �*Tá£S„cE$£’?�±x¼V?‰Çcq±XÌez¸¬V+RUkâ15êJ­jõªM¹T«V¤¥9ÎMÊR“mÝŸ¼¿?fÏ‹?µ—ÿø$GÁOƒ>:Eû)ø†yî.í´/ hŸîƯâÏjkˤøsEŠxä½»1Mq<òÚiz]¦¡¬ê:n�wø¾IÄYW f+ç9½a„ÃñEÆ1JU±5å—¯e…ÃSm{\Eg¡¨Æ*ujJiÔ©è¾$áï�ò¯ø{‡ð¿YÇbø+)JMà ƒÃC5—·Çck(ËØa0êIÔŸ,§)Jh®"­*Sþ›ÿcÿÙá7ì;ðfÃáÂÈ!Õ5ýJ ÿ‹¦´H5ï‰þ/·¶1Ü];ïš];Âzd³]ÛøSÃQ\Ëi¤ØM#<º†©}¬kzÏòßñ®kÆùÅLÇ9SÂÒ•Jyf]·C…r¼a•LED£,V%ÅN½D¬¡FhÒþÝðÛÃŒ“Ã^£”etã[Z4ªç9¼é¨âs\taiU–²•,%)JqÀàÔå 5);Ê®"®#[ézøÓô0 € þ ?à¸ò”_Ú{þè¯þ³ÇÂZþóð_þM§ ÿÝcÿWù©þ\ý"ÿäòq�ýÛßúÊäg§~Æ_ðX+¿‚ÿ®ÿeÚ»àO…?kÿÙ©¬ÿ³´Oøê= S»Ð4ˆ® ¿´ð­þ•ã Äþñ·ƒ,/­–}C×´ûk¿Ë* ?Ym+MÒ´;_ �¼ÀñNa<÷%Ǭ�9«%S�TÁckÇU‰—²œ+a1r|®­zJ¬j8)ʇ·�JÒú >‘YŸeTøgˆ²Éq/QŒ¨àšÄB–c—a§¤°qöôêPÇàbœÕ-wBtUGN¯«B–3ÿÿ‚¡øëöíð7†?g? |4ð·ìçûx7PÐ5H>ø*én¥ñõÿ„.¡¾ðu¿�µ-3Jð¾�€<)©ZXkÞøSáï ZhPx›NÓµŸë^+:G‡í4_;„<£–æÐÏx³5\CŽ¥UbiáTkK ,\eÏN7‰›¯�”d”ãJ¥:TÜÕë{x7Lõ¸ÿé/ˆÎ2)ðÇdrá<²µƒ­�u0ñÆÇ(:sÁeØL8ár¸ÎTå^•jõU9[ õZ‰Uø�ðzMY¢ŸUðׄ>(|9ñ‡üVß 5ÛÛk;¯ü6Õ®5kiega,piÖ¶ö±}‡øa�ͳ¨ñ6K›æ+Äj¶?+P•,W4U9ÔÄa¥*\ÕgI{:’…jp¬¬ñëMsŸð‡�YžCÃ’àÞ"Èrž8áDÔ°ù^vêB¶ ’n­:XLdc[’…*ÏÚÒ…\=Z˜y^8ZØzo�ð_�Ÿ´ÄÿÚ?â�þ%øòÿBðõ¯ÁÍo ~Ï ¾hKðÿá'ìíá{«‹;ÍFÏáG…l¯o¯ôÿx‡PÓí5Oø÷Ä÷ˆ|s¯^Amk&¿m iÚ>‡¦ožå9ŒÅçÜV/‰3ü|jÛfüµ%Ɉ‚§ˆ… ;u#IW¦½�IT©^«¢ÞU� Jœ¹¸çÆlÿ‹²ìå¸p®W:0YCÏF ¦£«„©‰ÅER�iaª¿mFia¨,JŽ*TeŠŒ+G÷ á¿üWÁ¾.ø_àï~ÝŸ±¿ÃÚÓÆÿ .-5‡µý;Á7— â; U´´ñ&£¤xÛÁ¾*³ð·� q'Û¼oàÃk5é‘™9×µ««]>ûÇßn´›‹�Úø¶óLÐôß øfëQÑ|áoŸøÎûÅ__áç„Yob%šã1k8ÎåNt©Wt.�UËUaiNujJ½H¹Sž*sŒ�J”)SŒêûOÏüZñó8ñ# �/À>á¸V§^¶bž#™Õ¡.jZ¡J8j3Q­KNœáð…j•ëJ�eÕ·íñáßK øßö�ý�?gÚgöƒðg‡´ï øgö�ø„¿|=ãiº ½½Ÿ†,þ?éŸüaá=#öˆ²ðÕ•ºiúJ|AGÔ#²2¬º¤—Wz…Ýé‰ð‹…̱™—q.qÁÏ1¿×pyo-\ ù¹›öZèÎnT£í*G Í(ácB F/ãæ+“åù?ðoø…§•幆oÍC3§Ëìâ¾³‰TqQÅ9Bœa^^ÊŒñŠ0–:Xš‘”çòŸŠhÿŽþ8ý¥mkïüGÔfý 4Eðî�à?h:†4O„ž ðeì×þ ø]ð‡ÁÚ\#Að7à Mqpl¼/oôšô÷WÚ§Žu?kÚ¦««ß{¼5á� pî1ÂJ…Lã�Q©C8Ì3Y*ø¬uÒç«BñQT(ʯjÓª©Ö­^µjTªCæ8ÇÆŽ4âìÓ'ÇÇK‡ðœ9ˆ£Šáì§#‹Ã`rÌF>Ά'–No‰…ì«ßN„ªÐÃá¨P¯^•OÞýþ ñðÓ\Ó¼ñ;ã¯ìðŸâ·ímðÃEŸHð'ÆHæðž—%›Híuö�ÄZÿÃïxïá…­åó �SHðÆ«¬YÜ^ ïíZÈ\Çagù&eô}ÇÑÆâ qGÔò¼j•,FLqÂͧ<5J¸I{<Æ•Òjéá“J1Ÿ<¢êË÷œŸé]–b2ì"ã þÐβÙG…ÆeÓÁÏ SN.4ñ”¨ãàëeùdâêaªã%ç*\�š£ߎµçí ûCþÕs~Ùß|u-ŸÇ?ûÇáÕï‚VÿÃÞø3á_ jrë>ð‡ÂÍ:ëSÕõ K¶Öç¸ñ·}{«jZ¿Š¼Oyw«kW’Àºf›¥þ£Á^pÿå˜ìXC9ÅæØg„ͱ˜ºŒ18Y_›CåUa°’mJ¥5V¥JÕ# •jKÙP�/ÄüFñ¿Šøû:Ës 5'ÃØ ‡~E—`13”ð˜èròf8œZ…ŒÇÁE•WF•,=)Õ¥BŒ=¾&Uþ•›þ #¦Øx“^øëàÏØëöYðwí�âk‡Õµ�ÚzÓÃ^+ÔmŸÆóBÉsñŽÓö½ñWü(Ø>8\^·ü$.<'x/ÖÖÒÔ8o†²ŽÊée.êøZr•J’œ½¦#ˆšŠ©‰ÅV²ukÔPŠr´aB©B�téÇñN0ã,ÿŽóºùÿã>·Ž«Ñ¥GÙapXJrœ¨à°Tj†“œåóJu*N¥zõ*â*Õ«?ן�:>­â/ø$íUáýL¿ÖµÝwöÂýœt}FÒ­'¿Õ5m[SÓ/ì´í3M°µŽ[›ÛûûÉáµ³´·ŠIîn%ŽcyTü>yZ–ÅnÄW© 4(p—V­Z¬£ T©R©Ô©Rrj0„!)ÊMF1M¶’?Jáªñ^q® F®#‰ãΡ‡ÃÑ„ªÖ¯^µ)Ó¥F•8':•jÔ”aNNSœ”b›iÐ/ü¿þ �£þÄž¶ø½ñ‹JÒu¯ÚÓÅúsc-oªX|ð¾«gIá­áLÖSøûS·–hü[âK–;kYφt+ƒ¤¦©©ø·ùóÅjñv*y6KZ­ÂÔ\ÍsSžqˆ§6Ö&´]¦°tÚ‹Âa¦“r_Z¯jèÓÃXøà•ÁCˆ¸�F¿ci>H·Ôø{ Z <Kšœ³±rŽ?MµÉà°³t"¶7õ©™�™Ý™�˜³3ÌÌÇ,ÌÇ$±$’IÉ<šüPþ�€ ( € üQÿƒ‘å·ÿýÚ¯þ¶Àºþ“¨ € ( € ( € (åú( € øöµýž?e_Ú«â¦�mâŸØïZý¬¿h?ü6ðÿ†o�ñ¿Æ_ <-ðóáý¶µ¬j¾_‰$Òüqá�hkzŸˆ¼K¨xkI°Ð|_ñÄP‹ûÛm  èwš¾‹ö|;â𦠮]�fÿPÁÖÅOV�Ô2ÌW6&¥*'WÚcpXšªô°Ôcɪk“™AJSrüï‹|(à:̨füU�jf| <ºŽ#ûS:Àò`¨×ÄâiÑöYvcƒ¡.ZøÌDý¤éJ«öœ²›„!ü{/ü»ÁK$‹ü—á,‘+¸ŠGÿ‚¦üx‰¤Œ1íðT‚6eÃ>ÂJïldûßñ<óGüF�ÿè¤ÿÌ>AÿΠÿ‰tðoþˆïüØx«ÿŸ�ÿ¯ðwý!‹áþ-CãÇÿ0ôÄhñ/þŠOüÃäüêø—OÿèŽÿÍ‡Š¿ùøðêÿÒ¾ÿâÔ><óGüF�ÿè¤ÿÌ>AÿΠÿ‰tðoþˆïüØx«ÿŸ�ÿ¯ðwý!‹áþ-CãÇÿ0ôÄhñ/þŠOüÃäüêø—OÿèŽÿÍ‡Š¿ùøðêÿÒ¾ÿâÔ><óGüF�ÿè¤ÿÌ>AÿΠÿ‰tðoþˆïüØx«ÿŸ�ÿ¯ðwý!‹áþ-CãÇÿ0ôÄhñ/þŠOüÃäüêø—OÿèŽÿÍ‡Š¿ùøðêÿÒ¾ÿâÔ><óGüF�ÿè¤ÿÌ>AÿΠÿ‰tðoþˆïüØx«ÿŸ�ÿ¯ðwý!‹áþ-CãÇÿ0ôÄhñ/þŠOüÃäüêø—OÿèŽÿÍ‡Š¿ùøðêÿÒ¾ÿâÔ><óGüF�ÿè¤ÿÌ>AÿΠÿ‰tðoþˆïüØx«ÿŸ�ÿ¯ðwý!‹áþ-CãÇÿ0ôÄhñ/þŠOüÃäüêø—OÿèŽÿÍ‡Š¿ùøðêÿÒ¾ÿâÔ><óGüF�ÿè¤ÿÌ>AÿΠÿ‰tðoþˆïüØx«ÿŸ‡ß³ý´±WÃk/…w¿±ÜŸ²OÂøÀÞIâÿ |}—ö‰øu£x×ÅööZcYxÏÅþ,¹Ò~ ø"?\èú…£ë7~ŸÀë2éú%æ» kúæ‡c¯|Wq&uÅ8å™g¸ß¯cU xe[êø\/î(ʤ©ÃÙ`èaè¾YU¨ùÝ>wÍg&’Kô~àþàŒ±äü1—feÒÅVƱ˜f˜ì^c�Änñ%o�ÇW©‰ÅVöT3ŠT){Zõg?gF•:Pæå§A(¯8ÿ‡Wø;þ�Åð�ÿ¡ñãÿ˜zêÿˆÑâ_ýŸù‡È?ùÔpÿĺx7ÿDwþlJq…8sÔœ¥ÉN„ohÅ+#ö< –à°™v —°Áàp¸|�=JžË …£ = n¥YN­OgFœ!ÏVs©%Îr•ÛöZç:‚€ (  �Q‡IÕí5 „–H`3ïXB™–ÚhÐîŠHi ºð9 æKXÿ‚MÿÁ?¤óî¾xþ »û@ø~ßQ»Ò�Œþ鿳Ôþ ½¼Óîo,µð÷‰¾!ø+áæ›ã6ÊúÆ{uïËâ ï­íµIäŠàCû×üLGÿЯ…¿ð‹6ÿçÙü¹ÿ“áÇý¸ÛÿYÿCfü:öKÿ£Iÿ‚Úà'ìQÿËŠ?âb8×þ…|-ÿ„Y·ÿ>Ãþ%'Ã�úq·þ²/þ†Ãþ?û%ÿѤÿÁm?ðö(ÿåÅñ1kÿB¾ÿÂ,ÛÿŸaÿ“áÇý¸ÛÿYÿCaÿŸý’ÿèÒà¶Ÿø ûòâ�ø˜Ž5ÿ¡_ ámÿϰÿ‰Iðãþ‡\mÿ‡,‹ÿ¡°ÿ‡OþÉôi?ð[OüýŠ?ùqGüLGÿЯ…¿ð‹6ÿçØĤøqÿC®6ÿÖEÿÐØçÿd¿ú4Ÿø-§þ~Åü¸£þ&#�èWÂßøE›óì?âR|8ÿ¡×áË"ÿèl?áÓÿ²_ýOüÓÿ?b�þ\QÿÆ¿ô+áoü"Í¿ùöñ)>Ðë�¿ðå‘ô6ðéÿÙ/þ�'þ iÿ€Ÿ±Gÿ.(ÿ‰ˆã_úð·þfßüûø”Ÿ?èuÆßørÈ¿úøtÿì—ÿF“ÿ´ÿÀOØ£ÿ—ÄÄq¯ý ø[ÿ³oþ}‡üJO‡ô:ãoü9d_ý ‡ü:öKÿ£Iÿ‚Úà'ìQÿËŠ?âb8×þ…|-ÿ„Y·ÿ>Ãþ%'Ã�úq·þ²/þ†Ãþ?û%ÿѤÿÁm?ðö(ÿåÅñ1kÿB¾ÿÂ,ÛÿŸaÿ“áÇý¸ÛÿYÿCaÿŸý’ÿèÒà¶Ÿø ûòâ�ø˜Ž5ÿ¡_ ámÿϰÿ‰Iðãþ‡\mÿ‡,‹ÿ¡²{oø$×ì“=Ä?ì£ÿ®µI¥Ž7¹¹´ý‹~Ïn®ÁZiþÏ©O?•;äò`š] ùq;aIÿÆ¿ô+áoü"Í¿ùöñ)>Ðë�¿ðå‘ô6~õþÊëðSÁŸ¼+ð‡àÞ›ã½+Pø)á=/ágˆ­¾5øbÛÃ|?£<·)Ò<=ã{1 øzTÓ5Õ®5�/QѬÂ>%…Ρáë½JÚ9®äüƒ>â ȳ,~e�téO1ÆO[ …u¡‚†&táJU(ЫZ¼¢Ý:q�4êTŸ*·=´?~á~ʸK'Êò|¶5kSÊrèex|v5aêfU0tëT¯Uñ40øhÊ*­YÏ’�*T¹Ÿ7³æÔú ¼CéB€ ( ÆÛ›öý‰hïÚ_âgÅX~ÞŸ~7x£Nð^«ã¯‡Ÿ²îŸð»Xм!g£xGð…×SÕ!Ñ<me¡x£â:xƒY–[�cKңЦ…­ÿ[á�¸£…2<A—`2Ø<Ö}�\n0©‰—Ö±˜ŒmOk:¦“µ\LãZ0µ5.i'9~ ÆŸG~ ã®&̸«7Í8§˜fŸSúÅ»”ÑÁCê9~.¥ìiârLexóPÁÒ�N|EKÕ”åH8Â?çÿd¿ú4Ÿø-§þ~Åü¸¯þ&#�èWÂßøE›óìùoø”Ÿ?èuÆßørÈ¿úøtÿì—ÿF“ÿ´ÿÀOØ£ÿ—ÄÄq¯ý ø[ÿ³oþ}‡üJO‡ô:ãoü9d_ý ‡ü:öKÿ£Iÿ‚Úà'ìQÿËŠ?âb8×þ…|-ÿ„Y·ÿ>Ãþ%'Ã�úq·þ²/þ†Ãþ?û%ÿѤÿÁm?ðö(ÿåÅñ1kÿB¾ÿÂ,ÛÿŸaÿ“áÇý¸ÛÿYÿCaÿŸý’ÿèÒà¶Ÿø ûòâ�ø˜Ž5ÿ¡_ ámÿϰÿ‰Iðãþ‡\mÿ‡,‹ÿ¡°ÿ‡OþÉôi?ð[OüýŠ?ùqGüLGÿЯ…¿ð‹6ÿçØĤøqÿC®6ÿÖEÿÐØçÿd¿ú4Ÿø-§þ~Åü¸£þ&#�èWÂßøE›óì?âR|8ÿ¡×áË"ÿèl?áÓÿ²_ýOüÓÿ?b�þ\QÿÆ¿ô+áoü"Í¿ùöñ)>Ðë�¿ðå‘ô6ðéÿÙ/þ�'þ iÿ€Ÿ±Gÿ.(ÿ‰ˆã_úð·þfßüûø”Ÿ?èuÆßørÈ¿úøtÿì—ÿF“ÿ´ÿÀOØ£ÿ—ÄÄq¯ý ø[ÿ³oþ}‡üJO‡ô:ãoü9d_ý ‡ü:öKÿ£Iÿ‚Úà'ìQÿËŠ?âb8×þ…|-ÿ„Y·ÿ>Ãþ%'Ã�úq·þ²/þ†Ãþ?û%ÿѤÿÁm?ðö(ÿåÅñ1kÿB¾ÿÂ,ÛÿŸaÿ“áÇý¸ÛÿYÿCgêÏìðsöaý’ô�oà÷‚| ûOø+Æ¿üIeñSþý´|)àX5·Ö|¡.•q¬|2×ü  ÃàgWðÖ›­»êÚn‹¯ë>)Ð’èê—pYiÇ=Ççücâ{Ƹ¬6/2§�ÁTÃ`ë`9r˜c0Ôëá«Õ�j”ñ �ÅÊ¢”áÅJ0j+š «Ÿªø}á? xq‚Æ`rй–eK˜áóN|ö¦_Œ«†Æa¨OF®árì )J4êNÓp�X¹7 ‘NÇèô’I4�,®ÒI#3É#±gwc–fc’X“’O$ן§  € ( € üQÿƒ‘å·ÿýÚ¯þ¶Àºþ“¨ € ( € ( € (åú( € ñø'¶±uâ +ö¸Ö5 I©?í¿ñÃEº¼f’Iï-<¥xÁ>#1?Ùžðæ…¡Ú¢íŽ .ÒÑV1@¡P@P@P@|éû`Aisû&~ÓðßÙÁ¨Y¿ìóñŸíW*Z ˜“áω¡”+íÆä+"·u-ö³âO…µí^öwi&¼Ôõ�hú…ýÔÒ9/$·wË#±,Î嘒Mz½P@xÏí®êžýž¾&Öc»÷º( € ò¿ø&~¥‰¿c�†ÿ'²‚ßÄ_5ÿŠŸ|i|‹ º×<]â_ŠÞ3›TÕu ˜ ·k©pÚišzÊ…t½MÒ4/+LÒlmáûÒ€ ( € ( € ( ƒ?ॺ²øWöBñÇÄ{(.ê¿ü?ãûOÉðïá µO7„~ h0i?ðŽÞGmqáCrº½Ü×ÓiÚh°Á'¿à±¾ÿ‚ŽþÇ¿¿kÿ‹ß |1ûx[à�Çïü ñ…—ÄOŽZGŠ<7¤ÿÂ'ào…~/ŸÅ>"ø�â/|!Ò¼0³_|M_Ë£ê:k­¥Ö޳¶±4º˜°±ýƒö¹ý”n¾ ê¿´�·í;û=\þÎúÄ6šßǸ>4ü7›à¾�usªéº½¶«ñJ?·�ôû‰õÍgGÑ¡†ï]†Iu]WMÓ‘ZîúÖ@4ü)ûL~Ï_|[ãχ? ~;üø‘ñ?á–�.£ã߆þ øµàOxÓÁ0©Å/�¼9¢kz–·àûI®^c{¯i¶pG$É�ÌB°åF›ÿ�ÖSIÿ‚ZÍâÙÿáV£«ÁI~>üPøusðOöÉðíðÓàèøw¯jšL'ð÷Ɔ_¯¼ñ½õK{¤Ö4ãÁ-áqõ/ j:µÞ©¢Þ’ú§íGû2Íñ}ÿg¸¿h¯�2ü}�y�ñü]ø~ÿÐGfu ü4_/—` óçElÁ¹lB7Ð�íñÓÀß³À_Œ¿´gÄÆÕá÷À߆~4ø©ãÐì—QÖçðÿ�¼?âJÏE°’{X¯u‹ë{³Òíg»´·žþ{xî.íai.#übø%ÿ‹ý±>$7ì¯ñCÆŸðGÏ�^ý�kí{Àö þ?ü*øÝà¯ÚGÆþðÇÄý?ûkÀ?~,þÏŸ |Þ-ø}ðþ÷ÃψüOâ¯ßÛø7HóÓUkGNѵ0¤¾Á^>x—ö–ý¿¾|{¿øOû*øgö"øÁðwàî�ñsâ÷íàÿh_øq x†öHb¸ŽÓCÖ|c®hÚv­u%¼ÐΖö7´2Å*¡Iˆ^/ý¥¿g/‡Ö>Ôü{ñÿàŸ‚4ß‹z–£ð·PñÅ_øjÇâVŸ£è+â�^ûÀzνeoã+=+à ¾#Ô®|;&£ Ž‚Ë¬]¤ý•ÿäØgû ß?õ_xz€=æ€?“��¿µWüïþ 1ñwö´ñçì!ûZ|!ÿ‚}~ųWÇ~Ο þÙÿµìgûþÐ?¿à¸VŸ ¾¿ìÙã«ÿè´Â]CIÕü;ûLøêþßFðW‹¼;ð»Â÷º�ˆ¼1ãoø‚âÇ—Ú'…®u5Ô´»ö𿆠¶ÖM°—ìÁÿÀý—ÿi�ß ÿf�üý±?d¯Šß|'ãÙóLý±¾ƒzWÇÿi¶j÷7¿ u»?x¾ÃVs£[OªÚÛk2hÖè�XÇq¨ÜÚY\|ãâïø9‹öðv�ñÛÅWŸn-gÃ_³íâ_ÙÃö�ñ„þxwÅøEªè>"Ó¼!¥|Kñ׋4oŠ^Ð>xûÅwš‡‡>=öµÄOjÞ×­ãøwl!°}D鿃ð\/ØÏã—ísðËöBðÆ�ûCx{Yøùáø»öhøßñ àÞ¡àÙãö›Ñüa¨êzåÏÀïëz´>!ñU’XhºÕΙ¯ßø/Dð·ˆ#Ó“þý{TmoÃ+®|õ©ÿÁȲ¶‡ûLø�@ýš¿oßè߱߯?|"ý¤5_‡Ÿ³÷…|W¢|*¶ð&ª4KÏŠž'ñ5�Å¡ák†ZÖ¡o¯.‡,úÜ~=k ø—XÖ<£è¶6ú…àÚÁ[¿e [ö€ý€g߈¿uø)'Âÿ|^ý�~$øK@ðãü1ƒÁÞ ð.¥ñQ“â æ¿ã ÆÞÕ®ôm.æÊÓGÓü ¯ÞÙë é> �C𠯶ùëöšÿ‚Üü)øMeÿDðGÃO�?´wÄ�ŒÿðL¿‡žñÄ{]Á>Ô|ª]üQð^¥âo x³H½‹â„zôß ¼ ªë¿5ÝsÃþ¿ðÏ…¬5}GAÒŒš°éìQÿ#ø%ûoøŸã/à xãŸÀ_�³í߆cøÁû8þÓßàø]ñ«ÁšO�´çÕ|â©ü?aâhZ·…|QaÜizÆ�âmV4‰¬¥Ôc°‹WÑdÔ€?A¨óþ Eÿ Ø×þÏãö}ÿÓ�¨è ( € øwþ ?ÿ&oñSþÃõvü9 Ø*(ð7þ ûÿ@ý¨¿à—¿¿gþÉÿ >|Wø‰ñ·ö…µø;7„¾*xcÇ~+‹Pµ½ð_‰5û?é¾ø�ðÿUoêZÆ‘c¦éë5Þ±ÏÚšÒßGžò{vPgöšÿ‚×jv_°çüóöÖý�tO†ž'ðçíçûmþÌß³_Ž4_‰Ö>#ñŸ|;ñ[Kø›Å�é­áø)¬þ)|9ñ§€'ðœ:®§&·á¥¸°Ôî$ðæ­ky§ÜB÷¯íCÿyÿ‚q~Æ_¿áJ~Ñÿµ…|ñJ #L×õ¿ØxWâGÄ ÿhzÓÚ®“¬|G¸øià¿éß ´ÍF;û «Kïˆ7¾¶›OÔ4ýI%6Ö·3{F¹ûy~É>øÝû3~η¿´{¿‹_¶?„|EãïÙŸDðöƒãh|áo ÜøßXñ.‰ñÂÞÖ~iúBøRÒmoN»ñ‹4d×lüŸì/í)nm£˜æŸÚOþ ûþΞý·†§ñ?QñÄ¿Ø+Ã>¿øáðãKøañŽêïCñWÄýçQø;áq¯Ùü=¸ðÞ©�µ²Ó¦ñ‡µ}_Ã~ Žíµ/êÞÓmnîàù÷öIÿ‚ùþÄ_?c/Ù«öœøÿñOIø¯üqø•áÙÛ]Ñ.>üs ðßí3âØø¤ü9´ñv©ðäiÒxb×EÔ¬ïåø­{¨§Â»X оñÌéú‚Z€}3­Áf?à™^ý™|ûaëßµ�ƒ´ŸÙëâW‹¼SàO‡3½ð¿Ä¨u¯ˆ>*ðN·wáßi~øh|ÿ OÅ£EÕ¬¦†îû@ðV¡§ilu(nåÓ5=:òì°ø[ÿYÿ‚}|lý›¾2~Öß ÿiO ø×àGìó¤êÚçÆÿé>ø‚ÿÁmÿà–¾/|øðÿöÃð»ñKãæ�ácá7‡ßÃ_´{7��á?é7Ðiz¯Äø¯T·Ñ<'á+MVæÞò "ÚêúáµwYkEôO éšÖ¯o¥ê÷60éw€Ž3þÞðq·Ã_†þ ý«~)Á6dω¿|A7„5¯~Ë¿³¯‰þ4ë_·W„<ãí: ieÓ¯µOø'Ä^)Ò-µ[Iu}Ã>ÕuKËëZV�ca¬Þè௵'üGöý‰4o†:‡íkñÎÏàf»ñwöž(ðoÃ_ø?Çž(ø¿6•sm÷jŸ ~øcÇ:ÒbÒ®}+V¾½Ñ#Ò¬µ› KK:ƒÝØ\ÇÇü‡þ ç¢þÇW?·ì¿´×…5oÙÃ\Ò¼1ª|]ð�‡> xæÄÚÖµ¦øzÇÃzáâ6…âí]gI‚÷EÕü!e©éPjV7ú¥­žŸu Ó€g|)ÿ‚¼Á7¾8ü|ñGìÁðŸö«ð7�¾8øKDñOˆ¯|¥hÞ:Hµ½'ÁÚ…ï‹fðŠï|)i࿊:–‘¬^ê:oÃox¯S†ËFÖnþÆmô�FK`€ÿbÏø8³ö9ý©<]û{�x†çá×Ã?ÙQñÏŽ<#âãð«ãýõß�?f_†:O† ñ§ÆOYÿ²�øgX‹ÅZܰéÿ . ³ø¢úÛ\Ià—žÓUk`¿>ÿÁ^à›Ÿ|7ñ{Æ_ kkøð¯á—Æ�Œ~/Õôßø/Âß~|bÐÿá"øw©xƒÄ>8ðLJ4ˆ5½sO)Ï‚a¼ŸÇ×%ƒÃ&ðæ�âYáÒd©û&Áaà›?·Ä™þþ̵?„þ"|PM"óÄ>Ô|+ñ+á·ˆ|G¢iÉ,Ú†«à»о ðCxîÂÆÖ ‹ëËŸv+m6ÚçR™’ÂÚ{ˆÀ?<{ÿúý±|-ÿëÿ‚§þ×:Ã_Ù¢o‰°÷ügQý�þè—žø¥'‚?xkáŽþ+øÃÆú�4o üDø�ã+íû4]jþ%‡À ¼/ãÿé~ ²¹ƒS„xŸYÓ ÐÔéz”-«Ë6—¨6¼}ÿHý€þ|!ýœþ?xÇö—ðUŸÁOÚËǺÀ4�7Æ*ðW�|oâG¿†ÃG¾×|'á½nËÀÑZ\i:µ§ˆõˆRxSCð…Ùx³RÑnôÛØ`÷oÙsö¬øûi|Ñ>?þÌ¿`ø¡ðƒÄš·‰ôM Æ–¾ñ_†­uMGÁÞ ÔUý…ÿä�~ÝŸöy_µßþ�¤Ðð�û:|ø½cûÿÁ.>ü²Ôí¼ÿºýŸõïØãv¯¡»Ãÿž³ð/þ a¯üFÖþ'j̪æyæý—üWñCÀ‚Ø«³xnËY¼¶A&™0œì]KâO€~~Ë߶ׂ “PÖõMPG}©_Ý\ÅŠùsûÿÉžÿÁ¥?öÿ¶‡þ¯O‰”ò�ÅÚ;CñÏ„¾~Ð>øû>þÊ:ŸÁ/ø,Ÿ‚?i_ÚWáŸ�~þÔž*ý±?fÍ7Oø�?‡+Ó­€?´?xËþ Su¥þØ^5ý¢~~ßµ¯üs[ø)ñ—Sø;ð#ö_´øý©~Úþø’K1àoxÛHø¤ö?µkßüÔ|F¾6Ñ| ßÚ·‰äÓ´ÏZÝ ¥´˜ù_ðçÆÙ·à·‰?e—ÿ‚~Ö_ðPí#öœñgÇO†7Äø$¯Ä+޾øÁž Õ_‹>ø‹ üLð¿†|oàgšëLñ�ßâŒ$ŠÆKÝ{Ãú¶“­çŒ´°®¼Eû1|øßñ›þôñïÅÿ„Þø•âï…_ ¡Ô>ë¾4ðþ�âÿ†ZÜ?²WÅ�ÿÂKà µ;{†ðŸŠ$ñ/�ü©Ëâ캳¿…´kµ‹X$‚`�#ý¡tKÏÁ¾|Føû8·ŠOü�Â7_ ÿiÏÚûà—í1ûZÙ|JÖ Õ¾1ëz-�´“x‹]þ×ñeÆŸ=†”£N·ƒÃø€Ä¿eÍ?Àe?ø6£ö\øËf¾5Õ¾ÿÁHk/�´WÂ?é×òMáÛë‰Ç�-~xÿFÖmcƒQÑî¼ ­øbÓXðµÐ¿Ñï<+©Ÿ j¶ïd×zb}]ÿ;ð^Ÿû8Á]¿iù¾5_~Ê?³÷ì³ñSþ ÿðïà¿ì£«þÒß±ŸÄïÚ/àÔt�MÑ>$| ý›¼?ðkľ Ò>üYƒÆßð”köšK¨½†³hÚfŸb5ëÕÀ?£ÿÙSᧉ~Á ü9ðÃÅ^:ñWÄ›ÿ~Â4}3Æ>7ø}⟅>+Ô¼žñ´ÿ­u¿‡6¹ºñoƒ®ô/Ïá¿�_•uHt¸„Öö›…¬ DþÌŸòm¿³ßý�ÿ„ÿú�hîP@à_µoüšçí'ÿd ãþ«¿PÔŸ²¿ü›ìãÿdáþ«ïP¼ÐñÙû jß¶—üâ/í�û1ëðNŸÚ×öÝý‘¾2~Ò¾8ý¥?e±w‚aøÁ¯éq|C°Ñt{¯üPð�­Ý¾¡áGÒô� xVÆûPÔŸN[]{Nñ§¤Xx“A×tíFÔßíéðþ ÿpÿ‚J|~Ô>3þÍÞø)ñ3Lý¨¼û@~ɲ µÔñ|fÕþxø‚ÊûÁµÝOÄÍá-KÇÚž•âs­xsAMÁ:¥Ýÿ….,µ�*ÓQñ…¦é@_ÄIjø,'üŸþ 1ñC@ý‚kÏØÃáüÛÆ>:øçû@|Gý®þ/Áó{â½~/‡Ö þZÞêSjt»­ká½¾‡wâ="Ö ý3_mZ÷NÒ,ôv[ð�<ûþÔvÿðHïø8óáÝçì»ñú‰Ÿà ¼aðcÀ·?þ"Å㟌~ ¼ø�ðÏUð÷Š~xb_ ®½ñÃ7qZ꺎�®xRÇWÒî"¶¿»³ºt‚âDûâ_ìÍû@ÉûGÿÁ¦šÎ‰û?|c—Aý›¾øŸÃÿ´­¦|*ñ´šOÀK·ýšgÙh¿/ít³ø]rúÎ�â ÛNñ´Ú¯©éZÆ›&îÆö€?.¿d/Ú'ãoÃÏÙþýŸ>þ´ßíS©þÕ·íÙðgᯌg�‡¶ß|;Έ|?¨|;Õô¯Žvzn«Š|àïè¾&ðÿŒ4O`kˆ|ßès_hWºzOvõ.¡û~Ù?ðN]Gþ Ëý¤µÙ‡ãí9§þà þ7ü/ýª>þÌÞoŒ>ë¿´‡uùmâ±ðžƒtÒø›Nð‹|Hñ•w¬i7rx^Ï;�~Ê×^ðýî Ú|ý�¿lÿ�àèøŸö>øçðSTý·¿co h³_‡~&xFïE¶ñþ¡­þÍ¿!Ð?cÏÛÿÀ^8ÿ‚P|lðÇ…¿h¿‚Ú_„¿ðËÂ_4ß�¿ðTÏ�Zïˆþ5|jÒ#Ô4/^é–ß¼qa©üCðŽ“ðûPðôn�âŸxÖóLÔ4½B;]M]kžþ�èóþ Eÿ Ø×þÏãö}ÿÓ�¨è ( € øwþ ?ÿ&oñSþÃõvü9 Ø*(ùµÿƒ‚€?ÿàƒ€Œƒÿ²ý�A�AñL9Pó©ÿ<øñþ Áû~þÎ?°—…ôK�øaOÚ›þ Ãû$ÿÁD¿eVˆ2hß¼£ø�Ä ?h?‚z;R4Øõ/‰þ×l4Ëf6Ú„ôÿcŸRñˆnÔÐ~:ɯþÈ_ðR¿ø-¯„?koÛoãì1áÛOS±ñ7Ã{oþÅ~ýª,n_‚>%ðÿÄ-6Óá?�|Sãÿ‡>3:.½á=Æ_¬´ Ä>Ó.µ�CV²×µ}6ãÁv÷:p¼üNð¿…¿à˜_ÿàÚOÚg┟´¿ìoû?ü-ý¥~ø³â÷Æ_„:®…ñá øÑáoGð»DøÉðóÁ7>9¹ð­k¥|JÓ,´ÿ -Õî²4kqG¦®© êºEˆ~xº÷ö¥ý ¿àî|1ðG�ä›ã/ì1á;�…ž×¼âxûÆš³û*|Q²øy­iþÖl,¼[hßt'Ð|WáUÑì]ø«ñà7íKÿzÿƒx>øwTƒÇP|+ÿ‚�þʳwíá cÃ:þ›m¢øº Ä~-ð6«‰4k vÞçCÕák‹�][H¸±Ô’'ºóZkxÀ?iÿà°RÛþÊßðYoø$ßüCöƒð§ˆïÿ`/‚?þ2ü.ñÇŽ4?ëþ>ðŸìùñgÄþñå—„¼{â¯øcIÖ®ôK=Jóľ“JÖmô¹'ƒþ»í-eÕ|9¦ÚÈù�âk�øjÿÁÎÿðQÿÙãÃ>*Ñÿ`ß�?°ß ~øÿYðWˆ¾øsã÷Å� ü&𥯊~!x?@ñ.•¡êµ¦“¨xSÆÓjìÚd3?Žìïµ±¯jv°o~Öžð·„àˆðlޱá�IеkÛ_öÕlµ-2ÆÞÎúÓQø�à_ˆ~8ñµä0F’ÅqâŸÚZx�[•X>£«ÚÛß\™'†7PïJ€ üËý°?äõ?à�ÿõÏö¸ÿÕWá:úR€ ( €ñ.¹¬èš qÏwâ-[G³Ð4ë{�KS´…À>QÕ?àèo€Þ1øSáO~ͳ7í'ñ·þ 3â¯øDü:ÿ°”ßþ"ø?]ðŸ�ï¯të?XxÓâ ç†/ô 'Â~'Y{Oé©®_ºA¦Ï¯h~´—X¹Ñ@<â߯}3þ éÿêß·ßü“Âz×Â?Ù÷öˆÿ‚vø/á¯Â‹¶¾ñ—Æï†ßþ5é�ðÖóâÁ¨üeàßÞ[ê˨øoâLVºí‡†4«�{Oñµ…êivZW‹µe³ü\øóðóÆòÁà»?µ]ŸÃÏü(ý—l¯ø)wÂÿ‹Ÿ²Oƒ|aá‹ÿÝê_ ›ö‰ŽòOˆzO‚µ {It=Åšo‰<)¤iþU¬6�/„.ôû5†“k3€~ðþÞþð·Ãïø+?üíkà�Ið´nƒûEø Æ=ÆßMÞ ð×ÁŸ„:†"û,qìÑ4‹M[‚ÃO¶¶�VÔ(Ô]ͼó[á¿ÅÏ|8øÿjþÈ<½Ö<)ûCø»ãíýûCx_áîµáOÙϯ|Ô#ñ%½��l5×ÑáþÇ¿]SF½Ó>ѬAs«ézÞ•ªi_i÷kp @þÖß²¯ÅŠði7ìYáهᾫâ™<+ðïöYý þ+ü1ø{¥ÜM¯üDð_Ù/¼UñBxt]¿ñðñ‰ì~$k˽ÕûAáûí`G<úzPkñ_ö‘øÿkÿ‚­ÿÁuïø&>…âÏi±^¹ãψ_´ÿÄ�?á�~øgà/ ½;áÑÒþxÃYñ†|=§ÅªËeáox.ÓÂZTúމe¨xª7Ã÷W°ëzÃÛ~Fübÿ”"ÿÁÃ?öœ-oÿWoÂjûÏöѼø�ûÿÁm?áª>.þØßàžß>=Á<~øà¿ísáÏÙsŸµ7„&Ôü-¤ü4‹Åÿ³åæ™ão‡?´Ÿjúƹám{ÇO£èÖÞ!f¼Ð¬ÚUÒük7ÚÀ>yý f¿…^ÿ‚jÁ< á½Gã¯ÄO‚à¸~ñÖ™eûQ|ðßÀ¿jž ø¤/ôiÖŸ 4 k]Ñô†Þ*½´ñ¿á˜ü�×XÒ¼M5펅‰w¦ÜÞ€¢4Am VöÐÅooqà F‘C 1"ÇQETŽ8ãUŽ4E ˆªª€(óãþ ¯ÿ&ñÛþº|*ÿÕÕðæ€=²€ ( € ( Åø9þPQûÿݪÿëaü  é:€ ( € ( € ( €>_ € ( ÿ‚mȱû\Ùû~Óúuðí~�P@P@P@ó¿í{ÿ&›ûPÙ»ükÿÕkâjùßödÿ“mýžÿì‡ü'ÿÔ @ p € ( ý©á–çöbý£míãig¸øñzbA¹å–_‡Þ!Ž8Ðwgv £¹ PÔ_²äoìËû:Ã*”–/�?ã‘Ttøáõu8Èʰ àö v € ( €>ý‡?àžßÿ`%ý¥àç‰þ'ø”~Ôß´��j/ˆ?ð³5¯ k'GñÿÄAd5½Áßð‹x+Á¿Ùþµû ?Ùz~·ÿ µé>×â ì®À»¨ € (óŸþ 5isw£þÇŸf…æû7íáð î}ƒ>U´:�<Ù›Ñ#Ü»�`sÒ€=†( €>ÿ‚Ž#Éû|SHÑävÖ>aK±ÇÆÏ‡$áTp'€ è(ö€ ( € ( € ( €?3¿kôvý´¿àžN¨å#�ö¶ÞáITßð³Â�7°]Ĺ#q ÐÒ4P@ãðJ´xÿ`/ÙÝ$G�×Gñ®QÔ£ üOñ±VŒ‚Èäzý € ( € ( € (óÛþ ¨�'ìñÕ#G‘ÌŸ ðˆ¥˜ããOÖ8Uœ($àp'�@Ó@P@Pâ�ü‹ÿ((ý¿ÿîÕõ°þÐô�@P@P@P@/Ð@PÏ~ñÆ�û!x—âºøÛBñŽ¥ðkâçÄ}[âÞ�ãŸx/ŦøsâÝ{@Ьüsáoˆžð^™­øºË@×u­ü[àÏhþÖ´ y5oøwÇW~ þÅðu6eÿ‚§þÄ�Ë$2|Cø“¾)7Ùû/þÕR¦ôb­¶H¾ .m ÙøKÀsx‹Ç>öO xLð—‡4 è±<?†tM+ÃúL9•áÓ4k4ëžB‘ãµ¶‰ÈÈ,@ÍmÐ@P{»K[û[›ëk{Û+Ûy­/,îáŽâÖîÖâ6†âÚæÞex§·ž'x¦†Txå�ÙYX‚ó®…â¯Ú“önðv›ðËáoÂO~ÑŸ¼¦éø]sâ_�7 >"øsÂZ]����„¼oqwðËÆÞñt^´ŽM?þ2Ó®´�sPЬ´}7ÅZ©â+}_Ç~!‹þÃöòÿ£øiÿ‰µ¦ô6xÃÁ^;øñáßxDøaªÝx›á·ÂOø®ûÇå|m¨xXð´þ<ø‹ãMGÂþ´Õ5]Ãúö±¦x+žРѼ9>·­ëúLjœž9ñ§‰u],Cáë-GÃ>ðþ½?Šá/ðhÑÔP@P@~(ÿÁÈ¿ò‚�ÛÿþíWÿ[à]IÔP@P@P@òýP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Pâ�ü‹ÿ((ý¿ÿîÕõ°þÐô�@P@P@P@/Ð@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@~(ÿÁÈ¿ò‚�ÛÿþíWÿ[à]IÔP@P@P@ó+#20!•а=C)ÁÜŠJ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ñOþFB?à„¿·ëÿ 7쮀óÕ?l/�»c�"÷Ï<�Æ@?¤Ê( € ( € ( € ùÿÅsiºÝì[HŠy ݹƆá™ð¾ÑIæCÏ$ÄOpH?@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@~9ÿÁË:sXÁn�b[÷ý™ïÊÆÿ¶ìö�.{ƒ,£<ƒ)ýP@P@P@P3â�uË #Ú—ÖÛžÖCÀ|�žÞCÐ$¸RóŠ­�†E` ž ­¦’ ˆÞ¢b’G"•ta؃ùƒÐ‚$h*( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €; xfMbá.îP®™€¹l�µºùô&<ñ<€Œ.Q�å?ÿàèÐüŸöåý™@`?l?Ùôà: ýÿ‡±Á,¿é%Ÿ°þ&GìëÿÏ€ø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏ€ø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏ€ø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏ€ø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏ€ø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏ€ø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏ€ø{üËþ’Yûâd~οüñ¨Xÿ‚ Á(5µjÿ‚“þÀ):�±ÝÃûdþΉ:ŽÊÌ~"‘,`òE`¹b› @<êóþ Aÿʼn‰²ÿ‚šÿÁ=îãÏOÛ'öw·›ÕOÄY"8î|àOeì3?áåðM_úHÿüóÿOökÿç™@ü<¯þ «ÿIÿ‚~âiþÍüó(ÿ‡•ÿÁ5é#ÿðOÏüM?Ù¯ÿžeðò¿ø&¯ý$þ ùÿ‰§û5ÿóÌ þWÿÕÿ¤�ÿÁ??ñ4ÿf¿þy”ÃÊÿàš¿ô‘ÿø'çþ&Ÿì×ÿÏ2€øy_üWþ’?ÿüÿÄÓýšÿùæPÿ+ÿ‚jÿÒGÿàŸŸøš³_ÿ<Ê?áåðM_úHÿüóÿOökÿç™@ü<¯þ «ÿIÿ‚~âiþÍüó(ÿ‡•ÿÁ5é#ÿðOÏüM?Ù¯ÿžeðò¿ø&¯ý$þ ùÿ‰§û5ÿóÌ þWÿÕÿ¤�ÿÁ??ñ4ÿf¿þy”ÃÊÿàš¿ô‘ÿø'çþ&Ÿì×ÿÏ2€øy_üWþ’?ÿüÿÄÓýšÿùæPÿ+ÿ‚jÿÒGÿàŸŸøš³_ÿ<Ê?áåðM_úHÿüóÿOökÿç™@ü<¯þ «ÿIÿ‚~âiþÍüó(ÿ‡•ÿÁ5é#ÿðOÏüM?Ù¯ÿžeðò¿ø&¯ý$þ ùÿ‰§û5ÿóÌ þWÿÕÿ¤�ÿÁ??ñ4ÿf¿þy”ÃÊÿàš¿ô‘ÿø'çþ&Ÿì×ÿÏ2€øy_üWþ’?ÿüÿÄÓýšÿùæPÿ+ÿ‚jÿÒGÿàŸŸøš³_ÿ<Ê?áåðM_úHÿüóÿOökÿç™@ü<¯þ «ÿIÿ‚~âiþÍüó(ÿ‡•ÿÁ5é#ÿðOÏüM?Ù¯ÿžeðò¿ø&¯ý$þ ùÿ‰§û5ÿóÌ þWÿÕÿ¤�ÿÁ??ñ4ÿf¿þy”ÃÊÿàš¿ô‘ÿø'çþ&Ÿì×ÿÏ2€øy_üWþ’?ÿüÿÄÓýšÿùæPÿ+ÿ‚jÿÒGÿàŸŸøš³_ÿ<Ê?áåðM_úHÿüóÿOökÿç™@ü<¯þ «ÿIÿ‚~âiþÍüó(ÿ‡•ÿÁ5é#ÿðOÏüM?Ù¯ÿžeðò¿ø&¯ý$þ ùÿ‰§û5ÿóÌ þWÿÕÿ¤�ÿÁ??ñ4ÿf¿þy”ÃÊÿàš¿ô‘ÿø'çþ&Ÿì×ÿÏ2€øy_üWþ’?ÿüÿÄÓýšÿùæPÿ+ÿ‚jÿÒGÿàŸŸøš³_ÿ<Ê?áåðM_úHÿüóÿOökÿç™@ü<¯þ «ÿIÿ‚~âiþÍüó(ÿ‡•ÿÁ5é#ÿðOÏüM?Ù¯ÿžeðò¿ø&¯ý$þ ùÿ‰§û5ÿóÌ þWÿÕÿ¤�ÿÁ??ñ4ÿf¿þy”ÃÊÿàš¿ô‘ÿø'çþ&Ÿì×ÿÏ2€øy_üWþ’?ÿüÿÄÓýšÿùæPÿ+ÿ‚jÿÒGÿàŸŸøš³_ÿ<Ê?áåðM_úHÿüóÿOökÿç™@ü<¯þ «ÿIÿ‚~âiþÍüó(ÿ‡•ÿÁ5é#ÿðOÏüM?Ù¯ÿžeðò¿ø&¯ý$þ ùÿ‰§û5ÿóÌ þWÿÕÿ¤�ÿÁ??ñ4ÿf¿þy”ÃÊÿàš¿ô‘ÿø'çþ&Ÿì×ÿÏ2€øy_üWþ’?ÿüÿÄÓýšÿùæPÿ+ÿ‚jÿÒGÿàŸŸøš³_ÿ<Ê?áåðM_úHÿüóÿOökÿç™@ü<¯þ «ÿIÿ‚~âiþÍüó(ÿ‡•ÿÁ5é#ÿðOÏüM?Ù¯ÿžeðò¿ø&¯ý$þ ùÿ‰§û5ÿóÌ þWÿÕÿ¤�ÿÁ??ñ4ÿf¿þy”ÃÊÿàš¿ô‘ÿø'çþ&Ÿì×ÿÏ2€øy_üWþ’?ÿüÿÄÓýšÿùæPÿ+ÿ‚jÿÒGÿàŸŸøš³_ÿ<Ê?áåðM_úHÿüóÿOökÿç™@ü<¯þ «ÿIÿ‚~âiþÍüó(ÿ‡•ÿÁ5é#ÿðOÏüM?Ù¯ÿžeðò¿ø&¯ý$þ ùÿ‰§û5ÿóÌ þWÿÕÿ¤�ÿÁ??ñ4ÿf¿þy”ÃÊÿàš¿ô‘ÿø'çþ&Ÿì×ÿÏ2€øy_üWþ’?ÿüÿÄÓýšÿùæPÿ+ÿ‚jÿÒGÿàŸŸøš³_ÿ<Ê?áåðM_úHÿüóÿOökÿç™@ü<¯þ «ÿIÿ‚~âiþÍüó(ÿ‡•ÿÁ5é#ÿðOÏüM?Ù¯ÿžeðò¿ø&¯ý$þ ùÿ‰§û5ÿóÌ þWÿÕÿ¤�ÿÁ??ñ4ÿf¿þy”ÃÊÿàš¿ô‘ÿø'çþ&Ÿì×ÿÏ2€øy_üWþ’?ÿüÿÄÓýšÿùæPÿ+ÿ‚jÿÒGÿàŸŸøš³_ÿ<Ê?áåðM_úHÿüóÿOökÿç™@Eÿ(ÿ‚iHÁ_þ Mÿø€d|òþÚ_³‰QîD?æ|øB} ³Kÿ‚‘Á)íÙ&Ôÿট° ã®Ù¢ý±ÿgh­ÃÑÜüHóf^‡@3Ã+/PA�þ ½ÿ®…(¿à¥ðOØ£�B¤qþØß³š"(à*"üF ªí@ˆŸðqçü'öøãÿcý²~üý¸dŒ|Qÿ óÿ×ï…¿´·Áˆ;ñö'íWð7ÄZÏö„|'ã]_Ä¿öG‡ô�W]Ôÿ³ôû�°húf¡©ÝyVVW3ÆÿÙ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8492396 manila-23.0.0.0rc1/doc/source/configuration/figures/hsp_network.png0000664000175000017500000045750115251045254024073 0ustar00zuulzuul‰PNG  IHDR·¨m×9sBITÛáOàsRGB®ÎégAMA±� üa pHYsÄÄ•+tEXtSoftwaregnome-screenshotï¿>ÿqIDATx^ì� U�öŸio½÷&7 BB‘¢‚   €‚XWEE±®}uu­ë~êÚ{A×ÞÛº ‚(ŠØTTšR¤CBznn{Û´ïyÎÜI.1@Ƚ Iüÿ’s§Ÿ9sfÞysÞ3çxy<σ mhCÚІ6´¡ m¸#�ÜÂ0 Ã0 Ã0vü‰¡a†a†aìðXÉ­al#Ê�ZùÓ‰ÐPÁýŒÂP’¦)|¿xöœ<ß>®ÆÅäëpS”×ñ¦(¯ó &æ†al=Ln csO¹r~)µ\Í˲ I’¸i�ÛGÖx ÐuYIª†’Ùrž(¯×�%·œ¾/A6 ØLn c3ù#§/{I«†åÇèõz.ˆRD)†±-ÙÔW…®ÅJ¥‚0 ÝPÒ[^ÇZ¿Üfòõm†±µ1¹5ŒmĦ>je)—†¥Ô–¥´†r›ÉC“ã�`²´n ‰mEëewã‡0»v ÃØV˜ÜÆ6Bµò ^A[Ь†Û²W¢P–ÔŠÉãVoÑx (ÄÄdI-¯k¡ùei®‚dwr•…ÉÛ†al-Ln cQ ª¾àõ±ët:èv»Nh7ÅÆÍíQ $å’IŒJž… Ì–£üT©§`4®k`{˜ÙÔWH)¹º.jµšj=-+?ågÂØ ØNLn c+±ñ—yYò%™•ÔN[ÍßÑ�¼”éÖ±¨¤NL.e66Ÿ²„Sׄ‚®åéŽz‹.¯ýRp˪ åõ¡ñò3brkÆtbrk[‰R\K Ô—ºæ���»*š·#J­Ðm£”uÉ‹ÆË[‰ÝR¶ å›òRyªëDòd|GCÇ¢ô—׉ޫZ­¢^¯O¬q÷ºÉã†aSÅäÖ0¶“?Z—°Œ��­oaG/­RIœŽ©Õj9q’”Qƶ$³ªÞ¡<,KÂwD$´º¾uºFtýk\’Ûl6Ýxùpd׋aÓ�É­alô±*K£ô%^Ö¯•¸hþŽ^RUƒÄESÖ5QÙr”we�[åm»Ý^ÿа£Q^ÿeÐtYº¯Ò[US(îÊu Ã0¦ “[ÃØ HúJѓЪ*‚W%WúR×r}©oïBXÞ"”ÎRP$^]t~ùË_bxx«W¯v%ÒZgkÝRrú�ç¢Î@]âP¹?7¤ ¹9\¦ý{L§VuK6PŒ1LFsÊúÂZÂó’Oœ·ã2Ü}«éDù«kd``³fÍÂ!‡‚§>õ©Ø}÷Ý×  òwkæót ´–%¶e ®Æu| ’Û¾¾¾õóËc›|Œ¢œ6 ø?˜ÜÆV@_àúb.Ŷ¬;¹#~Ü$[ªN!á*‡ïyÏ{ðä'?pf̘áJã$ï’–­!$Ê5i'õš7-Õe.¦r/à‡œÒ^—¿\–kùD^3=’ßb Íå�óœÆri±“eOñ*p�\¥Š!£*¤¹ø£u¸÷¹5(ů̿ò¡á¿ø,X€N8Á]G’ƲtwGCiÖ1ê³ RéF£áæ•‚[Sùp¸#£a<ö¢alôÅ,‘𕲣>GªN­våÊ•®èi§�†—¿üå8öØc±Ë.»8ÑÒ1n[áÒ­ëîû*rWóŠù¹ò\a£u5Ç£üú ’e·e¹�dvÒm‘³Tb\Äîtx«¡¼S)§†ÊÏþþ~ì³Ï>xÕ«^…›o¾‹-råz;"J»>’ײªŽ(EVŸM†al)v1Œ­„~¦ŸÜÜ׎*·’•@ëgäßÿþ÷xÒ“ž„½öÚk½€Hj'ËÉÖ@~Y”Ï í—�û+æaƒî1^à¤6ç\•ÔÞ=U’TImJ-vUTbëª"(”P¸Ü¿õkn$´ ¢ÌSå§æ�|òÉøæ7¿‰ÑÑQwôÀ±#¢¾RÎu\\…É×M9®õ Ã0¶„ÉwpÃ0¦ ÕI•Üê‹zGÿ’–dIÐõ3ò]wÝ…ƒ>ØÉWù‚œ$EǹuKÛ¤¨E)«Jc3'¯ÒYJ5Ç|å3C! ZSU˜÷wËÿ qrkA%¸ÚÖË)ËNnC‹ö•0¤ ËŸÉËÒé­‡ò¯¨k[T&(Ê_�κúµE]Y‘JB'Dôr½x#m“R*-ZÿÞ˜›£Œ—‚[ÔµÕü­wË,¯‘Rj%¸[MºN•ØêšÚQ¯']3:®òz)¯�²y<Ã0ŒéÀäÖ0¦�²¤MCýt¬/m…’�§w$$$¢”£êÞJl%Zú‰¹ßzǘ£52Œæm—â×ê¥R{ Ó“ m�ÑqSN§è0ôâI·‹–2z]dL»+%ìÄNcM§Æ[m%’]tU�¤£Òv�/¸õ’¸ÇøÚný˜Ž›Óš·–V*ÿ”—z1Oy\æ¯Æ‡††ÖOï¨è3²ñgAדòº¬«iÃ0Œ-ÅäÖ0¦�òËZ_ÊåO¬Æ4B)ªTBÔ«>ÕפäÅ’ œq—™!íuàùžÖJè!Mºy‡ëu;¸õÖ[ÜKY·Ür V®^ã$µE‘E"Íbnƒ[ "0:žG Ê}%\¦â\Mlj¬w"=Æ´2¹´Zò.‰7 ÃØRìbS@_Êei”†*Ù4¹Ý:|ãK_Ä#Žx{âãqÍ5C¥J ¢œª1°?_øÌ1xÌcŽÇ·ÿ÷ûè¶)¶”Ò_ÿâg8éq'àð‡އ<äa8šëuÔÑxÑK^�%K—à ëN�ÿrùÅ8ê‘�ć‰cõsôñØÿ€ýpâãOijžýlœwþO±víÒ­]ûâŸ��?;僢æ†al &·†1Mègûò§Ucš¡¨Ž �âŽ;ã–›oÅÚ‘q¨ ¹^öòpù 7܀ˮ¸Kî¼ïl?:ëûxÃk_‹k®úÒ¸‡0ôÐéô0<Ú¹?ù)þåéÏÄ¢;—"ÉR̨ãï7\�Å‹áê¿]�+þr9-ZŠ¿þõJ\xáïñ¼ïy÷ ¹5çšVÊD«{kÆtarkSdò—³Jžì'Õ­…rÖàL´ÆZh��ºê)ç©É/O&›ñ¨šBš!î©‹ãŸþÔ§°lÙjT+!Þÿ¾÷à²Ë/ÅÏþ3¸ÿèÆ îX¼_ÿÖ·Õ*<‰Ûvd|»Ìßïzç»ñÞ÷¾�?éñÜ‘z”ËñÍoü/¥÷Ö‰Ó‰>3*±ÕçGŸ#Ã0Œ©`߆1Eô¥¬º‚*µÕÐ~NÝ ä>Ɔ;¨Ez¹-FÅïÀÏU§–yß ‘`&’\Íc…¨4*ÅÈðˆ«"»ÇÂÝñšW¿x(Ž=ö8|ó¿�… `æ`–-_ ª+|Šm­!�ªØûàCð¦ÿ÷Vü¿ÿz;Îþ¿3ð„ަ8ó¡%ʰ|l�:-3¦}~ÊB“[Ã0¦“[ØÊ’Û²¾ 1ݨd/D'ˆ‚ —üù"üèßÃy?ý1~vþ¯ðû‹/§ÜV5û)H=ô `öœ]Ðìkà†›nÅK_ö*œwÞÏpã�7aö¬Ù¸ìò?cñ·ãcû²Ní‘Z]Š%«> ø9ƆF�¶0³ÞßK)µ1b?±Z [{@4 cª˜ÜÆ4 /dck¢–TÝèvr|ðÝÿ>ÿ¥8õÔçàÙÏ=ûäÐKÆøBÔ‘¤>žþôg Óî"CüêW¿ÀsŸûuä£ð”'= ÿú‚áÿ¾{fÌ�_© R«CÝîúY‚;o¿Ÿûü—ñÕ¯¯~Íëð› .Džåè›9ý}Mk0a+0Yfõ�hrkÆT0¹5Œi@r« ’[+½Ý x¢H%zúéÚÃî{„ý9Úsì·ßÞØsÏÙ®D·×Õ÷js7À¿½îuøâ—¾€Cyúú›˜3w–káo×]‡ ~ó[¼öÕ¯Á«_ûjd=5ß–Ár'ºË—,ÂÛÿó-xÇ;߉Ÿw>Ö�޹j�|ä#pÜ‘›H�1Ý”ŸUM�ÜÚçÈ0Œ-ÅäÖ0¦�²ž }!o%(·TP×BB½1ˆO|ü“øýE¿ÆÅü.¾äWøðGþÕ*ø>2$±ÚÅ­ày/z!~õË_à7¿ù ¾ó¿ßÆÿ|ê“xÒNFµVQa0Î9ë¸é–Ûà‡5¤ܤ3ލâaG�CöP<ôðCñ´Sž‰Ï~ö3øÊ—>‡nWíáÓMYR«Ï�•܆1ULn c èËX_Äe0¶ݤ‹J5tZk4P­41kö f4Ñ׬Pj)E£Z`Ù]+]7Á{î±'þýu¯Å^{í‰ãŽ?/}ÙKpæwÏÄq�9>O——ûÈ ˆjœð9 ñèã�ÁÅ_ˆK.½¿ýÝðíÿû?¼ò•¯Äü9sÐÏý›Ün]¬Î­aSÅäÖ0¦�É_ÆVÿvëÐìësmÒªé/ßQ«Ã•Ðæ”]ÝÊBuK›§®³z£IW °zõZœÿ‹ŸãÓŸý4Z­1t»üòç?Çõ×]‡8Í]õ…j¥�ñNB¹å¹ëuÑ-~g¬a¥?¬Â§øV¹ß ·s»5(??öÙ1 c:0¹5 cû'÷Ñëé'kŠmè#Ícä”Ñ R+ J.ç«ä•šf Îjà/xgÏBwñÎwý7æÎ›çÚÊ}îsŸ�Ë–¡Y«á™ÏxöÞg?d¼ªÛWuѬW‹x¸Û¢SÞ¢¬ÖçZåÙ³ö Ã0¶kLn ÃØðQ«ÀW‡ è"¬L”ô¥ú ;B³: ^j*j)}ômïxÞòŸoÅî{ìÉyUDQ„€b\«500Ї�|äÃøÔ'O§ ç¨5ú¹‰ŠnÕ D9ãQ¢B©²^Nv%Œ&·†aÛ3^n•› cJè§Ôññqt:�õupw¦ËÔÀ¾ŽQÃ/|á 8í´Ó°Ï>ûL,ÝFð.Õ]7¯^AZ ÑãŒN{sêýð»1²NŒ<ªÕ­ÌC¨ê Ô T9k†;݆;ï¼a¡Õð�‡Æeu¶èB½šE‘ïä7§@�¶;ˆ(Á:f­QÑ9Ízúý¸oÛ– èšÄ-·Ü²þÛ™Ðñ(¯Ëãp/†al VrkÆŽeT]îªîläçh6$?œUáGÑâe3�²JO‚ªš�z¿ °ç{áèG�cŽ>;ôa§ÈÝü´Š¶«Öªˆ8/¥k~sBlÅúÇ�lc©5 Ã0î?v§6Œi@%N ;S‰m‰^®ê^¸,]+çm3˜­Õ¾*êµ ûPE€¦Wsõl½Àƒ×à×TêúªUT)ªØ(ª¸ÒÚjµŽZ­‰ ¨0Žç‡®å… ¤G·w/—Õ'—ñ8kÜ­‚JnÝiõ"¸ ¶ñmS¿¨ä¼,±ÕxÇK Ã0Œ�1¹5 c³¨R%Xa:ÁÚæ8Á,nZGÔ£˜§’TÍ×̉Ñ2l`Ò .Ü}鯔ÛA[¸9®Ô–áÞ7Ÿv”ïjûUù^ ®ýdo†qÏ÷mÃ0Œ{@RU–J—R[vZal}”×*1Wþ«Ä\ã–ÿ†a÷ŒÉ­a÷Êä}šÍ¦ûI\¥‰Æ¶AR+fΜéÎ…JmËóa†aü#&·†aÜ+ew¨jVo±/^¼Øäj"¡]ºt)öÞ{owTWÍš†a›ÆäÖ0ŒûD¥…jîl·Ývà 7ÜàäV%¸š'ùíõzö’Ó)«|(oˇ‡rÞí·ßŽã�?¾è9mÒrÃ0 ã1¹5 ã^Qi¡äµ^¯ãQ�z®ºê*œþùn^£Ñpë¨$QÂeuA·åŸäUB[楆«W¯Æ…^ˆ¿øÅnZy¾Í[«0 ÃØ�°N cŠHFÆÆÆÜÏÅAM—õ$wÊR[—·Ýnã׿þ5Ö¬Yƒ#�<tfÍšåÄËn'[ŽòW¥ßª†P«ÕpÓM7ášk®ÁÅ_ìÄváÂ…n™®3�­¿³ ëfrÝnëÄÁ0Œ©`rkSdg—[•ê¸f̘�åË—cîܹÅßÿþwœsÎ9X´h‘›/éÝ™Žû� |€�ØÍŸ?Çwžö´§¹ùFFFÖKߊ+ÜùØY0¹5 c:1¹5Œ)²³Ë­n:&uâ Z«ŽOUt¼*mÔOèj2¬\߸ÿ(�$y ÊÓò:*¯+¡ù*ÙÝ™ª&èš1¹5 cº°:·†aÜ'W•ªz‚D¥‹’,‰®�|•/;m-ó†@éËyûbð8ÃË8'ϨûÜœRè2\(–m˜WNo¼Lã ÷µÞæ/+R«¡ê"—©×øäeÅxàù¨Uªn˜ôbøۀ§¼eÆ"Kµ^Ñ›Jq Ã0ŒMÃû0al1*QÛ™Kn·r'ƒÊW=“{¼yIp5–s¥–A‚É? ‘­?å°Ü^”·½{Z¶¹ë‰{^¦4c/Sk+–ºþÖ8êó˜tX“)ÖØ€›Þh�} YÉ­aÓ…É­aL“ÛmAQ2*±•Ê‚òš{’¡òǧœ¾Ç[™—ò/åVË\w¹0LßæÜ`UÚòø"Wª[ íîi[7'ºÄLn ØNLn cŠ˜Ün 2Nn%vÌcj`)·™§iÎWýGFýM\Iî “ãIÄ7.нx$… on-“[Ã0ŒMbrkSÄäv[@aU=V7®ÒP© ¤¶Ï™ß)™¡’÷dì WJŠçJ–7¯9ã ë}wHark†qϘÜÆ1¹ÝVðVÅÿÊY_yë*%OC‰¡Jo5îç�«¿:Í¿ûœûϽű©e9Ó±¹ä^Ê„gED¤ŒkcÙnÖTf;ÂäÖ0ŒéÄäÖ0¦ˆÉíÖG7©Eåmž!dˆ| ³9MÕí/çUB$IŒžZ9§æ¶--Pâë^B2Æõ†È7¸ïew‹£X‰lb™‹ÃCÂNž%4í{Ôs^#‰Ú.£”gTâɵ†:Ëhµ\skÈW¹—bX´›@Ê™;8&·†aL'&·†1ELn·>z]Œè1à”{ùÊ•rfÅ ÙDð˜ÿrÛ<¹nYjZž Ýê&� MO÷µlS뉻/Su‰ÔçõQΚD(¡å5¢.ŒµUR̳a¢Ýi»uúMtÚm×4˜VR4“÷äö¾‰¸wDLn ØNLn cŠ˜Ün}$·ªcëj°Jôò„�ˉ$Ë‘ÒcÊÑx·‡z³}i‚è®s[(ÿmâR˜|Û•Ôñ‚A;ÎÐãÊjSصÛë{¨!ÒXÇZx¬«½ËqÅéJoMn Ã0þ“[Ø"&·ÛÞ¥™]JYä-˵” V ¢¾::£º,')ˆ@³¿²áÇû„BFÿñöZ̧ŒsY8Ñ\YÂcò(±ý•*Æ;ãˆ|ÕZ­�YU1Ln Ã06“[Ø"&·[ÊÝo=*�ݘ²žª‡•6îz)S�\å…^¤ÓÐäÖ0 ãž1¹5Œ)br»eHXÊæ¼ROÝÌúHÒ ó1”Ô©j�^ºÊ{ˆÒ‚j£Yo`ÖyUœõ‹‹ñà þ„%Cãðª th|yPA'¨!ö‰=màþÜî\bÿpU9B³‹xôW¢éª¸9ó\»µ�1Ô(Û>ÓšqÅ$ðs©çE¨1�ÕÞú“µxÞ“ŽÂOx–­ìág?ÿ)ÞtêÉ8`î,Œ�òº �ä>e¼YŸ÷<•ûr/&·†aÿ@ñ›˜aƆªczùªZ¯"¥Ôv»úI>FèQ(Ãq¥�ѨŽnsnj%x˾‡Oýäw¸±`]s6†BÊm¥F œ6o =tlnØT®ôT"Æ ÒÔ ãÅ2·N1�Âbæœyè1®Vž`ÊcîâÜw¿ ‡ÏÄðÈÆ›@”õPO|¤é,æO�‡Ûuû›”°+¹5 c:±’[Ã0T!õBdS n¨¦°².å±M±R$¡äöªU VÇ9>G |×éßÄÒÕ]Œ·=T¢~Fråå/ˆ=DtZ'·nEPýW ¡j›Ô}ïä8Ê Ÿ,¶e©­JZõ]–Ç¡!�Š‚–{5øá Óå¡Ú^ŽÕ•xëËž„7½ðXrç*¼á¿?‰ß]} Ö&1…{uUW¢Z­LÄ?¹¤¸ØŸa†±i¬äÖ0¦ˆ•ÜnRÇ”bä”Zê\˜Ç”ÐqžQòªË|„ƒZ‚ëïZƒÿ9û׸ê–E}X7ÖE^ësrœ¦·0•ØN +rÝÔ9¸¿w»�¢p›ûJK±•xêVêV×4ªbÑ£ †>%•×F_<„“�ݧ=éøõ&¾qÆ/ñç«nEÕÐÉ;èÆL?�;TÉíÛ_Œ£w�‹á¡´ªê´¢‹†J©³AæZLaÏ6NßŽŠ•Ü†1�˜ÜÆ1¹Ý22æ‘~Z/äVÕôª…Ð�ÔûÑŽšhÓÞοì:|ùÌcU—ÛDU—Ï•�™èvÞÁF�ò÷�/”ÝŸó²©[£Jl½@5f‹ý8‘u�r«ߘö\mÔrZíÔ&I ý~ŠÝj^|ʉ8á‘á†åkðéo�ƒëïF¥9½.�2GµÞ@—qEèàœ·½ÇΛ…ñÑq´+"Êm-æîÒAî—ÇMŽMn Ã06‰É­aL“Û-CY”Sjó$F$Läah `4¨âŽ¡qüÏ™?ÕwÜ…µ-õOÆe q;‰±CRÄXT% PoeœVùéxXC×5Œ[ȧpb:i\hzò¸¸¯e¹v6A9ßK‹WØÔ£˜º×Íã.úÛCxÌ#öà Ÿ~<ª3ûñÝü^qÖÆ:‘zU+J›Ã4â–œö'·?~û qì.s1><ŠV%E”uQO˜[åV-%x�¢u‰�ä:3¹5 c:1¹5Œ)br»ed®—±¢^kÆ»P­Þ¿Ö‡®àÒnÁ¿v6VRWµcäÍÙM$¶ÊWݲTæ«Q×>Ö¤º¨ãótcû‡BMmUΛ<.6{™ëæw¢.âæs4 yÞÓ •jY’1Iv�ÙÄiGì�'�x ®¼s-¾ý“ßãÆ¥£j!èïã53® ‰'‰«1ý=Šq›rÛÆ�ßö"³†¸5Š0Uj�/D®rÕ;îQdÛøÉÛ_ˆGÏ¥Ü2NÉmHá­PžÓl6rŠ­É­ª]èhw|Ln ØNLn cŠ˜ÜnT5WrE54ýÂ�8ÇX‡2W÷)}º\/aVF%˜òS檆“s¸ÐÜõå¹w[®¡–)”óµ^9>y™˜¼^¹L&¯#Ê} ½Ó¦ª ª<‘pÚ§|ßtÇJ|ø«ßÇ]ërŒ´)°zŽbwGáSÜò¬J§¸K–9¿lá¡’w(·/À£çÍÅø„Ü’[^WI>‹yFqGÌ›wÈôLNÑŽ‹É­aÓ‰5fÆ} �›¬r…úé‡ÿM…¤Ü¾®ž­[�²WAPipbh1OË4îs\MÏjž† 1­4aÈãbZÛ¥Ï&¶/ãsÓ ŠKËõ"ÛȈª nÔ[¾ûøçpóð Ü•ÍDLAõ²•»cQåP1„’ KV©lN�ç~幌ú˜ÈÖ²:Dñ×0 ÃØVrkSdç.¹•�–?ï«{\õŽåÃócˆ6Å’#èëïCÓò(vy–%q¡Ç¼HÇ]æ‹ïzóiniN¹Í)¹A„$¯ Ö?‹îZ…/~ó ¬X;¿¹ø£J€P/oqý”ÉO|Š/õ.Wbº4ÑD�«ô’ ½^‚. •$Þ ¤^•)-ºªõhŸÍÑó2×­ošè˜x ÜÖcä®·jÀG³Ö@}Œ=£[õÑŠ¸{®ÔäNUïåiUk¹¯j<˜¬‚8¤„sy“ÇS�Æñ™7¾uéïý†+s\sgEI+¯ Ž©‡1媫E¡(G3ϵö�Òšk~ŒŸü÷ ñ¨¹sÐÇãÑB�ǘd³ÜñÀ“][�[Ã0ŒMarkSdg–[WR¨z¦÷)sNè$g<Æ—7)Û»Ö3Ìnú˜5»ŽÝÌÁƒ}0öÞcƺ1VݹWݶ¿ûý¥Xv×j‹^ׯú*”GtUô{u´tlª‰Áƒ¯pw’[¹$U›Ç«’[-¬¢öÆ@Ÿ¢ SnŸÃa„g8¹m*·”•÷�É­É­aÓ…É­aL‘�]nõ¿Ž¦�Ú¢B�Ú›  :ô½e³9sF)§w ¯Ãe·¬À/.ø-n¼õ׆k^­c\/eE5ä ™!‘'¦=I×µqK�å¸ lX«rŒ3)ЪÃ+‘Ö^ã„) y��Èõ¦] ·J–™¦Œ’««d7ÉÔ’CÆí㢴‹º×чŒÇ<òa8èAs°×`?þò·«ñ½Ÿÿ×­èay»Í}÷£×¥hå!bî#•p1ÖP%ÖwJÉ®ê¼Jns•܆záÍCŸ¢V¡Ü¾þÔ ¹ý.ÅWr»9˜ÜšÜ†1]˜ÜÆÙ™åVèå/•œêå­�ÇË9½HUCÔ¬`y+ÅE—_‡ß\v ®[¶k{±“Wµ]›y\_.¨*Ô²âfC¥Èø©‡jOµzõ’šÄV²¦j¯”T÷ò…ÇS·¼n)¥6¢ÜIh'¦©�nŸ²©h<ùq�Áîûí†ÛîZ�Oñ µb¬ëR”£†kÖK±1n_nÌ€ˆ¶îª%T™’t Ÿ2]«®Ã—(·ª–ðŒ÷�r«j ›ƒÉ­É­aÓÅæT3 ãŸJ!µ”šJ±K(�œE ‰ ý5üöº•xãÇÿùîøó�-,�0æÏF'œ�–7]*_æ5‘©{Ù”’Èà§UA Üöüº«šàB^A—!ãxÆù©_¥ 6¸lb�L²Q츎§õ*®E*«Û&çz¹Çí8/LCTа¶Ri«Jb;”ÖµLÓ¢vÎÿËZüÇ'ÏÃû?>úûëxÿ›^ˆù<¦�Z›©in'™õ)ÆÚ^/“)Z]Ž‹B€Uš-Ý.¦µpý †aÆ6ÄäÖ0Œ{Å•Bg’Û � Õúëßñ±Ï×.^Ž!ÔЊfPPëË"DI•$¢dR4»ê ÍnÎ�¡¯“ry�ÛF´(“ãÈÂQ CÎé^Ò¡¿«*DŠ §N»ÒD§´îoÑ pQž{w‡U‚k†alkLn ø|¨j�^¢R‰-(z* ­rôŠK/AÜk! s„Õ½NÛÝPÔ^k�ëG}U)ÐKhT>Wª!×Èôó³ïº“í‹»èëvÐ×ë ÁaSCº¨÷z¨Æ© QL¹–¥ºÀ8\T"\™Z…¼B î¢Uí -ö”îA$ùdÉ ÔÂ^Êt¬’Ûz«°ú®Û°fñ]xìá{0Ý…[‰åqHêU BÆêMˆsVý)C�V)§Ý8G‹y†aƶDßE†a÷HšISx~èêDf©ºåÊñ¢SŸ†Ýf  切W VËàºk‡rØEô º¡JLáDs< 0^©`¼ZA;ŒóûbÏ£·rœÃ˜­¶d{Ü_ìBäš# óªù8C ÕC ]èP¦»”ç.}RÃ˜Ã¢Ž¬§º±~›a¾7Êá:ñZ&¿íªX¨Ž´š5{ÌÑ�ÄñG>ã£f4�dL—«N¯Jo�Øe¶ „¶ÄÕÍ�$³ºyŤa†± 1¹5 ã^q/ûÐÒ${)%ÏÏRÔ8…œþáÿÄIÇŠ#÷Y€þшÒ1$^B¹M‘… àfH)µi @Uä0ã¶®4˜ÂÚ“Ø2$!æiƒìJ'µ.ÓÀ j°e)°K—Ͼä•BK� | /Æ)½ã¨å”aÕñMC‡ëŒr¿CHóµ¨G]ôQºûÒÎÙÏêSðú—¼„ZœaÕºŒ¬]Ãí¹�zZ㱨ÃßµçÀýQ–%ïÒV¥+ÕËd)¥ÚëQàscâÒXa\9Ó£—¿æ—BHér®ï‚š9Ky,<gÅjýÁndžaÓ�ÝM øW|š­^*£vRT5îQ�3Îø.¾wÁïðüÓžŒ�¾öYxÛ³Ÿ„Ǽ/æ7CÔzm4Ò*1…“ãQÌñ¬‡*¥¯Êø•ŒR#Þ�Ô®B¨!—û¨Ò÷* \?¢V(ŒÕp%°IV§jêe3µˆ1¨|•8�L(ÞïP,½”"Ëx)ª5. CÌâò]¼.žzø�øÀ+ŸŽO¿áxÖ1‡àÌý?¿â¯æþÕY=ö¸êlè¡RZ™Ö,¦Ø&-äA¹Ì–îWcÌ¡d7(½=¯�„im2«fPU£pÜIlH�ÕKj: n(áu²\”.s‡ ÑÄÐ0 Ø*Ö˜aL‘�»�[:iÌü:X­¢oƼõ3_Ã97Ý€Á™»àßO}.¼ps°nõ.»új†k±dÕ:ŒQW·{X×KÑ¡Òå•ò0B®ÒÊ„&Ê[�» Q=Š­›˜œ§)§>º”J•ÖRX£*×�(‡!¿âZaèõbÄ=Jc�#ëçòú¸ú|ŠãÂj»Džñø“pÌ£ÀxœcÝøüêÏÆçüÃ� ^öŠÅž=oýàçÐNt=*(Wûó˜¶@Ò¬âã0CØës]gù0Æ:Èj}ˆú0˜Œà/y:hæ�ýä×0Ì•ÎsCnçª6p8‘«EWƪŒ!×_æqÖµ¦Àˆ5fÆT0¹5Œ)²sË­:qˆ\é£ä¶EߨÆåvoýâøþßoD7ö1× ÐEØg~ˆãõ0yäáè¯V12ÖªuÃX»z-VŽÄX|ç2,Z´‹/ÁÊŽ�Nc÷R”_*º§¶nS×®®{‹V©^ÊüdµjÀµ=d\P<•Ëi¯GÅõQ§ ©;ÞùsçâðýöÂì�§k˜5w&fö£Z °l¨…ßþárüý–ÛpÛ’ÅX3´ý•Œ­nã/|6=êH¼ñ¿ÿ=¯(_U=àLU&JYó€ibˆ²AW­¢ë�`F§çêwš5ôecøÎ+Ÿƒþº�§|òë褻ð©ëNË”ê`tt”ܼxÙÎæ°Þ_Ór•›ÜšÜ†15Ln cŠììr›¡Bù¢ÜRêÆ+9"Éí̼êc_Á9‹–!÷˜�&åSÇÝF–Ž¡×jc·¹spÒc�‡²7æ4= 6ê Jh€ˆÙ3šKÆ€•«F°|ù2¬^µ -n§îuã$Fǧr]姪CÔ«jQ„þF sgÎÄÜ9ƒ˜3{ýMÔû¨Cš1ªk(¿�q e-Ü´:ÆÏ/¿øÛÕ𘆠RE5ä1e>šoRŽgQžýØã°×>ûá‹ß8Q½ã�.…žÇÏó™I,“®{Ñ̉ïºãLc'C%ia8ˆ0Öl ÏÇ·^ó¯¨òŸò‘OR[÷¤}÷1U¬™ÐwÊ­:�\=\U]p+?sÛäÖäÖ0Œ)arkSdg–['OyàJnÓ ž�Û*êƒ3ñ†Ïÿ¾sãm”Û&Õvq«Çã¯Q¹|z\F‹á¥]Tô3>…lþœ™˜=ØGAÕ»6#°Ë,ì2gæÎ�‹�þ~×Z†ðŸq¹”8æ1ÿtéƒô^i"ãÎ16<ŠáŠñÊ•¸cé�X¹n£qíNŒl¬‡fXÃÌ9³°ën»bîüÙh6CÔëuDÕå¸NÉŽ¸¿Mî«O/¼1ÎÑN/¢F‡Ü ]û—/Kn{”Ùe»ÕN�ŽHÀ»X—ŒcÝšaܾv·­^‡•w\‡�¼äy¢OÿÀ‡Ð®<ò>¤¾jݪŽpÈü¢Ä¹ËƒBÇk¥h:Í5¶FyMMn‰É­aSÁäÖ0¦ÈN-·¼;¨­W½ •F«”Û¤ŠÆ¬¹xÕé_Æ–,G�òæuT"Ê(¶w \Æ|ÐdFCtÿœ¬Rbø¯Fñm0¨{]·>C™kQ¿æs¦J6ûUM�¾3L¹¡fõ�Ë8ß °›_ÃêMc `†¡‡£{0Ž=t/²`.æÏš�á5øþºpÉ¢!,îbõšµoµÑ¡àvzT>êêÑ:‘UJ8M©RŸº©)$KÁsé£xi¨[e@©ìgžŒ×€ÅÙAƒÂÛ¬ÏÆ.ó±g-À>>zØC°àÁû8™_»ôNÜ|×.ºø¯¸þæ;àUûЊ�±^Ž$)ìuŠmŒZ½Š¤3frKLn Ø &·†1Evþ’[É•ä6A;Ê]—º�Ùä¶+¹íªg°ˆ’PD%]*Uïd™+u-~z/^ *†9ºAãA�ëyå|wânTül¿aZ/³…Þ("ƹ[½'=ôP<ç Gcvµ�UÃcøÍ¥·à—^„åÝ$a€NkiBid…;c’r¦E2«—·‚”Ç‘QÔiµ�ÈG»¢úž„Fµ¾Î£ªH¸Wט昂í1ýa6 5§™C<Ž×­À‹«hÆ-4‚P 04žàø‡íƒG²?}ðîX8{&n¸c~ð“ (¹‹1–¨÷´â°Šjß Œ�¬c¾ôLn‰É­aSÁäÖ0¦ÈN-·”§ñEœµXrÛO¹­ñf¢¦¹�rS ±kþJC5ƒ%9tâ›S<)vcí㾨§£Ø#Y„ãþ0<ïOå>j¸òÊkpÞo®ÀÒÑq,íõ�ÍĘöQ�ÜËdÎÓÝÍ£{n?§xóXô"™z`ð&z‡�Üv�Ü2(ÝD)reÌŒ §ÌºxNuZkY„êx~/A�b¼?F6QÍû˜ÎócŸ�×Rvg×|ô…>öœ7 �ôáxÔ‘áo7,ÃwϽ×Þ±-¯Šž¡B)OÓ¶É-1¹5 c*˜ÜÆÙ™å6£@¥”Ö�rëû å6E5Ñ7{^õñ/ãœÅ«Ð¡ÜzÝ*å1äq÷èˆ='�ªoK#VCW1UW Œ9�,‚ºÊ Ô î„PÞõ´ƒ§¾?^þ¼'áÏ7¬ÀWÏ< «Ç»ð+u´¸ßZc&Æ[1¢ †„˜å1Ó�¹ÒWÝâ‚€û£<&i‚<($5ç�ûIBQeº™&U?�Ô*MYQù–"É•™nß]ë =®S�Ðà1æÁÖUǸ®úPOx ôň)ØIÒ¤×s›±Qô)é8˜‡»ï2ÿöòç"l â£_ü®[²ym€âšñÚ±vn…É­aSAß2†a›DµP{²”Bæ>š�Àõx›ÐAòÐG”%ð²¥�kª¾-×Ë=Ê¥ºÆå¸¶sËBJ˜×�Z"Ð�r©*a¦ øU…¡èeLJìQâÔËXNQ¨UñÊSN¯~>ùÍó±¤=H—ÜCq„Na¤CÑM)à­u¨ÄÃÞܲ:wÙàîꌃ’«4•»M)‡i—æÞá�Œ)ÅVþ:qÌÅQsš"ëI~)¶Ú.sÍ“1â,B›iZ—w0Ê}æ=K/A„€˻=Dí*íTó€‡: šh…5¬Èª¸juïýæ÷yL]¼ø™ÇSäú¨*‡š„0 Ã0¦ŒÉ­a÷‚^âêQðbŠl†F,!UsVjU EÒ鸶œâ—Qжqº^¥GÁ¥x«G³LõyUöÛcè2¾ªÙjÙ0šé: $«13Y‰Áx™ õl”k‡Ü»J�ï=ä9å=i T À«m_WµÂK(ÊcÜ÷xá:ÞYWÉRxí¥¨E-ì2ÌHDZW³‚g>êaøÏ}ª=>0$c¨Ô| µ‡)ÈV-Á0 c:°Ê cŠìÌ/”åTºÜ£R\óNŠJPC›ò÷àvï¹—Ü„sÎÿF{UôÒ-/×;T”Ëâ¶âÚ§%²CÓ œ¯Ž ²\/™KŠÎ(¥Ì¿€ËÕlX•qåiŠýûüú=ÿ†/�óS ÷ÍÇ“O<íµ+qõu7á÷×]‹+o\Šv·Š¨9ë(´1jÜ·ªUG(šðâQLLs(Ùæ¾%ðj‹w}Bî…ÄÐ ª+×¥Lëp4ª:¿Š[ÇÁШˆ)߻ϙ�CöÚ�>l_¶ß~ðÃ~þÛßá1 ú-X€}ö ¬HêðbßÕ×µÊì…2Ã0¦†É­aL‘�[n3$^5Šº1 ‚v ÄQI_?²(ÄÍ+Æñýü½æ¬äzCWg�RÊ¢<Ö CW–êj½º¼a`>ùª ËÙ„ÜH $·zñ+âyÒÅž3êøá^ƒÿ÷©ïàš;GЗGøÌ[_€Ýæ…Ú– ŸèÂ+ð‡K/ÃJ®¿²Ý�±¸†8ÓËmŒŸÉO(³i ÜT¶8>¥%L»¨Çª—[Zªû3�n�¦{^ˆnÐàÍãÑ1N½T0T¹n#ôQeÜ�:î:O8î<ô =P«æÇÅZ„o�õc '+qúkNÅàÂ=ñ²¯ýk{u¤C-WUÃäÖäÖ0Œ©arkSdç–Û©¯’Mª”J>DÂãëyÔ,Zb@Ñmö`ÙŠ!\µt)þrçj\þ—«pÇÒeÔ0 X¥�NªJãR/fÊ/EF%�”¹ÀÑé%#Ê ÷“§BÊ0(©êüÇUüàS¯Ç?û]\tÃ2DIŽA »ÎÌqÀ>»áȃÃÑ? ¹ÞŠ‘.¯X�¥ëÆpçÊ1,]9„;–­ÀÒ5CX;ÞF—û‹½€Ç joJ•«È }—AKt.™–”éÔùÔ´Êl㣨PÕõªÙ¬™ ì³çnØ}Áì2·ófV°€Rº`·]ø @ñ_:‚˯¼»áNܱêV,YÝÁ˜WC�âC/xöØc/¼îËçbÙj½FG+¦h›ÜšÜ†15Ln cŠìÜrË㓈ºrW…„‚K)õ2T+ê•Lõ^Û î ¬éQ «MD0–y¸âêÛpåßob¸㱇±8Çx/E»“` ÆÃ…7„ÕÐíe”6j¦êÍ2U#ˆT5M°K_Šï~øExÓ¾�KoX‰ ®`fkjþ8:hÃúÐWD¥VÅ 'ƒGï·ê¯bF½Š@’ÄøBžµä5:ÒÃêUCXµj5Ö­ÁšÖÖtÆ]¸j#7Mw£J„ …[’U«Õ0sæLÌé¯cï9u,ØeWô7Ì �æèÄ)ÆÛÄqŒU«3üáâËñÛ‹ÿ„tæ Ö´>ða bZÓ&e€Ç´§?÷ Øo÷xËgÌ´$ˆC-¿crKLn Ø &·†1Evf¹ª›Sfs_õKUÑ€’›q˜¦x˜� +è¨ÊjîUÔðVÑî-ÅUMjùuµE›c˜"<ļehuzè%1Vs<VŽ´ÐUËE5V´[ãüËiŒy}Þü‚Á¿}ò«¸ðö!xÑlÊ^q>†¤&õ®I>å6º¨µG1À¹³gÎÀ¹s0»YG=ían_»pÞóçaÁ¼y˜50YÅCgÂuÚÜ©c KòÉq¦§çäµÅ4'X¶z ·-¹ «×¬E'É0Ò¥ÈwR,Z¾Ë(Í^¥¡ƒGšSX«=dÜÖ ™�«‰°*X‹O=÷dì·Ç|üçg~Œ•«zèF>Ƙv“[“[Ã0¦†É­aL‘�ZnywP=Põ>«ê š©Õ ¥V“½8FLñò+ªJ�#¢~QObËå ·ïª+\ÊKX©¢Z«s¹/é¡&\Î(£­AµQG›ÛøªË<Œz¼E pÿƒ”æ—|ì[8ÿ¶u”Æ9½±7ެªÄ ÀkeFG‘÷yÈRnàENÈ}îGubkå¼=†z˜£F/ô(Öj§WmöªäX�6øÜ_qîŠjiªJÁLGR¼@™õÐ g1(ðªÃË5ƒŠ‹½”¡^bãö”uìµW#hRÔ(øÝñ•zMԪ̴¥øÄi�Çž{ïŠ×þܵ–âë…èñ±ÀäÖäÖ0Œ©arkSdg–[•\V(m’Û˜.•ø*Ȥr>Ý’ÇJ¹£Ðå”·8O¡ª²ª‹šëE.J­ÚÉU' bÍÓP=~å\·—qåÚ€“ºeëÆñ®Ó¿‚$ªÓIC§mZ¿Z­q݃µï}ã+ðšO}¿ºu˜r9ˆ­8@‡bÌDÄŒ_mèÒºÕ¦mÌó3�TòªȸWÐM]¯cÙõM”ñ B-ÐÔÄíP- (\BçT"és[ªºbž¨«ë#£tª›_ɘҬª a¹:¼=Î˲Ó2­QÚQ°}þIX¸ï|¼æËgañP ?«PÄÕ™ƒÉ­É­aS¡¸s†al‰aø”ZÝ*|™ºÜU¯c= bêU¬”²Ûs�=ø Í-¡0r½€ÿ|UiP)jª–T�6¤2.�sÛ8G3¢tÒo]5ŠëV¯ÅÀ¬Nç«ñµÿ~¾ñîWâSoz%>ô†—£Êh‚lµh5¼ÚjÄ•Q f‚Pu¨z½z€Uõ ÖVú0„è1Í ‡ 꼡çQ8RJu’pm=‹Cʧ‡˜që%¹”Û(dªRAAÖ<uÒ yj�WÍŒÅh MkHU"¯R\kÈzß4¤s¾Ž;¯ Ú® Œ•:÷ÑZˆ±&õ¸¦êª”âF'A׫1-†aÆÔ1¹5 ã^Q©­$Wh09H*U–© ’QÝPä·ã"HàŠQx›½ý½µ$  ÖÐöÈúf EQ>ç‹ññoýÿsÖñ™ïžåT1f^NñL)Ýš!áÖTZs±:n�ì*ÍLC™÷�RΙÜ›�[Q%¦ yÑÚBŠŽ ŠÔCì«é1 ¿‚ %Õ:…6ä€OΙ–$ˆÐ ë`+©4 ØLn Ãx€˜(ÍÍTOU‚¨’Õ­8E+MqÍM7ã‚K®Âå×ß„¿/^Âu(ÑD_¦­* ¹ÊŠT·–¢)i %ŽMŒ•Ò}_áþ!ÎøWõ�õ7çþU]C¥¾EPë)ƒæÅ¡ÚÖU·º1¥6F-ŽQ�sTz¼õRnc?@+ª [­r]I³a†1ULn Ãx@èPæ†j¬«E =NÓYý Qž`·z o~Þ)øÊ;ÿ Ÿ}ÓËð¡W<Í4G=SWº]Š¢zS…µYK9 ªèùUNW� ß�²ØûGéÂ[ ®D¶ *­Uu= NÓƒ™ÖœÒ­ª S•ºm´ŽJl5ÇÕ�•°ß_Ï6 Ã06‰É­a¹— :”Ó®çY?@Û¯ã†e#øÄÿý_ÿéUøÞËñí_Ü�ï]t+Ú�çJ: mN�UGN(醩š)c|zˆ2ÕŒÍ\)ïf…‰ôlZw}‰/7Ö‹j® ™A%¸w·U¦K kI„jRp}.ËÑ s´* 5�H+ç\£Þn»¡a†1uLn Ãx@ˆR ¯“aF’a MÑ—vÑHF±kððýçâž�GTÇaÏÀ�ÌÆº4ÇHXGZë+Jgé†^�Âcäù(•w5Œ¢–ÃÏzÈrµØ� K¹œ²«–¨¡›ÕûƒV/ƒûÃ8¸/ê­kÂó'ª<Ðx{%³Êyªv¡V'¸Ó¦ÂÚJ-‚Z�hRÊû²”+†aSÆäÖ0Œ„(KÑT©%ŶÆPϺ¨fÌî ðØG>{-˜…9» bßýæaÞü&Jàn»ÍDÖ�×c[t×Ò+)´ÍqÚC«×ƒ_U;º!ÂÀGÈ¡z£ý"î´'ö¼1ÎR7)²k MnSŠ3ï¤rg/O\»º>…ZÕšsg££V’.ú¸Î W«¨¦æô7‘Ç=¬^»A•Û©6…a†1eLn Ãx@P)f/ˆ‘‰kC·Dh ŒyX2Öŧþ÷çxñ›?�—ÿ×çðºÿü(þtþ�ðê'�WœüpìÛhcF¼³Â¼çz Ë›ó�ÏÚk¼¹h§Ò8AÚ‹];´3Š*qp’º™L[ }µÏJà ½…,F”vQI;¨0]íÞüZ‚ZÐE½5Œã#˜ÕîâuÏz²÷ œ÷ËË1äXë'<öû'Ù†aƦ±N cŠìÔ=”mEÚQF¡K0«6ׯˆqÚ»>�á Ä1ï†ÿyÝK0tÛr´Û>üЇjÐB#Ègôa`îƒpí]«qîÙ¿À×Ü‚!X¡^Âs‘w«ðÒ�ò9†ˆB©Û[’$n¨s³)64bvß8!VåZ٪έÞSuƒ¤u\ñ‹^Õ*ªsëûåxÞZ‰ù}v©ÖpüQ'âÙ§ƒÛÖöpÁ7…óÿü; ï»Ƈ2TÈÆÇ­b�8†1Ln cŠ˜Ün=ºY—‚8H©»–rûœw}k*!ößµ†gõPÌÈCøQcI�OùÉäµ:†ÇG±×Â…8êÀÝÑÇíË–âÏ7/Â×ߌåw� ëXÕ0¦Ž$MLu^üMnQCvÓâ»1’Û€r«-ô‚˜êÙ*s5A»æÈÊÆÍ9p?uèžØoá ì¿pVŒõð½ß^Ž?ß°Ñ’5”{`q³Š,@Çç1“[brkÆT0¹5Œ)br»e¸Î!²3š3põêÏz×ç±¢RÅŒ`»úÚ6²:ˆ6E®›Rî²>Ê®:>HPéµ1—’÷ÔŽÂQ�8 wß©êÙznúûøÉ5·»ÒÝåËV NrJaŽ1žõ>æäâ´T5g"ô²—Z]PSîf褕¨éw9=1òvYU;º~âºæ Âê{�©B³áA»ÏÇû>9ø@ Îo¸ãK¹ß›n_Š_ÿöB\yÓÊê†(êƒãÝíýðzTBY¼Î䖘܆1Ln cŠ˜Ün))e&À“ÛϦܮŽ" uŠÙ3?ð´) ª·›% ]˜:JyÏ•æ¸>LnMn Ø.Ln cŠ˜ÜnTF'·ý”Ûk&ª%Hn�ØsÿrØ�˜Õ°¦“!èÑí a&…³x k"osŠ'G%¤ª"°áFVTкWPPÕ€˜Û�Q2³(rç)ôBôƺøÓ­+ñËk»ª“£_/º¤ŒÛ %·Ë½Äíy„$¢ÂÒ¥›i€Fe¾ö¦ç¢A ~Úû¾‡NTŸ( ¾/LnMn Ø.ô žaƶg’—I$�L’¾þ~<ñ¤£±÷> °Ë.³Ð׬bÆì¹wÙþ.ûÁßu_0_Ã}ìÂáü}î°Û^ {r|w„ówCu—yh2®YógbÞ.M X°KÏ~Ê#±ÿ󑏿ÀB¤~ˆ˜ÃDãÃÉã™§ÒZ•ÚºÅ\(Ô7§Pk~æJ—ÕÆ­^x£V»c2 Ã0¶VrkSÄJn· u¿«Öú&^(+ëÜûàøÀËNÁç?üܸx9º•~ ó©Œêan^ò;cÞ÷t8KmÒVR5Öã*=„• µŠ‡ñu«°ç¼¹øÌG?†o_t=>vΕN\U+\¼ßø4æj¯!áHÌpgô¢^QrËöEëðõ7>�à žöžÿÃXµ¯hC÷>±’[+¹5 cº0¹5Œ)br»eHnSÕ¹�$·ª–ðèƒvÃ'_û\ÜvÕ­˺ÏiŽ\7òWÅ`2ºy)«Ë~„ä¶åG*CE”樨î¬JPÕšã C½$Aƒë<öȇã“ç_‰Oüô¯ný»¹â&O!eYée!²¼†$ìÁ“ÜæšNnŸ‹¾0ÂÓß{Z•¦Éíf`rkÆtbÕ Ãx™$g‚ª9W_¿3gb—]wÃÀ¬ùhÌšƒ9»ì�Y»îŽYó‹0›ãs9œ71tãór›ØsÞ<ì3w4o.î2ówÝsæ/@8kwDó÷ÂìýöEß>{â²åk°lݘò˜�£šŽs|Cˆ&B8¢¬#s¥Â© üCéV=ÜŒ²™Jxy )ç«ÓÃ0 cÛb%·†1E¬ävËP «7è›�kVwðìw}ëBÏ‹pÒ¾ 0#ó1žRk)2¿ ?US\²¨¢Zþw¹,¿,ocóµV¨ÂZ·¾‡„¢Ù vΟMn@Ln ØNŠßÝ Ã0¶1™Ä0›Ã0“5Dqµ¸Š™Y»R¹ÛnxÒÁûã¤}àˆYM'¶-PõÅswtC£&ºÒÜ�e‹ ê}Œg>ãéõ2„½Þ}>õãËñ¹Ÿ_jrûbrkÆtbrkSÄävËȽYža 9W­Žñ¬w«)°�Øg6>úªÓð•O}»e)’(¹ ºi•[mh-AbWܾ&ߊö2µ– ^ÍRÕ»-ZK²¯^Cot{ͥؾÿÝøæEWàçYk $&·†aL'&·†1ELn·×XQçöÊÕžùîOcu¥ŠcÞŸ~í pûÍËp˲QŒd]ÚeŠA¿«j0�B¤<ŸŒäÓ£ óæFa·)$U%·c­qTª¼$Æ %÷„Gî‡/üì œ~®Éí‰É­aÓÉÝ¿) Ã0¶Y^Cš0ôÑn*Ȫ …md —ÿî2ø+—a¿�}ÂöÀvõ×`—pÕݼ`f{Ëîæ€óâ5˜¯ãp3³aôçëP‡}]•Qø�6ZÁÎÿÓqË�K&R´y”½˜Ý],ó‰©IeÍ)Úóô×U£`p‹<.÷ó”ÇNaör×Ñ× ä•Ë%çšP—¾’YÕ?Þк¯a†ñ�XÉ­aL+¹Ý2$s9óJ/”]½:vÝï®�BìÑèá!ê�:¨¢tÖ2„ÝÞúê÷Ž^" ¸.MRµoõBY�nØöRz´ÎM†HŠ˜¤¸³Ý‡›†kLÏæ•ܦͽ˜KaVEvá'@?BT+ëð•ןŠFá”÷ŸÉ¸/·I¼�ã\âº�ÔV#î§ÓFÐm#bú:3úÑE‚ÁÎÎü/ãw›‡ÞšµŒ_�Rò SÀ[¶T—©RL.¾+¹5 c:1¹5Œ)br»e¸:·Y:!·)åöóNn}ðBœþêSQ£‘¦0FñËèq~ºù*§Ú á@Õ&îp’Ò.ã¨Ñ™\<Ý ƒUŸ?ï |ö¼Íï~7å:™/Ñ'ä¶SÈ-·¯©ZÂëŸ3!·g ñN®¯äTC+÷‘¶[”áš+µÍ)Ùݺ‡¨ácæÚå8ë�¯ÂÁƒ» ÚC’÷j§W[RòuL.%Åß�“[Ã0¦“[Ø"&·[Æ=ÉíQûÍÃ{_ú |ñ#_Àõ·Ý…¸ž¡ÆÈS‰¢J+ï�ÜS�Ø6%2AD) )ÉjLx”Ä ÏM{íZì3>>wúéøßß]Ž�þäJëôÊí3Þ&zAŸÛF%­ŒY[»é$ÍQ­ös®�®Ú(#QÄxÚKñ Fö¿ïù2oÆÖ¬†zŒ§H›O±ur›«$—Ûí$—™É­aӉɭaL“Û-ãžäöÈ}çâÓ¯>.»ð/X²ª…¸–"¡Üª‹^ý,_¨NjêwyÔ–-å6óy£+„5åþjÕÈ•šÎ©7qÚÓ‹Ïžw9Nÿéæ7¶Ùrû�3Ññû¹…*0¤ÔXUeàŠŒ\sT1¢›0}µ¤i†fg±G/{Ê xÜCöE?·éµFÔ0b?àqù®$ºB1V uL1‘¼“[Ã0¦“[Ø"&·[Æ=Éí Ùo=í ˜§* ”¹qŠiähÐè6¯Î­(~þ/¥Tƒ˜A]ð&\¢W²¤N5ÞþθðoøêùÝ*rÛ š®tV2*\ .÷™§)xHhT+èuZ˜ÙlâqÞoxæIØs¶‡ÎÐ:4à ããcj5î3¤ø®ÝÞ ·Uj\�ï†díИ܆1�˜ÜÆ1¹Ý2îIn4�ã°9}¨µSŒg’z† £ÒK6On)Ã^ðæ¦—¯Š  …µÇÓ—ò %6O(¬ ’vKÇë¸~•xº«%œ�$j"Q;»•Ò”ñ'Bc�£ÚF-ÆÁ»ÏÁsŸzNzØ>˜UÐFˆ.Ò¤��òsûEWª’åÓ—YÉ­aÆ=`rkSÄäv˸'¹=ñ°½ñ®=s£ŒŠça˜BÓjë/j§n^Ñ4—JG%»ü�˜£jVMyiv…·¾¾ÀÇWο_úñÖy¡l¼›¢oö<Œ�t‘St+<Öxõ*Ô£ó½1µï,¼é…OÅ”ùÞãaœYÚ¢|s}÷F\Ä<*ª0¸–TL¹…òNiÛ�¬“[Ã0¦“[Ø"&·[Æ=Éí1ÎÇÇÿíYøÙÙ¿ÂËGЭ&è=ÄiƒQ(ï½P–z_Š�R¥E�[g‚FÕ¹MZã˜ß?¯{驸ò¯.ÇÇÏÝ:rÛævž1=5ÆÂOs¦§‡}gWñ‚Ç…g³/fSr1²ŠËkH²:¥V�40o¸ËÜ ™ö*G(·R{æTo× 7[õ·{Ln ØNvž»£a; zI‚;—Þ…[n½·Ývn¿ýv,^¼‹–lFàzw,¹“AÓ‹qÇb —,ÂbÍg\7ßx3–,Z„”ŽlðÖiEšVm4ù “£‰.ú“!,Öá˜Ý«øð¿?/|Ü�ðÚcˆÛTýˆ3ºr�Óc)Ï![’Mà ²`} í:éumí»1 Ã06ÂJn cŠXÉí–qo/”}øUÏFͳ�cz ŒÒª»ÛÍ…Ù¯òW½€U¶”�(ðÜø”GbÈøk¾tÞåøÂVhçö8=Ô\Iq¥=„… àO8Ï<þÊnϵØ…Ú¼nÔB�Û¨s‡Ì‹¹™®šþŠe5xYÈu<ÄAŒ$ì1jïÖŸHÝŽ�•܆1�˜ÜÆ1¹Ý2üœFH¹­÷ âš5)žóߟ¡Ü60Pö¨#l÷ÐÕ*Qa#¤ül^®RN]Ñæ†öm%­1¹Cyô+úyŸÂJ…Ì{1ÖÅU,S‰hQ*ª…TKþ-$W³Ül'×êL!äz”15K¦:²Ý Í1ÀôÕÃQ|ú sJú‹ÞýM4çb|í ±ÿB¼öÔ'਽硷nú#Ýv‡"]A^•êð⢜ÒËŒ>爷zZÓ>3J~Ê�èÆ�€é)ŽnÇÇäÖ0ŒéÄäÖ0¦ˆÉí–QÉbס¸_Ç­mÏyë'°®>m¿F� )o‰“½JÖ�ïÅ®µ h‰Æ6¾y•2ZPŒ©.9îäu ç-Ú‹U‰­:pØT|wG² …”CM«Tا i‚:�§éuñÁÿ|.ú«ÞñöÿA�k¾èÙOÅO8ý•Yk UÄNìõÊ›Jl¹µKƒVŠ­š)+q š¹É"u®î˜4ºÃcrkÆtbrkSÄävËÈ‚½ÈC;êÃMkZxáÛ>‚ñæJl ÜºŠY‚0ïºØ,¤ÞEÎõ”»…˜*¦ ¢W.ÓH)‚ZO3ïi™Æ'KãzÖo@&Æ=‰i6¡Êv‹jjÔ QzdžQ‰[øä;^…J­ŠÿûÚwðö×¼{ïÒ‡^+CÞÃ@=DÒmMHl!·RZ×®û«xÿù0¹5 c:1¹5Œ)br»e¨m/¢Ô5fàoKVà�ïÿÆ(¶m lBécÎ"ÈS'‚>-6ÈfP'·– <žúíK‚¼¹±袒Sh)«.�jS—!�‘vƱË@ï|ËkqЃö@Ǩæ>/â.¼¤‹P½¦9£Îxt…Üê%Ê&·&·†aL&·†1ELn·�ÜC·ÛC¥¯õ�&îZ×Emfͽø5Y8•“ÒÈ ¥PíÖõa7¨­‚–—ã“—‰Éë•Ë&ÇqäVëGLwG‰”[�uIS#ÞRÇÖ� )®a Ã#£®´v°¿‰e~|laX­ªC˜Ü2ÿMn ØFLn cŠ˜Ünaê#èÕZYž¢Û‹Qï£Ü¦E¯ª_[”nJ&ST] Tß2kK[“ÇÅýXæª%LLÞ7þD�[Õ¿-Jn�øèµ»¨WBäq^–"QhAè6 x,±zKPUÝ[Þv¥²e�[ÅerkrkÆô`rkSÄävËÈ]ëA!u®úAÌåÎÓ‹S¹*#Pp%€I®I±-ƦÉôæ -š +Ä»hsAÇ!Íå“WO±T5ôÒY±Å†´S\“ǧ8´¶ÛÞäÖM›Ü†1Ln cŠ˜Ün1Å®¨¹.Õ­M¨xÔYJ®çzßRɦäOâIé‘«]Y5¿Å©åñäq!9tZɰñz …ˆN^&‘.Ç 6ÞNËJ—ˆ%¯”R'éZ³\G0õÜ4”ä–QL¬Q®§´¨tZC­Rêò?#&·†aL'å�Þ0 c#™£ÈÒþŠÒY…�‚£PÔC�|‹*JH¥…íÎNžW”}nX61b½õÛ«‚[6±^¹®«Ÿ°Ñ²�·á¼J ’D¨%ê±Ï!Ö‡jâq׉2 yQ²[ŸJhÊq'¶¢8rÃ0 cz°’[Ø"Vr»eèÆS”XêF¤¡DÒÝ”ø'ã2µH ’Øâå;Ùœ~ŠØ7•ÒF©êÇ*µ¶ÔX9U”Ì¥Î1]%ÃEyrqM"[^&¶ÂJn ØNLn cŠ˜Ün®³Y­“Ö‰NŽ»Ú§”Ú¢TWUŠj¾º›�$¸Êái¹y1¢Í�GëmÓj37Åp÷z²Nnù_Õ ¡�Ð`÷‡‹\ ©Ý$óZ ðχɭaÓÉÖ) 1 ÃØÜÏýB‚¨‡µ† ™-êÝ:$´åÏûœ,êáNl11®ùŠÊ�OLoî²²lxs‚ÜSâ­ .x]|ªfp·P¬[J«^’S½b½,¦ é¢~m¹gýåF†aÆ´`%·†1E¬äÖ0¦†•܆1�XÉ­a†a†±Ó`rk†a†aì4˜Ü†a†a; &·†a†aÆNƒÉ­a†a†±Ó`rk†a†aì4˜Ü†a†a; &·†a†aÆNƒÉ­a÷�:¤Ø:¥ØœtL,w}lèýk}O5®“€¢74�ËÊ87,+·Ý°ÏûÚï4P$h=åäF³'MÜSº6îsÍ0 㟠ë¡Ì0¦HÙCY»Ýv=”íÈt»]̘1ããã=FñøÔý­C]Æê¦!yÒH!ˆP—³’¥r7¥[ê:w2ÅôÝ´s=›¾%ù\w"o¹ß{Ä¥5Gè%ü›#õBd^ cHäêÚ7wG’ø‡£Ëàg1ãepbÈ<Æ“G �ëNWqB]s¹_¦cšñ™í'㾕êÊ·Èqîšs|ƒ¦4T*r?tË´�;·tÞ”®¾¾>„ah=ý†±E˜ÜÆ‘ H%·e¢;â—rš¦N(z½ªÕ*.»ì2üâ¿ÄŠ«&ÖpÊ5D9œ8V$‘šš|S)Æ7Î�Bv=oòš›¾%iýb›‚MI™öáñ_!²Ú3uÖ‰ª“hÊ_0¡‹ÚCJéÍ@é“üi}Ék)ìÎh)�¹’[{Z.ùåÒlãc™¤ÌŠY)Ôî%·Enºð/�‹‡-õÕ:<[K )žØ’× §ÁÜ]fã°ÃÓŸüdÎ�DZG]›:ÇzÛÞ®ÓRºMn Ø &·†1 ´Z-'¸%;â—²„gÖ¬YX½z5®ºê*üîw¿ÃüÇ`áÂ…klû‰Q‡&þ1/ʛΦréžnIÒÖõlrÉ¡X_º[”‚–H ¹Žh¾ï´P~]h3§\鬶�j28É�ˆZ‚ëRË&‹ö4áŽ[�qs·¥² ¥Â7CK&Žk"&Hâ¾’͸î¼s1~ù«_aݺ!¼è…/u^Z=ÄH"õ£ñí ¥{²Ü†al &·†1Ê��~ÎWÕIƒÄvG”[ÉO§Óq%¶×]wÞö¶·9ùQI`Á}³ÂóyÜ:þ‰Y÷Æ=Ýzîi¾Ò·Aãî m_Æq÷õ Wå2þ_¿„3UÒé„x¢êA!¶*¹-×â~±L¥ ›—Žû‰Kv‘07Z´7_#ŸByýéÈ] mžgÌ/�×eg�ý}´[1N9åÔëu·\×§®Õ"O·tî+• šÍ¦É­a[Ìöug3Œ”íñ'ÞûK’$ÄE]„ÓN;͉mxhS >ƒª8�•©.«ç;ÇÒ²Âkõ“ú¤@ù*ÃÆ” צ攺7i´”½Iö©iÉjQÝ £1ºúªnE5O8Æ¡‡PîË×qq^qlÅá–ã[ Æí¹c×¾‹|U¾‡n¨4Lä�[‡éä©ȆcZ�®Ë÷¨¢z·Ô <ç9ÏÁ7¿ùÍ⸸­R¥£Û[©­(ó_Á0 cK1¹5Œ)P–2î _Èžµk×®¯ž tLi#Ž;œÈ(‡)bJ°Ž[¡Ýî¸@.dȹX34ìj¼vâIš!åzZ'ŽUòY�&12Ê•„ZñH´T¢XN+ ¥|iž‹;ëq¨x¸-ãëvUBÉ9Ü}¹}NYMRnË5[Ýç÷Ðf|m´Ú-ôÒ=nàb汤�ÆÏõQ§§}ë8 Œ•þ„ëðD�ñi¿J�êWé*®�K&…Ò.4¿DéÓt9¯Ü¶<–âx‹ezÎÅÅu³ŒëåÌw¦[K2f°ÖsiÒ2æGÆqÅ¡­ÃJ…ÉÐcº+µªÛŸÎëÊ•+ݰȣâ|l/%£JOùù)Ó[ކal &·†1 èËxr‰ãŽˆL?[K|D!??ÇøØ0.ùãÅX¼h1Üq;Ë ‘£Æ­6î\¼×]úúû0ÞŠ*î,n1EžH{® ‡JIý È3‰¢ªth’> ˜~šÖð®»îÂí·ßNé^Ãt¥hwÆ0Þb­¯´Jî$Eº½ŽÛe!z’» µz+—-ÅÊË�l+-б¤Ö3¬[¹ŒûXLùí`l|±ÉBº$‘�N­ÑQ¯J¨ÇÇF×/×ñ+¿§Jï�dr¾†ÊOIªÒªcÖ| ‡††píµ×â /tëh¾¶í1oFÇ»è´{Ì‹is’¸ËPä›HyL*iN(Û:öœ’«ɹ.ZÜ>cœQXuéRü%Wž—iÞ^(Ó¢¡®ƒí)m†aìxß<†aL ŠÄag#Kº8ã¿…ãó8pÀA8`ÿýqàƒÆáG�g<ý¸ð‚ß:�;êáGà©Oy*z å”2•2R¦$”’-ߘG!RJ¥JmËÑZ­æÂÈȈË?Iœ$W%x_üâñЇ>g�u…5¥ôHЊ7ꇇÇ)¸>3¡HhQ°«”b•Ðv’⥩”RØk�ã¿þó­8àÀpÅ5×¢K׫T#„”áÞðüç›ß„ƒz¾ÖÙôt�?ŸiNÝËYéjrE)ç0Åôõ¯=¾öµ¯¹´*HÄ&—4+mBóÊ—¶ôРi-{Å+^�#�<�üãqÉ%—¸¼Sʸ»#SüuŒÎTóÔ•«’E¹/¥­×-ªS¨T—+3x<ö� \‡y¡|ãCƒ2¬U\z¶gJßY?C†al[ì.bS ,aÒ²JËé�‡^£ÓC€Ýî†W¿úÕxö³OŬY³qùeWà{g~Ãk×`”rRÞÆ(™kÖ®ÂÍ·-¡pv0:ÖªU«\‰¥Z•h4›Ð6Ö®YCAv¥›Ë–-[?”ÜJø$…�{Üãð¢½ûS¨•³*ÑlµÆpç�wrý1,_¾†Â8C«V¯ÀÒewbõê•X±zMQBÌP«U¸NñS}LìQ3—W‹(Û׺W�‚]¥`.½ëN � £Ëô¨äxíPQUcŒÇ7>6†ýèG®äuݺuNÊ”^‰¹~ú¿í¶Û\ÚµL×ÂâÅ‹]ÚTÚ­å7ÜpþøÇ?ºœýüç?�G<⮤RÛÝzëmÌ�!WÕc|l\^ФSf—/ 7Ýt‹Àˆr™¯w.½+V,Ç�ò’æîœ˜ÛÖju�>úo!ŽÛ+ʧ²Ä[ò¯ã3 Ø &·†1EvöR'ŸòX¥¶[)|ðƒñá�|ßüÆ7ðîw½Ë•"Þ|óÍ®„Rb¸níZ<óÙ§áÈGƒÇ?ö±xû¿ ·Ür Ž;þ±xú)§8Ñ“´¾ày§áä“OÆ\àšSiæÃþp~øá8úè£ñ‘�|ÄUUPÜùË_°rÕ ×!Ág|O|ÒÝ:‡v¸kàg?û¥Ð�âtœtÒI8ú¨GsÿGâ´çœŠŸžwrn×ëöœèöâÔ½¨åN“l™Ò®Nª”ªV§‡ .ü-Ò\¼ÇŸp~Ø8ö˜cð�÷¿¸è"üË¿<ÕIò¹çž‹×½îu¸ãŽ;ðoÿöo8ꨣpÈ!‡àéO:^ò’—8áýë_ÿꦟøÄ'ºáqÇçšV“ëAèë_ÿ:.¿ür¼ç=ïÁ³žõlÆñ(<üÐGâ™§<ӕ芳Ïþ>žøø'ãÑ�~ ãñ¼ç=�ó~äêàž{—�üDqØÃqóâùÏ~òã¡QW[ÅÅqvTê»]“&¶†aL&·†1TêTʭĶ”ÛržÐøäé©ê¶º_ÊSÜxã�¸íö;ð»ßÿŽ¢š`Án»B½c…•#� «ïZŽg>ýdŒ­]Žo|ù«é¡Ù?ˆK/þþø›ŸaÕ]Ëð‡?_Š%K—a×]wÅ—¾ô%\|ñÅNüÞ÷¾÷¹’Ïï|ç;¸öÚëÜ n7ÝtZcãX}çRüÏÇ>AÙ½ ~è¡8äÐÃqÙ—âÅ/~V,½?øþ™¸õÖ;ñ¯/{9Ž<úѸòÊ«ðýï}�é÷˜n•zÃG€ÜI®ŽE?ÿ§<‡�Vˉ÷Èènç±]yÕ58ð ƒðø'ž„5ëÖâ;g~yàá)Oý½ ‡öÝ'>öqøö·¿íÒªú²o}ë[�ÔþøGçâ�oFÖẫ¯Å_¯º7/º³gÏÆ‰Ç>9×éf=ÿ¸0><ŠsÏ<w-[�×¾þõxÆ3ŸŽK/½ßb¼×]w=¾ð…¯àêk®ÂCr(<ð@÷ ð¢>K-Á;ÿûý¸ù†¿;Á}øÃǯù¼ïÁðxìª\èŠSË ­Ö†ö—·îéó Ï’É­aÓ�É­aL‘Rh5TÝÑRx7þ×üý¾íEòõz¿þÕ8úQÇâ!‡‚oë[è¨ã¤'œÏOÑéµöÏÁy]€/~ì¿p컢Î[Ìh§†ç½äh„ÎøÌGpùÅ¿G; qàa�À!> Æ«z¸?8ûûî'{Õ±UÉí¡‡†n/¡8fÈ{)î¸æZ ÝA!ž·'>÷�oã{?þ!>òÉ�á¿Þò άâß^þ2üËSOÁx+7D”ÆŒ»íÄGØèG’yˆüÌ•hV™^�¯¬BáåP�;4u~…‚UÅ �{¾üͯâ}yvÙ}xµ³솷ü×Û0“qzàÁxîsž‹ëþv-¢j»î¶Ö ­Å>ÚÏóßþr%¸cÔƒfï±νäÏøÓ%—âíoþOÌâ5Òœ;¯{ópÌ#ŽÆ¾‚ÃcŽÇê5+°øŽ›(÷mæuÃÃ-\ó·[PkÌÂW¾ú üð‡ç2_>€�ü¸éÆ¿á.>$~³fz †[®çöÝ”ù)qç5I¹ÝÞêÜ–UÊσÆ%µ�FÃUÑ0 Ø*&·†1�èKZ‚[Êmù%® /õOíÙ†FÆ»8ä�‡âßø&¾ý¿ßÆù?;ûÛßðüç?Ï5A¥¢^ô¢bttŸ:ý“8묳qö~ˆ¿^ñô:]'y>ωz�K;m÷3}ÜS—ê‡Êp›û]»±i’ à±ôÏ@„hªÓƒnŒöxj™!¤(z¼m–/�©ž°ê‰ªêÅÙ?ø�«‹D!Í:2é|È¡‡apî ÆÛcHÇù .Ähتžp;·ûØÇ?„Ÿÿâ—8ëçPî/vU<º”sÕW®òZÚm·<Þ>÷RÚ‹_üb—߃3™wUt˜Žï}ÿ,œqÆÿQΘ»Û|,[v'ª•€q­N¨zÇöÂÆŸMk¨ 壆š'´ŽaÆ–`rkS¤üÖ—²¾œ%'›jΨüÒÞÑp-è…-:Ù‚… ðÔ§>Ï~Ö³ðèG‹™3f"ær×f-C- ò8s®¼déR h•rÕÁü{`Ÿ}÷wMuýä—¿v¢yêsNu/j½áõ¯wíêª~©~æŸ1cJ›^æ’ð¨Õ‚ñÖ8fÎĬysqÓ-7á²K/Ãïÿðgû¨£ð¨£�Áí7ß‚5Cë°ï~ûáŠ+.Á›ßüfôõõ»×tj½€R´›Èõ�‘«ý^Š–¯éºÝÑQµy›8Ù’ê|阸2šýuW ªà’,Á’%K°ní̧LЧ>õ©®W·÷½ÿ}ø—§> �ÜãÑèǺ±!Jvƒõ~W‚ÚîuTB0Ì™3wݹ«GÖ⡇êþã?^»¾•…þ�÷°¤—ÑTmC=Ç=æ1Ç1<ÆSŠ™ƒƒøáÏÁOÏû1žöŒ§áq�=ûî½¥[M�/å͘9Ã¥q{@y:ùsQ~f&¿H¶£~N ÃØ~0¹5Œ) /â�¿°'ÿĺÃQSèôÆþŒ™³(!ju Fñ‹ÐsÍd…höõ¹ÉÔ¦l—ëUé'iOm¯f˜5w.·íº^Àúê <ë9ÏA‡^U8å´çaþì™è£Àͤ´þô§ç»—¥žýìg»–ÔÃÁè¤GyØh6ðà‡<{콦ã™O:ÙI¤êž¾á�o¦äÍu²zËÍ7á€ýÀ;ÞñŒŒ�bùòå®D¹Z©q»íV�j�ºª&³*è¶:Auâ�a€2:Ð߇n·M!UImâŽM%Ç=[%¬2='¼W\ù<ùÉOÁSžò—M?:÷\Ìâqè%3½l¶çÞB;îQˆy]¤Œ‡ú¬t7(ç«(á*UTå#ðѬõQrcÁ.ópúéŸæµSÇʕ˱E]/ª�·ÆpÚóžë^H[´è<í_žŽC˜O{úÓ°rí*—gÇÎ<óÿܾÚm•Xgèg<’Û$.š(ÛÐçdãÏŠ{‘AóMl Ø<ÞLìnb[ˆ>> åÏ©åÇI_Ôú9Xh\ËU"8ù‹}{Dé|ûÛßî꼪•Gˆ,îàï×_�_]p!öÜko<öq'Qû\“U•(¤¶eÂg~õÁùxæ)ÿ‚~ù£Ÿã¶UÀ£Ÿðtì¾ç ÆW-¡= )úðÃ?ü=d?ôç1†‡GðóŸÿW^y%ü rÏ|æ³°%U/¯]ôûßãq»÷^è~jÿü׿�»Ö#à~~è!8õ”§"¡Œþæ‚‹påÕ7!¦@?îÄpãõ× î´ð¼ÓNÅeW\�[/Å3žýÌš3OƒŸu�¶†pñŸþ‚kþ¾'žx¢ËŸüäÇxð!ÆãûX¬ZCYý%1¦Ì> æ/À¿wn½í6 ÎÀ)Ïz†Ö­ÃÙ?8Û•¸ª®“w"Ž=ú,[zΡèÎÛg/ÿÄ“0ƒŽõ|û[ß@é¤Çâæ›oÀe—_†£�>–b[¥Kº6//¤v …Y¥¯ ,R»¹}JaÍÝ~Ë Êtm³KåÄÌ kêøø°ÁÑ �òÉ ¥ú;ùŸÛfbà¤щÉõ·)®JY¨ÔißÊ Îñ¸P!çÌœ‰Ò:*¢UA«.]#jƒ7ב¯�Xl8’y·�‰åŠC¥ìY¦®‡%Äp¥³e)©d6á9UÜ:¯åümI¹o}&Ê¿íõó`ÆŽ‹É­alô^~iëK\?ñ—_ä e‰­DPa{@Íi©$mþüù®5€ò vÅæèG¹Ž¤KU2O¥©*Í(U]'Œ)Wêë«#íŽ!¤øÝ¤‰…²qŒâ'™SÎ)·þ‘D–ÂWP.-öç$Ó¡•Š[ IŠó£pw´n´dã¥S,—š*­yQEbCw‹€�;ü[¤Q»�œ†LÇ›œÍõOÄ©€ù®s§ÖÔU±z7Ó´²Ä!¶BûÕgAOî!hâs`†1�˜ÜÆVB_Þå·¤±Ùl:Ñ•d”lOr«7Ö%§žz*^ð‚¸âTÒ\R¨¤�XAèݲò88HykÉ=Š”f»u¬Z�4K>¢j„îøýkuýþ™§Å¾%spã2× {UT·Éú•Ö—½¸ù¼j¨óÄPJn1orП»³~Îäõ6 H9ÆôrÔ­Â�»¹n¢lÈÅM1±âz6ŒoÐÓ ±(��N‹‡•#îö\kïÿñš×¼Æ=\éü–Rù@ ªú ”×¼†J—aÆtb/”ÆVfòGL²¨Ÿ‡õó¿~"Þ˜RtKÉÐËFJß·¾õ-÷Bœ:*:Š"u“o“çè§vŽóOî©<2 cI(%ȱ[ž¤× (¸:vФiÃIlúø‹—Äô  ’PÉr™U‡P((ÇÔ¥®Æ‚j’Ù²€ª)”bð@ˆ€DEi,[¢$)Q³`;ÊåŒÇ’¹Ÿû34’ ‰ ñC„©ò5Av1ºüv¼ÿQ'bN7C°û®ø¯ Š`æ|Œ®î¢ÖèCä³až¢øH%þ¹ïâ”,o�躙ü`Rþ: ‡¨­E)µBûÕþuÝhX¦Å0 c[b�Ò†±��°éAH- èÖµ¬ñò:.¯)Ã0Œm…É­alC&‹ˆ�@ê‹_PJn)å:“¹'I(b*¡üùZéPzÊÜM­»=‡,cÈ‹* ê ­ƒžz kµ¦9šAÕÒN�ǬÎ$ˆ1<•Ô2®„Û(h\ñè59Å¿©ýnAB)ÑÔu¥àŽâÛÜpÐÙÔÓ˜‚Dº,©�|­+Ü߸ Ã0¶«–`Û)}<7–�oŒæÛGyêì!Sg”Üj’"ás|ìG¨%|ˆt{C¨t†ñŽ? aEÍÇn¼Ô(¸}H¸}G-*ä1Bæw'T5‡¢õµ¾p?LØá¸§_ $¨Z&yÕpr0 ÃØž0¹5ŒíI¬„¸ÿ視2ë¼"ÞÏ~FÏG”º»o|m ;†·.<³[)ÖÖ|tɵ|²ïçíªén[]?G�ÅÜ>GFœãƒ³àÛÇÍ0 c»æåV³ïºë.|ï{ßßøDì¿ÿþnž„WË%T��Dum9î{Ò$u&TZ«ŸÓÓ8á0pß ù„Üjûû’2U‰Ð:.Ž«ôXi¸?2§z© ª3,Êx$ïe:µ< C7.&g‰ö¥érž†[’ŽMQ¦AiÒ1*¾2o&s¹½ØwÓM7áì³ÏÆ[ßúVÌœ9sýq†Q`rk†ñÏËF宥´½å-oÁÉ'ŸŒƒ>ØÉŸDK¨·\gx|œPÀ’4sòÛjµœ˜©Š‚ðÀ«HØ6H­dMu{%s¢œ?9h’¾r¹¶)ŠßÜP–@k_J—âTÚ—ö­ eZ¯dòö¢”OmS¦GB9h[í[h=ɽ„yª(ÞRœ•FíCñ—"«}—éÒq”ù¯y*MÿÉO~âÖ1 Ã0 Ã0 6)·¥Xé'pÉ—B)•°R5ô)±õF�2ëcxÝ(¢0(ªÙò¯çé'|8¹å–ð\Sa…ñ '„ÚïÚµk]|üà±jÕ*Œ��¯—èÉèX%•ëÖ­s’\¦G2¬eS¥SÅ¥¼8÷Üsñ_ÿõ_¸ñÆݲ²ú‡Ò¬ô)-š¯P¶hQÆa†a†a܃ÜJ6%qÚ®~‚§ÌI´T‡¶ÈRJÜzãõøÞ÷¿�Ï}úsøØG>‚Õ«‡ª-[þëJˆ'JYn7:>ŠÏ}áËøé/~‰Ñá1:o½c†‰—>rWª«fÅ(oCš#RIkÜÅŸÿüG|í«_Åõ×_¿¾„µ ® íƒÑ$nž¦TúY„Ë.»Ÿûüçð¡ ¿½èw\_%˾óßdœß¢Ü®urYŸ¶�ˆ7Õ ]1’´�ý÷Û¯ú÷× %™L™VåU³HïD(ÒÂq¥¿ óËu”F•Áj\msÌ3Õ0Ào/ø5¾üå/㪫ÿ†.�?f˜AÈ>LðŸÊÝ’{z00 Ã0 Ãøgääˆ*!RŠb¥Vw3B•°zÝ6‚¼G;ëàÒßý ·\w Ú•Ëpþ�ÏE¯£e±¨‚+þr%>òÑ�ã;g~KW¬€_«¢E³«u\öÇ?ã§çŸ‡‹/û=>yú‡ðõ/}7Þrþø×Ëñ?§ÿû…o`xÕ*D¿Cr^ýªWàˆÃs¥¨?=ÿg¸àÂßã�—\†w½÷øÔg>‡ko¾]Êd»ÓBÒeò†èÌ-'áÕfÆÆ[øø§¾€Ä« κtÆÕê ¤±Oi qóÍ7㓟ü$>ô¡áœü«V cÝð~{áyNf׎ã÷—ü üæ7øù�ÏÃâÅ‹y,1~pî�ð£ïŸ�¤ÝÃ’•Ëñ­ï�‰?þî÷è�´±vÅ*|õk_ÃÞø¼ëíïÀÏ~ñ ´²ý6®ûÛµøÑ™gáŽ[n÷(´úÝo¸v‚ùPÁô¶Sà¢?ý?9ÿ׸úªk™Î UCLh Ã0 Ã0î Ó?�eIž¤qî‡ÔØ,ÏÎKòŒóºy–vò¬».O»kò�zX1ŠW½òßóþþÁ< êùÐÚ‘¼Ýêåçþè¼|ÆŒyyùÀ̾¼ZGN ΟôÌççëÖå'<ê8Æïå~ÍÏûêA^�¼1PÍ½Š—×Âj>/ìËO|ôqù²»îÌßûÞwS—‘Ÿõ½ïçW]uU>·ùy_ÿŒ¼ÙìÏ«ÕzVêù¬Ý÷Ë/þëõùx{<ÏÓ‘<ï®Ì“±eù;ßñ–¼R¯å}³æåžßÈ_ùš7å‹—Þ–/Üc^~ð�GåºøÊü /ÌçÏŸŸSóF£‘W¢F~øa'æßøæ×òz£š×¦“ÃývH~à¾ûåýA”åK_ί_t[^k6ò>?ÊoÿûMùç¿þ•<Þç?û9ùÚ[çGz8÷éåƒsçä»Î™›{òÓ^ùÒ|ˆùøï¯|U^E”/œ·[ÞUòÏ|ø}ùþí¥Ü7ò³üãü½ýdTfæ3g-Ìö³ßæIœåiÊÇ�,Ëã8vã{ØÃŠfÆÝHyßêñžÕÓÝ+íåqçí<Í“$Ë3†<æ}blEþŸ3gçáçì­3fçùÈ2Îãú¼2´µ=?«yÜÉù‰c(â5 Ã0¶o6Y¨òÁ 59‹1Õð=ÃCCð‚¼è÷øëU×b¿ýöÁë^÷ï8èÀƒ\]Ô_ÿú¨W²O}êS®Nè ^ð||û[_ÇÃö•Q¥â~òoÔˆ‚ Þøæ7àk_û*ø>|èC@¥QÁ²U+°jõZ´9ßã¾×� »ŸækÕÓ’ãMozÎÿÙO°ÿ¾û`hõÜ|Û-L[ˆV« 0�A­ÏW;»=¼ì¥/ÁCv¾ùÕ/ãÒKþÌ4úsU/^ùÊWbxxï~÷»qÞyçáA{¿£#ãøÙO¿‹:÷÷Ä“Ÿ€o|ýëxæÓžš%nºñFüé�tmøV¸¯_ÿâøûõ‡_¯â�ÃÃG?ñq\sí5xÌñÇáÜsŒ÷¾ç½˜;w.ºà7¸í¦›1wp6Â¨Š•c-üû߀G?îĽ6ª��o}ýkøä'>ŠJ_øúWpÌc�C'ÞÐT™a†a†±i6ýûö¤Ö¥Ôœ—&) @­Ñ„šýúøéŸÂX'ÅQÇãÖ[°`Æ[ãøÝï.ÂÚµCøó%—`öì9øà>„'?ù©øÔéŸvÒÛëÆð)·ÙÄKTÏ9õ¹xüÉ'ãÁ>ƒsgã´œ†Sžõ ôõ5�dRîtt´…Z½Á½ø®ëÙÙ³±pÁ|<ûY§à裎ēŸò$Ð ñwJ£ªúD… �Ä)j”hµè°û‚Ýðò—ý+ò¸�O}üN$úgâÎ;—bùòå® ÜÓO?'žx"Ýqz½ívG?êX„Œ«Y«ã�ƒŒŽ?Þ™þ Ùs~ðÌ�=;~û« p3…7£„>öñ'áFŠvʼ{Õ«_�‡<ô¼ä¥/e~ÌÆºµÃ¸ò/A½REšŸüü—ðÎ÷½‡PþçÌ™�^'Ão~vE¿…(µ�;ù$¬Z7BQ¯Lzà0 Ã0 Ã06Å=TÞÔìÂp‹Wš$·E‡aá&Jä/ù èž8ãÌ3�¼�O! |Ÿrû;¬\¹3(‡4›}Å.ÆÆÇé„Ü@’ÒêrõÈ Ýê AaÖ‹b ß §ºÒËZÛ„«ö͘‰n’Pp뮤ulli¯‡f½FIíQ({ˆ¸l—]vC�B[­Ö�rÃ�ñ�p]¥»Ãý¿ðù§á)O|<®¸âJŠuLo3}NÚÕ9ÂÛÞö6ת¾å­xã›Þˆc�y4FFF]>¨‡3ßóð¨G�ý÷ÜW^ùWüî7à±ÇŸ€#=øÓpù%—âA€½öÚÓIx__Ÿ{™Nõ�Ûcãj1Óª¼‘©fž�æà ‡RJñØè*!pÀþ{cpf?~ñóóqæ÷¿�Ys0BÑ6 Ã0 Ã0î�MÊ­„R§ÒZ‘ç©+ÁÕ{L-Jâ�òÊfŒ‡z(ÎûéOñ“ŸügŸý}D•·Ý~+®¹æÊe###®³�Ÿr�ÓN{2×Mo ?óRì´“f³iªŠRÚZ£ŽãŽ)…j NTúZs2¨¡$8ŽÕÌå•ãQ`||½¶zS” Z�6| ¥âóýЕx­[GÙlⳟý ú›Môº 2Æ¡—É, ÷:”öðˆGŽï~ÿL|ö3ŸÅµ×^‡z­é¤öª+¯Âu×^Ëõ#<ÿùÏú¡uèt»8öØc)¼�¢ls¿í6þýõ¯w[<ç9ÏÁÈð^÷º×á7üüÀ(ý+±Ëœ¹”×ЦÒèúu p�ÇT*ó˜i>ö±�àå/{)Ó�áËLïwÞE‘�Üq†1½è>„j¹$áQ·Ä -œ¸G{~þÝ HS5 Ã0¶k6)·bƒH©*QÜìCJã•Wÿ ãíN¢¸>æ¸ãð¤'=�}ìcñŠW¼Â­söÙg»vd÷Ýw?\Íu_ð‚cÿý÷Eè˜3{ò4�Pd«5Ši aPq¥·•(B»ÓsBZ«T)–T#5-¦wÑ|W/Ö5ƒÅo˜EUiŒjuTªup$”Í�†+MøEÇ\ƒÓ*!ž¿p¡+Í]¸×ÞxßûÞÃmT}Áç~+øÂ?ƒGýHœqæxüÉ'bÙ]w╯zN:é lûì»þ~Ãßñêû7¬fþå_žæ¾ Ó‡q·=ã�”ægŸò,îÏË_ò¼ô¥/u¥µÏÞóð™ÏQªg à½x?öÜs/'ï ßèÈZwŒêºXéQ�ЍRÇ‹_ü´ßþ¸é†kñã³Î@Îã±ïUÃ0 Ã0Œ{Ç£ŒnðØ ºš•I>#¤=½ÌUÔ»UGIµ)ëQTµaÜm¡F)UIjU�¬ªï†Z­JÉ ð‡‹ÿˆ½öÚƒƒ3Q¡�&q†f¬íºHªBuÕ«ÚnY-B—" Ž7z2nÏE®ÄWm½6›ªw«–„ii»ŸûÇÆG1{ö\t˜B•.wÇG\˜9sa¥†67õBÔ)£q‹ñR$c¯C‘Œàguä<¶mŒŽ¯sǰhÑbÌ™µ³gîAyM±zÕ"Ô£A$uu6A¡M<<Î4O0Ôka Þ@%c^0oÒþ:®_r+^¸Bæ� §—¯[�˯¸ çbŸ@/ò144„ýæ.ÄŠáuèŸ;ȃï êSnsµ÷ ŒµSøL{ÌsÐä~Õœ™šF.QßÐeïÃþp\uÕU.O ÃØ?:üÜëÅûˆ>p&üìD©WTºÊۼό᭠Ƭñ#U|èæ¿3fsi�Ÿo çó¡š÷žˆÊD? ñS¨¿ö�i†±}³i¹•QR´ ¹U/YœQ®æEè$”+ÊbÊap~F“ËùåAë $�üQé¥~¶o4ª®ž©ï{h%=ÆYAE�¸ê+‚ñ�Ó„ë¾Ú¼¥­J‘md>âœûævéD]ߤ—¸ýêçû �ài?ú Q%´®N0EPA�)¸êA å6£W¸n…»Mòºq‚Z8ÈaQµÃµ‹:Å’Gä5'¾™SÐ;ÈzUJ)�—Ë+=†°‚ó$cZ|•¨v¸Ïzm®¦«74Œà15jÏzˆ*"æM›ÇŸÔ˜&·�«z!�‘ñøå�9"yNxÜiÎ|g^è»ÙÏøp‘Žbx ¦�é0¹5Œ{ÅäÖ0 㟗{¬–°1ünpÂ(±ÒOÿ1ý4C'|ívËUG(êÆªž+ŶC±­W¹L]Äò‹‚’\§ QE��‘ñ‹GñU£ŠX/`Røå0(þ<à—W (€YÜuMUj‘«g+ÁSÕƒÓ¢—²<‰-ýZÑj›v[/¯q}Æ-OïtcÊqÀè}t(ÈúvjÔùÆo@Å—¤±KW% 9í£ÛmqÈ9ËÅ\iÓWbHq/»!–�wRŠ'·kUdÝŸb›tѯŽ/ª5Œ¬b~%®%†N¯ëÕgZÕZÈôƒû­q?Æ¡òŒ²Fë¢Óæ�Ž'£`W)ô£Ã.opŠC/åx9Í ŠñÉsvb&f9:iÖ?ÎÜ(lbÖ¤cJLäᦲrãy΃‰/ÛԼͧÜúî1èó1ùŸþ»`lL:=ëOÓ¤‰b0é\ƶfòõ¨PN–Ö‡‰ÿlRnõó¸ÞlèësUb™¬VͨûWz'J›+Ë hö÷Íp¥Ž’>W…€¡^¯ N«Nµ=õR†Ì�¸¥ä”«6c]fsQÈíÕa/GÝI«â¬6šPŠuRôÒU«QZ)Õ5ʨœXqT*Ç© LG¥ÖÏÝ)&UJã@=‚ ŸUm¡ÆôxžÒ#I¦ˆ»º¿ý\VgÜFVA_߀KRµÚ Ðª)1ŸËRæ �O9Æí$ÅÍ€q1¯$°jß–©EÃ羘.øÌ¿9³1ÐìC?ƒêçJVµVè´ž)¨iTÈsÊ4—s˜5³ŠF•q¨¤¸ÞäñE¨ö©DÉã¹(Ú»ÕyQk …hoC¸;& ;pP¤‹yæ6ØYÑ¡é`y˜™®O³ò%æLýs]A¯Ê�2LÌÓ: ú�¡Çs™šËs‹vò¬ÛÚèó®O–²2Ö?;~À|ÎhsápÆ3'˜]ïÇ ÞÂ^Êö -ÞKÚ?ë\Wëë©>æWñèóï$x³Ï‹>#<»9¯wnËS¯ù)º|xîò9Ó‡Fu½TÜll_è”ð³¨*b£¼ F9¡÷%ÜÏ‚].s§NŸ{~¨ÛwMp�m޾WtáõèF9Ë™‚n8º^åYº¿èF¦°ƒ^¢ò°ªjªCã÷Ä&«%hCIì3žñ |ô£Å>û샵k×bÞ¼yklàžäJÕŒéCù\žLUIøãÿˆ_ýêWxÿûß?±Æ6‚§;ç—~+äC?,‘Zº}WçY;U~pz|`ø¡RÈU‡šËvZx¼©ŒÏ"º¡È‡DÀs¥ª&÷‘(¹)�ÌbÈi�éUAµœ!S-ú•ž%7lcÜ?xNø¼èª% UµÐ’úh�!�ÓÇy] ­Æéû…æÚaÜÁ+ø£‹¯ÇÐÂ]ùPÅœ¤¨*•Dº4â0÷Qá’oºë›M!ÍÑãŽä8¢S®•(ræ%èPzu-Ôs�†.½.c{AµÍ:­)fð¨vùáä‡]å!=÷Ùç5F�(*®ØI4¶1úR}R~߯¼üt½ê>S×÷P2!€ž?ñ}Lܵ¼c!/U¡¦:ò’ ©5.5á*WÝ›”[Ù±f���ã+_ù Ž<òHW¿s@í³nÄ&6w˜ÜN/Êg�ØÛo¿×_=þú׿â oxƒ;¹Û6¯)b m~8j”Û CP˜6½DW¥ì¶k¼½S(**ªòÔ„ÙÎ{-”%y’SºoEéžÚøp4ññ�ô–ŸÍwÛ �:û(ê‡Rl¹¢“[M*>7׸¿xfb¬zü|R¨f¢$@žð¦È볇qÌlwðIÊmßšQÜŠ6>q×ß±¬QÅ@e6ª£=TjªkŸòa�ÛóI#dÐwBñ³9gF'2å÷ŽÊóŠÏ�äV¿ðè¬'™k8í…<ß<ÙºFÊ ÃØ.PÛì|á=h‡j9ˆÂÀé '¹åõUñÐ僾ÞK©ñË×§<äþ¦¿l ck¡[’î!º7Å =ÞGt­VsÞyäh ¼63Ý}¸\Õ6w´o÷NUº_­U@Óúõ¿ÙlN¬qwîQnUOT2»téR|ýë_Ç7¾ñ ×—ñÀ¡'–C9§žzªkfL'Z'øžž\¶êN¢ÃH�—N…þšð_UNü.Ÿù”˜4ùEΗ¯UÑGogE¥s“?B:V÷±Òí¥�!fÓúµ$·.¸ü³þáDkm€9:1fÜ_Ê»ZFéÐK›*y õ²æxŒN3DBci´†ñ…cžŒð®ÕXåxÇ%¿ÄøüùÂ:fJ^xZҨؾ"±uç•á~¨ª3e\_ZÄOƒbpg•»ã�V/°òË&ðÜ—‘ª-Y™ßvHQ ™$––ϧXw}ñdõx2õ‹�îrÝyÙ¸_\ c¢Ë1ç÷ˆ:¿*fd¼Ïèû¤øN)ïeEmÇ®9ôb~òŽÂ›Ž„§ >oFyœ#òøµé)·Ì/½à lÆWù›�ÊÂsæ©næa£G3U+'ž«wËå»ó|¥Ø‡Ù>Û�0”¥¸‘yŸª¥Ч–©že¨å Ây ÖÔ^®Ç8‹r¼{Gé¢ êŒkã¼cŒsHnÌôÕÒš“¥ŽŸ¢W£Õª—Bõªhl7¸_`žI>‘„iÄ�:?×¼¦a�Ÿ_ž+]#cü Sló¬ÂÏwÎkDE¸†±íPõ¦¨RE·;†ýû›8°ZAw¬ƒ›ùÝsGš¸v»›î;s¿¿îxß-ZîÉK%ºK–,Á®»î:±ôîlRn%±ú üAz�+ú­×뮪‚É­ðâªðƒðf^ (zxdœàуs±œF¿©¦Xè« `mO�çì¤×�î ’Pé'N¦4CÕ62µÑ_GÞë Ÿóª­.*ü‚TNŒh»f„6?¤ú <í ägK¥àª�àš®R�ïšëlÌ`ЍÂ"Pn)®$3ßUM˜ç4V�sy××�Zã «ÔÆ¡šòãCJ…·Åؽ (¹å¹‹y®ôà“ʵ7ãÄpÝÁ… Ð]r'V0H w›…ßܺ mžàUþÕõÂãT”_cûAŸU÷³ GR=u2øX«¼†Úêòƒç2¬a]�×lj®&ûàÛUŠsÕâx9¸’ã!üŽ®{U\÷ps®ß ðá>÷Œ…|ˆß!Ú¸öÀÌ™3ñ—¿ü³g«™Ôd“r«V‘©ô¶Ýn»á¶}+ߨÑ5‘g)eŽ7r_%d)òî|ýÔ`ä7@R«àm·_ƒ¤1ARꔉÚNJÊ›‰Ú³�dO©jÐúH9ªÞör. âêí~Öqëßor”œö¦×ÁèC«Zã'¶Jq¢üfjfŠEšTÍW©Ed{©ìþ£ZO%mÌÏ�7Ãa õŠ??<ëè2.W! Ïžs%ÖØ¾Ðã*OOºJðÝeÀëÁObÜö—«põßÇ¿ñm,ûûßñþ‰²"ÃØ&è§úƒ¨ñ{¥‘'¨ð;9Ò÷³^Fòh5ªãn%=º=o*̧ˆUççh É0ƒë{úe„ó´U¨ΙWÅ­Æå–‹So·njî;( ]+j[ËÞà)™îa�­÷ÁxKãhî®ánš¡ÃkX ñ—5¯Ô‹˜Ö÷U A%.Î)Nó&÷û�«ö(Ay»�ÙÛh¼…]›xc-Æ\<Ш>§êOèZP‹›ŒÇÂt]3rç^A㺎ê�}#mÌKrTþ?{WhGqµ¿½kןÆ=DÐ@ÐàPÜÝZ¬8…â…"…R¥¥Hqi‹¶¥EŠ»k @ˆËóëwåþß™}7yÚ¦ý“ó½Lvïîìììœ3s¾3;;#ŽI¨í¤_NPï é ‡l˪�š|çA‡Ý/—Ù¾yÊN3"�3-”´n_”ΊÒ×gïnÚÜܬ޾pX‚†Æ?ƒ¼‚Ú*ó�Ò’‡‘¤U‹øÍ»¢øè?P¤?Ö'²�Qï£xŒýR{¢ $c8Y i÷*B„ø'ãh­Z…쿈ß~fßÿw”è=_ðÆÓH B+™¢£`©¯Wåõw<ˆ®�¼„ˆ.küwP2᪠�ºó@‚¢ ˜§¸‘cB‚KPúá+ú©âˆÙP,Άly,JáßCÒ—ïæÝ]øÞzë`ȧóñAÒÆO?˜Š°©!A™Í!‰-©òNB¦5V(È\Å‘ÌY?eØÅeT+xä×?Ç ç\ˆíðË«±æ~‡"$¡P:¤âkhü� �õ2¤]~úª«ðü÷. ãîc÷®ÇÊ{ïËæË¡=’Ù_bjL#¡ÛŸ¡[R�ÿBÛBp£� b2(�¿Ì¡§fë¬ÙQ,YÚ§—(ôg5QÓ«È{Kþ’R�9€ÕLÒ•ËE:èÜ@¾ºçŽŠËã<'ã;å%Qo*LGÆ‚~-Šm¹B±úO~ i•?þè=&q!DO¥‡VBô»÷¿Þ8Ýe�߽ǖWä.;žÌØÀdÆùØÍy?é6(mgÍ{HoŠÆŠ‘¿Ô[©™ò%ŽÔU›òtzWä9®¥tECãË€ègä|I§RL^ ©vEziۤㄶ‰º yëÿеQCCCCCCCC£ß@“[ �~Mn544444444ú 4¹ÕÐøÒÑ;ª¶xÔ¥þ̳ .OùÊwÑtŠõ­††††Ær�&·_2>Ku4ñéOXÄc?Cn£�††††Æò�&·ýšÜjhhhhhhhhôhr«¡¡¡¡¡¡¡¡Ño É­††††††††F¿�&·ýšÜjhhhhhhhhôhr«¡¡¡¡¡¡¡¡Ño É­††††††††F¿�&·ýšÜjhhhhhhhhôhr«¡¡¡¡¡¡¡¡Ño É­††††††††F¿�&·ýšÜjhhhhhhhhôhr«¡¡¡¡¡¡¡¡Ño É­††††††††F¿�&·ýšÜjhhhhhhhhôhr«¡¡¡¡¡¡¡¡Ño É­††††††††F¿�&·ýšÜjhhhhhhhhôhr«¡¡¡¡¡¡¡¡Ño É­††††††††F¿�&·ýšÜjhhhhhhhhôhr«¡¡¡¡¡¡¡¡Ño É­††††††††F¿�&·ýšÜjhhhhhhhhôhr«¡¡¡¡¡¡¡¡Ño É­††††††††F¿�&·ýšÜjhhhhhhhhôhr«¡¡¡¡¡¡¡¡Ño É­††††††††F¿�&·ýšÜjhhhhhhhhôhr«¡¡¡¡¡¡¡¡Ño É­††††††††F¿�&·ýšÜjhhhhhhhhôhr«¡¡¡¡¡¡¡¡Ño É­††††††††F¿�&·ýšÜjhhhhhhhhôhr»Q«ÕþmøÊ�Y6B5Ã`à~ ¿CÈ_�!f0‚ ò$LžŒ.ë�é|ÞÀðaÔ| ¬©ò°B)V.–‘CÈ8¡Ô4‹[K -ú]—¾ÁHr TYú,E>ú j‡Æ�ÅŠ¹(j± …\†!:ãñ\ÕFÚð(o_”FcŃTÄzýô¥â²›¬ë¬§ÃÇ:c›(•º¦Eø?ÃÒØÑ¥‰£Ñ?aPèZêÿCHqû> ŒB†¯Œ€�;ó]qŠT vÕA¢RÀÏÙ ÝO>I"—ÄùoOEÐÒ„ª0¶˜Õ{eÿ›L·ˆ”X4|I’ƒ®b94„,'þ Œ"7yÜzä·ÑþÐãȱ8Î}õ C†ÂB–Ž€©È¯Ir÷+(ÙàõBˆ�8I�¡ýϯ,¤a­!s9|›m`N}³31üâ½×᥇À.eÇ@)á«údRwœ°ÿÖ—¯*j”a >åSƒíÙ(9âÜWðô¯~�/¼!ëþž¿ø%VÞíp]–UíÏ>ýÿuŠ‹Å`š&CCÙï ‰'6µ~^Pßö{Hñ_ÀðÜ•Wâù ÎG9VÆn×ß„ÕöÚ�Î˪V¢ÓÞÔâ,ËÞëú14¹]Æ�â¬W¨ze“m¥RQ[!¶A,"¶_µÊ£–¦ª[⚊ܦHn¯?ú`t?ý$¼Éí«o¡Ð˜AÙ䳟m€ú¤âH'N£ñ£lÉQx †²ERJrk  ÌËpbEÜ}Ì)èüË“è1k8û¥GQ0€×d¨ 1„fŒ�Émà‘ØÖP�‰NHo®¤¡ñU…8?Òß’ÏáòvFꓘ‘ªáªWŸEwzÜŠ�[Wzˬ[5êDÿ­/_]°ŽJO»ÔQßBɤS_«â•ß\‹×¯¸ëí.?½Ãw=EÖ}ÛÐävY£/Y­ï»®KGÂR$Wˆ¯ ne+è¿_Cž—ÿ4¹] Ý-´!¶\.#—Ë©­\!¶©Œ_ÍJÇÆBÈ—üëm8$HS"ÇëÏ$uí«ù|KyºÙm,´¹'=°1ø”«Çv$f“°2BŒ:`úÒ³[ƒË2qŧñu,&ï0MÒYWeðy=é =N&öïÒû: Û)Š“C= £g y¥Óð°g ¡ô0Àa³@¿Fc…ƒªåY Uʲb‡tFYŸ¥êú”[hÀ¤lk$´¡-BŒ:-4–-êEÒ9äyž …B===ÈçóÊ¶Š½©ÛUÙ~um¬Æ²€&·ËB`¥²‹EEj¥B ¤‚ö _M0ß’õÞMý¿PõF÷ž�ÞjR]9Ù¿QcJ²rë±!­Ò[Wƒ<.=qy‘2 ‚úP9^Sç©ð%È5,.éªIšÂ~4½ýÊ#¬yâÁ£¡­�ùÔÑÖTb!ª±@¨/lŸ$I†²h¬X`•ïÔ[#¤YY_e’QæÉ Û{’\lkÔªÜÊ@j�e‰úÛO�ôÒJo­�œ«ÛÚz'’Øßz|Ùö½^ãëÝš.cˆ§(^¥x“Rá¤bI…\r(ÂWÙ«”×­ò'�¼úã®Áç±ÌhLL…~ï5ó¹c$*òª‡€ f 4iY«‚€t•äÕ¢Ê2©™6ËV[ÄlÊßTÔ5$á­ÕHp̯—¦ÇÒTék|u!”(ðÊ2za2Žj<‰ÀŽ–£êF(2—˜zc1’¼ÐXñ`’ÜÊP,ië ’X‹uÖñ)ߚó¬Ï2ÆÞ´è�’ÜBnuÅ]–è;ô@l¨tI¨Öúñ:É-•JŸ9¯ñõ„&·ÿ%–ôe+ª­­M[ù-R1Æ«¿&©Çí{íWòlä¹>óL½Ç¿ªÏ'ŽHýÙäê[y¾º“"Ç& ½ôR<¯‚Œ²$Ye$Ø”¿éØðX yFÏY: šHÛ"‰¥Ãã‡HÅãL›å†!-¨PùŸé,Xê¾R¾ÒÀ×ó ÷®ë’8Rõ¼j,[Hy+g�¹×õ¼®}Ë\ÎK\‘Oý·h¿eX(û5œ8æóú‚C‚P~† ¯Rf ,rnd/º—¤½¤ñ–s"kÙÖï¥ñÿC]VR–BŒd+eÞ7°ºªu‹2³Â€ÛÉ­SoÆÑCG4Ggµæ8ˆóXB]U}?›Î? ’‘o]ÞBÌêu[#‚”‘)ŸzÛ×7ô…Ô ‘e½·_·�_?èZô_B*‹„z)OH­Fÿ@½Ñ¬7–q’Ðú±ú¶J²!ÄÔ¶LX¶ ÛŽ1˜pø{PK jA�ÄFf–pàe3芻ȧ’¨5dP£IBV}dS)¸½¯Ú,³H~%yÍ&�†º»»[ßL&ƒjµºˆäH¾DEÿ4–-ºººTý–rN&“¸á†°Ë.»`àÀ�*Œ=C† Áˆ#0xð`477cøðá0`FމAcäÐÑXw£Mqç‹/ãõî<5gF¯>­MC0~ôXŒ<C¶ ÃÐÈ ×4£F�ÂØ±c1tèP´P—$lµÕVøå/‰D"¡tR㿇ÈT uKê’Ôi ¶m&H}tl.÷ãÜO±n'M1;�<Ôõ =G‰¬áMªÍz¼d:ÿ,ÔÉ—è—@ä,W㿃”¥ÔY)C‘­@ÚFÝ>~ý gKø/Q/6iœÄë–ÊôuðºÕl |t™ºˆÍ¸š-!]-âÚ#÷Gá¹§iœóÒÈ“Ày6�ÈWtܨ?‡¤T¶büfÏž�W^yï½÷Þ"C(ɹðH`=Ûã“FŽNH�HTIxƒ<‡$8^Ň}þÛ¢LÒºîñ‡"ˆ9H”eVXLJo…0y¹\+sfÚ>¯wMø¡èš2~«­¶ÖXc ´¶¶.rª„ Ù­÷ìj,;Èרb ¥\o»í6E<<ðÀEu\ê½Ô�lEWDugCB¬RF•[?á2,Å@>Ü„£>0«züErT+T‘tmõå½è›ÈTP'@¢k²}ðÁñá‡âÄO\Gã?G½OŸ>/¾ø¢*ÓºÜú¨ÅàÔ’ðÌ |»È¶Ž2 ]†8f½û>¦=ÿª<·ÎößÀÐaãPfüœTê¥D6›ÅÊ+¯ŒõÖ[O9-‘¿Æ�Eu�ò•:,å*e*òí·½å?=[Âbhrû_BÈE½1”¯6e¬�ü®¾þН¹Ò’J¥”³"=£S§Nŵ×^‹½÷Þ½µŠ#ç„üº2ÞŽÏX1}6ò9˜<3�ö*âLÃç鎘�†r®t$°�Y˜6Il’h*Ëkî¾A7Xš²|ƒ”¯ ‡·ê‘<Ç]•ÁC=¤zî~ñ‹_(²+�¶¼ª]¤«ò²…”»Vé¥ýÖ·¾…ë®»N‘W9&A : ¨—}ÝѨ a!G‚›wL$)a9e²™^Û£ìÍݶ��¤ â!wÔ ‘¯¤Yw®êÄYHîÙgŸ�ÓN;mQoŸÆi³;;;qÉ%—àœsÎÁZk­¥Úp©÷Ÿ�ˆU>”ÿbÄEîaš‡Åa]ÏwÀæ%&ë©ÑMáÒy­%XÉÿƒfOôêµ×^Sy‘vEòP¯óÿ¤-¬;.õ![ò¶«þ†«ßBÚþÓäv14¹ý@*’ôìH¨÷âôë D|È­LáEAÂ÷|ÄØ(Üôû›°ÁS°á†¢FÄFä,“»›$ŠtBi…ÌHubãJâê—=”1t¹@+ÚD±‚�$tAÂA@Ýi©˜°+lw2$LVÀ«HväÖ5R¢š…r…Ú�S¿""-Æ÷¥—^B{{;¶ÜrKæ�÷ …•sÒ�ÇTÆ5–êNƒÊ�wÞO>ù¤’»ëÊaÀ[o¼�K/¹Lɲ“ñšPÃÖ[o<ôÀ}ÉkÚL¡Û¥,ãFŒËD„•"~u饰(»º¿¼ç6üîºQÉñ“Ë.GgW'šššpæg`ð�!”qô‘’¥˜Ûm·îºënµžÆ‘ãÅ_Œ£�>+­´m4®yQ‰Jýæ/‘©L† +F ¶ó5¤QŠÙ(Qî®|@j°^³-h(±¢[d no*ÿD<ÒB¨-¯¯/¹ùæ›U®„¯ƒYÞ�ò«w@ ÑmllTÛ~ Mn?‡¯Á#.?¡•ÆIü©8úuR@�¤•?C,VCH£öâ«/cƒ�7"Q„ÝSÞUÚ°?ÿÉå¸÷ž[qó­7âÆ;þ€ko»?þîÿã]¸íækqÏÀ-·Þ…¿ßóî¹åtõäpóÝÀ%WÉÆ<äKsqí 7ãåß�I2;oN}ôa<ö�G�+`“Øúl­7©t*•ÀØ1£0íÔ®ù!ójZ¨ÖhI®4–-¤N×{L¥®KOy\zËC¡—GÇì�ð÷{ÿ€~/pФ�3R”�¿ž9èžûnº÷N¼þ曈U˰Êxã¹Gðòó�#p ôÀëŸLÓÿx gOÇ%^„ßßz¦~8·ÝñG|ëØ“Hœ 8ÉÞ×°LĤg�z)oø¿Æ !>�=þL˜¸ ë— -Œ° T{ð‡ÛnĽ¸¿½îz\wëí¸þöðÌ“OáÑ?=�ûîþ�ÝëpçÝwà�ûþˆ{n»¿ñ~sÕïéȹ ˆ93gâV’Õ·ÞxS‘ÞO§Êzý(žyîYé¨*»A‡¥øpãqÕ«(ªŒñî÷¯ÏÿG›\/G‘µ¼ ‘­@ê´œ¯ÿÖèŸÐäöÿ©};¾u'xÿÀgL‹GŠUI–µEdì86ríí¸êÇ?Ä·�;^ò}üà’Ëñ£]ƒGwßq7®ºæjâq8éä“ñã‹.Åõ¿ù ž}áœxÊ(tç`Õ|ÌY0§~÷Lüõï� ³½»ì²'N9áT|ÀþØ{ŸƒPªø0íd‘7ÕXËßg _Ô»ôO»ˆ4–B:t|(Ç\ÛÂÉ'ŸˆóÎ?çœN;ãtxàAxàÏà‚ Î‚›ŒãàCÅ=¿¿çŸ~*dT¥OCû̳Ïà­© ­­A¡Bòëá“icÊ”�ñøã�bÒ“ж° ´+ÝS½ˆêþ½º¨ñÿBT†1å<(ð@�d³Z,àäNÄÑß<¿üõopÅå?ÄO~ôc¼ðÜó¸ú‡?Å÷¾÷}œtÊ©j˜Ê÷Ï=�î�ðð}÷á—Wý…’ ’ƼyópÌÑG«ñùo¾ñ¶Û~;{ì±Øc�=púé§«YUr…ë²6¿ÿ+ˆCQ'µâ´j¢ÿC×®ÿBlåU°&´ý $³Ñà‚(DÄÑP{2û¬ô�JÇ™k™È$8`¿ýðæ›oãÍ·_Ë/=�ï_x!~ûÛk¹ÿ¬2j&ŒÇó/½€¿?ò0,¢D:;îÀ”¹nM[Í,¯�yôLÿäcÜvëM¸éÆëñì3Oaê‡¢ê ™’á ¼© ;èÓ(K>dˆˆ�ÿ,™³˜d´X®’¨ø8ùÔÓ°Ñ”M±õú›à³.PmBOwj¶«fÌPÃxŠ%¤i¸$4Ó?øÛm¹ 6]w ®ÿõï�²“H[IXÔ¯ ãÇÃu-¬ºÚjjXŠÌ�i`䯖ÜjüçˆÊ®OÏô"{º:Q)qâ‰Çãå—ŸÇo½†—^{›¿OÆ=¸ {â/˜8q"�� ðö»ïã¹çžB¶Á¡t*h̦a;N4Þ÷™ºçž{ÔøÞçž{g}÷,ü†Nî[o¿…†LmÈWqÐÖWBnë`Ö‰­&¸ýšÜþ—�†KÈ­lëÐD· "¶BcM5þ5 <îËÇ$Ü¡c#«ŽUË<ü×ÇpÐ~cß}Ç‘‡‡®Î8’!4$'óÌ!A-£æÆÔë쮎Nì·ßAØy÷Ýpü '*'¯"g�ØŽ1­ÍMhmiDC6…OfÍP¤6P7Wÿ”S%¨“ÚÞ7Ôj_ãÛ³¸òÑWÌ©§�Š»ÿpþø·?áäÓŽW>ˆ—Ô€d©Œ¸Œ�.”àñ÷ÊãWÁ“ÿx O>ñ¾yè‘ð‹U”º‹©_¶#�E<ɪWÿ¬IÑfùÿ‡hfqD´)Ãq'šÞÍŠ©! t‹ÔX˵&¯ƒ�7ž‚a#†3A‰T†Mn¿åfôtváåžÅ�Áƒ�æ5"ãEòæ_Ý±Ñøÿañ@ˆÁ´m¤èŒújîê ãÇ©ú²é&ø¬÷† n“ÐV=”‹”c%†dÚUÓõ5Ó)Ýb«í°Íö;c—ÝvƒGg²ô…]kdÚ•R™×–à’Øêÿw¨�Ÿ¯Ûlm«û?¤½Ôø7¨W„úVzÏê :]QúD¦ü«ËV5Œ$,•BY #ˆ‘¼J.c`µUWÆùçž�³Î<WþôrÔ‚*|é!(ÕÇ?¯BTA¥ZFSS3’©$Ž;îXœrâI8äàƒ˜N€|!‡‘£F`öœÙ4°æÌ�‹ ¢±©Iõ&Iä^õÁI¯º‰mt¬hj*�e‘»¼Î¬ë€@V•N”N7�´Ú(óü¡‡†µ×ZãGÆëNÆ+¯¼ÓI"Pn<ŸiÊ @ù—«ꎉx&¯æ£$N‰C'&‘ ´ÇÞ{¢³« “×^SéÂN;m�"YÀ£\)«7E2îZ†Î„ºÍù¯!½¶23‰ÈQ:ŒRœ²\v¥RU²Þ|óÍpê)'á‚óÎÆ�tâ®�õ´æØ0c¦š®+™’×ÝUÖñöX5¥ËäÉ“aR§Ô‡‹ÌWjú/r5ýœæNÒ­±l!sŽÊ\²òzY^'÷ôô¨ýrY–÷ô±Å7¶ÁÜ…mêË÷B±‡d&‡Ó?ÄÆm„\¡ˆõ§lBR[Â7�> &ž$©}è/à™gž¥c »PÀI§‡…]í8j(öÚgO|ðÁûxðÁ0uê{t‚Žaʼw^Õ‡K§*—ÏÑQª"‘ÐsÜþ¿À £—(uOêšÔ¯PzgYg]7‰ß]#&ŒŸ€a‡`DËÜk`%²4˜–4ô$·IE^åM�Q³P(”èì�Ðz:{º•ÞˆS²Ûn»©…"dê¾ïÿûXýõ±Á¨!(9—ͶEê²8­Bzõl ËRÖ‹†ué2î÷0/$z÷5þê•A¶RI–oûu�Af%%˜Ò‹d L8�‡Wî»Þ¬$^6=ú8Tã.By³¯bµ>IŒôÚñcþöׇ±ë®»‘ˆV`Çã$«¼I��7Ùoº)6Ødslºù&XoòZ˜¼úTJ1 k®·!V_}â1§ ´�µ&¯N¢BýñÊpc­Øb‹Í°æä5°êj“Pñ«Xm�5pÁ…?À¸ñãT~lW!Ã2/f>—Ãûï¿�5×"ñµm”+U5×n¤žb¢5–„ ÈÜÂ2MÓ<€#Ž8"ê�cy˘JùÐ/žH+çE†­0ý"©$”o1Ëe=±£>¥lP¨*Ô«I‘ÄGIÆ}ªQÞt\Òé hQ3rL×åV^_«á)ü-cwùû#Øfëm´�þ/!®«Íz}ý�7á[GÓ‘dU6Å¡¥d& ‘úS6$Ý›±nn²åf˜BRºÒprR€�hÂøU&bíµ'Ã5«Jvã&LÂè «1uƒ[[á°nnµÍÖ5j´ZJYVÊšÄz}þ¹ç!C§X ÓÊ™”«è—,â S‚ÉòËâ@i,{ˆ|¥']Ê»¿Ö±³ž³¾ácåÝöÀÀUW—×P<#‹ ‰¶ÖíEÿ†^Äa) ET'µ²R+|Ô¿¾ü:¡ÿ/â ®õÈ+£çâ”SNÃ-7ß„B±BƒÍpP¥sS,å�¦!²�$æå«È6&a !.u³l|„‰Fx¼^ȉ ¦I2[³�/t²sà ÒöxEPmW Q%é•…ÂÐ�eÊ­Q»$ÄÆDˆÙ³fá®;ïıÇ}›V€Š¼ÒŽ'Q)ÔüñË2Z¾|bò�ï|'œp&MšÄ6 †*2eLdŒJ¬&¯”}8$½ˆ™({õ HHÍå\§Š#Sˆ™nÕÉqHâK’•¢ì‹]Ýpâ¼¶·çNzðB¦›ËåU:,X òtýõ7àüóÏgÚÑÚùÿdX‚8››o¹5^zãmTÅOeÝ1è„$¡”«i#_ªÂIfQ#µX)mÆ«Å:áSvíE›$ÕEÊêBµPb¼A˜“Ï¡!�†Qe@ŠÃ# °¤“©ˆ°RYÄAíêìDSc£’µÏ{Joâ�¬Óƒ R+¥Éµ4–-¤œÅa•!%ý®|…ÆñŸ¼…Ћ8DÐäv) Éíb|Èm,FÒX-#•ÌPÎeÜ|ËíØzëm±Êª«ªÆƒNr*†)@"VCP.Ãs2|vž£N¤MY‹†Í7QŒÅUªY“ä‡åTC–²¡mW ŒWD;j¢@rj»izÛ96D4na !i°d¥4“$È«–ðì3ϨʶÙv{E° aù€­Z.ÂÁh,Sˆ““ËåÔ+æÛn» «­¶>šö!‰)‰lôÑŸ|t æÉK‹Ô‰Î�Ïv"$q¥8<†âõŠ"’�Ð<†�†& BÅÂŽèŽ# rÈ'gâÌêÞBÅêmÏÈ‘#1sæLì±Çžhm@ÒÍ ¦ñC�¹õ˸òêŸa÷}ÂDéÙ"â¦T¶’ZxÁ ¨Ñ¹”u tdÜO$¬Ÿ¾c£L©5ÊEÆ�ÙQ(X¼€úàÇ—S˜Žôò«ñµ„8¹•2d:K©­2¤¨\©¨)ÃF��qãÆ)‡JcÙC“[Mn5–€&·‹±â�[Q[ õZ*¯[–�HfeCƒ‘øõ WP¦*—$ÒUËß^XS«ƒ¾ ?©¡³«‡|®þùϰÁ”Éj9N�öÊ M¤(ü]®ÅHvÉOHŒk¥2줃"�›ÌuêPo,3Ÿ¬ØE>߆d«‹Žž.4eV>,#ÔGBUYýŒÆOÒ(=J*[Ì×c�>ŠK/½×_=›I’øT5 Ñkm!Xò¤äÙ}Gû5æ¹ó”,M ’Óòc2£`3ª›ÏÐãým…Á0›D$#ÖF•Gy,é!‹ŽDr•ÃQ†¹§ê¬\£ ñsX|�4þK<%¯•1Óò _%qñ=5}“¼º–ïʃ$†DD‹‰©V‘Ï”ÑnhA…N‰‘kG3 î™ß>o¿òŠŸûøk¯¢DbÜM…‘ñ�d7Ô#=ÒsŸa½aœ�° w�ö¦Rª"“ͨ±¶’fK9Då-¹¯?Y=÷òü}÷%Ž¥ò"0¹C…™›$ßL‰Ÿ_ StY¾”$-nð¥Aò!R•§«×my’èŒ@$^ÿýOrO®‰ô#Ò þ×!z&õ“usæÜù8÷{—à‡?ù)&ŒÅú#E “ýË= 5³I•U¶³˜Cc" ú¤0lÖ–“Ïú’”&(sVr–kÕ¤‡*e˜p’(JȦ“ho댖~íÍ„�Šr‰zD}©QRo»õ¼LÝ8ïüóèÄÊWý$ß&#Fµ!ëçbˆ õÏ!*O ဲõ•3åDužzcQä9¼˜ʳÄÍú!4¹ÕäVc H¥ˆzQ"hr»"�[IYfˆˆIä^‘É“š‘‰ÇmM–Ó•†Ü"9‰â+™Ò8AqÛ§q«0zˆ*htR!ùà5¼Ö#Ñ�åy¥¡´‹CÒ�¡J+Y&›ˆ‘HÄ/‘ÏcêãObÞ{SÕ˜Ý�÷Ø Æ VôØ6ª��[&ѰX%=ß 0kV`(-³9Ž‹ÕVY묷.‰Oª÷ û@=«õ¨¼¥d}×÷}³ŠÀ&ç½Ó®g¡B–sy=eæÊ‹X „Ä5%HÌK$¸_n3!wò­�sXÚrHd_“S›ñle¬k,Ç�2'eWK«šŒ(ÃÂÞ×ÀÒëZc™K\ 鉫—•¤¹}×ùïçK#Ò¾:Ô/Çmç‘-—q®û£:«]�z»ñ±¿"ßœ@Gœ÷gBiz�ê“á `I>êiDXto†Åùè%ªK‰æVHdÜŠŽ”‰‡FÊÞ¢ºW}R L9¯ ‡7βL}–­86_.DÎ$ûÜJ�9ɶF"®\->Ý)•«±î‰ü#ªÆc¬Ó.uZVïd+SûI:†…rà°.&ñɧ3ðòK/«�¾:/¢‹Ë;ª1j´´´r9ejQh):½sÞ|¯>û”=e»­�=˜2”¼F=³Ÿ…W—g¯2Ù,V]y¬Ëz�ÉÊ, 2¼…N•ÊsOmø¼½h‘»´pâˆË6 ‘Ô ’, ?×� w`ÕP ~K»f±QN³ýÊ:@‰å›§#]fqÉû¥ús÷Whr«É­ÆÐäv1V$r«2Bƒ¥zÝTˆîUoê•‘c1�òá†ôˆ™Œ#óÕ†^ ¦f’¹(c–…®|ÜT´a0å#¢PzÍø¬Ò²Šˆm,�¤Ê4@n<2^BxC5(Ö@œE®˜œ²ÍëâèʵÅ.9ÂÏžƒÌ-—�m¤È­E ã�X$eU’[ß �uSjÎS!Ò/�ÜÄ"ÊGEò¤Ÿ©¸4zK‹"Óê±$( ó M’žyTà¸Ì{¡„!™VÌ›³é†F’�¯úò› ‘hD࣠=mrTèŒrnTï”ì¨T 4ìòáuU¦àâ¥2nU¦tGÁ$‘¬–YIp]:"&›:™ø—u�Â_ HÏXG¡ ¦‹l7�+Y|—2®µdH*jè Á�R‘A¶ÊrgîÃ5d)òQïi•üü;È«õ Öˆn¶caÂF¬ê£…ŽSµ§V‚zÕG‰ùÊÏíÆ`3Ã%ý•®Þ/Râ „ÐJýŽê—:§NHϵ�u‘8ÿg},UHÒ]êv*�ù  EÂh‘| 1–tDx¢%-‰ ÝÑXv;Ͳ‘4e¿/zoŸ;U–‰8‰Émšõõ¡oÁ×Ý@Òèã„óÎÀ†;o�X2K}cþ–P’°¤XE7å~òá aÆÔÇ‹žôü’€É3|öj‰³´w™�hl”j1ú¿n§L3A'¥‚¶ÜB´Èö�äÎJ HÛåe’Þˆ0‹ƒè°í’”û34¹ÕäVc hr»+ ¹##D'jÌ%DM½ôÐÝ‘sQÏ­ô†Šq¢± Q²jUæZŒ" •5È@^#r?Çx2�é¶2Ú®i%õ^* � Nˆ “*$=¯R6b|«¼¾‡…$¼WÒI•Jxú÷¡cö\õªyŸo¯¹ EÌ*�•¬S”âV½æuÒCésk°¥R=·¼�'·ÃL"ýÏ&)“� ¸"ó™ WV¿™žÏàòž)ÞOÆ%Ù )E�/É<ÉØ‹/|v!á"cUæò'[%©Þ}9.Æ?I£DÇ2#�™rÍ䮋ÄÖgt‘�è±<•ôX ýYZDZõï!qò~ qêaš%’K‹ÒfYæ…Þ¼ �Š3²Ë+ì¥tRD/"’ÃDþMn„ðùüÝ|pÛ¡sÛÀ�1dˆCe³B'ÍE©�U-Kg†Ä‡Ç¾LÈI½‡&êQ—ÕóÅä®·çVb…t\k�: 7‡Æ�µÏŠz]ë2“T,î¤OÉ=ºÓGV�ÿ|YŠHd•ÀJo6l–}œr�úÂËxïÅרO6Üe =B ñ0bløTj‹ñÏÈ”ÈQziÕ[%‘)£}ÑârÄPmoÔÕ“�r[²úo Ìº2ÝE®MÝ'±m´Y—½¬tæåéð±-t½nõ¡]f^õO–~Mn5¹ÕXšÜ.Æ En%#Ò Kƒ_oôÄà1¨óªÎ£Øp,S5è ¡L±d$2ÈÕüþ�¿ã¦CÞn@‰Ï§q7kÑ+ʾ�ª¢ˆ.ƒôÊyÑ'gBNiH S‘[¤m+˜~•1‡fÂ]æ> í?�D-#D ©$é"‘”×�’oß”\P×U½9> ±L$Aî-_ÌòôKWÖ2ÜÁ%›µCE·ÄP†”ÑR(c�Q+á´3OA²)‹Ö"ÉVuÝ®ÀFðe‚åäÈ=lœ…@ÈxW!?Që,ò–ž>é!¥‹Ñ݃æ¦ä©£e'�jÂÄÇ�Àéç_ŒÝyEvä£ÀÀ# ࣉ —rÏ¥EËÀAjÉ垎. 0DÉNÆäÊLJâ[ø½ÄK¬�K½´e çR@r+ãf—.+Ô-�鯓˜ß�CK: «c>Üüͽ°Ën[³ndÑEY—ºÄ)óÿ’¿i’2QãDY.R�eh…<³<¯B‰±¨×’ò�Q—¥+?°ãS ø¸£‚knºÏ¿9U9sQÏo= Æç5²ƒÌJ!uY°d}D÷“+¨YLBtÍb·Š ò°JŒKû¸ä¤ƒ°þº«¡�Š—c]ÊòYŒù3Ñ”N¡›í— ùèÏ�òÕäV“[�>�J¡Ém„…ÜŠ’†]I…ù‘Æ?ÚuVgyžûŒ¡�VbY0Ý×ÁGsÚpãŸÁß^z % â4Ž T§OC/ùg LWzW¤U�ùnEä•bHâ)·‹13ä>�I£cÓXÄ"£k4† ò:Szˆr$1�™/¯É}‰Ãk™Œ!療ä;CÍ{Êp AŒû’¶ä%ÒÅÞ|)È>ƒSøï‘ô|4xET­2J.ÉV,�–r n0Çî·?>�7 £ÆŒbÆê¹C²½tI/?ðQm‘ŸQ ÑøË¨Ì@Bf0ˆSbÖBd(ÃR)@%‘B)™Â�O¼�›þúæUCôP!‰­(L­Ægdco„}Gö-×¾ûü%:õ…ñKœ£Ìü\â©8ª¼�KÊb ¦}‘Èl ¹g(¤œ¥gNê×Ò¥ODÌæßBœ˜†rŽº çÉôf5dƒÎ>bl·æjøè­×1y­µP¦e,2q“u\Èð—yR™QB†mˆî‹LÅù“z®äMH�«@ô `ù…ŽE’iâÁ§^ÁM÷?‚å<7­Ò‘…šaÀºe²®'¨J6EÄ´Ô“/*ãh_½ â!åÔ0²ô¶É²JÊ¥¬¿²@G‰Î•çPv©÷ CIC’¹Fû}!Ü„ŒªùŽyIÔƒ\�×7 >MÚÜ€¿XŒÌÒàQ¦[Ï;ËIŽJù±"B/GîbT<…“öÜ{m±!^åY¬³ÎúèhïRã®+dºÌw�W¥zýšÜ~½Èí×à5ú%TÛ©¯âR³itäƒ iÀÔôX4<µÞZ,óZ&“®"¯ÕD¼6ÇýðVÜÿÆlt%"ofÕ«L!;2þNÂÅ� ¿:5¾çE¯ ù[ÆÊÉm¥?E’ÀÛÉJE!�h�ñ^+_ÖËP%Æ+Èu4ª2#ƒŒÿ”tä«i±}’U™�A-ñ˸ҫ$éKœˆØFX”§¾ùc«¶øøçýŽö+Lw�e£-“€Aâ×RKbíA£pü·ÃŒr€+n¸ �å ,Ë"*ª—ñK‡ô´™¾ !=!²t3è^‘ÔVKH²|Òt2•׿ò•½Lµ4¡FH'\ê'‰"‰e©FGÁ¬ âçø8%:=òQ_‰„«Ì´IFèô|Ñ=¿(ˆ^ÉB"ÒûË«z‰�ãð8‰É©G½‘Š$\…x *véT^¡—\p*&m¼>þüÚûøáõ÷!pRjÕ¬„Q@XéŽÊüK†Ì lU† ‹�A†Õ¤VêañDù2åï&�l#>(ظð·÷⇷>„ÙA=ñftQ3ò†K=–¡)1j³ÔG©s¬V,Gµ³H¿¥²-‰Þ“_]#[9#yˆÁ'¡.‘ ú2å—è_o±ÄèTÒ* ‹KG‰èŠ"´üµ=}ëoÔqJØ£ÞûXë„'o+lòÓ„´)%f‹š`Té4±~¸’±nüäÂ#±ÅVá÷÷?Œ_Þ|�tù£‘õ(Å61Œ¥˜V’wW¹ÔÐè7ˆ,¿†ÆWb»�šgùrY–>-U–ô˜Y€›BÁ7Ô¼6n/¹áÏ8ï׷ヒ‹v·•Ķωq±hPÝÀC|Q¨ö†%÷£ßnX�S#IáÖ’-ƒK²÷¼ ·Wy.¢!,‡Ç^/Á¢Ãk,n‡éÈõrÍ¿¾7Óî»/÷$YŠ“,EÛ¾¡~,Ú(M²ÂVnO{Mš„kÎ> SçäpÎ�·âùùóQ‰°M®Õ·'é˃ä@�E&±­Ñxò²Y�ŸögýJY-˜�lˆ0Ñ€ÂÀA¸óÝqä�¯Ámϼ †ùj8‚ #p`z.슃xÙF²j A9}¾Œ—ܧ¬¸/²ù8$£¢ýúïÏž¯§&=þª÷0Ú†¦ô>‹i­¨¯ôNZŒß÷^KÞû3ù žÈl«¢s¢7Ѷ ¿ÔÉr)ÃqjpMæÁ–žÅEƒL' �×ýðÄc1aÄ<ñÆû¸ê¾Ç0ÕwÐ%N qõ#) îK†èœô²Z”¯Œ[w î3Ôµ"\"…ÎjˆÔÐÁȱ<ï~â œyõmøËk¡Ö<ݵ� Ò`y»B]–q·ª•P=v!˯^–}˸ï~ýw½>–‘� ê��lÖi:Wfo°™ž+u}Ñu}ÓˆÒY¼ß÷Ü’ñ¾øœè� '²}1Ñ_ÙÚ¡‹°À2a=N’ÄÇJ>Òa I˜•ЏæÔc1(žÆ#{÷<ü<Šfš¥)åPFÕòБ ì][•‘†F‚&·ýùR=§jKBk»0Ù¨ûfíe…�CðäsqÒ%¿À��¿Œ§µl+ÉR‚†Ï!Ñ�ÏzähdX¥©_š �WÕòÚ^^ëɾ\/ÓzÉ0U Ò³+¯Nåt“±¢¼ÿ¢óQ|¹®Æ›G„G®Yú<, roäçí÷þ&Ù©ææ£5ébŸ�7Àq{î‹®®\výñ�·ÞAlðpT¥÷˜j†¡"^+êe,½¸²œ8" [".Ëܺ0²�¨¤³˜ƒ8.þÓ£øÎM÷àÙ…=‡Œ@'ùš™mPòu} áÕ�&©Í0¸tx¾°<¿ ¨Û3êÇõý¾¿åµ±GýóÌ åšá‘ åœ�o¤ÉÈÙ)­$Ë:‰°–ä$Þ½×þ»i‰È“„o‘ŒȩŒ¼!y&)ªTŠô×dê³ |»ˆL<ÀÏ/º[Mž„©SgàêßÝŠ÷sTš£ÀäB–‰M‚&s ®�g²ø°²d±Ò€ùª†5>‹ �uÛK7`>•â¼_Ý…Ëo¾ï¶—è´ Å‚\±tV‚e*…ÅËUü!2a }¦,ÿ]`ÍäŽ ‰�áQPGyR U T]!™–qÐuY¶�©ÖRÔ“4jazñ6LÁ¶›èÈ4 ($À2~ßÀ úU·~ïlºêD¼õÖ'øÅïÿˆN�t܈“ÜR?L%:>]ñyùÖ–÷ÐÐèOÐcn—òZH�¹�°ÂŒ¹e²BqäS'yàÌ#�Ÿ 1¨ðw�Ö±l˜¸ùáçqï£Ï ½è£`¸(Å\’MfД�Id �O"ç)æ›Bv£×‹ÿªò0/bè„t© òq™)i‡"fQ‰�ŒÉëQy¹NΫÈÒ“‘­ÿ Kožd®„t­ûl´Žßs[¤ §]y3žš5=Ôõx©€üü\Ld&œ\ŠÌ³|ØóeBÊF·È[Æ�Ú¬ƒ’#qdª$¶—$2áà�Oæâ:Û|<9Ãa½5aȸF_^Sw©já W}‹2E]‘Y––¢Ð{Eªdþï r‡¼è…診^]ÛG^<(ã­åX}<鿃.™Ë÷sù�æ\e&Ï­'¿„ÖTgì»3öZoULÿøSœ|Õoñɬgg0”%ó÷kÎÀ€Îndü6Ö‹eÍ¥üeBMƘj\´”ë7óVK¦IÌâxöƒY”õãxwú\Ê?�‚-gk'âjnjQYÕSËòPiI«}«*sæ.YxŸ‡\R‡\¯dÈË"'KœVnùŸœ“ EÄœÊ8ðÏÉåÿ ¹¯ó$y§£¬†?ôŽãµIT½B7’Ô5¯„–”…ïî³vßheÜûòtüüÎ?£­@[UÊaÕF ·_y6üÎÂñ‘gh1­¤|ì*7êÇ;®ÇÜê1·+<¾ˆ8nœ†ÇB¾â!Û`c~[θøüüÞ§1­G[%·±‰F°„¤ãéH–hÙ2„$C^,¡Œ¨j)þMP1×+ŒI±&Ö¨Þ =jŠÚ÷öÆJ[*ÖC’澌 ‹%q¢4ø[1.ù-½0ôÞçßIkéCCàÀ5&ãâvDœdaÏï]€潇.¦“ð“6"Íœå*JjŒ+¯ûÒ!¤ßfö¥›Iz8£Â”�ƒ*td|Û?<÷6޼ôçxäý™Èç]dkᔓ°‹²V¾še£óRU‹t'|t$¾¨\?T»„¥øè0Ñ ¸$—™J � ÙJ‘e\ Š”˜\�ÏS@œ¿Ó^Q½Ò^ò~ÿ,H�-©Óÿl°DÆtÒá>Aa¾-®�³÷Ù;¬6ŠÏzîð ­`ÉI M‚4Ô1�ÉJïc;·2†tE€P}¿fÁS+€¹ˆ%²0³-è-Üýä«8íŠëðÂÇ Ñ€®2K…$/‘¦“Cg[íˆÛB:£Ù3DÄÂúíÅâtÂ¥B~¶L¿(¨?Yu°·Nª}–qtœqúp$©ëQûlË"Ô Ÿ„„zcö�Óv3ä(0Ùg@'2é yíL:ªÝøÖ¡Ûbí5ÇbA©Œ n¼owÕÐé4 tlëB°ÙcHÁõ4U Èz9¡<¼�†Fÿ�&·_)Hψ„�W§¢(‘³Á–Þ™Õ ¤'.?›ÄíϾƒ“¯¾o,ì�—hFè�²eZÑ•«"‘h@U-ô/Ãä‹eù DzsİGÄéßé2j_¾�˜–ôlÓøFiDéHLÕ«º›Åʯz:2=Ytäºúµê§ôþþû ñ¢±~yD_T«Ïfx+ùªš¦�^»|(—6ªÈÝXgü ì¿Ï(Ñ`^ò»ßcfŽ€F4€Uü‚\[­¡1)³¿FyYj_cÞÅ~ËôNuN ½R2Ú2à9‘µ,+,ãcèæï>“Ç|’ðij¨PŽ3ó>~xË£¸ò¶‡ÐC9WÒ�ˆ%S¨x,7Ý %˜ñ÷e@ƒ¸E"ucnIX–2D½ˆKH–%I§üU{·aÈð¸A'CBÈtåOž/ºç™ÎNˆ3(k¹Jt7¬¹,3²$›gU`¹ jqqðN›b›)“ðîì.ì|èRC™‡Ë4¿LbVeÍÃgžœ Åý+l-%$³bn•`D¯¨û"gy3 3„ˆXÔ+~_Vý£ÜY>òA¦ŸH£‡äìƒbWßû7üè¶�“¡ ɪË"�’TQTŒA’o¡\ö(¦Ëº%¢�Î-õŸÈ†ùø¢r]2(íQ³”Bµ•c ”!d 2èC@ù†<þEéü¿ó-N·ãÇ‘ÈÇ�f>bF5»Lò_…A]‘‰áÔý·ÁV“Fàýé3±Ñáç£�í�ÝÒŠŠ¨¡'‹åÍ2–õÊdZDKÆ@Þ^I}ÐÐè?몡±BC^!-ù©BãîѠȸ¼Æd¦Ç[VÝjN �fàòÛîÇY¿¹ÐHΪ„(û%Ú" $4˜ÕŠ|™nÀ§å”YBé5 Ë4X%6öÜ2ÞÒ™2ɨÒPTzC•A¦Qò«4Êx?¦gx U LŸÛ¯õƒŠY“ø¯ãõ’䕪¤»Ä½þY�´bò‘ �<ä+ý𼿖@c&¸A¾—[ø vZk4.:e?4lÄ:{ŸŽ¼;žG:ïÂ( )²Ð÷‘ ¿1}Ë¥œ³ó¿ƒ¤Q"=l²’ôˆ!— N]¸$â ³„d’$Ø1á´4a®ŸÂ[s:pá¯Ä >ƒùe\–7ŸÕf¸,[‡åâ0Ý8Ó²éñùœ˜;Æ4Hü…ÆÉ N23X=Èìk²­—ߟÙgpù[¶}÷Õ5½¿£}Y OîCÀƒ>ó¸|6‡ù�%•å•°Eb!S¹Üò&KÞ»ïþgÎYL[„pä:—‘Ž›ÙÄO‚·„SiG°`*ŽÛe¹ÍZø°­']q3Üáë0îxE’!·FU:?âs1›0ù[áòõQ†RˆœI`•Hr«Æ£³WI¶¨Ìi7e”äq™ù"ÝÜHçÔÅsÓçãÈ‹¯ÁíO½Šn7…ë»Ì`Ĩ÷¾ôÖRO\‡ÅI§ŒÏcñ¼MyÛVL•—k†”‰Ï2 ”œþU×÷•<™G}`É-ƒ¤U¿FÞpx_Û¤{,��ÔWNKÊS¥¹Ä½ê¿—Œ÷ÙstøÄ‘õ“h´¢Ð™G¼5Å °L)¯dOÇí¸ ¶�¼ N›Ž³®¼…æñ,WVG;\ÏC…ešcùT™¦eYFUÝÛQ¦#N¦†F?‚Öh�õÞZA�ä Œ-ºÔÍómE5¡Oá‘·?Æ™W߀{Ÿ}aj:ò h�*p¬Â¢`[¼¦Ïï¾á‹ÎÙ‹öûž‹öŸ[þiú¶žSÛ>aѹh_Ò´$^ý¸l?³¿øœm•Q•UÖœa$§šY|‡$!„ä‘õ;àtOÇök�Á ûn³ZÁ‰ß¿ÙAÃQ /°Í8,­˜êIBAõzÊ�ú�åÕƒ»ø®Ü#!%C•üK«ô÷)ÂUN�ø§h”3˜SðñÇg_ÄÉ?½/}:v¶)7ƒõÂ¥obóᢠ ÉOJ‹~ !‚üîs. Ÿ?]³8ùÅ©Ÿ[œÆ¥_�×7î’ç§Ñ·~®Ï}ë龉²×‚�މhNGÉ ƒ”Ì—1¡\ÁZù…øåþ»à˜M7ÀÔW¦á¬ó®‚•jÄÔ?ReÅH®Ui“˜Ékö¨ø™Î¢×êË }tIS!ºä‹ª'Û"™•Å4dÊ=YÁ6Oâk55aa®Œïü+.»òWhïʱ- .0›j6Æ• S†ÕËíŸËIŽzCTŽ}ËX¶õ2®§±ä¹�þâãõôUþE½ç>ŸFô[sH&ª(99t8Ø#¢¸p(ó‰Ôõ°=ößt}¼óÆûøÖ~…3Õ©ÞöRý¿ø¿è°”Ÿcý úƒ²¥€þ l1V”Ê’>�zW;‘@¬Åfƒ_Ã/î{×ÿý1t©©¿l6î)8f•< DZÔ¼’¯¾û‚uŽÖTí/yNö%Ôõã_¤!Äá_¦ñÏÎ d_ðEçHJ�nÓ<$:YæY™V¬¿k7Å1(cãªóŽAcÜÆ‘§��y$G�=2Ž1©^kÆJ!üĵ S6œ‹W®:ƒh‹å¼êl«ß}YBújUÏ-› !±2î9ú«?™ôð Á�~±bMYÌ(—èÀüïu0'WA,ÙHbî�ÇV�©“L‰”þ羚�tþ¿Oò¯ÒXÚôÿÛ4Ÿ3ü$,?Ü�€NŽLyeø JÒjÏyß9xì°óæxgf§\yJˆ#Wpa¦†°`r0’!º+$Iô`ÖàÙÇ~~ìŽ(ÚòQ– FYšçøOAGEV+ ™×ÐáD>|&S†”aZÑðS� /»1¼6³?øÙ-øpAJV9ÓFè¤ØÎDº#å!CÂÕ¬jº½:þÛ2^Zü¯Ó¯"/ð9“¬-¨z]hi0`̘‰K>‡m¾þöü‹8óÆ;0³uzŠ,cʶfVÕTwòñœoV°Z#ð—KOAc×lE�ïä3#¶‘ËÓ©Y ?(ûz}P¦ÉíR@“ÛÅø2Èí’½¶j˜B5DÜ"Á%¹}¯}6~ù‡‡ðø{ï£'ž@®ƒo„�¸uU�v“¨†%Öý/_Õ¥7ti±´q5 IGh¤dnUCæ�5¢yO,`Òê«à¸o„yݸö×·ãýÙsÑå$)¿l kòVVO^¼EÝlm.^"¹`ÖP¨Õ��åѪ¸>)G×—æ—¿d|#å³`:$BV¥ÐÀ}O½‰›~ è´l‰Œz]kxìr )/@™×Tåý|?…Ìô ãda-€Or+c«íj©bßÜq}¹ÿxñ­÷pÎoîÀ¼ 9þBÈq›Q-¶±~„¨Æj½“Hs„Üš� P¶„ÜʨçåaüI¦ÄSRo(S¥àÒ¶úðüålÁ§,Ó Ð]öqÏSïàîÇ^ÁœŽ.:]ºea ÖåŠ/�¼a ~H/47êƒLŠû˯áË&�UÛ›G§ÀE¯k>ZâŽÚw'l·ÙƘúîT\ø³ßa6�ÕöÄ(„l Ÿ2×äv4¹ÕäVc hr»+ ¹u\ÀNYè(Whøâè&ëdíö ù´Œñh8-ÚѬŒ{¤”izV,r+�9Øet¬KïÓÚK–\.:ÉêIy’½o^øÌœ�GO–Ólàk$=~À6¯ Yä(0Ϫ‘ÜÎÁ W­ÜWä–jΦqÙ£—Ü.~N‘“,rÁʸa™Ê*ž„•̲þ™xᥙxô¹—Ñi„ð©_s EXéhRz[Æ2$dµ'†r,P3ô_jÌdÕ.!ˆy°©ã™²�¦¬ƒa#WÆëŸ~€knþ+fæ\Ã$L«‡D'©> ‹;òY[ž×É+}k%<úó³auÎ%¹¥ÃÐ;mÚ²‡TB!T’¶[!¨l[éP�ÐÆFøN!‰ìÃÏ¿�Þú]•v2 �JR¢\Õ4_UùˆK4G–¤•ë#·5Z’ö?¨4_)ðÙ>qÅDŠdup­ Ûm¹.F¬:·½ô>.¿þv„©º+gà ¹¥C¯Éí"hr«É­ÆÐäv1¾Ìa Ò ‰ºÊ6ÛЀ\I–š$¢á‹¹ò.ªãÂi¤7G¶êî�|‰ý…Š.ê'úî/‰ÿö\_0ÞÒD«ciãJ¼Š4ÖÜIÑîËœ­>¯¼ÒoðCTIn�¹ìJ<·°„¢×@êh¢l2¢Ÿå55J±„Lµ†ª™b:>Hñ"Ém 0_)PÆË‹ÜÌ£©^1 1¢cA–Ze#£á•®¡(=}&É+ŸOä+ã€=>�"¶BŽùO‘»E˜%ôSÈ3ʇúÝÔmrQ:$ :z<×Fùoÿ½ß`F™ÄßËÀ¬x¨ÙÝ,cz„4lf­ÈHnM&^‘Ûs`vÎ'¹µØ¾É$Ë«ð„P‘€©YIdáƒ@94âœÅ‘£6Vl:­tÒ²|6‡±ëSêA®”ÖX‚|l(Û¨¯¿ÿ \ä:[|>>l Ã0~©ou—qȵÀ‡U5¿·Qª²N¥£ÃïÕ*šÜö�&·šÜj,MncE!·ùd3N»êf|øéPÖ�Ç7�kÿô îzò̦Š:‰Öy!¨×:IC†"H`»Ìýˆ“‰Ñ¦ÒôSˆëW*VÙž±^›mØw�¡øÎáã­Y¶ýþõ¨¤G"HäºX&ë¿‹<ÛMnC“[Mn5–€&·‹±¢�[¯¹{žu5¦Íï!)³i›‘ËáÈŠPdM�é£êx¨ÚžX¥4�áò hÿþ#ÎÀr–èRAë—õÝï‹À¤I L4‘Ìíšz]� ºqê–›àÐ}¶Àß>'šTÕ0ÏâAšù Ô|™I�İ·ç¶1˜‹—¯>YÎ2,!¦Æ8.{È m2§©sIpmæ¥FREÖH¨)Ã"�ù™AøÝý�â×÷=‡îÄ’`›„H†!ðz) Y€AH­ôèÊÇ’Y‹­üŠ2ey@V™ щjË(… Zª�Øq°�+/ú.ÞʰýY?¥30nåéUÐI�(Dz,¬Ë7GÒ“c¹Ñ™`¡­F#øÈÏÏA¬³�ºCªIrë¨/»–1(“é ¹õ¨¯"7!·ÛW¢à6À�o¹ ¿ò5´[iêE�uDn…ÌŠ\i°¢iîxm½?Wé¦ qPsV÷OH]ÉP¡óN¡Ý�]F¦põ‰§à�=ØÿŠ;�‹‚�Ë£±ZB�ža^Û_MnC“Û¯¹ý<¢F„˜±LÌGSR­"ò•n”j>Ša€ª_C( z™¯wmÕ‰_Jˆõ«Ïï¾çd+çêñ–R’ÕË!ÊòL•þXVa�…—÷V*¨f2hwRhgù•d6ÆQFÉ.£Í¡ã"¶\C5F•Az¾yHzUá+)ÈKþåëŠC‘Ò²gÄ,ê­� óT6¨×©F”ø,Už%%ã5 �¥±=õÛ & ý–•Æ|ú·¼S#i d±~òQ]’H�&%X àyy’^AÜ@ž^E•®†Æ×šÜj|%!Žªéšèö«’i-R¸l|'ICÐ@ØBB׌ÆJšÊ ¤i<“ ’Ì8ÉQ"¬1)K“He¯7ø<æ!I/?!¯ù$. §\'×Èñ”^“¢›0mò/ÆuI,d+Ç3¾�Fæ¯Á¯ð’¦Ä“{G~9|‡Ä­É=êy’û†ˆóœä9ôҼŠñÒ<–%)mªhaš�Ìkš¿“BIJ yWo‘Ö¨™äeb^ÌF™‡kn¾�Eàd�/ËÊOÒkF¢@š CzÑ„0Hï� ãà%,c‘ å�ˆâHïQD°¢¥mIÄÓ˜Ì{ÕQ ++rÜ—^¨0VäsP‰PLQL•PNQuiÜ�Ÿ¹ÀPVãI…üz$ª‰0ƒÇò Èê™~ʪÑ1žª*ž¡B…q%È1Ÿ¿åºè<‰˜i©´£k×–žp–ïÐ#_CâVHÌUÚê¾BÆyÓæ9IW®“ ÃHêù”ã’ &Óa^¥Y¿¿Äc±±ånt°)C¤YV^>I"©?šXfÍ=!z8aŠÄ‘`ïpq(DžÒðGã“EÒ‘,dÜs$m Ë"w2$½MѸZKʘùlËWù,eí¨¹3„¼VHzeÙÜÊÛ‘–‡KqÛ[¶ªLûÈDÆÛ‡$|òv#:ßGd$¿ymŲ•Lëåé„ȃ:"rRe/çEÀ@‡�çD7Ô1uœû u}«PŽuŠÂâc¢Oõx¢j_½q!Qe�´E$__îÙžo“b &šcá–øL]ë ååÒ™M…è Á-Äeº4‘·TüH®r™ôz‹s#â•r—ú-[ùm54ú4¹ÕøJBÚsÚbIiɲfœ�}‰e'G–äež°ÐR�‡ ÕOÑ´Á/åaŠa K4¢Ý0�"ɉÝ l11�MG×ÐZ™Žê‚‘q:P)¶³Ñ�#fgP’�r‚n4eò°ƒé˜ê�é̓Ui'­Àò‹°Iù0«f“ V1Á\ˆý&¤fÃi�¼_3©(ªE„n7ül�qIÊdûª�ê¤bmp�¹°Â…0+U$ª2ô#¦&ÝwÅÚ±ÛHÛ´ô 1ÿ¸±Ù$s]¨•+à]‘K%K7Ã(ˆËp‚Z�ZáÈ/J¯o3É‚ ƒÆÒkÇR yd`¾Y~5¯Œ&‡�B±€ a�ô)²»|ÈŽ¬"%=o33Ê$ù’n’†0IB–@Üó1�F](Žg%h `[Iy_Ýš�y�U4"�xq’&‰-<˜t ¬ž"âùšd(C•$'_¤sPÀ�`.šòS)‹…¨UHˆÝ ŸÑUË ÇJ,÷jdEªÉcÜ÷ÐàÑ"´«T@sœÎR dè�0vF0 ”Ë·€ÁÅùh.uRkd¥8ÏT::Õ‰ŠI݉#AÒ–0dq‰vzh”IUBV‘c9‡í9¤Ì4¬BýtÏ ü\´ÖJ»º‘C½˜¨RÇ{úepÍbHR«È°,3²Ö…G…N“Ôƒš¬`¦ho••¢DâHÂL)³‰$‚2b¦�¼ µ¢žx•nØj±å-D–ò ³èÔ¤W2 Y�!cÙH^e¾Þx–e ÅRt˜/‹ºZë ÏÓCL³n4 Éç:ŇrŸÊ ÏÈ”ã°ÔЄ’ú€.a,À@ÖÿÑ……ÞÕF¹åayÔ÷„ ‹Ò¨æY¨÷t¬X²”Ó`æÉ*•)ÛÌ„Èk\§Ä<ЉõcHÊhö;ÑÌFÆ›…tYö}dXW“Å.ê u'߉ÒuÄ�¹ˆr°©;Iqyƒd²ìã^ iÊÎ l  ¼Æ1©—©ô,˜¥w1Šò�³-‰³,„�Æ)›uÅ ,¤cT™ŸR†¢OÓI¨ÉŠŠ¬ßI-õX>ÐsÙ–°e—†ä8ÁÓl?ègXþ·],Y P¾äó‚ÊÿÆŸÑÐø¼�èÝ×ø'¨�ó¬C~{ž§ÆÞ~Ý –Íä60å!j6ÖNàá•ûî�7kä�M�>Õ¸ Ú¯eJŒê2�­‘Lâö¿=�O=Z7#£ÈL e6ì$™Õ2Fˆí¶œˆ}¶Zk %y©°ð#’\’¿ÿõVÛÅ^LÄÅÇŒ]7[{l±>Ún ŒhJá�'Ÿ‚Q©ÁŒ'�¼òvX}`;­7ûmµ)V:ü >yo*JVfÒA¡Z…·1¦5‹“÷ܳvßpì¿ãvØq«-0ïíwðöó/£apаÓ(6ºil1~ ßr ìµédŒÌšÈ/èDÛœùH64“øù0iØi½�Úu#œû­½qÀ7¦`Çͦà­�Î�?Æ[O¿@Ò•%Y¤�K�Vå*p]R]¯ ›®2«O‡[ï} í&ê®LÐOBA3(%£—j²L§k¢ZhC2æaï·dùذHš•u]ÆO’ŒÆÊÇd$øª'Y†ÄÕ9›åîfRxjê,<õaIP‚Dž½œc9óY+$«µ«65ãÇbýñcá’Ìÿd:õÀ‚“J‘½Ù(TòhnLb» VÇ{nƒ3÷Ü;MZ Ã’&>}çmägÏÀ€†,*�m,ƒ$R™Fd,ŒŽÍY~ƒíæ|ü!õ@z–Izxï.³H– …ûÀ-6ÂáÛm‚ƒ¶Ú»OY#­>}ù擤ˆDV¦¦‹› O ƒ31¬7aÖÕˆÁ‰róÛPèÈ©Þj™Û5;l(jÝmØvµ18q§õñÝýwÇþ[n¤t²ÔÕ…ᅢTÊA®�'맬ciµ"�EÂ8.YÀΛ¯ƒ¼üîá—ÉyIj¥ É} –+õžäRÕ#%‹“Ì%H÷Þuk:üM} Ù¶ÅÔlËâ(IwŠ ᾌó¬’tÉP6‰£CÝ}ä�ixevb^ÔË(ùve€ yy‚ÎÚjƒZ°éĘ4zÂ2æ4 ƒ[[tÉxB›ŽJ2ößxuœ¶ÛN8|§m±éêã14Ç'o¿‹z#ºdÛ :Ä% ϺØtl+¶ß‚f’ÿYŸ~¤/¿L‚™J£ÌrvŠE  rìöëâ¨�¶`]ü¶[gu:=f¾ù<¦ã45 H½3S£S4º)‰�F7cÛÕ‡cTÜÀœio“ F:dÈÒÁ´# Çã‡á´ývÄqûn‡­ÖŸ„)C†¡ã…7Ð>kj|F·1C]bÛF™†ËzØ�.¶Þhææsøã/£h6²`Ù3M‹äÕ–(ØúzF4µšôÝ&‚ØUì½íæt øtØeNcÇ¡ÃËr­èÏ»-K3;2ov¯-éo�øYÏ?�Y�?ŸuyåÝöÀÀUWg /j_eøQ?}üÏ@“Û¥€&·‹±¢�[a›·>ò>-†ð«$g¦4â5d­“7àê3B¦©×þæ8v N=â ¬?z8nüá%<~œjöÝh ÎÛws "!•9$…è ±cXwâL5¿ó«nÆ*VÙŠkN8C�¯®¹Ã�Ä!;ì†!ƒmüõ®[$’ÜÜ€�±2.>j¬?j$šéE"i4YR$Êûn¿!¼®6üåÖ›1fÕ5y 8rÛMqöA›cÁÓpÿ-÷`§oìŒ}¶ÿÞí=¼ûÎ hžFÒèÁ�¾}¶ž¸%c(ñùC6VC2ÍØgÓ 1"Þ„?ÝyF­2]ÅšZ#ßÞ†o°Ñ*#±Ú„•pÛ}O`¡“5 ™IBò’$”¡P]i C[> ØzsŽ�(ÞK‘¤eŒè¥¨A¢!f[H·ôÄÊ‹sYcŒ¿kU5�í“$·ÏN�Gr)Ã% Øt8L[§m6Ûbc|ÿ˜½(Ÿ•±ê˜±ØiÓIEùèƒ!6¸eƒŽG£‰oí¶!ŽÛy#lØ”AsÉÆH‘Õ�Â7wÛÏ?tÌøñL+‰kÉ�…ŸyÝbe Ie°Ë6ëa£õ'ã)–qG¥ùVa²Š4‰â%ûï…c7\+kEc6…ÁÔËoŒŸˆ½é,ýã÷ ½m®¬C�LÚňf ?úÎ!ØmÓ50¼qÚz^·^î9ä¨Ç!ïå:5ìºöœsÀvXkP†)ƒ¬ãb­±Ã±çVkÃô|üõÞ°Ú£»XE`7�’’ij G3O;l¶!ò~€ÿú’rv(U˜$T"@5(�Ä*²l4s$�Ò#Ë8pç­P%¹Oò·êÕ7Dw—5˜¹µÌjÀ<”�ÇÂQä–Ω�rû!^™ÕI;¢”ÑÔԂ‚LH¤qø&«â¼ÃX·V� c'‭ÖACâ¡Ë~Œ ë¬�’YEs«ƒ“vÙ'l¸Önl@¶ÁEÓàf¬ºÊì¿íºøëêÌž645��Er7yx~qÊ>$Ã�aÝßcçͱé+ቻnG�¬~7hx• ZØ®üè[`·Iã1yL RtŒ‡’t®=z$¶ž2 Ý|+氾؃ƨ¹z§Ð�¹âèí±ï”‰×ÜŒ¶ÛkM‰{û X�Y”­$Ü� ØiÃQ¸pŸ�°åð °MrÝ€Mèì¼Ý70ýµ—ðÖ»/QÆ6·‘e#Îe9n€‹í6œ„ÝBn_EÑÊ*¹Æ„¤Š½b©ú¦ ?§èåMM@r[ÄðŒ…ݾ±!jùXŒï0¯5Ö+©Ë¡Š¯PÐäöëEnå‰54¾r¨²Ǭœ‰�e#O²Q�apCß?ñ üý®ÛðͽwÅŒŽþðÒ4|çê;1rÜH\ùã Py÷Iì¸rÎÝ{= ¨•ñÊc�c—ýŽÅ”½¾…Ÿÿñï詆XoõUpýÅß…ÿÖcØx„�Ÿžtž»ç~ì·ßx¿XÆ•Ï=†nû-V^o2Î9ýtØ}ˆÌŒ©øÑ¡»`‡ Ã0¶ÅÆå?¿kïuv=íGx¯½eâ3�;Gì²#:ø.Øl2Žœ2'{*.øõ¯ð¶çàÌ_ý>ý".<ûpLÙó×pÕ±ûbûá�Kõ‹þ km·'޼ø<õîG�Y½öÜac·ç7ðéc÷¢)Ì£8w&�o ¶e)2#\EˆŽ4}òuº?YÐ_zð„ÐËGZÒó-öÔHÈs¥äEv‚—¸tàêã2¿LÈxÑŒ_A¢â#^‘ÌWpê>{â€-ÖÁo~økìyøñØû¤³pé�÷`ÜÚ«à{çŽà�‡0 ? Ço2‡­;CK=xåÙWqοÁ¯îx–AÊÊàú«ŠÑ$Zî‚™X»ÉÅugŒ™Oý[o¶Ž9á œpÞ/ñÉ'ópÍÎÀ°™/Ã}ïe +çpÚ&á0:B™ÎÏ?õ2N¾òG¸å©‡ÑE1tP3~Õ¹^zöÌg°Z£�+Ž=?ó"vÚñxú¥Øû´«Q-÷à†óŽÁð�ÞÀ éïaó¬… ÷ÿÆ5ÅNœyõÕ8ÿºßaÚüÙ0Ëeœ¾Ïö8v«MñÆï~£»®’ª@ƒ$ˆ2•ù¥_Tz>-q„¼DÌR‚,MSò&¯Aµ"#]IÀIÌctÚ-e¿\Hþ,;�.ʹ¡!Ž7‰½6™€+Ϲ Ûîr?ú'¸è²;±ûæâêßþ€Dð/Ô‹™8x«É8xƒU0˜uøÉÇY]ŽëîûJA£ZšpýO.ÄðYoÁyùAl5¸è°�ðôC`�-vÃÁßýûÞ $Œ~÷ãó1xá[°ßycó¸dÏ­±ý„V Ș¸ý/�âÔ+¯ÁÍ�þVÒÁÄ¡-xàÖ_` õÇ`üÉ™œµß&xúocû=ÃA§^‚}O½]7Þðs¤f¼‚LÇ;Øb´ƒwÙc’%|òöTœ{Êå¸õ¶‡1õÓy¯ƒKÎ9»®1þ‡¯#Q.²ôο…Ì@bÁ3\ê%+Õ�õ^B)—S=á2ûO�í‰L–ìWJJ+44ú4¹ÕøJB7�Ó„×g«_n›ƒ³ŒïŸz>|íEüä'?FëJ+£DYÌ´à©¶.|±ÛÞÛc÷í7ÄùßÚÍNfÏxûœv¦Ó£_è¶âš¿½Ž+îz%×ÄÆ[n„ktŽÜ| >~ùY\zù•h\y ä[‡!ŸÌâ¥î.üì·ðÍvÅάƒC7Y ;®1Ix8ûâàº??�Ü€Qx»sÙÕx³«ˆRÒÂ~¶7ßfc|눃ñÌ´w±`èPÌ832Y\ó—‡ð�ÞÃïqNÙ{7l·Ê$I‚ŽûæQøéµ7¢6`^\èáû¿¯Ìé@¼5…óÎú6»>J¿ƒÁ)G½b.e²Ÿ¨?4êA'e¨ùÊÈ©÷Ã$B7�}B&¯©ÍžÖ_y",y]Læ�PÊÌ_:¤÷ѬÁ5I¾ÊÝØb�ÕqÐ^›ã7×Ý„;ž|µ‘C‘<~<—Ý}'¾±ÅF¸øèC±sƒ…Ë·ßIn>xå%ìpࡸñýiøåÛÓpÞÝOb¾CË A¸é¦ë`wÏ"ÙXåO¦ã‚³ÎG¬q(zÒÃð~‡‡«n¸1ÇÅS~Ù·ÞÅÁ ƒpÞv›#EÙ¾òæ‡8äìïãÏŸÌÄÅ$JgÝqfùEŒš0þãuëÀŽÝŸ¼ü.Î<ã‡h±ücÑ–hÆ5·þ‘eâ—?8g¿‰;Ï8Ck Õ ÖÝeOüöÅwð»×¦âÔßÞŽ‚DÏSÿôIDAT¢mÁöЏò¼±Á° $ĉå–Õ«èúªb"­�û2ä#ê¯íû†‰qTÏ^¨zóüJ«ª71Æö«jžÛ/¢­ Ë…°ÖƒÃÜ —°>Ü÷ú³ˆ��ötž›ÝŽ‹®»»í· Ù{;ì²Ú(¹éHzžxòi|Æéøã+¯á—?‚ŸÜõGäøX Æ»ü£{>Æ�¾¹^~ìœ{ù5HOÞþÄ-ðÒ‚®¹û1*!þvÛoà¿t?îâð Ö@Ûˆ[ÿüNùÙ�¸ÿãnüâÉ7pá-@ŒNÁ˜l^{}ü,n;é¼xÿ�øÕµ×cž5=#×dzù ¾wÓh1W\z羊+ÞcÌ@M½¶í¾ûáAÖù+~‡\ó3,��ÂZ2øå/Ž!63>ë}:šK7õ¤¼eam†L›'�é×’X à{>bÔ ‹Î¯É¶3�N©xý Qk¨¡ñƒ4ÛF%��Æ9eHb{Ø6ëbd<†ï�{!²Ã×@5;U+©Æ\–!ž›6 ¿¹ýÏ8ëäS0¢a æ�ݾ}òG£;Ó �ž0�Û½ö>JV {í±;V3'wÌa#P<alÒµ¡Ht$ðîí¸îñwqìwŽÂïFÃRÆ£/¼†_ßý7Ø#VC·Áû×R(XqÚ�‹×:»á5Ú8æÌ“pÝwàÙOæãVG�ÎÂ�ÑèÐØ¸MÃpýƒÏ¢Û‹á�÷‡iÇðôïྷ^Eóš pG \‚÷Ú|\y÷}ø´§€Æ†4~såÈÍþ^¾ �W…ëJÿ«W1v$4ÒÛÍ}‡¬*��š9 +ÓØ•`ñºõnjƩ{íŽF#†R¥€ZŠFöKêÖéÛQ%_±ç¤i‰Òì¹ýZøË#Ïâö{‚=x%ðiIálT=¯}RÄ5·=†m¶Û ?8ó|Ø]y|üþ§Øï°[kcG�ÂG(âÁמÃoø+r$ñ£gq× × 1‘ÅᇉìJ“:h„*I¥ŸÈàâëï#ÙŽ Ï:'ì¿jÕ^Ÿó)vüΩ°Wž ¿6€NÑHÜÿöLüâ�GÑQ41tÈ*¸ãÆ;б gŸw6¯¹&æåKt´ñØüªƒKoMk�ÇŸ¼f¡�Å2=öLxî`x©!tÐZðú‚*ºô×ø¸fÃÌZ¸áú#S˜ ·{&É\7~I±LßÖëÆ0Ðõ3,EtB>rWÞWhðH’ËÊ ›8lÛwg5~rÕ5h»*’?ö”K0R˜í;¸æÞg)û1øÞdz½8F¬Š'Þ›Š“®ø5b&Rßš1»#†»ž™Š_ýý”š1vx#žyèô|:Wýø×0šGÁ2�a:µóèPžùãßcÌØÕñ×[ïÆ;°o°ùn˜ß0 £WBeÌp|`øØïÊ«0£B�޹øéyç3Þ*9È\­"`éy {ëóA}J'F>Ætƒ"’Ô�ñCZqÌ�{ªÞù J]a÷+UTÙ†jhô7hr«ñ•„¼d�UiÐ- ZèÂ'�ƒ·Ýó?~sfÍCØ2åYœL—T"íaŸÌâí7?E6–!rpÏß^Àëó]„7‚ïf”*$|.ÊñFÜøè3x·'� Ðc{� º€aÃPŒ'Q+»H/´1Ñ +ÖŒË äH´ jBgµŠkïþ3Z7ØŽ­•×'Ô\ä½ æ“xà�7Pu tÓxßõ·Ça´Œ%‰ȧaŽø‰b9µLn ^|{: 7…|üä÷7À3óI²ÊL+fðšô0<óÑ,ÜÿäójÚ¬)ë­‹Í6œ‚93g¨ñ©ï!3‚ ¹UDQzìÄ !â^¨fQ0bØ) ³€uFÄûìŽ�†2ß�4¤¤‹Ý$BjœæÿÒߨø4ó[‡Låf¥‡©ˆ_]úŒÍ&pÆþ‡#>tìä0*�ÍgrÐ’‰ÀŒ‡ž�Ž7çT�2> ÞÏoº ,>×ðUPqâ|6žåãž'žÀÓï¼­¦Q5¤?ùÉ(ʇkƒ'¢ÍÊ¢lÛÈ‘€ÎÏ[9çßþ8ö<þH 3• λñk­Ž*ehxC©CƒP°‡áÏMÅ{³æ£à'0rø8œtÂñ($løYÊ.“€Ò)‹'PN4ã­ª…ŸþùÄG A˜pñÀ³/ã‰Ç^Å  k#eº ïD ¼]°ñ˧_ÁL;ކ #°Ñ:1ûÝ—�¨v­ö CgL–ð4Þý¨w"Ÿ-3X­Bfd`ê§Ý¸÷‘×HÓ°`'Zðàc/bf`£=”\²qf�ºUŽ˜[ qçÓïÑ¿Š³¬l¸ÉÔI…’ #aÒ‘‰±ÝcëQ�[ƒOç£c~nüÝm¾öÆ0ãPíb½DìùUØmÔ¯g?A¹+‡Ž÷ê›NA­ƒy“¡D¾Ÿ�ͪòñÁ’ 81]³>DƒUŘFÊúؽ°RSAŽ­F¥ØëÀ¬ŽŒ†Æò€&·_Iòj�$¯HÃæÇ\ÜñÐc˜SˆÁ$Ñ8ûôoÛú<Æ4ÓXsH'‘6SXmäì½ÓꨒÆmŠdÌASWÒ4\17‰" QÍÏcp&�A$¤¦£ÍlÁu×]‡ÒG ©–£që†?ÒÀüÖ2YWy†˜$G¾ƒJ.DǬÙÒà¢V틬î€ÐïDK†äiÈ8Ƴa”z°ËvSH`ÇÃøàmh¨a>S¹0 Çî¾ Ç �ÔЀÉã&#CbTžßÏëBͤAv+Ìk«¯=ÃÂÊ“ÖÃ{¹ ‚Ô$îV\–"г2·fÚÈ—ò:¸f5‡a¶�‹�9Œ¿½ ~¡ 7FÇ�±Y¶½ý¨_*dщ$ ù‹~M2t£à�·Ü€ �4’ކgÈ“Ì˸™°ûm9cIèDÌ]¸]AUõðÇà ȳQª5 Â0¯`*Ò"=œ§}8Vo¶�é¯ÂÊ/`yÅ`7ƒIg ±¼'í´1é‡A‡ÉÄßÿxÉ5åJ"í’lÈ×ç½.£æ«yYç•æ©¼F—^t!&Óh1l:b9rë �•Ô9ëMâ„ͧðùJÊ ™=ãc4f,ä«ÝÔ‡Œ†4Bæ?U#±êÌ]]˜öaþüì›pÇ­Ž:`¡“„G11 JZÑdÁ•_qÖ ‡‰WºæaÜÀÎ �¯44¹Õøj‚šÛÖÓ�‰_à¤1­­‚»þþ2d‘‚í§¬�c÷ÝÓÿ~+iœŠù2ÅÊ8í�me°)Þëž�=�?Û°Æ jAÏGŸÐÒ”QôÛáºsÐZ˜�ÓwÜ…�æâû—þ9âzë­Š³ÙÅÇÆà®¹pÚ§c`µ‡oµ.& ±ÕkÂ[îz“×^m·)æ½ø²^ e ¾(aB¬ˆ·ŸŒÏ?ÏΞ� _ÿö§ßPÃàò$Iª]”±ù䉨fÒX4š·b/l0~Šm3+,$ñ« &+œy>Ÿ#ÔÁ _.d±‡iÈãgO=‹™Ôã}wß{¯¿ðÑT4: TV�Ç”q 8þ€í`“Ä~øÊÛ6x8vÜrs,üøÕÛ%#¯â§ô­-6Æk�>Ìø kÊâgŸ…®wžCI³Ë4«žMGØÇ[®Š Fй¥³2oþ§Ølã5à}ú:Â3�Š¥X®­°ü,2TÌ¡N‡ì´!žyúUôÈ·†³O>�ï?��aU9bñ°Js3ÎnºçVõVuþtŒiô�*½� iü71—^pîüË£xšä׳-\xÖñ8yÏíQzþqŒíZˆ“7Ù'ì¼)R$.<õ .þíÍøÕâÂ|­fåw^Æ’˜Q4œSâ¸öü£ñÄSÁm÷܆Kú ¦ÑH¦‡Ã�×þ=oü ÙyocË1qÑ·FS:Ž™Ån\ôÛ_㌟^�Ië®…£ß³Ÿ}©Âl ©ÎÃ:Y¿>é t¾9 wýéa´n°O«’¬DBߤ1«‘H¾ÍPæ¶•ÉûIt‹]˜8¸ç~ó@L9aOšâ|¿ŒªŒ³¥é¬”+|¶”ôy©2_Ö�9“e‘1!`ÒÇ(4,úŠIú„�G ”,?’Ä™˜ŸÍàî÷¦áïÓç�ìÚøÎ÷ÎÄÐÕOÞB¼ÜFòŸÇÑ;oÈcIt÷qæé—á××ý|ïbxóg£4ãm´€NLáS´x³±×ºÃ±ý¤‘8~ßýqÝ�DOÌÆ†Ûo…3NøÚž}CÚßÁ»k�O¿ßðé(}:�¤ä['bìj$»GŒÎw^BPš…´Û�4ÓPœ‡C§¬‰ñ$Û;l²-nûËèà³m±Ãæ8jßMÑùʽ˜P™…q�ÓqÌ&kaÓUVB`ÇqÙ¯�½¾yöØw'¬>yUt8 M�…ær ­Å"¶š8 Çìµ=.:÷|Ìì"7 sK5„f’͆j KsHiI�ÉX¾,[ùÊ~H:†Aqàûg� 'ŽF¾}šãv4eÅJ¯p̄ϭì//H¼¼?�ŠteøA]þ¢f2íœúðx¢Ëöpë«/ã­…íj½KÏ»!ÅŽéo!éÍÁÈlÇí¿�ï,â˜ÃNģϼˆ .ýºß{‡NǧԱ¹HÇ;Ðbv`—Ic±¤#÷Ø wÜý't—<ì·÷^8éÐ}Ññîsps³Ðtc›•â„]7Ãи‰g_|[ïº vÛ}Gl¹Å†èzþi4V*H*D]õ?ù‡o»9ZHh÷=xoÜþ—‡é*XØs×ípØ.[`Þ ÃP¦9ŠŽíaÛ¬…µG5©Uæ.¹êJsι8ร0`x3z¨—.õ·Å P¡ó¼Þ:+cç=·ÅѧŸ�ù5:Ç£«#é7dÀ b�›E¦z]k–ò]M?P²¶˜ƒ¡Y¿½ül¬óÒ¸à§×!h��sUtQ7~vÕEÈxe’­"¶_ và®xâ…pÙ57Á½*ŠÉk{k®¹2é4N:ê0ì¶ñd°ã&°hl>œ·ß<é", ’È �×ÞŸŠ}Úë­»2œb'¶YwU±ßÎxá­÷qÂé§Á›´ rM#á�œ†f†5‰x``Ç ƒ±î¸1¸ãÞGÐî7Â%�É”»°ÞÀ8ÎûÖ~$ü�ïÈ#)3TeŒ. 3æ�èȦZ÷ÙHñó�‰û…|ûÔ%陕 d¼g�¿MäIrªpR-xâƒOñÔ´ù´á)Ò! ;ÑÝ]„q£I¾mì¶ýöhŒ•1¾ÉÀ‰‡ïŽ5VŸ€$süƒË¯Å?Hr摘°Ž8þ[˜úük$ÂÓ±ö€,ößnì¶Ç8ëÒcêœ*N † Áˆá0yòšXcâJ°ò8`Ë)8b�í1¬µ�Ì]…6–ÏG Ûpä1‡a`s Ÿ¾ðœü\¬Üâàà6Öo€SÏþ:­,÷F�ŽÖæFlµÙf=¨ÍèÂ1ûl‹]·Ù˜:dà/�?�Ÿ]w;šWÙ]…g~÷ Ìúh::ßÜ"vœ2'P^wÜyþtÿ_1j½ ‘—eUíBæ%møX-]ÆN›OÁ‚rˆ[ŸÆ6ŠN õ!íwaœSÂÙ‡ï�õG„ŸË©×ôâèÈð©É"kY1!ž2ÊzÙK\H¬‰ ÈÀ†¬¨EgK4’ñdϾù.Þ›1Kô �j�­| «R~�- tÐAˆWçcñÍ8íÐ=Õl•²� ¯º¯,è§=yŒ?{´Þ~ùøó>Æj­Únì±Õ¦8çü‹0·j¢'>W�ÊdÝ)b­UÆ¢¡4o¹&ŽÛg´fShë)ᔳ/A%;ïÍï¹ç~W¸ >zíy$ªl;Z œ|È®XuÜœ}ÖÅ袣Ä›0jô >[l¶)F nÀPÊåÀ�¦`çol¤JõöÁoo¾Ùa«³MjÀÙgœ…�ßþ¹OÞÄÄT{®·2¾ÂøÙ�‡‡Ÿx ™ k#´’t°\:#N“mì²Þ:˜ßQÄO¾ ƒä¿©šG"7cÆÄÅGï�µR°+U„¥"I­¼Ã‘!I,WvbÈ<Ç’齕:Þÿ!Ï©q�ÿ¯Ç"þõÐìÿÄËUc�z!¤¶P( Z]ºyûäÃX¡Áe3 »JÃZ-âÚ#÷Gá¹§i°Ò8‡d/ß�ac¼è¥øÿ Ò-)«©‡žùCLí,c~Ì&Y4U�ä¸lY’¿KN9k�ªfpl3ð틾�>�sèH$›Ã(ù¨Ìš�ývØ;m·’™ü뽸åW7bÀ qh ¨: ÐңІÓIœöØdu8¦�œg Èrxè‰'ñ½þ1Æ7š†£Ø�GcS CÎ<æ¬>j^}ÿüüú[ñÖÓМŒá4ª3çÏE:ac£Õ&â;‡ìFR”DX®!7ðÄ›Ÿâ¬Ë~Œ7zh½JÅndÓ6hØÞs7¬³ÚHA —\ø¼ôî{h1 ¥ôPTÈfš½6äÌcY¤ƒ.Ýk"öØasìzüù˜c¼B&·ÚøÁ7÷ƺ†"×UEœäO>.³-Ré¹S³#ÈÇE$=ÜW«©fsÙÂñ£å¢KGQŒm˜`ël‘dUaט>O’åzáOâG~ ‹H%>[ë®4 ß=î0ŒœT½R²¤kGwpñeב@ü£6\=�nÈb÷íwÀ®O„ßUVF®»”ǧžŽŽù9¤ŒCs"ŽFÇÀ)Gˆí6ž€j‰y´Db�Ñ]¹26Ùñ@:ã‘He‘IX3´§}û›˜-‘,°Äè<´wZ8êÈãÕ‡nöP’¦T ©XçQ'7\m�šÑÀ+G=¥E¶!o½? ûï8R›l‡…NM$zûm¼)Žß}=Ø$XIêo-åâŠë¯®û-†n¹)äó°œ4<ÊÙ“7F;ìÁOÏ;s*6>ê—4l8ò ?Æè Ö§¼óLÏ$ámM§ÐÕ± W^RS¶¬c"aYØÃ¨™”ù²·~Ò+k“M$UUÖ!ú6jV‹mJ(n hÆn¹7=û.ò™’Ô�´W¡ä0eÕQ¸àÛ‡`LÆA©=‡ÆTšÊc “õ[æ~þÙ ÷¢a�ÍH\,ÊÅÄÁûï†�× Ÿ×§DÖ]Ž;þ;ôa;PÍf` ¨æ­ýþÑc§5‡Ãl£#+s§L´•=T¬ºÙö°†�@…m�k»XkèœÔᛤ›\­¡Xø˜äò`êP§Ãögä0ÄXö£ ¸ð¸C°ùÊCÏñ!s$2I:"Àïþúœ|ñÐ2ym䥣€²>`÷]pÄŽÔSê×`Öq¸.N<ó <ûÌKH¯29ÃâY5“EÌ5èÞuaŸ±�øÉÉÇàåOæâ€+n‡W³Ñ”oÇÈ„�³.ù.&µ&ÐX.~¦¦oçÀ×bC’É$R¬�ý®„ÆñŸøŽÏ]y%ž¿à|”éðïvýMXm¯ýXѤ§I–¨f»^‹G\·ŸC“Û¥€&·‹±¢�ÛXs 9ó"’ÛšqäÍÉYL.‡¶‰DPÁ«NDKK3¼ª�w^zóŠeä“ 5§¬ÌQ0di\œj…ÏR…Anå…e¸d2†•EÑl@‰„J¾NÎÚšŒHrû—W“a|F'$a¡¼j…v¬9q,¶ßlŒ5³;oöL<ô÷§ðø“ï!5b<ºä&Ù$JÊÕr°Æˆ1˜8l(ºº:ð�§EY¦ÏJ·’LgԸׄá#Qó°óVa½ÉãÑÀòmïÌãÃO¦á÷·Þ‡©i¥i´Z!/n2×^ ¦±öZ“Ôdøò1Ó³�ýA*ƒt–ú:$í>ION}d¸ËVkc­ £�$‘ž;o^}÷cÜ|ËŸÐ:j%Ûä§ÓC�koä±c±º|äWµðÒ¯bêôOÐ8jreêMCŠ¥ ËÊ¥Bò\«`ÇÁ=øÙù'a&ëÄNgüó6v@ß9jol2qŠ]9Ä�I7Ÿ¤‡Ä/ÆÊ,‹xÄÁyËŸ Xæ`šâ€ © xù-³Hò<–“9 —Ý|?nzî´±ž¤H„íªÌò@r˜±öøØrÒj˜4låÇŒ93pÇŸÃS¯¿†ä¨É¬ƒMHÄYé¨É‘«Œ�Q£†cÎì9xñ‰§Qs’tJ2¨ð¾å¤ƒiýPæe�õ'a›Iã�aÝíènÇKÓ>Á�÷þ $AeÊÂçñZXC’ùo4c˜²Æ$Ö³fÎÆ /¿45! žÄt†Y']¶U£3ì³éúØ`ÌÖy móÛððó/âÎ'ŸúWbý§Ã:k¡’ïÆÄQC1yµ Èu,Ä+/¿„|ÙG�„¶ÌF©ædX']Ä ¬‡ä¹N¬»ŽÏà§|¯Î˜‡C.ù-Ö› [Ó8ïð=è<Óq/–÷ʪÝÿu'¶Mn5¹ÕXšÜ.ÆŠBnÖìGrûaW•ä6Éüd˜9!–5 ½A#.É¥1«ÑŠ4UtHoWs FÔ$XÑ�B…†ÒDŒ¯H‚P!±Iò6¾G:—lEàfUä�žãu"Kâ%$ÊŠ§Q�Ù(ä:a˜4ÙA(ø6j<O8haVΘ†tÜ¢«)ò™Ì4¢˜/ =pºzºá: ²„¤_�Sayò=i„Òäu­Ãk«x$ê©tœF°qæ=æ‘à™b¶ƒ.>¯¼Õ5Ri„$i?O¢ß@ò�†äqÉ�`‡�ÖÀ¡ÇžŸ¤ì¼Ó¿…µ6"Ö‘G–D¼wÈ�´Iï+&.46úb~y“['(ðì2ŸÝ€-ä6tá“,(S†žú@î"é¹}˜äÖ–Õ•dÁ ŸI<ã(ötÀe‘A&¥çUqËFèQ3ÝA˜ÛUD˸ÑXÐ>�L”ÏêH6L~Qó)/’ÄÆ$ y™AÁD’ä´šëBCÂFµ£ >u¨¥µe–±Á²Ž‘˲¦=ÔG�²p3)’Å*u£CͪáÒpŠƒU¡¼m™Ã¶$s“ÑÑ¢#»Ñ”²h_º‘v õ�—OrScšåš‰b…˜Ïã~@!{6‰]‰>uRæ+6HL�8 x…ÒaHg1Ÿ„]†rãI‘²í08�Ÿ�w:Hl¶=úRêJ?ýÞ©Xuô£<è!Õøì²*™C9K= ¥žP¤ÇVõïI:e½¼È­ü§:…•ð…ØÊ ˆ<’3£u.½åÜôì4tš¬w$·nBÆÒ‘±è`$ä-tPe®ÖRÑc•O£B‚X¬Æ`¥ZQ-`Û|:*²°InÖ§H AYФ“k2nª±ùž¢Ò�†$õ�º¤¦c9K›!3FÀJRoºYg›u¨? Ûæ"ÌØ0ÒëLYƒí„É£ÎY4 ’ÚîB̃+z�dRA+,ód#Öb•Žå`SÖ�Ú�8ëžA§ºT`[IògÍœƒTó øÔ ™îË´“0ÅA¦îØfÛMLâÒS�›3fã˜K~ÅvØÃ½?8k7'‘£üeeAUÖ½æ½oÛùu…&·_/r«5^ã+ 1¾N-×Ï"YMÃ,Ñà•\¸öð$ky F3üR†$"�v�Œ Œ¡T›ߘ˶`&BsIa*ñ…ÈY ¹-"H“¬¸=¨¤rlæ¢bÎE9œg �p+ jC�‰æa!ÿÚK“ »4”•¹ˆùsi$Ût„…³ÞB*é‘sµ“Ä’¼Æòðý6’ânÖi4bí4@ ù$]j’wÏÊ£b÷Iì°“F¶aq‰É�åÃË-„ECi†L‹FÓ/åÈïrÊ(;NŒÏX@@ëZ¶}>—Œ�-Á&1’ÞºF®I­pÅaûasÂtg;BšJ=$�tB_¦ÑŠüÈ ï-È Û\!ç¤ẎÌÓÊd?5’<µD0!ç„ø£Â¦Ù—Ü)üAè©’ÒYáÇG¢`E�‡¶ž ªæ0ôt�iEçÇsXù q>:‹,S™ÊˆÅô¼Î*e‡›N£X*Ãr(1CFS+† ­ d&ÐIBY`f �=pHL1N‘'—G£“B“K”®8’—8ÀZŽr"IÊ47«–Ô‡Z]tˆ»Ib}t�°HºÝL³Jç,°ežc!©5dh¨Ò2]Yg¦ÌàÐÃ4I„ ùPБ°˜�\N•“ZN9¬2�H±ìD‚~ÅÄAY\}þ‰Ø`¥A°„PË×BNMU%�ÉGEQ‡­ŒÁ“r×@¼„åg„Ô´ª}gt�»Ë´e¡!ÃaT,>3FqÇ’-ðÊ$�ÕF:0#ÇÔœ‘h÷›±À¢ƒ˜…îå_jEõÀ)”‘ej‰j€$EQmïAË€¨.è†M§3îÄ\”çw¡©Jg†d´Àkº¨‡skUÌ"Ñ�E`>Óè(�d6 E¢dÁ*×PîÈ¡)ÛBùÄaR—Ü0N�ª!A=r} q’ÛF7‹²j­%Ô[†nʰ›ÓÜ„…®�-˜AG¶‡ÎƒK0]:Ôíe™*å‚OâMg6Ñ@NÝ„¹íy$[Âój(K—õ× ÎÕ„,Ó!0Iúe¬²H+I2¾zk×]vƶ&èt-Tm†)+}{lû¡ÓÐøÐäVã+�úë5ß÷U/¹É …Pæy¤ávä³?¿LÂiЈÇ$à‡]4¦’!EÏç1ùˆ¥ÆÆŸÕ+2Ý Héñ2m±©>� £ÇIT«»‡Æ�$¦“£P%Á¨ñ¸ —Æ,Îx iÀ =J¶Ì¡JÂ)¯¡¥'¯Z•×íÒ#Ê-�P@ãæû$¡~ ²†¿/sôzUÞ�ŽÖ¼L#›«VQ¤Q¬Ì«O2ðL9¯¾Ž’Ê:^#sª†½_>2¬¢R€[É3”�¨t“#w"Yî¢áõ�5 üäÜsð�•G"“ïA£WRC¤ dŒ­pÚúŠGŠõÚ@µéÝ_ˆhM4¥Y6÷Äx‡$ê<"½ð¼Øèó(=ÛË-.yæ~XÈñùF‚¤TJÐF©ìÃ&9(CÃ5P ºHX>F‰I•„9„®‡ r$°9˜.Ó2é( ˆ²O‡Â.¡D'¤d£€NÆ©ÆCé4ô— F~Æe¹ “q¢$$¦2Þ±L}¨É+d#NˇxõÉ@O™ŽK¬‡äµ„*Ëgze˃—0�7˨ÈTU1>�ë#OÇ$7y’{’Þ¸LKU¶‘©�œscÚÓF§É8Žr1 pBXÅ’;asâDÑa(–pò{cã #€<ê¥ ŸÂcБQŽ„�LqXƹ•=A¤Ë ÒC,$Wn£Æõ Ic])WeÑR7n�b7ZX¯�žã–í‚Ávƒº'Ã2b&Ó ƒnÅÊ0™O‡NN–"ŸnĹ„)C›æ:Ùn0uKHp�ØÖI­~I«ñu‚–°ÐÃãË– ¤Ö¤Q—­ëº@¦×Ý÷7LŸÓ‰xº¹²�˜Í@NÄØ*�òº³&(‘(ù4^Ò;d¨× ¤—Pz7êqlæÝ¢ˆÑxUâ�?•ÀkBz« �²²Í±€�F‹yzž� ¨¨òŸ”�É3$ËL›ô™‡I̤wRPc~!º$¯lõàž|ÑJ2#)fˆhSarV@ƒ¥îÏ'!™ñyKK†`�˘FŸiH>l¦»Í䱘²ú8 ¬*o4+vÂ&™((P‡ÐL!9Ñž\+ù�}�ähy@fF�qž5³ñ ªzÀüZeqZH2’,ÑtÓ@\ó—Gqå}�ÂóIðHh{HlÙSžÔ ©ŸòaŽÉ Ä41Ÿe'r‰H»lÕ²œ¤ìX~Ñ9–;Ë8êÉŒ~ ê:¤ z‘¥”äˆÔÙS'•“ÈC•Ÿl_¥[Hä«ÎDeÉtëq¹ï%ò ˜)¯ÄyFýÉõLZmÕDîÑVl‡Ò5’AY¬€dgÛ‰-¸üÌãáZ:éP%«$ç$·v<¥T7ºVž#Ê¿’3Ó©ßG$"ù’x½%´L!·}•žYÑcÀšIÇ.§q(®¼ùüåù÷0§“õ„DÞ¦S*+í¶,0áÉÇQ'•å»Xæ2EVˆ*ë¢HE•ªÜLdÄAžIHµÔåèyæƒN(õK¦&“ºc‰T…ÀúÄxÒÃì©6ß Ó*½Eº$ˆäÁÒc<�ÜQ®•2%wV‹iÈ3FéJ^Tf…i2Èt^òQ�J�/e§ÎI﵉[^#9‘g�-äù$k�+à ȽsÝØc�Q8ÿèÑ�d;Ët*t B¯ –IGIœ,ÕÎh,‚– ÇÜj,MnãË"·Ræ"‘…Eã-ã-Çe#Î:K²'½�ò5±|Ï%µ\L·"$Êjº01Jb0ê’ů�y¶È„}1êqëOåsG´ o[±dº‰/¦&AÃeJÊMÔ ¹a¦$«uH\1oenÅPFý™Ñq¡>–­“û EwxÌ•²àoy½«� ©‘Ÿ¤ñ[°pS6z:zÔªmÑMë¹”Ôë ¿£cB–B|!ò°ºà„Eµê—WËÂϤQ”q‹•"Zâ�\ÓIƤ,iÜSÜVY(q'†îIp\B‘Ÿ@>Z’]‘·z þ'eÒk$nD zJùÉ®lGÅëÝ—ãefYÒZ½I,‚¤íôM[Bßë$=Ùö«ËUMmÇ cÃEöGtGfYË,ÒW]ä… Ì|Œ²ªðx¶\ÁJXG€öžndü’¾*‰i3AusyåXÕ3CM=h¯œyN¶e yqÄÄ‘×ê‘lTèȈ³R±l´|5“ÅÜŽšS¬'Ìæ¼R>É­x®I¶)fÓ]gzRNŽÔrÉE2U¹—}y\BȤįËM~±h¢òd°¹/×I øL³Êë$m‰/K`KºJ&½÷¹HÒ¢yªîñ€¤¡òÃ`×Óe°x\n+uÕã¹z�ü8rP”R"õü©g�„¢ú£ƒ[úl§t:rXep ~¾‚JÙFÉ+ÃJ–éHè`Ũ-�<�FšÜjr«±4¹]Œ/ƒÜ DM¥A’­’ø¼W@.>™ú1>œ: ó‘#)ªiéÙ‰…&É‹Cb'yˆL¶éyQ_m+õ—ž°ˆ„-.ªiŠH»Èœ#b§úixLzT#=�8ùÐJþ—³æÓ I|‰+×K\6(,,CzoSzŽ%]éµ5ä+zæJb‡†ô2’®ˆå£Ï<‹q‹Eç5¼¥äUz†¤GYŒ&SV9 ™¾úÊ=Œ3MYÔg9yLF®«aÀˆ¡È46bíuÖBS6Íòc>x‹DRJ£^ù£’‰Ê"BÔ{´dÐÉ­C¦7€ybÑ•h@ž2qý)éÉ«zˆ[&ÊÅ*’6YŠT¥Ç /&RŽQyEOÉ’æ9]ï“ ¹ZGz×$–\ÿGƒ…¼ˆ,I�ó‡ -¨ßgqy ê¥ÝSÉ‹,É`äÈYˆ•²üŽâK}R½�$ª¾I¢És*‹®‘rë^íã~…Æ*gÅÔP Ä$\&ËÊG’iŠe:ÚU”Kyxn–Ï-O.—òΊØJJ½yPõ¥®ërHÎKX¶ˆt�¥Ïôc¡ÅûIO*�QïkôªAÙtº»‹hNˇ U]yŸÛ8õ›å–}dHÜX-Tö…ˆÊŒRˆ’šôtÊSI™ŠÜ”TùC•'wÕ Æ0x¡’¿Š•¯:%;‚ÞDT“žVù-ûÜ*ýá…r'¹FNI:®Ž1Mu‰Ú—ùEV·ãA!¸Êé–t>wq<¹§´“í™G‚fبy]HÐËÉõÐ)Do,mDžu�‘«iòZ¶&+�Æ"hr«É­ÆÐäv1¾,r»$r~ÉÆ4îºíN¼ûò;8`ßý1aüX8I›Æ@Lš AæU¢¶L´�ûb8¤÷«×Fª^3éa‘óªÇF‹^› ä²�j�ò‰!r� Ép‰«IŠr¥Äa#Òûº9&Á;Ѱ˲¢1EDiÜ™ e,yL^¡KnDËdƒó�çg�\Dç¤7("cr/õ:“'BCfz¥ñã},E>ƒ�]<ûü«øþ÷/Æý¸Ç�‚i¹(–+œõ|XtjeŠ@§’A%(·äÝ�FšÜjr«±4¹]Œ…ܱ·Üq \'…oñ-Úª˜jàmyGÈZ®z½d,­˜ ¥á2Ö•‰ñ„FSEdHõÞÉ–Ñåëä(Ï)�ž#"¶Qz2?kÔkò™Mi2Tˆ‚P-!MѳGWÊÝäŒb!¡—F A5¢Üˆ–E=IÜ#aU½6ê:•�èju“hü-¡nG%OV­ÂxB´y­|�/=µ¦�Ë/ûö?ð6îXŽ­â/‰è™’S‰¥º\@b+eQ‹åI°H;)ψ£LÉ„ÿ ÌKŠ÷þxÞ|ÜvÿƒHe°û{`Ø !ªte¼%QG)¾AÈœ­òG7‚í}$…¨”%ˆäŠèyxÞ':+=êRÖ¯®9D�WåÝ‚ÿKÏ™Úÿ,ê¥Ô›BÈ´|TÝ]ÎÔuB {‘¾DgTY�ðÉqåñPß’W2æIÙ*âÎg4eÖ Ê×°’øðý÷ñÌÓÏ`áÂvì¶×^Ñ’†Ç¶Ë3£ýèù>›KI§.çºîFwï{çe…H2,ÍŲçŸÏºéÆ-KÝèioÇŸÿtZ[`£�v@Ë�!H1ÿn¯²tVBõf%JQê­8¥rZÆóöV¹—ýúo�<™@Þ·TyW��Ψ¬£k¥<Ô0!õ'uRþä-GošÔR¥Ë’㎤«ø±º‚zÄ?ÑxRbËVÕÓEú•»rIyNâJÚꞸ¤©znÕ�xEɃc§x>ž3 ·üᵘȾ{¢æpNÄmx2¢ç°~³=4¾~öé_A“Û¯¹ý<¢FÄ'S?DÇŒ98îÈoª)œdöÃ!�� ™ÿI‹t´Ù4|6k´Ì2`1’ôÁ&ØyJ2¸$¨¶Ì¤`Zª§O0EždIب'KùßV{Ò¿j«mô‚UL¤˜*52’G¢øB ”1¯ÙLOBtNH6O©¼É‡)¼+SsÓáoÞ�y‘öWR�RŒ¶’>Jt-·²/¦WæYÈØx¡–bH¨´\›ÆÎ²°ÅVÛâO÷?À $OÒKüùѯ:ë½Ñò‚Lmdg¹1¯4=*ÿN5@ŠùÎS¨Ý<÷‡þŒ}vß§ûÛXièPÄInä£8�`ʤýe•—*]•kyŽ��¾ÌZ }ðò[Œ�ôÖ*'�ìAé ÿ\–l¢7¤Oô"Ò S&‚ÍüX”€HIh™ÈaÉ ²’ ÷Ž‚¬&e«)¨¢´-¦·8Èo9'ÁeÚ®ºW$kEýzŸId¬ž�AŽ+=à�˜|KÁ¤ƒ'Î÷ÄUVŇŒCŽ8÷Üs'º½ªÌwDZE7$ð„TErò%Qî岿< w‘’‘Ý^Ù“€ÉŠ=°°bà®»îÇÞ�}>c�DsŒÄV®“,ñR“uœÿT9IPåÀ’qÇõ:"A•ÃbYD¿%°†!Íi–»È:ÎàHýg°èØŠ”#¹Å)#w‘(é‹#+íãÉ–ÿ«àP§âÔ­ëxªæ ÉmœÇD¦r?‹u\¶.©…JSt‚1yŽ¿ ÖÕŸ”N¨Ì•,AäË\©?É‘|ôZ–…7è l‚óN½“Ç­…ßþìgÜÒŒR.¯–ò6â2$)rn54¾®èmi44¾Z˜>ýSl½Í¶(•JH§’¥Ñ—bå_¯}ò‘59”ÿåw¢J,Iî¢Pÿ«#Úïû»þßPÇâý%ÓD±ÿ->Rßû|øøœ‚è\=·4ªa¢R©`òZkâ©§žBŒÄ°÷ìçÂÿ‹nº8òçØ¶z;"„­P,"ŸÏcÈàÁ}bEá‹P?¥Ä?>¿AB"²iK��È7"Œ½L�ÛÅéÊ_Ÿë?·ÿŸ†%ÿþÓó¾èøgcG›x<ކ†%ï\.GgÍTK°þ»ôÿÙÑe�Þ´ûÜJdm1ŸóçÏW“ ¥ãoqÈêyî‹úïz‚úþ² õ¿ú~½­P}ýêÈ"pwñu¢kêmÈ’ç¢ó‹÷¢¿úï¾aÉ?)™=BÞHÄãÒ¬³Î:ª7ò“O>V²ïîîVÇõ Y�¯;4¹ÕøJ¢««Í­Õ*_�W¦…¬ÂF[«›Qm1DÒC%=W‚¾Æ£áŸ>Q(³HD¯`]Ä®î.E$Vä2&PD”!›Í"�N«cK!Ò.}jÒS+¯œ…”Ô¡H­êÍ”‘Û¥Æ ®:eY`"‘À°aÃÁ’#¤hE‡äS^4¨÷HDz—–V�OBÝ^u=Z2,†h×" £.ÖC4vwéQ¤£'Ÿ8ôR/d_!·cÆŒQ¿Eö¾ ÉÑÐø:C“[�¯$dì]©}0aÅ 5y}H‚+fDÆÈ©)¦hŒÔ˜B!¼Ñè˾}*‹!GêaIô­$QOpd¬þcóaDcCë×þ»°´ø\žÕ=ä(Ë„FPF9Z–£H]®S&¢_ž¤áÿém”<1Ö2®]Æ·× ïÒ"’SÔËõ¶Éoþõ–l£Ð« ½Ç#È�ú�¾û+>¤÷NHí¬Y³©•ò“²\‘!DM™�·žž8tX…èšÌ½¾ÈJ¦}BïáE|ñ?ÁgÛ�ú¯(D©ö‰ÃÄÝsñiõ“'êAŽ,NCÚù«ÿê›ÞžiqðDž"×zÝ�ý3f ££CÉ]©?R~_ghr«ñ•„ôL8n^µ“ÄV–••Ždô©LÖ^Ÿ°=¢vÒÐ×{^d[ÿܸˆ1ZþPWô=øŸÙ¥å1›Ñ÷‚„A}É0Ј*²@ƒH·@½’_‘!äF†"ˆŒùQ wüPDVäÆ [yä(°Œ„Õ •C_Á ê±ë£6—Œ¿bCzo…àHùIOÞŠÞ‹'ù.2–}qdDdÕ¼å U4ê?ÞKf4‰ô†‹÷þú^×”âÉGdüY ÒNEŽ×Ñ[‘«Z5”£w+ÇEæõóâ$¬è�†Æò†´Ü_9¨ÞY’6—×<Ôü Bχ,)êù5µ„«¼�—y]Åh•Ë”ªÿÇÞwèQ•k?Ó¾¶}ÓHBïM:* vE® "EĆ^+6~ ¨X°qQ¯ýZÀ ¨¥ƒÒA:HÏÖ¯MýŸçÌN² l”@²9Ï·ïN;sæÔyŸóÎ)ÚtQ´„j«r?1ŸùÚÍâ0DGhq;Ú¥_ R*�,Ié‚„÷…cŸz›­&Õ!ŸÃçµéoÌëò3¡[ÉxìÓ ÜKšõ†9'%¤çšð4Û&,ºW¢°È�‘‘Q �%/å%´Õýò[çÕŸRÛâZ…f)_!¾–#¥BôCp¤ìrkN–§ÉZ ÅGDGŠzéÒ¥æœ,U“9…òQËë@ý"-Û-ncå‘ò&6e"æyuÝ�åKî´lr) Wä§òMé/ÿ´¯¾�":§ûäFy¡cYÔ´-®Ë½öõüIžQ ¼'¤‚lò¾r¹„V£iføˆ¨ e-Ò �jGÞÇÓ(D*)TõéÑ•2©6†Ç5 tNÐÈm)'=KÊW[W*e4©|o¹õ,V�Q “ôj Ù�áQ£È‡G¨vv ³«Ó|Ž_á¯k™ %®O”òWûº¦ð§$ùz¦ŽEl¹c¬F²]S�šà®˜Òj*#c¶0¢YŒÑ¡e&σ1R�Ÿ�‡:󹆒_ŨIÛ¤aN•bïð8oéÞŒ�$‘`åiWW—ñK$BÛ‚˜ê~]W¾(ï/^lˆˆ!k*�$ÌŸ?߸UÚõ÷÷cæÌ™&}‹4W^ô÷÷ñ=˜úÑn³Q¢)ë°¬ÁËÍ>h=ùß.&±uÍ{DK¾¨Á”�´fZâ�Q6_odݧ_:ŽØª²aú™O†y^Áµ×]Ç2vº:kxËQGap`È4\ã6ɶipç�î‚�«¾«Q«r#ý� Òkaa19Xrk±N¢àf²°¨iYdŽäBG�>ö8æ/XŒ��n"�R¦‚C¥)%{à 7àû?ø_l²ÉÆøÝï~�~èCøÉЧ>õiCb¥Ô$"ÍR�²«­”¯_AduM¤[а°êY²@—(²�ŽŒ0NùˆiY'BÞwx*³[¦^ÉG›$¨Y×0S%�úþ÷1?Ôè‘�iØŒ0sÖl¦£¦¡Z`Èéðð¨ÉKu1å„£Ñhš´V¾ ú+ˆÈþîw¿ÃÙgŸ�E‹™<4$ŒÐ¾®ËOå—Dy(èœöU–Ô½DÐV÷î•¿òCûë+TBSV\•q¥ƒI[îŸ{Ηñ•/™iⵯ}-ÞÅ|]¶d ¾õíoá=lˆª¿¶Ò® �ª3ÁUc¢^oÐÖyMÌó¦;S̆ïÑ2¿>p?Îúgá†oâýÌK¾@R^÷—îZ¬ï-¾;d©wx¬:¯|sx>ol3óòðòÞV»%vŽ�äYñ‰yâ…KÌ|º^àw ›D]]DnµÈ€ò_áÕyKl-,Vëï›Ób•Åü¨¨ô9¾LR"‚øàýàñù�ááGÁüù�SI蓽ˆ¢ƒßýþØk¯}P­va»í¶Á»ß}2ñÉÓ>‰W¿ò5x˛ތ�6Úûí·/Î9çl”©ìî»ÿ~\zÉŸ�eUÓî bÆŒé¸í–[ðº×½›l¼1æÌÙˆû‡á®»î2?õµ­Òýc�=F%æà�‚�7ÝŸüÔ'ñ�S?„î»/¬ºQd$Ý zè+ÑÝÝ‹½÷~!.þÓÅFyŸCâ´Ûn»™é°öÙg|ñKgcÙ²œp 8øàƒñ–·¼p ®½ú*÷¶wày;ílV {Ó[ŽÂµ7Ü$­QªO ²óÞ©FÖ!yÔªW¾Ÿ¢¤Å=X®¿þ&üä'?2+9‰àT*]X¼`®»öz¼÷=ïÃ[l‰]wݯzÕkpã�ÿ$Žññ��†W¼â¸òÊ+ Q‘¥öu¯? ÿ÷¿ÄWÏ=W]u‰pùÈGpÉ%ã3Ÿù ^úÒ—á„OdcfS\tÑE¸� ¬c�=n´¡im½õÖ8í´ÓLcl IÙÑGÿŽ8òHæå[ð¼çíˆ�vÚ §žz*g†à¬Œ"7Ÿ�£Sjr’Û�5 Ó5¡ÉÁÿœ¾±¶žyæYøÖ·¾�/þ¿/âWþÛlµ Ý‘<.ZÈ|þ^øÂýÐÙÕ�YÌÄßøFüúWËíÅÿ/~é¡8é¤wã ƒÆÖ[mÍ<~5.úÅÏqÑÿý>ÍF§æ†þ¿_üßçâ§ÿûC¼øàCpü;�ÃË_ùJ|죃fà=û g›òÒÝÛƒM7ßï>é½|'Ünº=Uª²Ð˺›7@Õo°SåûdÑâ…xçqÇaFït¾;6Á+_ù*üú׿1–|Ågÿý0åcϽö¹_ûš!çêaaa1yXrk±nÂËÐNbóÙ¡æpíGe†@ª;ì¢Eóq͵W‘,ì‚�H<�ÄAØLqâ ïDتãϹûîÿ|óÛçáÞÀÃ�/Æõ7ß�v\Âg>ñ <þà½øæW¿l,)÷=ø0þ~ã?ðÈü…$‹²¦�89¾ýÕ³qõ_/Ãiù>úá�㪿_�3>{¦Y¹HúX•d‰ÛaÇí¡%v¿û½ï`÷]wÄæo�À ðžSŽç6’öF»c«-¶Æ™g|7ßt¾÷­ó1¸xNÿÌÇé_Šßÿþ÷nà{ÿóCÓgwx¤Žën¸þîרy—mqö9_Äô#¼õ˜cñ¥¯|ýþO8ýó_4+·ET²Qþ}×X¢Šyo§4´œÇÜòÑd¹xñKÞ€$ëÀ¹ßø _øj¥‚˜nêKðþw¿ü㟱é&[a‹Í·Æå—]i,€²Î=ðà}¸öº¿cé2-0ààžîÃeW^…zœb“Í·Dgg‡!Ë›m<ý}ݸõ¶[qËwáü ~ˆÅƒÃèì¨â“ÿ~ô“ ÚUÅ;ßu<æ=ö(¾rö—ñ“þ)Ëî�wÞ‹¿]s=îø×8þ„cÙ˜ú¾ýíoá’‹/%‡#ÁcY2B‚£~¿,ùY§6áÑì¼%Æ_+6ÛM楋»ºKGÐ7}N<é$h.ãËõËx þò‡KHjÏÂùâo7n½å!uô8èà½ñçKþŠSNønûç­xø�Ûð�nÀùç_€ÍIl{ú¦ãúë®Ã¹çž‡¾þéØ|‹­Xw�é37ÀÆm‚ú’Ü|ëݸà'ÿ‡¿þã„�üþ?Ä9Ÿ9¨áò¾·£«ßÇ_~õK|ò#§!òkh$c}pÙàVã a­kúö~øƒÿ�Ÿýâ—˜»á&x²×\y >ö‘�áÞ݇y�<†«¯¾ç~ó<Ü}Ï}¨G|DZ¡ â%Ÿ-,,&†%·ë&H<*ž—¾s}Ó×MÛ®žNìµÏžøóe—⪫¯Âö;ìͪ O{åÀÃ×Ïý*vßc7|ÿûçãšk®FWw'FFë¦ï�ÛûßÿœpÂñ8xÿýÍçl‘çF3ïûèÑ�݉p´šuœ|â xåËÅý÷?ˆýïOyÞ'OÍð¹Ïý?l±ÅÆó®w½ {îµ'.¼ðBû¶·áå¯x ú§MÇÙ_ü}éK1¬O|N)¨’È~Gý&ôOï5dfú´~œú�÷a÷Ý÷Àw¾ý] ’Ôú˜B•&©ùôúÛ‹~ƒÏ~VÝBh̼Gçᦛn2æn¸Ñ(D‰l_fËgI¦6øZc$eÛOHýÀÅ6Ûì„�|쳸ï�ûqÞy_7‡7ÀüGÀ�·ßŽ˜$âU¯z•±ÒªA¢n <ð0ÓØ7ý¢Í€CY×ÀãÁáQ¼ø¥/cÃeG“Çó_,W{‹ýðÐÞþ®“ñУ�bß¼—ýåRhžá?þñ8ãŒ3ð—?_Šžž^|ꓟ6}l%Ìš�s¿þuœöÉ�ã-oy“±Ø.Z´”Ï‹’  d#)ÏM2§)ͤ¥hÊhiL’؇qˆˆe¿£«ƒu¶Å¼qѬs˺ßÙÕͺâg?ýïóñöcNÄYgž…ï~çëxþ^»ct0Ä�W_ÇI™õ¸�7u¾ý­oá›ßø:Ê©”¶Í¶Ûá­o=ÆX^wß}7¼îu¯FW¥†˜ï—Ý97Ü~�_ÂGøžpÿb£óÌ3ÏÄ.ù¨#øÇõÿÀ¿˜‡�£fÞ!ÃYfTŸÞ�Á¥¬Ÿ7ò=‘àˆ#7e¦ƒîæ?6÷Ýw¿‰·ÊЋ^´/î½ÿ>¾�Þ�:ï�w ‹ÉÃ’[‹uÔzæsɆ_«b¤Ñ4£‘_°÷ÞøÙ�‚¿\z)öxÁ Ð Û¨×GÍ´R'’¸ÞyÇØyç�ñš×¼ÚtÐ=RfR83gj…$Ç�ÄF³�¾i½fjŸ�LcÎÜÙ¦`©R1].¼è"ôööà o8Ì�) Ùk¯=pØa‡aÏ=÷0Ëc~ík_ÇQT¤ï:éx|ï{ßÅÕWý §žú’§ûqÃ�7 Épëó¥º.ˆ(ÕGGÅm\à øÊW¾�{g¤ëåØh£¹Lß^MÔF…JP+QiÊ2Ý×Û×eº.¼òU¯Äÿüà|õ«çšd Ÿ5la=�ùœï¢4¨ÏÓ'Ÿü<ï½ð…/œ‹›þqÓ-F½Õ„ëå}¯?ü‘ãÃþËAº¼Ï£ ë½–;õH tÎu=ôöô˜QõêW©ÙÔ:aÑ-š{ùå/{ ÝtbÁ‚l4õa»í¶ÆÜ çÿvØqÓÅAŸ¾“Xó•z(³¬)?ÕG[]^”c�5ó•`bLùŠ�™õ‚ ×ô�%±ïíí6õoÞ£�`tt˜éÕ@µVƷ߉SN~7>ùÉϘîCªK[mµ zº»Ñ͆„¹�d�vÓ4E:·'‘UÝ™¹ÁLSN‚2<| ÒÏ*J…ÿwÖYX²t1b6Öõþi°Ñ¬VõGX;:IàYÏ;ø®Qx-,,&[c,ÖIˆ`hê,‚D– *†ZÉ5ÈÆ›l �¬CƒG¶Øbsã®ÚQ5ƒÀ¤Ìú¨˜Ô÷ñï¿ ¥’��e²�åƒ|²1S‘ëûT„Tä`p`%’Y�’¬h QD·xÉRÌÝh#>oüãæMÊÙsfcÿöÇYg}çœsŽ!µ›o¾™éãùò—¿ gŸ}N?ýLÓgsæ¬YØm÷]P#‰‘Õ´f«N’Úc�ÂÑ$¹ÞjË­±l`)Ì_@eÙÄI•WDr&Â]-WIˆú�!Üvë-¸éÆëñ¡}þæ—ù"J0MedRn=�¸�£U³rT«]gùpñþ÷½==5¦ç2CF;;{è°D²Ñ�k®¾ÿøÇ ø§žúAl°Á¦�e\wÝõÆ’öûßþÁ|ZÖ´P==]fŠ1aˈúFjô{`Fâ'fÝYôÃs6PîÇÏ~ö3<öØ£øÞwÏ7åmÛm·5þkð_µ0mÚ4T+5ú£ ù3 Ñ¿q¹f¬¶fgl;µ¡ÁWcí BóÂ&Øxã Ù€ÛÓœ9ömÇàúë¯Ã5×\ƒ/õËøùÿý7Ýt76Ùd3DI ýö·¸óλqë­wàÏù3z;»±Áì¹$¼ýHØx©ÕJ†4«�, mæ�f�ï$ñÔ—™¥|_ ‹Øj˜ºÙ©U¦êþ4âG—ÎÇyß:�ï•f`áý?„¹s6̧ä;Â+—ÌL,Šo'YÎç¤Õ ŸÄYýµo¾å|è¿ÿ› «�`›m·AOo¯±H«!®²%k¯¹ú–ÜZX¬l�±X'¡9/5ˆŒ,ng'†ê#èíï#a‰±Åæ›cC’ }ú¹íèîD'‰¯ú¦j Öe—]†÷¾÷½èí¥û$ÅW^iÈ„ˆ­¦‰¥,³"Àš�¡§§ÛôÓ-‘ÜN'‰ Ö<·øà‡ðЃओޅ¥KcúôiT®7`€ÄI�µEn:ðœý¥/‘Ø,ÀçÎ8 ßùÎw�’Ó`£™ÓfªQÙ–©ôDœ¥ÄEzvÝcìû¢ýÌL _þò—±ñ¦Qi·qË­·böìYæs¹¦ «Tk8çË_Ák^ó*|ë¼oã¼ož‡ýúØÀ�[Cp¥½³õƒ°A£¹j]— Ó÷Ñg™a^ì·ï~ÆÒš:1fo¸!^ùê—ã‘yáå¯x^øÂ}™†ç‘ÝBâ[aÞ÷òyÖYg1/Â�wÜnºh„ýð�"œŽ{牸øâKò¼$IòÒŒ�Ž-6jÞqÜ;Ðl„øÈ‡?†=vÛŸúô§¼ŸÿÂY$<šW}1#Ó5BÄuÅTu}VÆ ÅVÐS¦þ«[VëÜr­¼dœIB«Õ >qÚGÐßß…¿þõ/xӛ߄¿øüðG?à;`§}òc8éäw³‘PÂå—_н÷Þ/{ékM7“Y³fààC¢oL;²Må«™‰€uQO!Õl C²ì2�ÿ÷‚ pÚiŸ4‹4ø,?d™$ÀuTبùÊ7¾n,²_a½Ûk»�pÜ[�C›Døà—¼˜ïž™$ÏÝOÝZ4EŸ¾sæÎÅ;Þñ,Z²û| vÙm|ñK_Àow¡ùº00¸ e†Ý<‡ä¸Æø–y¿–·°°˜ˆÄ`'¼AÜÅ¥Ÿº¦9ms µɉöFG[h‡)¦‘تO¦éÈò"1Ö×1R¢Oà"+‹/BU±ñƳé‹WÛ|^'ŸKòE²å¹,¤4.ÃáóÚ‘æÛUÚ:ºH²>}r5å‘DÜ,4Ðn‘x+Œ.‰õ†GëèŸ6dÅYV#‡ÌNi´Çî»›Qýpr‹ãÚÅMuL[Íü£ýŸüä'ML JrÞŸ¡‰?\ò\zé xùË^‡ÚŸ„vK/ÅÎú*§B2ô>´¢¾óÝà®»îazzlÀÌÀûß÷>L›6#£Ã8÷Ü/ãñùóL÷“8þëßL·“½Ÿ¿'nºázüàûß7ù~ôÑGãŽ;ïÂ]ÿºG¿õlµÅ–ð­PÖÀúc\yÕÕ óŽá{ë[ŽÆAb,tç}ç;H|'�ðvÌèëÁ…^„Ë/Ó3Þ@²ý"Ss°0ëm^¦Ö?ý_z¥êSŸ2ÓdmHò>ét{¡0Þ~ûíøç?ÿižª?&¾ù³)É£¢¢øÝtÓ?ð½ïý�d)â;gÎÆxDZoÇ[ÍbÖ;lL8lH~ž$ò~cùÜzËpÒñïÁ´Y�¸òïů~óG¼á oÄž{îŽáÁœyƦËÑI'�dêÐù?øæÏ_„çï¹vØjCüøáů}=ö{ÑóáÇÃ(Å®¾êœÿ³ÿÅP² %†kÿ�Ä[Ž> •¾Nüî÷¿e^†w¿û$tuvÐÿ³ð¼�vćÁºèãþçÜ|ó-¦[EgGNyï{°åV[á7þ†þ^…·‘köU^5ÄT‘K"¹c)R@i¡~¹ýèGÇάÀº�ïÏ&T¦d4ÐTkS.mô¢çŸza]sÎ9¸ö´O å¶ðšó¿�;ÂtÝCÖ¤ÐÊžêæ2v߆%·“€%·+°6‘Ûçïóì±ëóXiõù’Š0óH>3Ï+ñéšûV½a5W¤ÂÂÀ› ŠSQÔ6«ì8Z@{"š²i_]DuV÷ç®õ©Q$vUŒ÷?Gfü$Ò1Râ°üHø²q46ÜM¯ðTy��ãI\3)ø±§æþ+tEx¤âu­8“Ÿ•ä©‘!#ÑÚc÷=ðç?ÿÙ\_[ñL�[uOÉÓWó«a“Ïš9ù nHyÌäu½67 Z!LåÈ£¬"ŽC*dqSýæé_«Á>1ë€G?T̪ešØŸ¯Q…Oƒ‘:6¡•¶aš®l¬(X/`#IÊF˜§t‘ñ2Ö,y~ó†|;–{¹ãܯ|_¹­ŠyÊJPX¦¹Í_¹cñ6é’Ç=WYyꆺ‚x%æKÍ4TÓTù$è#l©q8Âã µJýã»�ù¥Y4ôžTKò“7Hó´r±Á+R¨{ËLÆw]ˆ2oág ø £è@Äüˆ²6Ý$¼šÏ™�(Ü*²çù¥pkÀ©Ïph_óñÊj¯þýr‘wÃÈɬ¶Šm�e5Õ R ²~æ/ÉBñŽ—'Ãò¬ÀJ§tïXXõ|öåa4çÆû¯ÇÜdr“»Ë©­”*Å|ž§˜Ï»¹’) &KOÍ1*RK²`Ò„—”N©Ò”ùÌ”’¹$´ê¶P«UÌVŠBVwe-ù†ÑårÕtEéV9�å>Uãƒðƒ²Y× !Ö³ÔBDŠ 5‹ó/¥ - bxkäåDH/ò²pTä÷˜]{‚›©Š"ŽãE¤V©Aúêûèêì1yc ç"ŽªðÌ4ÍsÜÙщŽZ)jøÒæµKb«µÅ$9ñ”¼™ ‘ƒ��—yR6_^Ô_׋÷ ë¿H´é«ë˜²ð} ¯CyMS0ò7G.ú¯»rQD°¹�V*Ó 55½Õ%J„ÃgáÒW%=×Ôß1É}·°°˜,Tó,,Ö=ðý/ 5 {¨ôY"�6v-ß)¨dñz:í ëôTV¶‚RäÈ� ‚$‡Ú“%5Pázå»&�±À®äGqn<Æ_*jV[ÙÎ'sσòÆ�ÀÂJ>VƆI_Gä”Ô�$EMYtEj•·ä¤Æ Xå^}kÕ>Ðà0“–Æ?YâRCxeASC'å݈Ó‡ÄJÝrŸHqÆösŒ¹�0Æ_Óþú©(åWNµ¯A{²ÒçŒ%ž�NS‘MåAœ„l[´™lªLoæ‰nQ›@Óè­šîù•ý/úà›÷¯!ðx�—’Pz«.?>ï‘È•™ÂOÝLQy2þ�1 !â,â;Kï›ü¹b·šACej%Œùaaa1y¨¾ZX¬ÓÐ{_W¯0ŠhLHMä¢Ú» M!㯋ì¿—ÿr߯öø0‘aóP£Ø„÷¬„•LvO…1ÿVª~êxås«�Qp³¿&Œu+b_dŒòV&?½òòãÜb–[âu‡,±úl¬k²ÐÇ꟬i²ÈŠàŠÈ¦š�ŸE]̯¼–û¡ÓyZçO¥Ÿ‘é`Y¡hÍê‘—a‚¼YޱkEðŸàÖœœÚ(¢lòL¢F�–¥Tþ0Mc5:òDÒrÕ1똚eBÝÊ5«Š±´’0Šð*Ù 6Ès¢HU³Ô¯~tcÎ+�¹ŸŽ\½Sòå¾óæbÄcïµrZ’Åf¥Áâ=”{�ïʽüʪ�”/Û­°©{ŠfJÑýÅŒ)*{+<È%¯Ç“EQË-,Ö9Hä[í­°†‰kȯéẸ˜ŸÏE¯<Š{ {ù¶pùuó”ä5÷seèXU°8¯­úQÕrÕ{Vì¯|e¼Â÷‹ØLš_O9äŸu 10D…igˆRNKÔRäGD‡¼Õ8έ¸ùgpÓí@äÈ�INVõ5´´7®±ç†È¬èk+¬(Aº#Ï£"ïÇ`nóo9r×ë'\cAQÌóDù‘§¯¬­†ìrß42˜nZv[ù¬<©Ô½­Öø±9mÌSžîÌžì²ê¾`:˜ð§wKñ~Ñõœd›~áÜõ¼€$¸dúèV×UsG„U3?¨\™k ˆ‚ÈR£i }uo (ܹ U¾±ÄÖÂbõ±Ê›ÔÂbÝ@¥Z¦Z !‘Õ&ÊúüIñxLåÇ_ÀŸ–é4 ˈúʱð¢ãå×òëê!—«ºR\—_ùÿ✰ÈB$Q?\Iq\Ýr+·f¶ólùP6~ˆgåÏÑà²*¥«è˜+ž½Bò{éšþë~ÅfyP¦Oe#)}½Ý½T˜ôw-†jj*,)zMÕ¤Y-t.Žc#:Ÿ[ÂÔï5'«Šlkdhr @L7'¢J§<߯H’WæV}téšÿ aÒO$D´Õ*fb¥¯ò%@Ùs(¿åV^.ÊX NS�Õ3T‚è/ÝÉŸ¼ìäá+Þ'¦à˜p¬(ñXÞj¡Õ‡V«…ááa3sQîm•6ë3T-,Ö9ˆð<ðÀF jå(YÞÔW®PŒ†øáKÌÂ6YÉïË%ÿ-É?+æ2ÞMqmåë˸ëiqœ[¡V\×ñ˜_rSˆ¹¦¸ä²²¿I&}f5VLJ~3fÌ0ûk3de“(œRäš.K[)vYN‡††Œ¢—0Ûÿ\H0ŒLtmU™ŒÛÕñïÉä©ý�R^‹è(mŒu’é£s"=r£}Íð°6CñÐÌÓ§OgYYž·fð&·ŠS]×þÓËdÒ2×%zþx·«nǯ®Ï¼ò¾ÒIi¡wœV$T¾Šàª>¨1£sj ÊmAt-,ÖWXrk±NbË-·4+ühU()C!­Ñ_(x+¹(=¤øD€}ôQ¼ä%/1éµ6C<‘V)óîînl´ÑFøýïoâ#‚ÓÓÓc¸�¦õ‘"_Eé£mAt´/²£ÅA4˜ÒNi©sk;úûû�ÕVáýÓŸþdâ¢ü K¥ÊòúžßJ½ót¬|½øâ‹ÍJwjªnä«äéë�Uíë7l °X'!å­y<Ï8ã £õÒ×K]/}½ä­ä"X(<‘†×¼æ5æxm†È·ˆŽ¬�Z’öÀ4ñxÝë^‡o¼Ñ䵎e¥±[Q¥ƒD��k¯½o{ÛÛŒ%ï¯x…iì)�Övr«F‹òº««Ë„[VÜ#�<·Ür‹±Ôù¬2,·ë+TŸ•j¬^rÉ%xõ«_mö?üp“FE:­íõÛÂâÙ€]ÄaaßÖKÆ.âðÜ.â (_î¸ã\~ùåF1ʪ#+�Å tvv«ÎÂ… qÊ)§˜~˜Âº`Ù‘AS¾ŠðÊò¬(D„D€TÿôúR}\ß B«ôQºh«FÀÌ™3±óÎ;c§�vZnõÔužµý5/Ò¦wªÊ«ò÷±ÇÕW^iˆÚ‚ ŒŹhÄ®�P¼UoçÎ�k|°éÊ¡÷`ÑÈ‘åµDÇ+ t²‹8hv»B™Å,¹]�µ…ÜŽy–[å‹-Î+CÄG¢Ï½J¯"}Öö—{‘¿ã·«bm�ÃšÄø|\5mŠtY5 ×VLÎ"N�_›ã²&±j:M”.ÚX_ÓéÉ`É­%·«À’ÛX›,·“�%·vù] ‹u–ÜZXXXXXXXXLXrkaaaaaaaa1e`É­……………………Å”�%·S–ÜZXXXXXXXXLXrkaaaaaaaa1e`É­……………………Å”�%·S–Ü®ŠÅÜ´Ò‰ÄÂÂÂÂÂÂbíF±"™ô¶Vµú{êÃ’ÛÕ„]­ØÂÂÂÂÂbÝA¡·Er ¢kuùÔ†%·«�¢µçºîÔ[›ÚÂÂÂÂÂbŠ¢ ¶ã ®ÅÔ…%·“Ī­<[9,,,,,,ÖXÃÔúKn' ‘Û‰>mXXXXXXX¬Ý(t¶ÕÝë,¹� 2ëyÞòcß÷Í~�(Šl ‹µ ãu¸ô´ºZ}=µaÉí$PTŒñ¢J¢OE%Ѿ………………ÅÚÍ� ]èiéléq‹© ËÈþMÈr[*•̾*JaÕµ°°°°°°X{ ÁJ__-¹�Ú°äöß„Z€Ee±­@ ‹µ2FI_zZú[zÛbêÂ’Ûª…õVÆV ‹µÕjÕèkééÂ¥® S–ÜþPëOäVÖ[õ½-Hn!¬U×ÂÂÂÂÂâÙƒt²DúYzºèok±~Àæö¿ V‰>u”ËååĶ8/)ÜYXXXXXX¬YF¥ñÝ*•Š!¸ÒÅ:_�ÜUg<²˜Z°äö?„*Œ*�¤@An%ª`j=ZXXXXXX¬9HߤVäUz¹è:h±~Á’Ûgjª©2‰Èª/�¶E%³°°°°°°X³‰•îÕ¼ó"µË�Lë,¹ý0¾Âˆàª"}p…¢i[�kÒµ22i™¤èŽ`±þÁ’ÛÿE‹° °ê+‚[ôñO~§ йŠóXüR¾;T�Üâ¢ÒE/ûN±°°°°x!=ÜÙÙ¹ÜÈ$Ýl îúKnÿCÔ‹ ¤Š%r«AfÚÁ�hʹÕ5}BYU ¼6JNoSq �’:)¢,å)’ÝPÓ«ðzÉG˜%$»,^Ã(’sü¶¨˜Åñx¬s‘ÁÏÒ„·Ar[bJpÚMœ÷úWaäÏ—!,wác�<‚DúÕ=Añ^ß5ÿ9 �)]9^Ê04þœö Yï 4àŸ%·+°DñÙ‡*—ÈìøíT�y�(:êx»R´Ô¿V•K.´o‹–…………ņ'#¬…n-º(L%=kñŸÃ2�gã+XQ)ŸìÜøóëÆ‚žq;FgŸüœ……………Å3�Uõçxºê±Åú Kn-V9™ÍÅàIÞ'˯[XXXXXXX�ä•ápRNPJÜ—ø&¬ËÅ¸Ë ¯(y�<„y(×Xrkaaaaaaa±†±ÂºIAÔ@2c¯�![m�’ñ¸ïeê�»¹TÛˆ{!|J€¶SBËáU’ØÄåyßÇ`¹„Jìù|”úÖ&¼'¦h?F‰ÇecΟkúù¦ Ÿ@¿RãŸc¬ºéÆÈ‰uŽb?§¾í^`É­…………………Å„HŸ€iˆ˜¶iB*˜Jx¦U‡6à$-rÑ6·Mdiƒ›@¢ÙRGZ-·„e˜2Hb+&]Î*NzÑ¿õ^ØöuoÃó;m�Ñ´í¬„6*h’Ò&¨Â‰< éäÛ´Œz3C+óÁ ÝÇu"Œòiuæ&Io”’ð¦$°¼ž�]§ w"BœÛk73ðL;k œÌ ‰³°˜T\ÔòÓt"+X±œV„ó^ÿJŒ^vš^ §Í{iO§iÇ9¼nJ¿……………Åz -[1.c»%9txFÝò$�¼‘8ÆIÏ (²«:h'.b—•2BçK†"<ôø"<ôØãx|þ" Œ6Q� ŽÖÑ7¢�ÄuikÞœ>8ÝeÓ­!*;˜ÖÛ�Mû¦c¯­¶Ç´ž.ôM÷Q–q× S_^™j#Ôܼ·oK¤Û旅¢V ÝµŠ±6gÐ&·àææ=ˆeµEæÐ�µCå[rk±Z°äÖÂÂÂÂÂbõ ¢“jЗ…i`–¦ÚRg€ˆz5&QÔD^m:‹–P–aÁÒ!<2 îäQ<ôè|,¡ ÇGæúI„[¥ ”ÔcÔZÚ¥­ "an£Âç„~‚Rš §�¢’D$Ð1ª�¨Ô:°ùf›aöŒ>l»ñ lÚSÃVÌÀ]>*䮣Y€Ô/¡Ä}_Ä\]%œœ SÁS ÷-¹µXWaÉ­……………ÅêAD+‰c¸b¶†ª·-5)9î@˜ +ûX×ßñþø×¿á�Ç¡Îó­V××Ì .Íž_›×––×ÐdßCZHŽSN s«’"mÂI›èIy%ÈP‰"t�¶pо»âùû™ýøÂ7/Ä�÷= ߯ÂO3ô.:¢:¶šÕ‹W²?vÛu[tu¨@•OÓ �úé:cäVýˆ5¼Ì’[‹u–ÜZXXXXX¬.H6“H\”ºÓtH@=u1H{Õ-ÿ¯½ ×Þõ –µyÍë@è–�¸š©€ä‘,ÍðHÏ5“%hVƒÜþH.K$¯•´…:úfÎZ£Aˆþî6ï©bÛé˜;»{n½^´ÙÔJ†È�GÉD?þÍ‹på]�aq -uÐG^’è¶ég[•Zxá–spÀ‹vÅó¶ÙÌ�ß9u ð˜iD²×>Ë­±,[XXXXXXXX<ó�QHƒÈšŽ‡E­:†œ‹Òÿwå xó©gàÓçÿ —ßw�‡–=A:QA7IcàVÉÔºÈ;�’¸&Q>ପ黢:ÒV¥€Ä4IèÖA#ê©ëfåÞæ` ›Îœ‹ã_y^´Õè 2´È>[>I4`¹·£QqÒBJ’œ�ô†Iͤõ¸ó–Uñû<†“¿ö3¼ùôoà×Þ…Vì £'i�Û¦ƒf³�(V‹µÖrk±Z°–[ ‹ÉCzSËæ‡m„$¬÷>²¿úó•¸úÆâÀƒÆË^öø~†ù ã‘Gᡇcé’ �60o°�…M-£ëÃqø$¶nµšú54Óí(A‰Ä6 JˆdÝõ”IXËà qÄþ{â¯ÚÛmÐCRb„n¿÷Ûñ›Ë®AÐ?ƒ)pÏ¢%º§¡ÞÖ�7NêÀ§h®Ý²ï£ÑB©‡d9«£›„ú{ì‚Ý›tt`FgYFd³@Dš1|®·Vè|Kn-V –ÜZXXXXXL9¹ÍgK¸îŽGð±/\€¬«ŒO8 /ÚaKÌr2TbY‹îÜír>ûA”VÐŒ3,‰b<8o<ôî½÷nÜøÏ›±õN»ãµG¿ç|ç�¸ÿáùä¤eÔµD¯¯~¸6,µð¡ÃÆ÷Ú}<%âÚÈ\œþ­Ÿâ÷×<„ê´9XRA“zÚïêàõœr`îõÔƒ–D•4m¿Yµ ä3b”§U-ÄV3{ñÿŽy öž6 = ýÐ2½Õ€:ßµäÖb݃%·“‡ôfÈí�ƒm¼ÿsçãá�&6Ùvs¸Ïج»„MzjØ¢«}µxAжÓàM"Œš�:T½hÉÔ4t«ÙŽ�Àňëc �௷=Œ¯}ïçh´]Ôƒ´ƒ²¤…×ï» Þþâ=°y¨•}Ü¿´…3rþ~ï¤|Fcx�ÓúÑn¶àøô9Ž‘¦1<’ڜܪ-ɶü ÔHŒyõ¬¿¿„tt1vžÑ‡ï~ø]زê#Fwg®ŽX ”¾%·«Kn-,,,,,&éMÒUœòýKð“?_‰žé3 ŽJ>‰4jaæ´ ¼x}$‰[l¸)vÞvì´Í¦˜;­Š¾² ó*Ñ� ýpÓõ° §Ò�ÇHLÓJçýü/øÙoÀⶃ ýN¨£»ÑFo<‚Íú{�d–¹ý¸}aˆ¸\#Q~%Y§LrÛF­Ú‹(ÌÐŽ4 ‚¦ó¨ßóUÇ*Ôõ.؆.º‚N”Hž‡ëp+!‚RG¾j_¼óÐý°‰o)á ¥%·ë,¹µ°°°°°˜<¤7ëÜò‘¯ãÎÅ˨µ nRb¯Š0Ê#$�!œ¦‹JØ $uT+-l>½›ôuâ�=wÁËöÙ%ÏÅÒ�Ì[:€…Kqÿ‚E¸å¡a\y'ý­u¡Þ®“œff6·ÝBM³)P GIø>6œ; [ô…Øpf¶ÚbkÌ™;¿ú핸äò›€Ž4Hx[^±OÝíºp1Œ²’…—� ÓI æzhò|\Æ´î6.:û3Ø 1‚é$ÚZð�Š?�øsKn-V –ÜZXXXXXLÒ›MnßrÆwñ�G¢‘ÃmqÖ¿o¤ARHtç$>Ü„Ä×#ŽFÐYr°ó¦sðÂ�wÀ‡îÁ}ÿºÇhàKÃ/X:8€¾Ù[`Á Ãój�šq .NQF:ÒÄÜþ Ž}Å ðâ]gaãj å,EOg'Úä¬Y�àŽû—àñ¡&þzã-¸ù‘ÇðÐÀ Fµ@D©„V<­™U0­¶M³˜C;FðüífáóÇ¿ ³†ÑÙÑÁç–ÜZ¬{°äÖÂÂÂÂÂbò�Þ$ÝÄ­uùÁÏa¸<C~…2Aš´à§.Ê1uiæ!v3„];5¸è€7�6GÐÛYC£Õ†ã×H,Tj54G‡0­»†�z+xÃþ»£>²�-Y„GëøÇKP÷¦Ñ­‹Z4Œ#^°>yôèwpƒé$Ô ¢0B¹\1ƒÝ2'EJ]­p6Âó/Å}?‚{ç/ÂãËêpñÈâ<\ÁÒ4‚ïŘŽââo|[zda‹þ5Qéé³äÖb݃%·“‡ô¦”=œÅøÆ…—á—Ü„7JZ‘!DÐÎP ktWBèÇh—@X�Ó H"SÔjš$¶i@" Í_¡T*¡3iâùÛoŽ3Þy6 ã¡[ÆÏþö|éÇ—`ÑhNÏ”鮳ñ(Î>õ(ì¹ÃF8çü_£ÖÝ�-7ÝÏ™…­æö¢æÂôé-S)íH뎩;øÌ CÍóš)ËZ8í›?ÂüGÄN:tt´cA Þס–ÜZ¬k°äÖÂÂÂÂÂbò�ÞÔ4`Wßu76Øn;|ý¿Ço¯¹ K šš Áõáj6J¦¹ ­Dæ «³­Ñ¥$—m8ÏË�£n :£QùÂ]qÊaûcF‰÷¦|F¥Šï_|5¾ý›?c™Ó‡Ñ´Q ©.GÃØn³éfu²Ý·aLýì‘$ûz{Jè­ùØlö,l9w.6šÑƒ™]�Ø ¯sºHy³ƒ à �<€oýðwÆ1¯y)Ž|ñ¾xøö[±ÇN;’„'­£·£Ÿ*ß’[‹u –ÜZXXXXX<= rU�ÛÃO~/^ý†Ãð’öÃí-Ä9çý w<:ˆzÙG³” &©u“*¥G<¥Z‚V{ŽßB¤Øï½ðÈÝwadÞý8åˆWáèýwÇto”d¸‚…NÎýéßpþïþЏ{F4›˜_AGgâÆÂúº»«$¡>¢†×óH|C¤~ŒVÚ€oÖÓMàe© °({z*%L‹`zOŒF­‚{[‚-§o‚ÿבØi“¹øÃoÿ‚?ÿùR|ãœOÃwy/ v9€%·ë,¹µ°°°°°˜Ë -)·RbY£ÜîyÜÉáãøÃ�Ä!»n�Ù=]øÅo.ÃM÷>ˆ«ïyÃAZš=�D5‹KJ„ÉàŽ`F'ðñc_‡—n»%ª�6ú+JIg2‚Çœû«ëñ«Knj=ö³ñzQ-ub˜“ì­¸tÈ¢&ª$Ÿ�í6zâ³gvaÛ·À–[o /p±õ†³±Óœ™è¤.Å@à8Ȩ[[|`ÄsZÊw´bxtC#£|¶‡¾Þ>Ñ :Ê:*@É'af Ê¼/J34bÞG}ß‚%¸ùÁÉbÜõÈ ®¾å6,AæWÑÈ\¤IˆÎª‡æp½néÈ2„�>Hϱ™áꯟ _ì˜q®j¦Eø9†%·«Kn-,,,,,&Æ“‘[-¿ûü£þC¥^4à£íUiVY§ �,•“d‘z•ì3s©c“=)™Å%à]b¦1·cÝ È`ÓH¤Ô�hèihXG5¥|ªÌ¹TºÅáéô5°Œhóúh×L´�— ¡ïót§p�Õ•?u´5p�¨0É­Y†"íE‰œ¶’ÖѪðÞ,Ån×~僨ðÓ¯w-!·E ,,,,,,,,,Öô ÐïĈ߃Äé$¡­ L«¾°šF+òH I"½´ ?n¢”-FÕyˆ2Õl!eÊFÔ@’DZ³qD"™”�Ó0PÝKk›aYǦ”M°´c#,íÞKú7ÇâÞÍðxe/o€�® Ñnòf-™F (ZmH.irêj0ZŠØM{’Ü zðRV׈\x´ä ¬ˆÊïqŒeX]%ÈÉWX�ŸcXrkaaaaaaa±¦áUHºJ�d0E�E$´¥ÍrD‚›ÀÏRt¶]øQÂl&ât:’´ŸÒ�8«¡ÜÙ…RWn…dÔ!i€“£6ÆI=ß¶FPª"h“H·H>[@}·ÆPTŽ¥vŠrœ˜©¼ªÉjÉ:ÒE”ùèH¢œÕÍü¸ZÜA$XÖcYˆa¦cœÈy5O®ºOä~í€%·kê`°aÌ#’ÌnÃåš•�7!ità¦%¤YšN—éâ¹%„NÞ…!vÊFÚ™¤„Ì«Â÷»Hâ*È—÷9äžMÍ_+":Ö? IDNÂ{õ$DêŽÀñGá¸MÒÑÐtmÈèw’u’@÷#"©ŽÒ9$Ö åVÑöI¤Õå€~v„)z[)J£!‰qbºIhPZÝÏ'ù“?ó¹†%·Ï4”‰"X}ª×´^sfVQrGx-2̶±ˆú© ?ñ ñYÉ£Èf´yCD²›ð~_õ·¥‡Æ‡>Æ$¬íQì’°VÈœ+$«ôÇ#ÕåuÒ^nÉ8c’R…'ðId=>O×\„iLÒœ öé%æ}ôŠÂ§ñ~RVŠo—¹²ÈšÅ\’å”çÓ×�cÔ¢6êï%Vu}í¡”kOH,,,,,,,,Öa†KmÍà,þ\‡¤’rä[_�Vº„¤uÔLûµIÏ,dK›¨9UÞ~‰1ˆ‘¦Ãp“J$·¾!¸ÄM²+¢›ÄðÔ5À ÜÊx†„“"+òë²ìÂa6ºrm]ŠËsY¬ãV�¥6Í|n5?ovJHÑ£†Áæóè­v‘—Eu8=†�6*ôzZ�à¸#3ÏŽFš¨ê9k ,¹µ°°°°°°°x†‘Ü\H!qÈÖ3ñ¦}÷À4´Ð]Nñèã÷£4£‡d1AÃóÑH’Ê^øþt$nmrÅHX25�çR¿VC`)䕹Ä$r©æœ-›.£AÃ¥*FJ5Ôý*ï­ %yN(mî‡n™„9ã½ EÛŒ„˜aÔì ô'ÍHzÁ{(ï‰ý†ëȵ®„ÃKÐYJÐéµñŠ÷Ä.ÛôÃ�Ct×dn½6À’[ ‹5ŸœozæâCG¼o:ø¨$ƒèŸVB3‚fÕDµLFVF’à&�d›e[‘RÔ ÀˆéDkX.ÿ;$¥É©K²*«Eè&pW¸ÕJ ¾Üâ›ê Ë?Þ’w‡Ð´bcDÙM5k”©g°,½|6É-(ŽW�Wí@µ‘µGÐWËÐâØ×ˆã^sú4Ø,iÂ�ëôß<ˆòÜÃ’[ ‹5ʪ£ßKpâ_‚Óßs6ë)¡×i¢ÔZŒ.%­Œ¤œPPbŒ›šWÍS ‚›:š—âø<ö É-'!|´èŽâ…$¶mÞ×âsÛf¦„2 ¨Ï}¡ñG+˜e<’?ò_³ äÝdÉaMLŸ_§1ŒRcÝi]­¥Ømn/Î:å¼ù€½0½”!]†Î’1}›Kwm€]ÄÁbµ`q°°°°°°xr´Ê1–Ö1h>Ûö¨™6ò;1¿ÕÆ(•ãu âÇ¿ù#n`¿†0¤†M�¤ZA{9YÛšÅè§w™­üwd!Êia@ÍL•›© °ÛNQ 5Í—ކØMÑÏ4«˜cÝm¦õ¢ˆ|›uɸÍ�sB^ËZH†—a¯]¶ÅÛßôZl;§F’ôü4D…ql5šè¨tÀñÔ—aïç–ÜZ¬,¹µ°°°°°X=hèWD¢˜ÞÀ æJHNµ– Iè?ïy—Ýx3þõÈ<Ì[¼Ëš>"tÐøt/R¬i¾|YkÕE!'ºÒÉš¢«œDÈÊý‹;¤®.ÉgL-Íg¨ËBœðù CÂójfz0‡÷hþÚ€ç’ï2ïõ)ˆZè®U°é†s±Ã½8p—°Û[ 3Jô;HcrXYzY€íëO§$Ï1,¹µX-Xrkaaaaa±zÐ\²u3ã�ºØªŸ,#ydš¤Ã^W#Ô¯aˆyõÜxóc¸å¶GqÇÝÿÂâ¡!8�˜eÉhÞHÓuù.‰n—â8¤¤­Í¡• :*U4 RVék£6–%Öuø‰nˆ@—¡ ²ôºj†¤EØfÓ ±ßÞ{`×m6Äô®NÌ,ùè¤múWæ=~‰ÏK4ŠM1!±å³Õ×Wö^©zrðœà>ǰäÖbµ`É­……………ÅêAä¯A­)uX¦•µ égš QW’Æ6]µ=!]‘î–Ø"�\¸´…»îwÝw?ÛFÚ1–ŽÖ1<Ú@½ÝF3!ùL|TbÁHo’q-@«B2¸p=5¯dúÇöt$À:«ftv`³ gc³¹`‹�f™ad†Ä2Œêë‡Mtø<†Ka†›,—;¹Õv9¹eä ¹5®ž[Xrk±Z°äÖÂÂÂÂÂbõ ¢‹R’;ró8 ®¡ë"&™ É3É„ú“îRÈ�dRƒÈ¼@@7IoŒ�ª»A‹zy˜¹�ç§Q37éGÍÁˆŸa„Û:‰­úàVùŒ.²Ïšï‘¬ŠÁò|;¹/ ­cúÙ¶FFPJè¨Rw‹:)9xˆ„Ïó®€a KÃLd-¿Ëÿ<âO‹GŒ�.!»²…ÅêÁô³añU¹W™6ÈwÆ.å;Ë,,,,,,Ö_HWjNZ3/-÷EVCÊ&¥N¢ØsË(9eÔR�^†¯…Œ¢ß1Ý�ГµÐ›¶1ÃM±QÉõ2¶éªaë®vìN±[—‹{.ü>±ß.øÈ^;cô¦+°s7°s¯ƒ�zb<¯#Ķå³�³œsSJ�`ýëN"t�ÀÎììDwɇgpVrl$~ nµ ±_A3óPç¹Ðõ3"9ôÏu4CĘ.'Ï),¹µXmh>Ij ±%•5¢s$”c¤´ÒRxY ©WåP�CÔ²Ð<*ã}¢§N&zê#uÕU�®VÍ¢ çêù$¶yàñY"´¢°¹Íù¹žKwË .‰-ÃÇ”ç9 ±°X h�gêfˆýÔ¬ž¢}}f RM"6›ñ|†Ä¬é—ßcaaaaaaañlÀ’[‹Õ©+'A›äµEV›ªuGN[‰�²z»g bG£>yÍ’[ ‹g–ÜZ¬Ô)Á3“~ˆâJxŽÄÖ'©-r˃TÝDzåÂÂÂÂÂÂÂÂâÙƒ%·HS’ÐŒdtlûTÂ$³©é†à³øhå�к™z©¿‚è¬7Ñê'šêäéý,$‘{"Š4â2GqÎÂÂÂÂÂÂÂb2°äÖÂtH¹¹Z­ÖJse8ÆR+"[&½ÕøHÓIÝ#Õ­Ôà”yFËþÑMÍý�<´zJ³Ù4ÏWxâXSŒØ~ “‡%·+YlE(K¥’9'«éª’¦’ N” IˆCsŒ:.z ,ŸçÎAÚŒ�NàÇ“‰ˆ­&ˆ®V«+…ÉÂÂÂÂÂÂÂb²°äÖÂXL—-[f¥V-Á r9^ÔI ’¥W7qà’Ø¦¼§Ý]Á£^Œ¥�% VBâúðy]3„MäÏD"b;::ºÜZ+ë±YEÅÂÂÂÂÂÂÂb’°ËïZ`xx¸çž{pß}÷aéÒ¥cWžˆÄ%±u2ø1‰g E ±—âÊ ÎÃâ^tõâ5g~n «¡] &½PYOO6Ùdl»í¶†ÔJdÍíêêsaaaaaaa±Dãø§ñÜלs®=íh¹-¼æüïc‡ÃŽ•)¯7¡ùpÓL CŒÝ7…aÉ­…épíµ×â¿øÞ÷¾÷¡^A­V»*¬¨ !%"¹­¥m¸ ‰« íf¨6à7‘–jXÒ;åV†NÖ´$PñòXïÈpÕY—ÈÙy†äØÀœOeœ{î¹ØgŸ}p衇 r¥R±Ö[ ‹'ƒ%·O€%·ë9”ù*ï8îx|ô#Âì f‘ØVòkiÊŠ�¢F$žUCPup”¢aÖ—*"”fÉnƒ7„hÇ.†ƒtʩ֛Ž�¸†f+…_Iá²’¥N“Ïl#p§!l'(WDa¥R‹.Á7¾ñ |êSŸ2ÝÔUÁ*³°°°°°xXrûXr»žC™Ÿ°Fì²ûn¸ù¦ÐAGG•46ÃàÀ.¾ôRuÊ¥+~©¯TƦ›mŠùwÞˆ:‰iäw!óÊèõ"ôv–1šøxh¨…#{5º½óøþ~ÅmxíaoF¹3ÁC=‚»îû6Úx¶Ýb_d|ö²ÁG1gƒ¬Ÿ.ÒÔÁ)§œb,¸²(kp›%·OKnŸKn×s™¿Å–[á®»nGE¨VËHâ7Ýx#ö?à`ôMïCoïtŒÖ›˜9gC¼ü‡â'ßü2BÑ¥£ý(aƒÞ2öÞýyˆýNüíÎûqû?®AÉíÏÿN9ù4Üy÷¸ñæ¿á¨£�FÏ´*Í!|ôƒ_Æ{ßs¢dž›¡R®¡ÝŽqÜqÇáûßÿ>Â04äVÞ,,,,,,,&€%·O€e ¨×¨Ôªf¿R­"&ÁuÆJww'>ýéOã�ü®¹öüèÇ?»O~þò×KñW×õpäQoÆÕ×\�3Ï<Áõü±YXéßÇàà~úÓŸb«-·ÄåWü»ìú<|÷{ßüy‹P«Öx�cÈl¹\6÷ËZ+)æÞµ°°°°°°°˜ ,¹µ€O"Ú­Ã÷|sœ© HR*£~½ÑÄ…^„/³5xúé§ã׿ú5È|±áF¡«³ ¬æ¹íïíCïôéh·Z¦;ÃI'œŒcßv¬!°Q›jZœa¯çï… çnˆ­¶ÚÃCC$°ÀðÈ0ŸêR«®"µÅÖ~X°°°°°°°XXr» ¤È™¶ã-�Å96‰ömÛí¶ÙŠëÏ–øA �]]ˆâ|U2-Ò Ö©ð ØÕh4Ðh6188Ïuàx:ÌŒ Z676Lj3`¬ÍøÌÚ`l·í¶˜>}4ÛAÂtPc¥É¬Y3u«!·"±²îú”z½Žîîn.�á]5¼V¬X±beꉾöz§ÐŸ:ÖµB_êœ %ÚJ_Ò-š6²€îÑ9é.mu¿ÅúÛçö†!Чõbú*U@U°Ûo¿ÝÌ#»páB,^¼###†¼iª+ÝS�[¹¶á¸®ºújÜqÇ­¦Ïm–%†ÀÞvë­Øï€ƒpÞ·ÏᇾžYh¶Œ¶ÇmáoW_�×ù6¼áÈ·à«g|‚>Å8î¤÷áŠÛîÁ]·\‹rÒ0}nO~×ÇñÏ›ïÆ©>Éè_]ôcü×1oÁµW>„?_ú'lµõl¾Ôš|¦º4xÇ;Þaˆ®^f"·ÏEšXXXXX<{Ð;¿ ±Ò�Ò¡}}}†Àûƒ1mÚ4lµÕVØqÇ1cÆŒå‹ifA÷JgÈ?éUééä) Ñ8þÙ>·+`Éí3 U´¡¡!³ð€*×w¿û]|þóŸÇÑG�×¾öµ˜5k–©hEE–•RQR"ˆ ?›�µu«­¶Æ}÷݃Ñá!3[‚jÊu×\ƒ—úrtõö°nT�9.zú§ãsgžŽCöÜwÞ÷ ö;ðxÓ[ß�o}å,´‡–âÄ÷}Wßý n¸úrtûm|÷_ßú9Ü|û½øÊ×>‡¯}ík8èe/Àõ7\�93vÃß®ø3zû*ŒsQ˜ðÙÝxÛÛÞ†ï}ï{¦%®tÒËÉÂÂÂÂbê¢Ð�Åû^ºTäT¤µØ×—CÜë®»?øÁ0sæL3ÖCK¶ë|aT’n•èXdyÊϺcÉí`Éí3 -c«O"—_~¹Ya÷ÝwÇßøFCÒT¹Dd•äÚ/*ŸÜëX[]/Z Ï”ùqœàEûí‡Ë/û3j• ÂvA)À¿îº Ÿÿ— ©•ñTƒÌüJ ï~÷ÉxÞæàþƹßþ!öÜ{?¼æÅ/‚�?øÙopóÃ�âôO~Õ¬Žë®º?þÑoñÙÏž�ÌÅg>ûY<¶ð~tõtâ[_û*%�þ·�&m”K5¦‰‹N8ç°‚ê…%¢¯“…………ÅÔ†tbaìŠ/wÅyAÛÂ8tÓM7áç?ÿ96ÜpC³ðϦ›njˆ° HÅ=Ò#‚%·–ÜZüAýÄ'>�7¼á ØrË-ÑÙÙi*™DD¶ ±ª€:V%Õ¾ "'wEe|¶�ò™Ûî°nºá:„Í&ú§õ"aXÎÉn³Õb¸<”®¡‘Ê•:½­v‚ ÚmqHˆ='Fìu`4ðPÊøRAˆÆð28Iª]$®n†‘ÑúÉ—S�¢ÕègeKÑÑ©þUЦ™sÌ1¸à‚ ŒåVÄVidaaaa1u1žŠDT}k¥'%Ò“Òù•EVÇÚjÉøï|ç;Øf›mpÄG72é~¹±–Ûõ�ÜÚï½ÿ& ª WX\¯¾új³|íñÇ��wÞÙôM-H¬¤¸GûãûåªÒçÔ÷ÙFÅØ÷/$Ùl¡¯¿ÃÃ#ð‚Jå*RÖß+¡££i”¢¯§ 5†3 Õ"®1î@Àw†W à–j$­.j:Î\$q†®ži$¶ô'u̽=Ý|¢ËtqÐÝá ³ƒià°Ê‘ÔÊ‚¬�kzA©r‘nS҃㻠éXúP$Uç‹/xÒ "¬ÚÊ�®o¼ñÆøä'?iô«º¾Ik_×­qdý„µÜþ›6VÙb$æÝwß�[n¹‡v˜9¯ÊX[A•lm…ÂyÙe—á’K.Ág?ûYóQ¿ážžž1AÅfâ8*¿:‘»•]P:~ñ‹_Äܹsqøá‡›c¥ã³ÙMÃÂÂÂÂbÝ„tÙ£�>jÆlè ªô‡ %Òek³þ�!Ç?k¹]Knÿ,Y²ýýýøûßÿŽßüæ78묳 1T«Q¢Š%‘ewm¶@Ögõ_úíok:í«µ«—³‰Í6Û ûì³öÚk/3ÐN£dõÉIilaaaaañT�‰½í¶ÛpÅWàÄO\n¹µäÖ’[‹I É×]wá/ù N>ùds^¨°8•IÛµ¹b‰ˆ‹à-\u d�~6!kqoo¯I¿ ˜}Ymíg% ‹§ƒt‡®DzY³*|ô£µ}n×CrkûÜþ›PÿXX}þ8ꨣLÅ‘uVçDÆ K­*Ùº\M_&Ò.BY¼ žMQ¿^kYk7Ø`“ŽJO ‹§ƒÈ­fKŸì¿ÿþØi§�pñÅ�]µXŸ`™Ã¿ UMW¥©¾dí +,¶ÅgþuŠKA"E0ElE,ŸgSÍ!r­¾Ì —¶Oi¤?Dp¥ÃöÛo?Üzë­Æ`b±~Á’ÛI@FdU¬ ®wÜq®¿þzcµŠë‚*WaÅÕ¾HÚÚ …O„¶«Â­ðkÿÙ”ñÏ×(Y½œžíiÑ,,,,,ÖMHgú²*�¬®mm´‘±ÞJ?ëËäx=n1uaÉí$ Ê Ò%’+¨Uxá…âË_þòò–¢*�ÜXXXXXXX<û�®. 3Å"@šÁèÔSO5”Ez««§>,¹�$TTqdUÔV“Ck[AÓ‚©¿ª­0ϤŸuiÁ¡}õ«_m˜‰ìÊ %]]Œ‹±˜š°äv(,·E¥Y¸p¡!¶�×'t]+®[XXXXXX<»�>VÿZ¡Ôí@¢ý÷¿ÿýfšKíË�H®ÅÔ†%·“€*C1ÀIV hNVU‰º%­A ‹g"¶êw[ÌúSœfÍšeK/[¶Ì^¹±}n§6,¹�$T òzíµ×b‹-¶XÞ ”ý|,,,,,,,ž}HOK«+‚È­Ž #ÔìÙ³Í\ê‚”éœÅÔ…ÍÝI ¨"¯j je2�Â,*GAp-¹µ°°°°°xnPèéUgû‘Þ.æQáñµ˜Ú°äv5  ¢ß¼yó0}úô±³k+ÔmP–[ ¤Ëm·„© Kn'u>We(¦ýA__ߨU ‹µ²èj9yépAÖ\Yp-¦.,¹�DhUŠÑ—š-A\ ‹µ"µ£££f®[Aú[+‹© KnWãûêØVŸ……………ÅÚõÁ•aJF*AúÛ’Û© Kn'�¢h[tO°°°°°°°Xû!½­Dj ‚[ ·˜š°¹kaaaaaaaa1e`É­……………………Å”�%·S–ÜZ¬ÛPwèÉÈêb¢ûW=Wœ·X¥ÓD².c¢øL$ÿ&ògUùwPÜ·ª_«ÊÚ„‰Â7‘ü;˜ÈŸ‰ÄÂÂb�ƒ%·ë&Ö¤â™Èß'{–U~+cuÒc]M»5nù;Y¿W7 …ûÉÜ·º~¯)¬N8þÝô˜ Ö–ô°°°˜4,¹µ°°°°°°°°˜2°äÖÂÂÂÂÂÂÂÂbÊÀ’[ ‹)Kn-ÖMhîÕu››´Lpÿ“‰ÜNèÇ“ÈÚ€‰ÂõŒÉ*éóT².¦�Á*ñx*™(O*Üÿd²Úi·ÊýO+k& דȚL�u¶œZX¬Ç°äÖb�D±Zܤe5~«§¢Æßù4¿‰Â5&Ï.øÌ5ô[ciÇßÚŒ‰òÔÈjüÖdÚM6ʺˆ‰âad5~«ƒñ÷=ío¢pQ,,,ž]Xrk±nBK(®ŽLd’y )¨ÆÓÉD÷>™hÙÇ'“gO Û3)¥ÓD2ѽO-k&Œ‹òpÑ�;“q ”ÿV•UŸ%™èþ§” Â&™ÈoÉÚ€‰ÒB2Q<ò:4yY5¾O%«“‡«ÖëB,,,ž]Xrk±ŽBJò¿t5D¿Éb¢ûŸL*扬:’g‡ï™ý& ¹�È�'“µyÌŸøK(Åe"yÒn @~OäǓɓýÖfN8�Œñ›(ÎO%«ƒÕÉC‘ïç¾~[XXXrk±ŽÂ™ôouÜê—kѧG®²Æßù4?iëqÖœñV�5¥'òW>óÉkä7Ù´²åwMî·6S„ñá,~ÏT*OŒñ.þýßÚ�ñ!}êßê¦Çd±ÚuEõy•ú-™°R,,,Ö ,¹µXG‘[Å&#ZXžF&ògU‘;ýV½÷ÉÄüÖ§'N¾gJ&J«‰D¿‰îŸHÌo‚´“<ÛPx&ŠÏªR„{|<žJ’,E<�<™ß«#ù1‘Èm^Bž{¤¤Å“¥Çꤳd"?&¹]¿õc¡|Î˨…Åú‡ÏÖ¼§Aš¦¦õÇ1<ÏC?Ç®Z<3�ZHùS{Ë�ËR)[� gBq³®DY€×Å@+Ãàh Ì“7aæ -U�¤*Ô ‚,6>%üŸ:®ñKÐÿÜΓïÇ‚ö]þÏC0vUA™q‡ùM|&%¡Œ÷CûíÇ‚Çp•Ó-xÈ</8,[ŠWogý% !|‡éÀxx~™ww?ò´3.ÍC¥–=om$IŒ¶[Ã0�GÀÿ…|¾ {²„©ÄHóe0vÂ\%®”ÐÉ_¯Ò 3Na‰Y&Û.ÃÁqx²¸IòTÐ^q�ûü+ÒpE*åHè^îr’Uý/ >Ë“k^õ¹„®ÒÇA‰ééÓ§„™]ë¨aF)CGàš<òøOui¬ÒýXí [ÆBuП•øÈÕ C2Þç¤cÇô;eÞyÃÂsC~ ¬â ÑnGpƒQ¬H(´cÏ5þh_’×Å'KƒñÇJŤHÛªßr´ÊY“Î…ë'ó_бÒDÛ”qSžy¦<ȇ¥J],¯½¥A8ŒR@—n§\Q,Ö$¤Ã/ºè"ôööâ€0Ç®^zSªWüK(לs®=íh¹-¼æüïc‡ÃŽ`cËš,“Ô Yżï§:,¹�,¹}6 zFâÂÊ'BZ¦>•:Iùþ)%4‘µGÑô{ñ‡‡JøÙ•wâž&Yl T"áM4JÓ9e”’*É•JLâQFì±2§R0¹R QÕ íç›1…EÅ7¦ŒtF×r¥Çã,#(LÅ]T]cä9ÇSù_J[¨bËЉī2N$æa“ôwxÕN3qÌþÛbZ)¢‚wUÞõôo!QÛL~I½+Œ$ WD‚WvF‘&½^|ãªüõŠ›L£ ^ê†Ë²,%ŸF-”|’2Ö±Hd"<“’(—+â²<žc[sÍü£Ò ?Ü7çxUîòëúÇcnR’ÐX$tÌsÙì�óì¤ÈY¥!.‘LÖHþ™·¥VЧ÷áˆwž;2>ñj¾Ò�iàtPØZxÆÑ@£µ7/��¯ÿê6Ü»„D±ê`i³Žrà£/l Æò×"y`{銆ÕJi5¶3¾Œ,�3÷\Q*“yZååQ’ß�§ãG&.Ç9´ïñ_‰ 5®<6®@9âOc#!€ßXˆn¿�´Ü ‡ ž7î>‡³ öW<”L^²ÁÀ†¥ÊhÊç©\©Œ‰üæd™a‰/ø4�56'Ìl—2ï}úÏ׫ñ#KZlØÕÙ€õñ·F~ü‡[qÏ} 1\o£ZëF£­Rî±Í0,¼‰ñà[™[ŠÒAa Ȫi ¬¢šÐl™+*›Jc]Í�Uî‹{”¤¢f+Œ÷ó þ›ôˆyœ1mË&}*ŒS™å¡Z­¢Éz¸ñì>œðª=ðü¡yGy噼gM4Â,ÆÃ’[Kn-&€%·ÏDnIê ¹õ–“Û„•°ÉZqZHš£X–öàÝß¾?œ¡^™Fr;J’ئö®¡žu %‘õX‰«É(•K‚Э Å®úœ¶¤‚/ß¹_è4¡Øs£)r sï‘CnE" æ%˜[¸oÜio¼ÿ柟ð¶-¿‡o¡”„c‰%Ê[ lWÂéo}!öۼǨӚ!ŸO£LÍÙk^yŶÅ7X7HÜ[wpô—®À‚EèôÍÂcI'ÃÂÉŽï¦$=yú¸ ¿¢’Yq”åÊç9ÅÍ<,�ÛX­œŽÅùüš Ó:^Aò3"Ú‘X5/&òßeX‚¸„¨¢é5Y'ªÈGW};Ïðñù÷€Ù•Ó|/^+¹$:ôû™s ÷‘ï}ô‡wãw7Ž"èßa´¨2-“]"·lÄ´øü!’ÛÉœ¬wyÜ–GpÂxÊk,~|%ËÉrr+Ç&½´¯+ævCpU> ?žÌ—VN<…E_@X†ƒé†\íe¨:!Ú¥>6"+˜Ý�Ó߯ßmº+â(r«ç¦,üGäV�0l–Ô‚Üêf‘VŸ�tÂeÈÊÝøì•KpÎïîA(òG÷yøõ¡Fi™Ç9e¹•UÙØV•×j„=MçåLǺWŽ”Æù)s«®ëíªµ¦ì2_„§.«ò-1>«Q­4*‘Ðz)d¼/-×±|¼|·éøØë·ÄF$ç³ÆÛÜm±&aÉ­%·À’ÛgR!U+_÷k©ôGÌJØd••SŸë¯½wÞxúo�n¸;F™›tRÝÖ² 'l;ð*UŠ•´Ae˜¡Ir+k®/¥nž1F–�' Úw©t¥ÀòÚŸ_Óí¯ �iù]Ùþ¤©íÆû¯Ž¤Ü@­nÜB�ñm§>«W‘ömˆÎú#8á€-pÒ+6E7oéâ=|%=-Žˆÿ ¹÷ÓŒqv@> Ÿ„+c™½ð¦yxï÷oBP�†Ñ%�aÖ´*$‚QØB%` B}¦Z{è“q.¥E®ÔMÜx¤þ…ÚêH·ä×rKoî~ò´ËÝåÿÞ, /SÛ\ƧU¾/gcù”ù «�¤ÃC³Ä+Ó°t™‹Ÿ�™¥áô“ÆÁÏ«¡›yî„)ºJ"KÆ«g"·W-¨ã„/þ ¢¹Làfv7H^†Ì—…Î(dê�–�@ÖPcú‹$>1nùO¹–§�Ê�ÊþйcIÊ¡ÔÍŠTéϘo¹«úŸï³˜²§n0¥¬Í{ ù}ˆÒh  Z«`™7ÞtÌŠçáí{NÃ)¯Þ~‚2kdÂ’”˜¯>C 9ŽÜ ê¿AnYFÔèô Ñu0ÔJP«$ƒÃ¨{�8ñÇ·ãw·.F; ÐWúƒí�Eæ`Â’×:ùhÂ@˜àŒdÕ4Pú6t‰ºÃâªûÇA׊¨äû¬S¦‘ñ4iLè(e~%dƪÎc��Ø”õÑ뚉ÇFHäÙÐܬ£‰sO9;÷²qF&SÇ-þ3XrËRfɭŪ°äöÙ€Š¡ÈmþPäVˆ¨ Ü–�„•2Áõ÷㸯ý K�nt—#|ü­/Æ 6÷L_Áo‘Ò“Õ³bTŽƒ&EÝʼV(­§ƒÔ]Þõ Ǫ¤¸¤­”ü¤ý¥Ã†!tTƒI‚*�ÇNÿõøýmuTãµç,|øõ[¢‹�è$�˜Ì;Há+È­Ü<ÑæVäÖe™MXfzÕƒøÄE1};°ã´_:iÌê$¹%·ÐsÔõQdp|\‹ýñçžrK^¿㩃®éX—µ/KÜd­VŠ—Ç4‹y›2¸u‘ƒO}í 4ªÑ >zì ñ²]úÐÇ'øLè2op—ôg!åºyKqêy×cA³Ÿ„vŸzÏ!ØaS‡„šíÆ©ÄH†|¾Ò¿ƒî}EvPÚ$ガۊÃñ[#¼8ÎéSBþÈ>jÈ­¶<3Ä-Û¨ðõ?Êôúâ¯Å%w À]z?Û±§¿ó`”ùÞ«¨lȆ¢Oåè–>bf°¨azòï’[†FdUá[Ö ¹­$Óm ¤%ÿƒ›qÕ=$³Lñ#Þo>hŽi¸ôŠÈS3«¬«sƒ)kò`5 çºOé-Lt{mW«ŽÓ7Ñu5.å±üùïowd8û‚ߘ/L›u„øÒ c란 Ë`Ò~[üû°ävý#·ëA-Ö H R ?–Šø/#mj&ð;ûÑÎ<ŒŽŽ’PPá¥mtDml@â8›®7 Ú›F%)™ÉcõjÛ`Ò’aïÙ�2‡û³yNR\Ÿ3v,7s)ùó²åןJtÏ&iˆÍ©°7O07[Œ y\&]k ¢¸h ,B7YC—S©ê÷é ”l~cv?Y­µïQÉJ††Gà—kh§.4Ž¥'Ž0ƒ÷)}¦Ñ]óXi•‹ös™8.O&JÅS²�Ù*=‹4Ÿ~ßÿd2‹qšÁ—óìx)æ´a´�,™G"ÙFW…¡5„Q÷hÆMÄkM@Þª²,î­0F…ù4;ˆ±19ßRÈYŒóL³M–Çu¢øL$J+•©ñé4þºŽgÓ�Ò8/w+_*™ÉðÌ0ÒÂt6M™e9˜É²ÑÏëÓÊ)#£h¥¿lteƒñ3M1/  #Ò°Vda²åsb¤N^V˜‡Ú‹Y>]ßeúzh‘�†lué«K?5Õl6lú²:¦gŠCLÉLùTýž¥øp;)Ê膼§Hëñ׋s+êødý–1ýmc#³ÍËÀLFtn7›íQS.È�´P}~-­µ°XS°äÖb­‚yÝKÛI»rGÇfVYk¨ˆýR€¥Cudå^Ä5ªë’¯Z†Çëk�>‹sk”ÿDòL¿¸ÉˆÜ’pºuŸDÈH”–”Mâ4Iy�êžDËŒÎÏ"C* &òk‘ë†WÁPVFêw±öÕÌ ¯¬¤¾Âe4©ôúzº�ÿNR§§ùÀ›É ïÌ1Lm8i‹~ès8Pfäõ1¹Ròµ[&i°ÍðÛÍçü ü™@J‰y©Þìf6‰¤m?š‹C=t0I04H�©µ!�£ü2ÝYxZîb·‚ºß‡¯ åµÎ3®1£æ]ÔuF[Ýc‚1.ÎO)rÊ¢!L3ÆSbˆÏjÆJC–LßDYyElÔ�9—2b# Ø‹ú8+Ýt>÷câ8=AR¦3Å G—ñ^¦I§Ç˜ú” «›ôó¦/óËÓôOùóIIp™­†ˆ0?Yb§£”ºß‰¦[Fè�,8La—i'¢´† >´†<‹”1,ù,êCÝ4ñ ªÇrÑ¡™Ñ“:³œ5ŒT<æ‰Ã†W¤žÛ|ÆDþL(m†™aQz›Æó˜Û ý(ñ|MD—×|†•ši˜7«Ô°YQ )þ�aŒÔMJ±1&š—nÃîÌÙU¼áD}Š}N•Wæ0§Æ‹úÏ«±H¤:11ŽJó ã>‘0 To¹Õ`T?nšòÐ�ãï3?K¬û·Fènbž(š²Ðax”^ZgºRԦߪŸE¯_5üV§»ƒ……ÅêaÍi ‹Õ õ&})µ CÊòOíÅ'úCBŠÿrÏ=s]TCjO$GÔN½[óëRŸ¥>³z§�8Üu£}sM¾Se¶IÝ|Ú£8“e¸N¹JeOUªO´$¢ò?s<#+û±ªÿcû�šï "í EòdÇÍ­Ê2€_ñÈõÐ 1kò ?ä)¢°Ó#s·c‰“§¨LJP.CƒWÓqì¶Â¿üÚ˜J6q{’xŽ»†@ø*ÈÊ�:{ÍìJ7�´Sé Fþ Œ5Ö·UüÈ÷Wö_PC¥¢3F/ ƒÈ/’äʪ ¹h{¤ƒ®îU\ŸyÈW†Ò¤Wäú6YÆž§0Çct Y`È‹Îçå`âxŽ/#*&ÜŒ�¼E‰)A¥™_A;f+‹Ô2¬"‡¥c…œ´ß|ê•�JŸ{ón úLÍ­IuMÐyHsÌ8Ðwõ'ÌûæiUÄM´C �z¤þ›þy÷|üñÊ[ñÐÂQŒF(ݨO£BHªÕ¯Œ?ËÓ§æ�í¯x†¬„$ŒÍÒHüA�d¯†Ô/™çYȸ´ÌüƆ'·þ?ó�ýS]ô9_Ý,ò.j[`nÙ ìÓ<®+—‹ñ²rÜMÓƒ…]–|FŠ)œÏr°`ñþzí]¸ë�Ee IèéP�"åI~ÿª~KVøí'jÈ:Ö€[óãŽñѧx6°Šâ#âÅ(=ÿi²ªLšÈÉ¡üË-·*ÅycVÓÙ•“61ª S'ÖsÕi“¦¼Gi^¢{S÷)+ÊËŠr³BV>¯ºE/MóEC-\wû<\õχ±`8F‹ÏiÈj 3M^^ÖõLn•ÞJ÷'¤s¾/³ÜÊÌw¯)œš?ZÝòò z¶Â­……Å3Kn-ÖhnØ|~XHËË"#•Ÿ+ c½á~BE‘�ˆNˆ ¹t£Ï­©[å}¾¹ÑçꊱÞʲ›Û‡¸KÅå’|¹‘ú8Ê.6L¿—Á Âm/…ÛAƒgïngþúzÿÕ?â¬ßÝ‹÷}÷ïøä�ÿ†›" ÐM¥T—z¢ßi¢%BC3£ƒ&k§÷ôAÊšaSQ£äxÃoH £¦±áeÆS[ÑŒ¼Ç«¡MrÈûW¯jʵüÒ'f} Ï—uÈ!ÿ½LKÔæ„R}o5U‘!0„ºKba>±Š2™Þº†Éˆüä~j‰�M†´É_”ŒðZ�ÒB+jc„nç3î—ÏÞûƒ»ðî îÀg.| ï=÷r|ûÂ[±0v0Â<­3¯t—Ä-$$/Y¢| 9a#DqhóQ"0eúŸ¦£|jÌ_þ¡××§_c5cøÝ&Ý åÄ,Õb¼¤ëË�7V†þCL4KbÞ°Ñ'í˜×YR\‘ fóI®]Rn"]uw•#ZhA7ñߘwÊSÄ)iB¥dŒe¢=ÓvÜÄ Ï-hÆøâϯÃ{νŸúñ½xï7ÿ‰�^pþô@Œ…t9Jb­”ÉXÎ2Þ¬M¦ÄcäYÌù8ýبbš¹Lšèc~ÛÌ�—°<¿TéNŸÔÕÐÊÓZuÉö±À*M•›±¨¬6TÂ4O®:P«ŒÊsCSM~jå9=Q—]ľ,¢Ä–7ä~7·†Ï!áÍ—¦Ìš›&Tfê똓a*g )BéŒüƒ ”Ü*Z •�¿zõŒ±f¶¨Ð’2ƒi,ÍÀMËÊøæ_ðŽ3¯À·¯ÀƒÝ»á6l†[Ü-ðë;œ|ÖïpæÿÞ„›ÄHä˜õïµl©_© i›D1�ƃ٥ƱÌ-N)ÊTÎ9¹a§27ŸˆËÆ‘æüÊä X*†ÚŠÊ;EÌÿœL麡´jpϵ±ë9sQÚ:`Dçn¥µúµª�¬ú?–D”=L�„µ„Tà—ÍÁgzNc#à/w�âÞV ÷fÓp}{¾ú·¥xÓgÿ‚oÿáAÜ;ŸÄ" Ì'aY •w­Ñ$aˆ8’µŒ„ÌÄ�ÈDV4ƒ¯(Z>pPTLÄA ÀÉ©Ã)]‘’¹yú™h­!Ⱦ˜[Å5^–CB¦1ÓE³È2-Bf,èc騜)ÒVéÆ$ND‰^Àr4ý2 q× ƒ]6G~úb|ïšW·6ÆÝÛàØ?¿sŸûÉ�øÐ·oÃåFx8ò°ˆ^4½ˆu Ég¶™8yC%͘Z¥�)S|0CáhPš¶ óU3˜¡ƒ GN#óPKLbѾúù*7äË¿Sþt³ñ�7õ2O#-€ °è²æûUUSüW¿muóPy4}ñI4}ƒHY�¡E)4 ɯ‹êVÓf:k¦…f±¬V1àu⾸¿¸uøÖUl4\‹¿-ôñxÇ&x4Ø· •pæÏnÀ»Ù øÓ�‹ð@½ŠÅí ï�Ž‘P}ž.æ[À´PYÕ{DBÖÊ£ÓVƒòdo7d˜ó¸™#ÆÕMX&R†ÕÄ[g-,,ÖTÃ,,¦6¨ý˜„3¥B }Šç‚UG ƒ~/®«8î× ðÚóÿ…Ïþì,IvF£ú<,éDXÕ¬•³0êm‰�xk\ñ�Ÿ<ç2|ñ®Ám £IÝ&I‘R\'ŸŽLê8×oüå�†}­2ן •j ”ŠÙéÄ 2|ôü›qây·ãìË<âv‘äö!n{èbuP�_ÍŠ3c'®¬îÃLp-9caañ\Ã’[‹©3Ç,ý”[‡*2‘\ÑŽ�:ðËKÄÉŸ¾¿¾m)õ¦£I1/†ÕÑEbWÉŒz ¢Êt<‚>ÜG¥ø›û#|èÜŸákÿóC<ôØãˆd%ŠC4›#†Ô‹Ó˜ÅLÄFÛu êNQ&+%²RFÈÜ#™‹ûGb|éÿnÅÛ>þ\uOŠ!Wý`´üFÑ@Rê&É�§I?BucÅcÕ.ü“éö�›ZxÇç®ÃO.}˜�‡zfÌBP!δT©,‰9)[a�α®%_Þœ¡¨,ä{F´¨F)ðÍ|¸~©‚�F„Ënº:ûJüÏ•%<äoŽÇ܃٣Lóù(·‡° úËZðÂÂÊ0º‡ñ(7{8ý‚kð‰¯þ ÷=IJ÷ñ!L=—¹A ¯ŠþºXöV ²â3¾1}Ä"£W÷€*ëúÀ²e¸õžyøè×ÿ†Ïÿà6Ü>0Ë:6@Ã+Aý÷+2í6jhÕPʦ£ÌÆ[ÔѪvãÚeÀyW>€¿ø7Üðàƒ&=בŽ.cÉ”íVß Ô­C9V4Æ,,,ž[Xrk±@}cI0Sx}Rç3�+ nk@/õÒìr3¢y¨Öïƒ_‹4Ð~6€žt>¦{�rÿÄ¥I¡YFºû°4íÅ‚F€�(@Tù×tm,i[)>=“D&_Ç>'6ë E`š…N€Ø-òàºMt¦1zZ#èn5DN õ®9hV7FRÛ-2Œ¨¾�Á2tÆ�¡£Dª—vb(îÇPR�#‹G‘•Ëô_„VŸËóÁNJ=Ó5Aý(y¤ß:K/‰) c§DzµØƒº.¨Ì$%Ãi‰é‘0]ëfÀ‘Ii!� Z†Zý!ôµEo<Àr+KoqÖ�¬UAûHéGXÊÐ.•YùWéæÓ�€’O‡7å¡«Ûb:kX%£²Û&Ãfå¿iý•.ô2¹»ëƒè&1uÚ_™¢#l¸¹ånÍxÐFƒé]h§UÓ‡;ñÛh9h™Ù´“^©ÄüSbl�9)ËtÚÏgwæç,,,žSXrk1e±œLR»k­YO]2ŒRâÁ£BJÈ8Fã&^vÀf8ã”Wá­»vcßžeè¨/E5‘Õ2 •êXä "ës!PsàMtÅóqàöU|øýGà-'� ·Ç¬!ïû>Š`úf²Ši»<,ãöÖFˆ‹ 9!â°ÔÏÐd,4¥‘¾ã”P"É=éèýpÎÇÞŒƒvéÇ4o¥v� ¾YÒÍ4ª ¤ˆSƒ¨�¸Y'qÆÖCxóÝ8óø}qô«wD”POdM÷MÃÀu˜ZæáúÇ$¸9½]O<³v‚ Ê ŠØŠàæÉ›�ÌG,+FÛ1vÛw|ê}ãäƒ;±]ð8f»1ª®¦cKª³Q­„°Â2ë³v¡Æ4ÞŒiµ×]8îˆ}qòñ£wvK¢˜$L=ºIÌHÜÔ˜Ó1ñè© õdO3–½Ô‡ÏŠnfQÐ@½Z•DµŠéL§¼k?œ~Ü pÐK±qú(Ê Ku¥IGZÙ0Fë�¡ÁÆÅh©†v¹Û,S½]WŒ£Þ Ÿ~Ïk°×Îc)ó+,÷ -÷ò©�y–¯F³1�«QQô¢ŸÅ ok–ÜZL)4h%]NÍ‹oò’QB)•?IÚ(<|႟à{ø;ª•Ç¿îøÜ½Çø<Ì©4ÑŒ‡1BòÕ–×C’PBc/êIpÖ[vÄçÞ¼9vÙº7Þׯwv)Y¸ m’ c‘ãÃôi=ÿ¼ž Q¬µÓº+\­’5ˆRªY~�fâb~ÛÇW~~)~똻i o{ÓNøÆ)»à¨m=lÔ|µ‘GQYŒ¾Jõ}/Òj*Î^µ£‹¯¿c[|êðí°Í®ûç½øßß\ 3OIlÔÔ÷±ç*,.3mÌzkÎóT.9AÈ·ÆõZŒ<Ï b›'-ÿ§ Úí6J•~|áåøéŸî¢o>hÎyÿÁ8öÅÛcÃ*o"QdY¨m€FçLD�6f;1¶l?ŽÓÞ°=N;v/ì¿ãt<¶0Æ—¾snyèqÔÙѧyÍ2áÑ­Y�Îîi—ñ‹;2|ð{7àë?ˆ¥�‡î>ç¿g_|æ�n¼tÚtÌCyh[ÔR»K ß?q¼ÿ Ntð�ñ�ù_»—ñ=1ÔêÄ@â¡T øPÖøl”Ï%AÆb6ä†yNËÖ±Jna1aÉ­ÅzuGȨ‘iØÈ€�2V0ˆ™¸mIgýò|âÿi¬`ÛõUð‘7ìŽo³=>¸WÎ=b|ã¤�qÌK6E­œá‚?.À{¾r~ð×Q d½h¸]¤^ó4-˜§Á%¢d¹mF†\Cl×A¥§i–PÛ™Û?ÐâƒèõRt¸ ¢¨ ·ÞïáŒïÝ�O}÷¯¸{ ÆÎ[ÎÅ™'½ø¯½ñ¢­B|™ivÎÛ÷ÀK·›Ž‡�é{NþÉÃøõƒ–Í|âJ¯éΡ©ª‚Ž ¢0BªÎÑ&íDnÕg´HÉu cyn,ùEîë¿X!*%­$Çrè•1„Ü88 ŸþÝÞóµ+qímK°M·�½b+|ã­[ã#÷âôöÀ—OØ o}Ù¶¦<ÿêŠù8ñŒ ñ‹¿Ý‰Çâ% –!Öl |‚Ÿ­’U¡hÉŽ© Çi²Á0€”ñ�¡Æ¥¦‘Ó”]ê- oc,t¶ÁÄû¾| ~ré<�Çâûo‹o¾ó…øØÛá¸—ÎÆ7NÜŸ|ý6س?À¼û†qÆ7ÿŠO~ço¸}Y'–„]¨7ct³z‡Mu64ó-Ÿè¨™¢·ÊÔoHXX¬ °äÖb=€1 *’6ò#d>¡£IÕ�V�§ aÚ…G©¼þ:/‘§ÿ§ÿøF<òØRlØ[Æ;_»Üs#„$#¿¹cÞûÝ«ñÍKÿ…yq'êåiŒËHƒn”Ë�éÇ›$ù «Ö£È{ÜRL·„u‹f¨[E¾oÜ �Q(™>†•¨…n/A£b¦ãw÷UðÎ îÂ7ÿþ0î^b»-zðù“ÆN•áÅ~qù=øïo\Š¿ÞÝÆÒV/R§IC–KŸo¡ú¿Wãâ›nŨ—â’Žÿè_xß÷âÒy]î™�¨´±7 §ÔAR«Y23%!I‘]™–éhå3ë´ä€úúfˆ Q—™ýa´ÎFBVGæÖ1J"?صnnl�3ÿ¼Ÿýùexè‘ùèàwÞ»üÖ_pÎÅ÷á�¸„zÜ@ÐD�i¤y‡[‰Öég¶ë&3€û¢e:Ò êÙ(j¨½u+Ûå ‰÷y Ñl# #T²´*Ûp`‘·þtO‚�÷ÏøÉ¥7¢å8˜7áÓ?½üÕ=øíK:{±ÈïE£´ Ù&馷ùh}­3 0BÂÆÈ„a˜BÈH,�^D©g–ÈŽYÖ·1½3Ag4„ *KP F/D³”aaÇt\¸ úåcø¿|í6v-üé’ñžó®ÃwîèÄÝ�{` 6#b]ýhhᆴ�NõHH†Üjޕ̬K×Á4ïdÉͿژŸê‰na±Ã’[‹)é˜õ�&\7ü’DAý9µ*Ô¨,ºµ¢ˆJ‹T Úl! =4°îmLÇ= CŒú.–ñÖ¿ßñI¬Ö‡o!jÇhÅe$$gíæ `bV [ ”eÚ�>çWÓ�¥¥¥€Í™1pw­Ò$ç ª…ËÐ2Ùz32ó÷j„)ȧZÊü�Ä^S u Ó¶>/%�êÄcCRñùüªÿ˜×ÀmK»Ñpgîê’t‘»a¤< ‡¤:ƒ¤€ÏIékØtOPêéS/¢Ê2’³�ç³Ò©œš>¬ãdm…Bfï`ªc…éAlN2!ÆR3Cð°Ê î+–Q‡ƒñZÚ2ñ]Ü pßü3@l0+á²»êXR˜¾>JQ~sˆ-²a–5M(±±¡Éû·J-¢[2Zy*˜<û?vjŠ€M¢,4KK5ÆÊýˆƒ¨3Ý’ÔA{hÕ ŠV»�4ÈØ�`-mTñðü =ýF*~ü�{ðp»õ–Ïlâ B‹3D£(«Ïs3DµÚÅod™‡ÃuÚÌ×”[Í¡M13&L VÍ»gLÆò  ‹5� j¡…ÅTƒ,,Ræ²ÿ Å53÷´IHZ$¥ÒJ7 pÙ|26îH|K¼n>4ò0õHf=*J·Ì{ËôB}&}8åNe�tŒ&(Ã)‘XÐy£ ¦mN$ÖM…V«h5ê$H™YUCfFPFÝ­ñ˜q%i÷ËL‡¸‰È¬ÕǴЧaõ@,ÓM/ÚQ i¬î!ü´�R<Œ’\Ø4¤Ï‰cx•Êò2i6®1¢œ[7!«å�ÕA Gæ�9LS–¬ˆÌsép^¹ƒ„ŒñÏX¦¼ U^ë`Úuð†À¤QÀD0S{±Õàf$_A/¼jË[…OaÄ×¥"²¦—2“O‹pèÞ©•-§@NOQ±ÉX?)ŸLøºZ¬ß£ ëgµNÒB5e)fCU]ØDÀ"–åÅþ46„}i•„�«x”�¶Aµ‘übcÖñÔMGs$(GMÇ�<MqU8$OCp…§qgaaño£xßZXLYHÑ-·§�\92Èp«A9:îîëCD&Öª©ß…ë´PNëèÌ棣Ob‘�×½ND~n­ÌYƒ<óÑJ]4!‰KH(â+–ažMf>ašÙÖ5�œ¥1:jUªpÍTsÞ:$ Œ+I¾¨D!MH,´ˆ…È~Fâ/‹8áf<6ánúV…'¨5–¢³µY¦“YæÂ/!Sß�B雩ÀÔ€ÈÁX× 033ï ñ¡¨³šK‘¦©r:H¶ØÀ"QrKf‘22þ±eƒÀëcËúê!ཕ$C9‰H¼2ãGˆ´ŒU’‘éí$lR°Œéû€¦ÿ‚f0Ä+Ë”†½+ë¸J¤'“åFÖÔˆi3]ýj7²RR6 ¦—šžÓ@êF¦L×yNK÷Ò5ýec¢ÎÝIœ¡2=Ùp�Ù¸滢EÿD¥•Ÿ"´y‹î®‹uÜÂbêÁ’[‹õFÁ‹p‰@�hÀMY‡Í!´F–ÂÓù$hZ1+ D¦Ôó“Ä‹¡Jå¨AT *ˆH(u/0VÅ&|¿ /λ%¨/ª eVˆÊíe9Á¡[óàu¢cžï!bºyžƒÍ0ÅÖ@r'n0ª)Ém›é×&!IÂØ0 ¢'Åeº1Þ¼Ï :Ñ.õ¢é÷0�|6Ú(·£'F‹ ÏÕ`â#$#ZžÖ4 ´ÓZTEé¸NBÅ„O0SYnIä5[‡ÆÒéKÁ𒨤-6¢ZtÈòç©!ÕM’«Î2¾i LSMg§´‘奪™ºN}w5˜×A)–­<¦À¨ÆœyêÔF>m\`ÒÙWy5ß x†'â6ë%Ë[’¬úâzH5„¬§±§î!yšU˜\%MG§n!>Ë·ús¤%8q]¦:·*÷¥±ÌT¹ÌEàÍ†ØæGÏ-TM-,¦8òbnúÃq�tÉvÄK_€­§yèÁk¿JÖ©5,#Yù¹Ÿ÷uW#€�Š4ÁfÓ;ñÂmf¡Æ´ª… ™þl@¸Ô½NŒêk�› Ÿ7Î"7í�FHnD,£¡ßA?T˜ÎÕáñú±çÖ³˜wÌQ“—*—"ÕÊcî+s-,,Ö ¬«ZÃb=‚QÓRÒ†ýäû«;�H6YÌàæ}eeyíöRyàŽøôÛ÷ÅQûoŽ ¢ÑݸŸd¬øZG^KÃ#äªêFëóžšÓ&©0Jr&–àÀ-køÜ±ûãݯÝ›v•Ñã9f€RÞD’¡pjz°XÖ:£Çi@£ ×,ŠTZ>øªØNÆe™T•äAè.'Æ)N}íîøÔ‘ûà¥[wbf¼]Y%'â …D–ä@k�5y«§iV³T�2µ¥¨”ÕÍc Úe6>ûîâe{m„Þæ‡Ò&¨‘XøÆr+‹¦±Æ‘‹D(åÖ5¨y£î E%×P!¦½º ”˜F嬉™dIG¼p |î�/Â÷™�M*ËÐ=‚rø8 Ô2d$ºš·U3¨ŽÄ!²’O«U±ê˜ÏÃÌÑ{ð¢�œy¾xÏöÆ&}]¼–[-E¬Uæ 1ÎÏŒÁØÅó¼Í‹Är¬éòød`{‰PC°°„êÿ“‡&��\©<«o7L_ps_Êø«�™1õél»9]øÌ1/ćß›g�aŽÏFi2 Ïsz5Ù¼Y&ÙÐh £*∭Z¢;ZŒÍÝ…x×+¶ÇiÇì�—í¶ f°¸VYÔ)A¹*»¼êoH®……Ås[-Ö9¬XÆrò�’’×'q3ÌXo[èsì4³†w¾x+œñöCðâ­jènχ×&7ÕˆÏL#60Dî’x´Çìt!vì�pÂ+wçŽ9‡’àmD’ÒMÿª ž‹�û,,ˆ\èùϵõ6Íä!e-«˜¦ëÊçn� aF6Šý7)áŒã^€·½d[lÞÑFFHb,m´1êzáÃG5åZ•Á»±yuöšÕÄéoß ;|3l^.£—��’I¦³éñYz)¹êBB#‚¨=‘Ûuíe¥°Ç"·Œ›öó“)Ë^—�Ÿ i²±@‚KòºS_ïyÍ^8ñ•»`�96-/BOø(zƒ’pÄä›fûpœ5¿�¾x!véÁû_³¾pâ~Øknfølùl9±õùì•-·)|R<Çåóé‚''«¸S ¥WB1}óæ,ãž„˜^v±ëç[÷îÇ×N9mœbëà1ø÷£ƒ \ÒZso¹³j,ÝQ£·°Y0‚7ïÙ‹ N{5Þ~ðæ,¿@©°¸>ýU:ëqf–#|ôs�~–ÜZ¬XN-Œ²7}9¥ü*±,Dobš8tûéøøQ/Âû^µ¶"Y›Yj#Ш3ÞÒU¡Ä °©¿G½h#œsÒÁxõ[cã’æÑA%EEs¥f—×*=wųs�¼âh]@~C˜$"ëiŒRƆ‰üÜÀÅ‘ûmŽsNy^±ûF$¸u3øLÓQ ð×KP aŸ™-|è•Ûâ¬cöÆË7ïÅ\¦÷lgb&»­>Ý«o©ž¢äËŸ'ˆìæ=*×E¬”ûŒÒò#’wÑNO}�Ù`èuY݇î±)>Â!8åÏÃ]Ãèh<‚i�yŸãΪ¿¹³’8bŸ�qúq/Å1m�M* ¦emô1*ƒJ1Y‹×Ÿ×»ÒG±UÃR�ÍH¡†¬ëWàÄl øMLC„íû|œ~ì~øì[Ÿ�×îÐ�ž‘Çá·GMÿç…l”i6�N6<ö™Ý‰/½c'|ôµ[c›.ÝLךæ Ó­:ëÉ3óS¥T)®m.:²°°x®aÉ­Åz(*~n¥€¤ô§/Ð4KúT¡·ä’˜e˜]ñðν{ðµöÀËv˜�Yµ'1±—î1Ÿ;áex÷«vÀ]eÌõTHŒß�[RßÐaêQ…æS„åÕK–:‘}Ž.Tະ2U™[W„Áë@êw¥nø¥*~‚9›w•ð�×m�3þkO¼E?fz)úÉ8æv”pôA;âìw½Gì²¶ "ÚJl4”+š­U”ó’²9 ù¨sõ›Ô[û”ü꺆<ßEÎÇbgʆ™VNS©i& Ó&JQuRL÷\lT pø^â+ï} ÁöèKëè¥od ^¼Ãü¿·Œ�¶¶™V†×h²Ü*�"$ú¯3K………ÅsKn-Öh8T‹Ò&ÁÐò"Ç% È|¸®FY“\%mtQ‘Íj`÷N§¶7^»ßðãft$8þ°`»úHöúéW>ŽÝ!¡õÑLÔ¡[BJÁÈ!R&b­)™¤ ÇN¯3  ×`±¬Å=-†`Dƒqœ š™âèhþÌpÌGðê-j8ãð=°ÏœnÌàÕ7¼`+¼õ¥»b‹J„js‰Æ¨“#T0±aAr' XFb7Ö‘Ã$ONl Xfˆ…HúFn^3rŸÄ'à%ˆ®«Ogã¯Ù4­šæWvxÞ�êèÉÚèÏBlUópâk÷ÂÛ^{0‚¨��çLÇ'Ž:ÍõQXˆª—¡Vá=*[êΡUöHêŠhfŽ[6Ü<3%ØÔ†x•Ô(m±È°¤ºym�\C­Ôô{g²°¬Å¨U«hÓÝÆl¸»ï¼ïÛ³ñ° =þ(N:üE8îEb3&X�º°ˆGÜ×@>Õk'¨™y®†›Lõ¼”ªsBÞI],¹µ°X`É­ÅZõïTZY�ÔWQݼD}µôe†væ�MZOÅ•:$YZK^”!@‰nœ$¥ó¨äX´©yÌô_T|NBßy¼B´ é‰mJ÷ ªãUÑRçÒ „‡é�Cw1:ü2fUʘYö1½³‚¬¥áRƦHR–[á ©¬´*ÃÛä³bn#c!–äýVEo ÅåµÌXÓ4ÄLäÇØÙÌ|²ÍÕÉø†Ì„èé!•*‘ŠÕFR»Rö®ú 3¾%ú[KGxÜ4ilºÑ­ì\!‰@Èt5ŸÇê;(ÉCEí3-—œ�qaš1z&íeµ©ŠCYZ]TI:HÊúHd;HvK|vOàò˜žy.JA•>2Ÿx�}ÐTLj«�)< *Ó.OW¥Ÿ¶*à“§ÃNï4ƒB“;‘ÕдZ1ÓS73ßÍvòI·Ú�=Ô̓̕»:ù†Eå\ƒ$ýóLe9/÷*ãyzäu!ßgÍŒeSö5½˜N‹Êr\býJPå�š+OBÕ3­î¥ éŸÊ¬b«z•e,Ëf^^Þ?I—2#Ó/–=3†æïeyU©W}ÖóŒ3Æ-fcÊÐFsN ¾ ø|•Ó©Å„MaUÝR¿Y-Å«’Æs,T•ëlÐÅ´®2)|“nlPèK„ÓjcnϱÕx¼iÅeクµ 5\ÛL?•ÁŸ©Á¥1In­[ ¾Ð‰†…×ón5 Ë«¢$?˜ËjêjŠ6õ#WùÈ-ê̲4ol[XX<óP³°X Ò¢â(ʨ9cs U*šà&mÄdi j¯ÚIE!êÐÆ•Å2îFÕ_Ô s J…-®©Ï²9Dø\3_JOŸ0�5� UóŒzt¯§»¾Ï‹�ð¥ìxÜßÕO2V’Ê'Ñ�×ô£ÚE¥«O¿ôÓ˧ÈR'QMUÓ"Üæ“ÈkJ±\�+. µ Ÿ ט}7�P"¹‘&.‰8�H+/ûÓC*RwäˆdÍAÍJÐæÒT£A“>^‰ŠŸlGJ^$"Õ|Ÿ¼nè4Ãf’ObòC‘á©ðÇÄѬ¤ÏKUŠ&JóI¼D #À“L¥R—i8”Æzg¤%ž:è>0i©tÒ…Ô LÚkP™Y|Àœ/Ê‚Ãø�8(üJ YyÃ0Ì'æg<�r Žßh“–ÇŒAHQúM>éVôßgyÓ2¯Š{D‚“pÁióRjÈYÈÐæ´Wù!òC‚«t0y¯tã½å¿D1ÌãÎ+lLe¥š)‹J+¥¹JoÕÐÇDòJ"³Užc]¡¿J'3#= ïe:ŽuE0¥‚þ1_äL6/™%ãFK$‡LÏIm–ÔÑã4˜Ý©väaU:«œ›�Rt§RRÔ)C&—==èƒ!xòŽšQžYô„í&’q6ºØ¸ Y'‡å–[Ó†ñ‰lð–”ç”Æêø#¨©Y /Õá|þà(ÕRÔøŽ˜æÅÆŸD�Ø †€õ¬Êû5É—þ‚ž²¦RfºY¦»0“~úL²¬Ìüêè4õ[å\eÓ4*Õw¥cžoÊCåe^וªZMŽå�nbÓ¢`9Q|GGFÖ‘ ‚˜ùª{ô£3 ‹5ÕQ ‹µFQ ¹ºÔ‘ör’Eex2"m×Qv†Ñ_Z†Î …Z@E4¹užQDiƒJ»…8­#I‘d#$m´²�м…I_‹£Nµ7D¯—Q¹.#!F@%‹¤EeßâƒH”I›Çsœèx…ä×E~ZlÜè“»Çr iÙºî·ðÛ È8¬¥gãD“ï3EÖk�·j0T}Q`^Ž2¯Ù˜adÕÂb8[(©±¢r 0-0M ñµàEé0m}–Ÿ�•0ži¢ôS“Ô éã®t•e0á6IG˜/#,K,÷|nJIx-ÎFY®sIT2æ݇¼Ö6Ò °NðZæµHø2çáCl=ÌFó•UÝKDhY/Õÿ7iå…É’>GbÎäç|}ÿgãD RQŠ+rºÕxóv„áÓל&Éï0…e‘e²ÅZ*nËË¢Öá±ÜBe·-6 ^�å;`9 ÕM¥ÿ(ËJ×à#‡m†~^ëàmÆ*ô´Ð'^YÂ*=K¢OÌ>)€‡Å<úÙU8û××a¸¶ 6®5ðƒw�y¸Ò8C…„:‘Qp óE•~¨ E“äX„CñU°%úD.Õ¬±Æ-½ÒFË’=ƒÎÉ*¨´“åk20–0¢jžãàúG�Ÿ#5RTóñ¥£÷Ä{ÎFEÄÏ«’œåaýO WãªÓÎÉ*{1ËàG~òO<šM7Kñİ×LæÉw[›·”x¯Ž#•ÅUüXJ¥¼l¤,Ʋ›ŸZމnW~$|F&J¨A£øòŒ9Î÷s)ò®Ø/�pt0“çÿînüöª»0xËÎÓpæ1/0ÖÊŒ‰^aàô•CÞ¤‡,éÌg•6AVÓ ‚øèilz°¾„æÙf¦BÊ›MY’Ò0èÄI ŸøÁõ¸ò¾Aãì„78 =$Ä%Öñº+Û­®äõÏX¡uµòÿyJi¯ôÍïÈã®®"EÝÎÓdeänõ?¯y}xjȵGÏX�Pg¢K:÷•N¿ý'pÖ/ïÀhÔ�Íú[8ÿí[a÷~,?Ê+‹5 éð‹.º½½½8à€̱ÃSªË*k”kÎ9מö ´Ü^sþ÷±ÃaG°`R“dM–5 ‚¬˜/òÍ‹0RÛ˜$%Å,”äTî�¨¢R�Dùgt}hÎc/‚ì"bšj?÷QÌ4*Ü4ÌyIÞOÚE‹  ªS\Õ—Xa2)7F2r÷Å–çÄz‹KO…c¨ÝF%AW©§: Wà—ʨ=ˆož|ݾ‡ä·�8óH¸ôyý?{ƒ?¹½~aŒãϽ %3øNð0½#Dµþ8ª>WÌO­”¥²WMë,O*o+ânúÓjÏœRøòr%(µMù2gUó­ˆzžÊ+’JZ¢DÆõi\i­Æ�«3yþk›wƒÐ?žcz¨Ž)<¦Gæ•�€»¥ØHÈÊÓ˜]ŽÝ9À§ÛÎt‘/~ʧqßt\1ùÅ2FnEüô5e2Pø#þ÷³|.h5�BÕ†GuAÖ&ËÚ£q gýâ&\xG a½~“ÒBÒd|Þšú»u\Vòý™U×Õ_ÕcÅY]W>ؤ€It S–Š_i 4Îó'�„ÉY•ÇîÔ'ÅÑ 8c ‹: ô®bÙoøú«�°Ni•ÚFxh¸ §Ô‰­ªKñ­ãwÆ$·•I×q‹ÿ–ÜZrk1,¹]óP!Ì•¥XQR�j@‘T}@åê& d~ּ㬟áîæt û³Pö©hÛuD­&ʵN’9Þ£¾Ÿ„ÈkYŸé³zðE$½"ü!í¥çˆ¨ >ã§¼¢3¯#+ÕÇü—2×=|1­§~«ôÛÏÚFÁª?_Af ËY¾É�ŠkRè²25­ÂEÒ“`TðÕéh ×±qeŸ;rw¼r»tªo!ã[(ݧŸ""©­ÈïÑs•vurž:O=ÎíqŸø mUÑ®NCìw¢Ùfü}Ÿ¤6FµZF›äQúÚCÆBÏF…OÒ#‹›?öœDéÈðÅl0H…+tKD¦£nZrWóáºI¾J›Ë<qS^x�?Z ƒt™i´’÷òKG:�ï›~·ºHÔÉp0h§šŠ,ÅŒd>.øè«°ë õ n˜ð¸ÌGÇäÙ¿�‰È-ŸŒŒÚ;¿øüs€¤ÐíaY`#J$†q¬3]Õc¨ó..ŒFåÓ!�–‰‹R£øn 1QmÆÜ䉡�N¯–_Óä_YV3¤°œÔͳd]{ÊÉSOݼ +-t,kbá½<‹Ù éèèdÞ‡tS"9kâc¯˜�÷ŸÁ÷ž,ú¼'ŽÌ…Vd1·Üê9ô‹ÿ&KnUrDnÿ{×pGQuÏÛ÷öµ¯¦BBG5Dz‘& "H‘^EAE)"¢‚€‚t¤ "¨ÊO¯é-=_y}wßÎÝ·É—5 ˜6'™o÷m™�¹;3÷ÌÝ;3"¤*K²Û×Ṡâ”3ë]™l¼ìpÙý/ãì›ÞB=¿¯­ Ab«jjõ0–}ÙQNŒÜ²¬‰ôÊ«úwnãw¯¨c™3Í,¨C@)¥J̾æÃmÉžç%�¸óAI 輩ýO¤fõ‚ÿ­´Æ‡ˆÖ9þSý�œjìà5™u®sa@Ò¡™,Šj…0ntˆóÞ£³|g^ÁîsøxáÈ-ëƒ#·sÑÛ�*„²=I©ÄŠ�ò6KkŠä!B– ¼N\k„¿¾ÞÀî}oM*›rÖìµ)�¼§Â«7Yyy�””–4ÉRÄŠOíXc0Ò¬xIìúË5ø…n¼1¥avJ‘è®”œHo|Ÿ ¸’fMÇÖ¯Þ�¶TƒüC:4x‹l‡×©*E$â"Q¨Tñ�Å!Îc-L±Ñé4Y`žä�ªéµ4¨êó�Æ¡›-�•:cb˜Êt𺘨ÿ'Èâ¦øM› | Ô¶èN™-^�y½ýÑ7ñÇûŸÀô0�~ذÛÅv­[®”Å#¥.Yú&ìÉ#ä;ñQI·cRÍÇäªÏÜ“ d²fÉ (7,D’äS©ë}Š8x$%iÆÛ(OÇ'F0_•ihË“ò´.‘KŠÈ¯ò¡¤è—ÉMùâVƒ û(‘¿B¹ñÆl¶ÃÚ Øe³ÕðùM‡ Û QLó|YÊ-=+%XÞž�üæ®§ðÄ›=ÌË;Mæ±–Š-×’§¼fňå+Ê­ý8o!߉f ðüË`]CðÒ»eô£�ׯˆß¡w¢ CrNïG3`tgŒ(�„=Fô¤Üê…¶^+R‡Í(_+ˆ :§"I_üë?CäVÝÁ¸NªŽ³›ãYoUÇÕeg€ík/» o°qÝ]/ã‰ç¦¡\.![Ȣ̴êK2yë1+–çŒêЧAcÌ;‰m��¹æ?¾•¹»¶Ån¼=½†Þ �J@êiPšÞ�:Ì�ÊŠÞe�bY÷yŸ:böB—î‘÷Ô­aÕo^Ç[’òŠ$«œ2è«�æ¹®2}!å)¿l?¨±“�ã~k,¿¾¸Å'°íÊíhkö’kwÇÏvøXáÈ­#·ó€#·?T¥n40Jsªê·æþÔ´P)‘Û dZ¶Ò,b*ßAP§ªdh°øŠÇV!)´XÕJ±IeÈ.&;NNŸ§ä)Âfòà«Óª¸ô†Ç1qj€ž €4ŽùÊBË+5ÛA#-‹PŽ…!„W�Ža~»l¾vÙd†�T% ÞÚ«R$ÜW“d¥CýTˆ̈TeN„‚i«D)ø9c:ó™*ï‘0åÚÈkÛyÓü’ÛX†ø›ªŠi§j§BŽø—ÏÌ0“Š~j‰ÊÞÖ¼�1{oNH†ŠOrM|lu­< §S2z¦—ßñ ¦Txe®ÝêFL¨H*¨Ð³”Ÿ×”QyÐ< 5tû5öùOa�esè�<˜p{ ÿ‹3‰µQÏ6?lþ—k�›Y€÷èZ)§bÖÇÐÎÚIB<žÏùÌ5ï‘Í[³;|ô`)­÷¢æ²Y:¦TC”Hsdgš9B/YR’î�Ïäa÷Éòm§gA$Te²Æ‹fTBüèšçñè;ïßój¢UGåÊØnì*ØëÓÃ1Tä“eS²R=RPÙ³ÚR`I<’·ê‹ê€:3MÉ•éÈ“l/Õ݆Á9¯5ÓHœö8/B|RÇâ_Iþþ3ôL¹uä™öLTåžüãÛÍâÊ>£¹yi–SÖ{Í‚"òÚ[bç¬ÆNR6¾ßÚaeŒ[�WýNê¹Ò!{›6Œû’¿Ê€¦ßê'ó½úÎ×p÷c¯¡§ÙƲij$¶³¾ÊèÅðº¦:F$ÊróÐàÏ5VX §}qy çËÓ%*w’c¼×qAÇ´¯ ]åy½Eªºè³`-¨®6 +¦Qlô³Æš•eG×ràðq‘[GnæGn?~¨J¹•‡Ðü– )*†LM£ÒåPÀ´0guµ�jLŸ9Í¥€¤´E'âÏêRvR€"ˆ"UN¥.¥DM*_IJT¶9<õ^/N¿ì~…C·…¥ÕPJÛñÿ,¨ZÍuHéj6úPJwšå)Kí¬)¹ª YC=ø� ÚS*¼,ªay_Ÿ,磒ðôHåK?¥ØEá£Z¿Mý‘à–#§|ÑÎøÌ_l�ÕÕ·b ¦šgCñi�ž¦Äϱq”\Ë^;¦¥ò¸þ±I8ûÚ èKBè·™µZ34ha?¨› EÎ%·T“ä6êCW0?8dlµê )·å–¤"iŠÈu ñ±dOÄ­Jò#‰x6Š_´&¥ø™�€­º,ñ‰ÐÅÝç¯[ðÁ òÕˆ(“І™¼Íz¡ÏòZD@äUdÝ–€Uä?Yü%fu–d L\]ôôA�¹Ñ¼3­„c.}›>LÉŸêé ¤�œË4ûм�Ý7[Góyy¾½y­ÌE:È’�ÒA²¥ÅJXÖd�Õe²VÖ›Ð%JNÚERWdú²êºð~±I=+~;ÉßÙ¸?¿P ,3äQµÙ$”Öº×I9Äñç䯚 ¬¼h;YÿÕ L©î±üÔ™•ÎtËj«’ —ÉEs\Ë‚+!‘[ówmÖŒÜVyo/ã<ï†gð»{_D¹8’Ï”›€Þ�.Ÿ¥@„õ2X]�×€J?Æ­¹,~¶ß²­K”ÈÖKˆó¯ ”þf¢¨ÆtÈå†eÓˆ+sQ¦|srbº˜Ç;!¯Í¤åÂòa¤éðAàÈ-ËáFn—€,:,z�ÒPÕR…e•Ì娫ȄUts·�Ì%›ö‘£ÒÊR‰ÈR'[$j�ªh£b+ò·|\5¿¤æiÕüúتA]ž/P jÆ›{“ =“ÌK† ™î@#S@ͧªOgPgÃ`$EÖ[¶𝔠Ž1‘0™)*e�„GIl N)-¦ÜæÕgá�j]“¸7˜~*¶Ù›æÎÔT\¹ ‡$½‚.ïȲÁeÚ4¿æäšo$ÄPéÑŽibœ\Q�dË÷Q̳SÀã²~j0™Ò’Iiú%�„OöIê™·8è·”qLÚrÌ—dœ“U›qD”…MįØl'5 Š9‹:å­OÎ5’—ª×�Fv<Ê7“Ñ;àûchkê󯬆¼ƒ!ÇÄ+XŒø7ùnDVùÞ˜YÀ$ãlJï®�OêAÞ+£-Ëëy�ò*+³(Åǽ¡2‰¢ŸÍ[º:(•¡´È!åUð4ÿ-ß«òAÁÉC2”<Ó¶ ™Næ�ûy–+›§–éÍ3ž�¿ë,cµ¹B=ÃÀ­¾h« Ž_S–}n3¬$)v&äÛ™ç»a7Ãæ"Vº´Þ—#™ô*¶z–#-�’%ÙK‘¤(˜M™dÊXYšŠ’Š+Ÿ&‰Îj  OQAÊçT DÌBå(‹MlÒoÆ›¦Í´¡”‚™Tšä¨Då’’þ ^¯‘,†|†\1|ô“,ƪ~AYE²XÇ¢“5(�ú©\û¨2Ÿ¶ ƒ•zò$îIÐJP Zb´I¢¯ é#)_MKŸ%µH5s|eLrWàò¡ä[@ºž¡¸r$•¼ÆLÇ$-²¿Á >¸^©’a�p�HD^Dì<Ì#4ìËÊXÎt£'Ý�é.ô‘0×ÒZ¶V–[YôD2Ht2²J3Ó”ÅǾ;Ù°Œ\½Çü¦ÛI¼Ú3êD‰„Éj¨rÀ÷HYF”­Ê„䊴Èe*K$å+«-QyuâbYêoüV[°Bï~ Ø=R=Ê0ÁßV¿uŒeV¬ª©^²>j9•Ë_Fé,³Î1Oi–ù‚§ÕÑིHÉÚl_pXÿôÅÀfvPÙ Œ5¯ìÌ0‡~¯ unå‹.—•Õø›‘–íeç­^&DÈN€:¯ 1Ö¢žwò=êÚs¿�p³:.~uD:PÍC5Ëàa‡¤‹iRýcǡȶE_ؾ4¢&‰3ëààð±@-‰ƒÃB6û,�T`"T¼óÎ=HXR:F"¨U®òT¶ò•˜�¬2¦Š=ªa»Ž$�¢:iƒ®U4HT×x_�A¿ úp«¾‰²§ÅâU»4B^ªˆ4Ë…z¨ qpXà0å¥ �Få¦ ‚ å—y0¥,Ë­“®¡zI¦Ôâ©¢¤t´¼mÊf$ T*—¥ò I𨦲¶6¡åD{y¾FÅR32,ÝÖ@½¢UÊúøƒ!¤‚#AÈ�œ¦ågm®IÙI…çdA&‰&w¶¸ä‚@ºÁ­>ãózé“«•¸ò|¶,ŠúQùJ‰·1è³¼”zBŠLù‰ŠÔ3¯âÙó]9y­:#uü? Ä¿>9ÇÊVG”bÑÖ8åñœ€ùó3²ö’Ü3Í^Ø"}”YYÄ ß…ˆ� �/ñ˜V ãÌHˆæW>¹"""$Š£Æ­ŽõS¾Ÿ½Õ ú‚5Æ[•p“ï„‚Ô¬y ÊbgÄ'5ÑR¬šXð¢:ãaZH‡Mfö�!Íêþ�†0ˆNPbÌcLæ•Ë�ÉûÒ»âsI´ÔqÐû‹ßa,k=^. úD­Ù5ÌÚkåƒD—òÕ 7YmUTm�3Æ,Ÿeå[Ó§Y°Ïà ­}YÄmŸešûÙL€�2×½UÊ'd|�âT†dÕ—x’^vÔôÆS<®e‚å¿ ŸïL–~Ö#ù€Šr+ͪC²ì'òÔžþ©,J¢I0Ìñã?Cq¨üy&'ÕevQø, f³yt•€D†¼N¿SêÀ L§ê¹ä¥ Á  þNeY®;ôµ¡†œÏö@–ZJDä>Ê´£¨#áÇÏ ¬rõéV%_Í^ 2ž6WufÙ¦\5�W“uŽå’ hFÕ³˜sËîˬÜ'(¦5›‚¾&õ2¬|·ÊgÔU0+²ò•!qgùd.­mS>>z¨½qpX!{¢” Õ0µ�Šüô4HKÓiHO�¤£BR 2$yÔRˆ"jÀ;Œá]–þ© }Œ§³X@‰@º—$— Ï>§ë?ã‘М¸¨Q)’‰x$ÎZÖ¶YdVEq¼ Éç1M•¦–ÖÌ`f…ŠÓ/2-$$à©”f Ñ`Ì "§ýéNô{({”)#ÙnEjd‘²ÁZ"$ =õe•¤•o¥ºð^zÞðÚñOWòÝsÔÙZ”‚£r×ü¶jTDìÌß””@4$¿^ÚG¾s(zùÌ)à Æ;•b­�|ÔÓ”YYó�2b‘· J2RF¶Ñƒb4“ÄPŸ‰E/HšÙˆ�¡F?e +¶æ&ÁL37$;²O Kµ@Ù¤ò”¥,„ê1)Øç‡ä÷À}ʇ�€¼Ê�õòP_¾È8Ú0ÃoÇtÜi YÔ›(’tùÍ>4H¨å’"oé”>±³nØ;V˜+õèS~<“ÿ³¼¨+¦Ž¤¶¢Ýú¥Ábò¾.•Y^¼&jõe–¡j6�wyÍtÖÕÆ5“å¬H?4ÅòTŸÌúc‘Dš-ùj?íkР–xö³9›Ñb&Û€©Œk*¯ÖW•Ý�×Èå�o”u[¾½úº¡ï7 n¶„ù€›-aჾ$ªàƳ"(Pñ3ˆ˜™�j4º¸’>U>ûâ \üû;ñÏ™%ôRá•£¹¢�ÀVçêÆ´’�ª7 (šžG–Ç „x¡†ø“f*Û�f�Z2Ð@œ>Óͽ ϲ!bí¥H$¢2Ï•±Ïg·ÄgÆ/�6–�ÁY¦«4 …|ÐܵFÿlj$nEbdA2£¯~óøôÞrmmf¡’…ìŽG^÷ox†²Ì2_ý$JužË1žÑlGDÙÉUX7çÒòRÌ’ ¤áEÊNydM¤ìl6Ê´2#²eËï"›Ë¡_n!¼®�ªaˆßÀÁ{m�M×�ÁŒ¯�ÏÒšýL±R d‡ò9²…-P‰,³<êkB™²|mJ çüòf¼×`f=ÍŽ�/[y(_„�IAjùqÁþÐ7ŠTˆL&esàñ‰Àê8Ó¨[êØÄ®:':™a™Ôdw¬›*Lv™ÛŸ_s?þôÐDÔ‹ÃÑO6¯<6CÒßB‘D8‡5_ÖÁ07”qgâB¯xõ%H™VýÖ1©EvÚØs½ËŽD?¯'¥¶Ëùtv.ÆŒ‚cÜ+te‘ äÞ¡î¶êSÜévXxàfK`É\ÂfKpäv>àÈí‡ÄW‘zÜ”Ÿì‘HÉEAX3вž/½7ϼôº-ÎðÄk ÜùÈKx¯ÑDµØf~Šúä6ªÈyr�h£’l£²Ì#”�"‰•Ž�õУFÓ"iMã¨^%ÉíGyV]sf6; ¥L3"c$¶…°­± 6[m5{°t®† V�î‚|…üŠD"9ZhB�L[r«’ÑN¯6ñÔ+ï` ™B_”Æÿ½2xb†‘Ö G›c–-cà·£ž&a CXC1Çö“ÛjDÁ'ɯs)7Í]šös|W‰ÉXe¢Žaèó3 ³Ðv…=Øv½±îrè¨MÃ:ËÆšË‚Vy²ÆÛcç@„dK$Þ¨÷>ñúHdßí‹pËߞŒFÕTže-^Ä"dïÀŒ¨$¸"˜*š¦MÓYñhk_ÂEëâÒ#>§W¨YRšE$Ãö‰2ª‘œ¥øÚIÆ63 Û­·,º½’ °Áš+£½ÈçÖ³ré`MQÏfú˜ŸCPe)¨±sYÐÔØŒ—1¦U–’<ê)’5ë¹\‘xÜ÷3”£ŽË „嘗ª£¦Cf3ŽjXah;¶»"–òk– ±î'Fb¹î4:xÿ‚•žÃÜpäÖ‘[‡yÀ‘Û…FnTGcr«Oþ"jiTy²NåuׄÇqó�E˜‚^o8*é6ôG$¾"©|�M›W“Ú. H2Rð|Ï4 X¨)§j³¬°ò?%{µå{k$|Ù‚\4ÚŸ:“q52šñÀRÂ4‘0Pñ‰30(]Æ'†dqÈÞ;aéî¶–ŸíFD’ÀüYkh2£*ö´2ÉÉÿ%7܃§ß˜Žé Ò¿�fLÈí“9/ÕÜÉ¥g¸D<Ò�~[>µÑ¤lI>Dl)iñf’a_3›~Õš,‹$,$nšc¸æw�<�n„U´§5µ“f¨"ê;l¶>>»Í†¼S+Ei^àØ÷sQ�ÈÙ]O¼Ž+n¾ÛÜ7úS žÊ Ü@²ðsõr–E¹a°C�SY›h&†º–úe›¤)Üô)] ùtF|¿>;…fÉftèŒú°BpÐ>»bôˆ!,½ÁNZ[NÞ˳+{Û¶· ÀÜÌ"·¢ür#HÈmDÉ_[_S^~w*~uÕ�x¯ä¡œ†RªÈ2Õi®Ašá@mƒ­9(—#uÊØQȈ¸²þ&_{âœÊÕAmŠ~ó·R�r+’ ’¦a‹c9`ùe™-°œv“@dúÞÁˆbˆ=wø46[s¹]èàÈ­#·ó€#· ÞOn¥ #OZžSsWöÔ˜^Ó2úŒ)]ÏÞ£þi�‡‹˜3݄͆dמlNUÞa*MÏâ1 *Ñyùóê· Bú©OÏ:§8DOB&.'k[=BËÌ�vŸ„èÈ-M$�„Þü7-µÌ É{DRZKðn€©rÐÌëX Cyžô˨€>+ÿ’—ö�Ó<¸Úûeо¹jð—ž {$#Ý£xÙ`m ‘ SoI;ºGÿš(d}òYöz›–W¼‹”›žj3+$ý$žËA‰òLä ÙÄrŠ \ì7žHçߣλKöù;–—¾`è�‰;‰bÑÓyÍ·ìW"ŒR´ƒdxFnmÐ; a¯‚w-hz¦tÌi¹�MnåNµSm‘_%IDAT å&ä'ÞÏŽè4ʸT#Y‘,ëhR•3s[ É]2i§Lâ«Tîâ;„d›ÀÒ¡Ž-·º7©ßºNr×ÜÁ>Ûœ"‰îðŽ ¹"Ûç–°°Á‘[GnæGn>ˆ”J�k>ÕXA%$� ˆšLÊ¿Á\Q…çÅ6©~RÑ§à“™¥än ¯B²‹€·îi !*Ò(^eKõ_“³k0�(™Q}š4×)R’>d4ÏeÍ_J:œÊ" =›ULÊU>Ž"qÉv6¯‰¬¬â“¤l‰^SòÌó©)¤4M—Ͱñó”_½®E4ó©ó¦üiNVŠÒ²"ò ÷½}TÑR¾%¥„ÊÚ/“� ­â–ÜYÖ¯°WQð*RlÊUSbñ‰ÜŠê‘ òýeAË­rU)÷›ÞIg &S•ÍLV®’ˆÊK’ü»S,_-Ò6¿�+ŒÉY÷ËÏ»5HL.4úd/×›?—g4/±Hbƒ�–{d9‘\Þ#ÜJ‘Þ¤0ûè‚“w`UGYF–%6Ǩ� ×D"3YØl^<¦4[]S)’LH†u¯•+ÉÖÊ®¤®²¯ëUºTVãß T®õÓÊ·Å¥/rMb�g졽9Íò w§º­Ö Ž°ZBÄΡŸïâ} Z‚áÈí’Gn—€,:,Žˆ‰k²‘-‘M*ué?þÎRix®›a0ëuYÁÛ¨ˆ´ŠT6SAÆÓR£²ÿè3nƒd+@1 4«­m “šFDkå"Y‚µPƒft×§xò/;IÛQMGà âï6>7‹"µewZË™2N6(YM=„2üŒ¬¥R› ‘,Q5Ê©.²I2®¹C¡Qôjôµi½…¨„®LÍÜtNùo2ï)’#Š…†8h¹R›_–òµU¦¸ß¤œBŸd‚÷… šÛSþ�"ùZÙKƒŸ$äºßÅÐi \ˆè:)‹7¥îBEÊзIõcr³è€ù͵!-kžå(z }`ƒå´J^žùóIp5ý”fÆMI¾óDJ³¼_üÔ%P™×ó4sH–„..ËM>K�¾>çí¹4;]|’:3abM 8ˆJÊÇ[©Rm—[€‚ßåry´É²O¹ÊÕG²ÕôyXŸ´ê�¸»¬¨v7Én>Ò2Ò¬óìÔz,¯êHYÐ~+¤T¹¹•ë’Ê¨Þ ÷ì=åyojÔ¾¨,+v-Êᆰã¢Iþ4¤bAÄÖZ ºÑ'GYd,PùIYés¯W'�%QójU*5‘*)`1¬&µ`˜÷Ð ‹ 2Æ“£òÊRye©#î'ŸÙEE¥©"ù©WÙn4益›×¤ôÞç75�Š¿d9®T6Hž•Ò´V£JékpË´`¡|)ýf�%?‘\­˜Fªà©±I…ª!ÂJ�7ÈGYƒp(jy¹b�Ç$"jP®”‡äÅü)n‘a–ܸ/+yìÕKrÁ­–‰•%ÑȰ-}ªgU)¨j=@Cþ<çù$ÇêXXL‹”w¤H/–=}%ȲW ¯2ì1è+PJ«–±ã’Ü+ÿö5a>‚f;°9¡å+íQË´£žéBƒ¡™.Z9Ïóšv–¼N’:•i�Mkg–zþÎhµ¬Y�-É6î> ¤» qÉ!ág9‘Õ4¶H«Œ¦Qe¶6 BZ¾Å,Sšæ+Çüj¹fu´š™·Zê™Òf}ÙU™ŒC\nX) mã/”‰W`Ç‹”L�qgí½eTn#¦M–`MeeQfýWû£”;88,X8rë°H"QÃÔómdÑÒ±H.$ü�ͦQà1­¢«…D¹dFkj.\*:©y}ðO°�ÞI•–>mưÇ/³ñj}0ÏP™Êã//k/•¤¬c9Fë3h�Y*j¢�ÑÝòÕó Õ¸j))ØxÎ }®Õ€£l3¶&$^®"¡Èl®a¶©B73”&‘оr%bkCk" ªÓ¬”ã,ˆð+n#Î1Q�MnM-è»?è3oVmfFr¬ûLÞ$`¼Ï÷³ÈæI°I$j�f¤Ðçd=yÑ# òð)<ómeyÑ‚ "e1©T)Öw-@O"w˜š¶ÍòYamßd$ùÆ�o‰·3’Xu˜T²åm¾Ð2ó›ÎNÐ÷Å–Ú¦Fc鉮êÈl,Œ²•Œª˜¤�µ”„>ÃΖäjË<³©™:´èk¯‰˜[ù6«þ©~Ç1ÅRÒ/Íô¬ÅBä�wX÷•M-gœe`-0ÙësÓi²¦¨¡ˆ#‹�åš›²ÔÌ+uþœFupX(ÀN±µ²ÿÎçva„Š­‚èÐlè]U«²˜6‘Ëeñö[oá­7ÞÅ´)Ó4û©|H”jyäÚûP¤85|L[Ù¥­ø—$8¤âlPY)îL“Œ&Ik ö*«7õi=Èwv"2⢠bMeJ2‘Í“´utvuaÔÈå0rÔr6J»PU^Ð�’WÎâü&ôA+” �FL¾ž}ö9Lž<ÉŽ”‰ê€ VMùj2ÏZQË`Z^T–SZŠ4°)ê$@çúüí‘NÈò¼_ ”m±Œ°AºO"+«\…ÏÍÊ�¡QAG¾€aC»±ö'?ùúÊ]!ŸÕJd‹(âz˜6õ=<ǫ̃Ôûb_?æ5Šb’¦…´‚žD¨¥Œ5Ó„–6+8Å«*Ê$miÊÅçëÑñ�ï ªŽ ;PÍË¿Êg†qñ�Ée¤R+¡�ã9¾·Éï î¡èÜ�1«®‚ ã©T*(µ.ãSÙ5Ä[• aá�s«| (£B£0Ô�Ïå¸UÙŠðè£�£·wª”q3¥.«ÊYâß. «¨.Ø”µšyÕꆡföàZ]Œ…”W·Å.¼pßå—ª²ì±Ü³-¨5"ä5Ë‚Ú ^ÖI¨)Y�Û;:0hÐ`¬¹æ'Y¿s|¯‰L8Ÿ[6*n@™ÃÜpävÑ�Þ•‚æ}óÍ7qÞyçá°¯~ }ÓË$´²ê¤©ô‹(“¨ˆÚà5‹Tbª-ÂGå§ù-µ,o]í�æHjÓÔ‹Š³§^F±³ƒ'ås—%é«ó–êõÈFJ{)’>}®$•ÓÒ¿Åö6\õÛßcÜf[aܸñȷɼðâ�wÞA[[;ì0ìºë®Xe•UP*Wl¾Ð�dI$Lu V«±ó {ölHVA¥Dî@bŸo#! ¹%qÈh X¯€ÞZ¥(‹Îv -U¦œInk¬[ùÔøÎô½Þ–ï )ÛlÏ>ýî¾ë^œõ㟢³{²$‹(�iïõâ?8ŸßûsÈ=”(Ÿ¶b;@êÈ5�”‹d?R‡HÓÐQvU–=Yõ%@˜Y/QþäHÊÔñª“ìjm]µIZȵI‚ìñÚˆD8ÅÎD�ÄW”.MU–’9žˆ;î¹ k®½vØaôõõ¡ƒ„Låyîw¸(@„VĤ§§Çêú7¾ñ l½Í6XyÌJ$·ÓÑF‚Ù`åõšm&#²Uj:Mý¥ú-B+¿ZÉ—'i�å6CÅׇJ¥Š[œsξgüàûðä°º�B¤Aáæ›o¶ß{챇•{)�¤™P]оü5µ?7´"”ØZZ~ˆ!²�~Ò¬?$µ”ü eÑàW¦‘Dów]ö4͈Ë{I ´ÂVg!�Fµß|$o¿ýNÆ—ÁΟÝ-žÆjá�¯|e_ŒÝèS(Wf²CUÀÌž~tw !©�e«Î�Ø©OÒÅ~*,{YîÈR«"Yá9u¶¢þ*ÚÒ”CÃ'Í "–C}Z×òÇ>ÈmY®ê‰ñ>ÍøáS™É/´T)ãìŸ�N8�D9oï.+K¸HÝ"†¤–úꫯÆÒK/�-·Ü>;DMh©aÒtË\�e•u8%ù–Œ˜Z}W6]1Ën“2J¥õ¥‚ñF=|¼¦1‚²a®³œ² ¨²#—‘|Yîs$´ÚªœjNë\VÖc’c¾Çßüæ72dvß}÷VJ¨¼;r»d‘Û% ‹Kr+ëÉÃ?Œ•W^9&2Ì�x͘>¼ånSN!�³-h…äŸ •UÂS`|ÐÂ$«rwðP%yÕ칡B^Ö¶*å ^}åU#³Z—¾¿¿ÄÚ•Fžd¦³£¯¾þªµ? 3ÔØ‹8<þøãØvÛmg5þQ�„Öð§?ý Ï?ÿ¼¢„äÎ$°TöT OÅ<–eþ}’ýÞ™²°é0~nr~m�í¨UJxé…ðϾ‚©Óf˜e}Ô\Å•Þãø-¶ÂãO<Ù²®/z¸æÚk°ÞúëÊŒ`®Õjm,·üñÊ4¶„k”>}SÒ¼LÊV  ­ìQnêtÈÚªò' b™ÄŽw±¨†$`”ûzønžÆ«¯½Šž™,{)^£òÊÎD�ï®X,˜¥VVyYnU?âOú‹T.•v•ÁW^yo¼±YQ5Àθ:e—Õ‰Úµß IYT^­'1ëXLòýtŽñ’"÷UIn«=χå®ÀKô5èé§Ÿ6ríû¹Ø]§UO¶Ûn;¼Àòìàà°àáÈ­Ãb…r¹l–))r)­þþ~û¤.e„ Û›±×^{ã�wÞE6“³é©4$C"f[ É´F¶“thT´¶ßa{üæ·Wð7 m*ƒt.‡*Ÿ÷ò‹/⸣ŽÂ&oŠ)S¦’ 6I8²¨ˆdç²F$¤vˆðËš'Ù‰ä*H†š6éí·ÞÀ®ŸûÎ=÷\’zù'¦ÍçP\ùq&£ÿå癕_-ãkðO™¤ÿ¢Ÿý[o½-Þ~÷=ø™&ålºúŠ+ñéñ[P®;`½O­�«¯»)þüžÕ§ríí(ÛûË[<1-Y´ÐÓ7¥R™�Ÿ²ý–ßð_ï½{}~/Ld¹i4Dde—…‘Ô•rÌ�Q©ÜiÊ/ME%÷–,‰”âÙy§�ñóŒ®ön± :ÚÛñÎ[¯cÿýöÅFoˆ Ö‹=w߯½ö&Ë`žOd9Îiyé”ÕC‘daQµ\©œªlª¬ª¾Ë^*•X¦XÇIzŸ{ö9ì½×>øå//#QmP„*›¬¯ ìx¦3ªçq}÷<•cŸï¦ˆcO8ŸýÜžfénë(°ƒÐ�b!Ë2èã�·ß4·Ž±n„7ÞzµF@~œ2¿[¥G�†EµÃàà°¸Á‘[‡Å íTö"“"ZR‚ú-Å.˘H˜,X"l��ݸøâ_à’K.Çñ'œˆÝ÷Ü ÷Ü{d -Ž9ük;vœpüqxû�wpîÙ?Â+¯üÿò<ûâó0Fò̳ÏbçwÆU¿ý­�>/Û©»Ó¬»¶„§–ú]ˆ]‘H#¨”�d(â*b«Å Ë+i˜ˆÄc�=†SNù&.¼ðgØi§�pæ™gÚÔgÕþ>\{啨~«­IÞ¾€'Ÿz Ï>÷<îùë_ñìó/âïÿ˜`ËËw¶QéÃÕW_Eb»#n¿ý6¬¹úê8š„2;åªyLE ‹|õzŶxÔ¢ȶŽvä "ì± 5˜H§,7ÿá�øùÏ�S¾y*öÚcOÜò‡›Pª$m%œpô1Ø|“�pÄ‘Gâ5v.n¼é&¼øÒ˸öºëñü‹ùJ"„�:ž{îi<ðà}øÙçâÇ?þ1žðžzêYPYEÀd5ŸÝ5°)ÀˆE•ÜŠÔªªŒÆ�/Õë"%ʲE’ÚAyË*®æ#�<ƒÓO?çœw.vøìN8ûœsÑ×_B©¿¿üÅ¥ì\m‹Ïî² žxüi<üè#˜0áa<ûìó¸ã®{Ñ`'OcYoë¥>|óä“(ëçô ­C’öµ„2ë · ²Š/Šn‹#¹uXì å-Å�(šxŸ$“äBŸ{ãÏŽ}¸ûî»qI¬>3>þØ“8ô�¯âùžÇN;l�?þé,³ÌHÜtÓ�8÷Çg¡“åLDK3"è“pбæj«á¾{ÿŒ3p†ø ’Y-½ëið“,o-Ø`a!7?ô¥i�ì<’u}’Õ rO�,.¸àv.¶ëÎ8ýtÜzóHRoÅQÇcŸÞ'½7 ŸÝvüõ¾¿ã­·ß5ÙL™2Éæmjº%Šæë‡†#�>¹|)’?WàIù¡ò"†øS½,šzÊ"ÚT1ír‡Ñ¿Y«`Q¼,ލWëøË=÷áÄO£�=aÄiïÏï…—'NÄöÙ×^{ wÂ_ÿz/¾ûíïà–[oA‰�ˆ:I×´éÓY¼2F¼6Úp}Üu×m3f%<øàƒÈw Â�¡KaF�üL%ÒøÁI}X/EÌ�‘\¹ÊªnéHZBá9eû±ÇÇ÷Ï8Wþöwvì»ß9=ôî¼óœpâ ¼6�)“'cGv²îgY�6½l犯uÝg®ÖÊ(÷LÇŸÿ|'+¯¸ù¢KÆaIÖ¾b°®$éqppXðXD5†ƒÃD3"§Œ¤Éº#‹�>'Žß|ê¿ÿ=|뛜:õF�ï5…Z]~ç¼HE•¹EÌJ€ƒƒÃ…#·K¨pÒIO& ‹,”òí\~¹åí|µZFÐhÚ€¦Ÿ]ü3|zË-0b™Qøû}Ãi§�jDX£³Eî4% 5(ÅÏ$ 7‡€×hàT£T‹—$³Hž”ß"ÊDV>�¿©W«Ìo„4å7räÒ$ó5›SUSƒm²ÉÆ8ô�ƒ±æêkâµþÇvîúóŸMæ"š.M[}žoÖ*¸óæ›Í�wذaøýu×c§í·D¥®O÷1‹e·ˆÃXVòþcX®øGS«ŠEŒ³ º»:l¤}_¹ªù pú·¿ƒ·ßÁffùû}÷ãÛßúrÅ<<_Öô4 sláÎ’|½ðâó8í”ob¯/ì�«®º™\þr÷|'ò3—ç|þ⊄РKN[[;º:;1½g† °“¥w�UÇà«е×X ï¾ó¾~Ô¸ó®?ó>¶ ì¤f³s)*³œ¦Òi^ó.¾÷Ýï`÷Ý÷°�¥Ûl³úË5û$¨ PpÖ[‡…ŽÜ:,�" Þ±�e$¡a˜FŠNäKŸÛÛ èïïÃaG‰÷&¿‹Í6Ûƒ† A•„C NÓ-]úë_ã•—_SF3d\õÈ"Péë3¨µéåÛ»8щ¨^3"%bª)‘âõøIÜÉveÙ )M^Ï�Ƶ7þ«Œƒ1«®Ê;S$Wj”Ñ{“ÞÃ=ùkLÔÁÈú8çœs0sF¯Åó“ÿÛoµzfΜmi\,xó+Ö%?"áºø¤NšFJ2 (É8ŸM›[Ç©§}¯°ƒ / Ý$¸uʬ^0sfn½õOxíÕ×Yn�þÞ¼ýö›¸øâ+ð•/Î: µr«¬¾’ Š”K„†¬-©P§Ku¼Ny4>Ë®Êì]$²7Ýx£u(6;–ï%î¤ÊáùçžÃßþö+ªór�¹ö†kpÅ•WàüóÏCw÷ \ø³Ÿ±c1{A#µ *Ë ŽÜÎ’^y²?pë°ð!ñÕV#ÿUÌågë¥Ú0rÔò¿Å&(;°öZë`µÕWFWg;V]eM¬±úºXqù•qÉ//#!Éâ�ø#–Zj0~pæ™ä&l¹Íèîè “Ï( Z†ä!í!ÕÑ…eVXoº! rOÆÛ4bšžHZÒt^¼»È@ò‹”‡lÙB;67Þ¬Œ²Øn4v}*ù.ä yæ{cttÅö»îŠOï¸=îè!ô¿;‡~õ0l»ýØd‹-IvWG­R6«¤ObÚ‡ŒÀÖÛog€ºÚ ¶ŠVg±À“ìiÂÆ¦¦S§„ÍTë�.j°×¯Ž�&ª…-öÐ9h06ÞlS >K�ŠÕW]™×D1t8Ö_oC,½Ì²8÷âŸ#Êæqó­·bxw7N8ú[±m÷½ö@{6‡ž)Óg€aK�ÄÖ[m�o�vzK LŸ>'œx4¾üÅ=QÌŬÒél\þ)w ²\\Ú®¤ž+?r:R'B‹ ]7~s¬°â²Xn¹‘¬çkbØàáðÓy¬µÖÚèêêž{}�ÛO=ÿ$žéyœpìØqëí1nÓ-±æºkàÝiïÙË˧rȲ-Xoì&»Ñ¦XcÍ5ùŽÖŦ®�‚Öj`ó¢d|üÕZuBSäµò¬�æ™eGýÕÕ°ÉŽ{³Î}&Lï¹$#MiÆ+Z!àíìXYx¼tmë>þ™3þS‡é_þã5jïâÛô;>nä_[åÁ2‡ø:åCéNBë»>þǃÂücV<­�sX|áq˜Äi6FŒ�É“'ǽu‡… RÞFÊV_}uLœ8Ñ,µò½3³™•v�¤Øë¶öí| •©T"¹fT'apg'r^'J3IÊÚ³³É«Öê—ÓAŽw‹®ÙÍö7ù”®9tå;ÙÞÖŽZ­Š}öÙøC¼8 Mc$w�cŽ9§žzªMx.ÙåäŠÑB"5a`Ó¡\K×N j(Ô�ÂŒ©혙¦œHNsu­ðä!íIbê¶hÉWSqÇ2³ £Ô¼¬ª[z¶¦¯úùÏŽo~ó[f_Ô K~¹ÔÏ<5l¦m5+»Ev~ <½€�±R }”HX:Si¤«ZmŒï¥À¼3ÿAÃcÙËðFn):YÁe¡•õ<^¼„2%ùÕŒ"FT*ùŽ?þxüð‡?4ÙŠèÚ»Í-z+”©Ž«MVÚ�=öX›!Bù1™ÊRÝ"½ÌekP¢@I[ùÒŸê ‘À&·%Þ ÝÏ#­²èû˜JY¦|yÊ®­Á¸4»…™�ætð(•Ë6¥˜fe(ó½M™2W\q¾ó�ï´®ø(!“:ó™FÈŽ¡Ö¥�/pÊã;f–4¥œ}ZIó7ê¬cidšÉ»�‰"ƒ˜šÆAâ6,‘S 𵋓3­ßŠEË?ë^1±ÌYÀu>¾Vs…Ûû`Ú4Å]¨/XþRp«óºˆˆ7<Ç`Ë#ÛC‡ž�üNZ×ïú¿‚ÒpÛm·YÇf³Í6³ßVf ]ýh·ˆC K@ÿ{¨$•AA~pIê°pÁ|b ˆ±cÇÚJr"lÖ ²¸KÉ«=³ßìë<ÿÛr(’9T¦LFiê»HÕ´uh¹MÆÏF¬±lLd11î ËbQ²±ÏÎZû_~ºúô¼öÚŸ´99fÈ5CòÒÂ꼩Œë“î¬LYþâ Ì’›~·¶]Ù<òÜúíE„}eøll3”U>›�O¢aw2^ ÓÜ®:кÝÎi+â"#È9fÌ;¾(âó{îiskš(-ð¡r©Oåqf[ùVàÏf M¹©|eIN5;Ež²Ê–ªxsâËÙYòHÄäïí¥ôU‚�–³Z-ìW,¶Yü"´!‰«â�x¼èÁŠ+®hKÖJ¾"bzß‹"ë³êÓª«®Š·ß~;n�M–Ri²øS ª~QVï­þk_§$cʱ�û…& 6y*Pi Ë(¤ü5%›Y0O«ŽÏ*ï„VÐS{SjÍÅ,™*=”‡ÀÞ«Vd:øúø¦m:¸Œ|±ÉvUêš`º)×(_Û$ý‰ ¢¸®GK+÷xqLlgŸá¥<,yJÆ1©•,“ó³¡c…�²³’—¹ÇÄ×&„²uÉ,$ûFfy^Û˜Ø zæÜÄöƒCåÝÚ3Bå%I“Ã≤ô8üH¨2(¨q:t(¦M›Ö:ë°0AïG�kß}÷µÑüRìz‡ó´âSØ×ÇV¶�KÎüÎ=õ4„õ2¢JhÖ’”èØ§56ïT úö¦�AsÇ£†T XÄZK„.³Ì2Ö°/ÌéRÚ·Új+|ï{ß³)¿$ǹóö¯B’DuÌü狸ëâ‹�Ëû(P)6£†^Œ.ù:Kfìn€ê˜¿cב�!éD>òÈ#8í´ÓlªØ*¹èáˆ#ŽÀ…^h‹ Ø\¬T¨"Dsç9Œ4m*õ–šÈ±#ÐÔ f”Q¥\Ã7¾ð%Ìxõ5D$¸²€ÇŸ¢##U6¢¿ET“ø*qá÷¿ÿ½]£Á{ºføðáv|QD2Ç­ò½ýöÛãÄO´²ªú–,¢�Li÷>9·‚V‚Ó yi–I¯ZÃ�8·_s½« ïóH¨dof$C•Û9ïWÜ’½ÚÍJ¡éÅÎ?ÿ|Œ7Ξÿуï¤w£6j$Þõhè°³‘æý©Pr}ÙÓ;ÔûÔ³6ß|syä‘f¡ÿ¸Ê©ú…é4ÉuTFZ™`Ðjˆr±©o¦´Z`›}1R¹ðýd”å!!›,qÐq`=l±ÅÏëõ/Þ1þ°³­¢g›VÜ‚fœÐê�2XjÌ…&D–i䊮ãjwSü¶Zi%ZѪ:èoëhŒØz<P}øÉO~b�!Y×ÕÑSg^”ÅöN)oç–ÑÛù€D”ôøä�ø™Ï|Æ,J ¤ø¤\Ô€ê]i+‹Ù|ƒD"ÕÛ�_ý5¼üðý¨gR8éòk1|•õÙ@°A¦r‰ÒØ‘B:È›¤Õ2Ï5œ‰….);jPf‚¦´&d@éÕ¾Dbü�ˆB<ûç[�zå \þ½Ÿb÷o�€ ¾¼7ªŒ£˜)P‘QÉÉ5AVÊÌdø/””µä&‹mòþæ; "–”…„P¾?/Rìê�õ�å·^C5ÿWü\ö[¼øòóØí„Ã1ŽåR¼€ÜØ/jÛ¸Ó�@ñ'eM˜›ðê¸Ò¡t©Ã ÷»¨Ai”—$ ‘MŽ©žé÷ÀüÏ a¹_ÑÿÚk¸ö§còCÏ`¹µ?‰/ý⣕f€ü Näü,²bµ¼GÙÚ³º�ÁúL˜6JQJËgü-vµ ¿ú tÐA™ÁAuPõ ©'‹<$<É�Á‘ÛK@ÿ{$ŸµcÿÉvÞyg<þøãö;Q^²$�®Ã‚ƒH„Ž/õÊ“%1ç;(ù•õõ"zç= Neà‰ð™OÏYëÊ›×j?ifçŽGÏ–’KÄ¢`yTC¯t*HŽÊƒÒ>wÞ’0úÝ$¹í}ûüüÔÓ�¯TõöÚ€ª¢¬#j\y�ñ¦¸‡þ·âô|¥£££ÃÒµ¨*!åCä<)“*�ó’)ÿØÜµ’‡ÏmAÕˆ”ŠþݧŸAG#„ÏöÅ£²Oûš‹µ`åIa`<É»Kd–\£�ÈP[Yt•ŽEÊ_’Ç$oÊËÀc‚¶e3;€òSûÀë)ÏÚ¤ÉÈ÷–�Øi%iôy»Ïx4J«�é½Ì+=OÏ�,µ¯²š<û#«�:'A#@P/£\éé§}{ï½þþ�1yÊtüóŸ/ââ‹ÎÇ.;ï…çžžˆ VGÄë-PI‡…$šòÑ®ªµÀžÑµr¯ª±Þª†JÏiê9‘ú€×•« ’j�Ý4X±¯§�iŠP*Ux/;ì´j|�Ç(—ú˜Ö*AÃ:¨ß>å›6û–[oE_¹Ä¢MJËë«õ**aÍâ¬3 �òhü{¶1‰½hBÍ+Ç~½ºÇòª8YgzÙIWË'Z_Îô®t<©‹'nm»� !&ª Ú×€›×_}–rH,"[Ãæð¿•_–�gG­‰b�dB ì¬Q×Ú&v ‡¹‘£¬ŠÔNY†´|“¥„¸‘²2·’‚RM²ð8Ä�$Ô~°I Éï36‘¹•<[r#»²Kþ °«j�£\óV^%Wµõ<Í7aãw³à¡Ù”ÞB1� ?€ë®½‰ÄÓÇqÇ}÷Üs;®½îJ,»ü<ûÌ“¸úwW«Æá•—_‰'œ€í¶Ýx n»í[P¤ö�·Þ† /º?ú0Ž=îh}äxæÙgððCáë_û:N;í;xùŸ¯Ø\Õo¿ý.¸ðb<ñÄÓ8ûÌ3qðWÀŸÿ|7Jý5¦)ƒ;ÿ|Ï_„7ßx“¿Sxá¹gñ‹‹.À“L‹ÜE^|öy›©àÎ{ïÆko½ }z˜ð·àsŸÛG.<ï<#Ù²Ó–ëÉ+Inë+Älñ«ìÇ?b«ñû!k½îI RÒÑÒÙO=õ”¹çtvvÚuÒ׊ßañ…ccóU’ä“—>=%=tùzi«Ê$+—UD‡El5©A2TjÅ0ƒLÀwÚdc›áq5¨l¸[ôÂanP0>µŽ:}£¦’¬B63eRv’[<©Î8 DŠÿ<öôÙ×>ìÊï“A5e(.ù-šìDl¹ý¯ÑÔ'y† ˬʭÍÁ*öÈ…F=¥ô.4úÉ*þ‚G3dùHGše¼üò+˜6­ŒµÖÚ„äöd ±Ö[ÿ“¸êª_ãøã¾Ž 7X¯¾ø¶Ûj\pÞ˜’ÕR©�LÊG>“Åô“ñô³�áÝwÞÄ Ï=‡eHê9ø`¬°ÂŠØm·]�`¾øâDLš4�ƒ!"ÜhÓM°žV]Ûx,–]vÉçØ`ƒ 0|øR¶Ôp¹DýÖÙÅr˜Á—÷Ý묽6öÚç È’|ÊŸuÚÔLRDrVd/Œÿ妭Œ®AÝö\�ë<S§M·nfôNÇ.ŸÙ [�ÛÄ‘ÏmZ‹T0 MØÊµ½©÷ã_¿˜Äå@Ï“NþË_þ‚ .¸À­¯¶‚tºÃâ ÇÆæ i•ïN²UeÕü¥ßúÖ·ì˜*ÒÜ=AU"gÍ]x¡÷“4t³ ŸT"HRMÕQÏiæ… ²�,l5°Œ0ßômZȹgÐYRð>¹FHÄ´jR¤e@%HO~m øTvòÇÕÄ;úÜ7=óV[K"Lvi†e2«Ù8Øž¤ëi4¼~ õ°Æk Îâô_Ã:¯Y4£ ™ÕlÙ¦ôKÕ}Yudë|Z,™åùýE}ÁÀúÜy4ªYŒ¹"õM?ž|òN¼8ñq¦ÒC©ZÄ!‡�ŠwÜÿêWÈdÓ˜6s¦Î˜Æ#Ìì™i䮳£Å|iÊÀŒ¢!ïfGª{ðPô–«ˆØ¡ª‡u’×4J½=`ˆ°^%iŒ0eæ ›A_¥~^z0Íëxˆ½ëÎ6C’\ïMé1W¤f-´ç”X®kAíì8Œì„ž †|wîºë.Ü~Ã-øÉy?ÅÏ/þ6ûÔêðŠÔ¥U n‹Ô¹ÓB2IC«ç0NnÕÉ·v`[”ì+Ÿ2Bék«´i:Ád�±ôyâ®à°øÂ½Ýù€*Â@ÿm}æÐ*Xš@\ç“Ï IPEÓqí;,*à»Õò–Ôh �ô,#«}¦5kD(ŠËò`�nH%Èߎ£Í‚‰‚2‰(Yôï! ¼HÖ"Öê?ù1jùX 9á%�8âBJY’-²‡éuvŒÅ²C¡ÎW“uŸL×äÂ"i¶>hTäòC±ÑØqØr‹ 1eú+Øm÷íqÖY?ÄgvØ ·ßþIp[l½ ¾~ÔF(wÛcw\xÁøò—÷5kåØ 6À¨ÃH\û‘+´)bê© úËe’Zz’W}-¨T+”O²îæü‚zg|ÿ;8ýûßÇDû.V[m V\a4º:5¿n 'œpÎøÁY8ÿÂ_ ãçÑ™ï@À44r$Á$—wÝ|+ê½%|b�ÕÐW¯á†k®Ãÿýc?âsìÑxò‘GÑÆgé¹y²fÍ“+:käÖ¾ é—Èxˆ Og'+­¬ô­ô³¬Éš¡D«-þèG?—¾ô%Óà ±]2àÞðU¬Ýwß7ß|3¦N�j ‡*Žzˆ:§ßªp‰Å×ÁÁÁÁÁáà "Éô¨KÂF#—…ï}ÿ ì½÷îèíéÁgœ�|«Œƒ‹~~Æ�ß_ýêWq衇 R©Ù¯÷ß÷7¬¾Æø>¯í!±<¨Ûˆ§t”:Vò—M 7öYŸ!K‚Ù¤Ë�jª¿ÑË.‹ŸýìBÜrË-5j¾ûÝïÚ Z rõÕWÇĉqÞyçaÏ=÷4c�âÑv�uÖ1«é•W^‰›nº —^z)VZi%Üxã�8ýôÓÍÂú“sÎÆöÛoM¢ª¹Ê5Çuݾ†ÆiØÅˆë¸t¬®‘ÎdHÒt{ZAôœsα—4¯­Ã’Gn?$T‰T±¾Ïž¬V§Ñúh›L‹'¼ôÒK¶Rä±Çk×ÿßÿýn¿ýv[ºX:S+è™Ï¾±Í@”3r,]::ëSY›“sÒ»²ÞJçêØý÷ßo«‘ 2Ä\çŒÃaI€#·ª0Z/^ÉÔs¼øâ‹ñ‹_üo½õÖ¬O‰;BÜ 988888|8¤5E"x¾ÈZŠ„®A=”ÇÒ#Fb¹ÑËb̘•Iæ:ÌÍ ^‹çpÕœ¶Ë­ø ,·üŠXzéQÔMò2hØ9-º ë¨ îWho7ß[ùáf2Yä¥ëëÕ $ÃõJÙfDÈå|sÉ“ÔçGYLeÍ•…VùÃ& ý6l˜éK�C‘¥UçeíÕ2ö:¯8²Œ[ƒÓ’±*"­³]b‹m<‹Wç´M¬·Ó§O7"½öÚkcÓM7Eww·ntXáÈ퇄zˆú£Ê¥Š¨ ¢õ‰FëWßqdzz‘BRÁ’dÒ ÜWH®qáã æJå’ßyÅãµZ2Úúô)xòÖ›Pyû]‡�ÂÚ;ìŒôàNv"B–Ö& n�ïCetÁ·Éjk’ÀÿÎ%iÓVNmyÞr ­þÎ ª�<×â«Ê1ï´ :ê)Ä™·k�þÚ{ÞGâgØÌ Ü—±Çã;’Qè­·ÞÆÓO?ƒûïû;~ñ‹Kð·¿ÿ ��]68îÐCµAk"¾Š'1-‰Ð›zk¼uï½RVÝeW _}MöWÔa ø†ÕÆÈuÄ._¬Á2ÌÒàð‘BÍD\ÕÛVsøðá±5‹Ð(Î_|ï½÷ž�D•o®>µˆ'Áuøß`î⯉ڂcÞ| £{'ab�Bߘµñ^['j~ ‘Ç·é!ddÒ TK@Kño`V%"Mr»òŒ©èzñU´gŠxyx'&�Zýšè]s‡š}‰Í+…ÖH“ÄyÚ_²e7f]£BjJ@ì I°ì´™þÆs½“ºã�‘+ — ?KE^­»ù³?,²ì lsGTJè~åy¬–óñf˜C´î8jºüF,µÁúü ’ŒŒÈmè#b˯Ú㵔Ȓ5IÙeÇ —ÿWuþ�`Îã<`-¨×x„ÍÙ\òWr@7Ìqÿ’$ûñ6&º’YBzå¨ÕŽ$ÓXQÎvœçu� Rë”Ûµ ͵9÷e5´uúùOŠ\ƒ%˸\¾?æ/b‘•Ÿ©$�rƒj¹z¤ý4ò¾H¯o•ïbŸZ îÎJ'ËË,\’U͆�YD•gÓ5é ƒ?+h™âPœÒHY† (N;(Y1>‹×âŸ3]UˆãV�.ÌðUdÍÏ\iöù>¤7}Ÿ!Ë|²ÈW:Ñ£:—Äãà 8rëààààà°„C´p`0¼ïÀÇ =D”Äчÿ®988888888,6päÖÁÁÁÁÁÁÁÁa±�#·‹ ¹uppppppppXlàÈ­ƒƒƒƒƒƒƒƒÃbGn8rëàààààààà°ØÀ‘[‡ÅŽÜ:88888888,6päÖÁÁÁÁÁÁÁÁa±�#·‹ ¹uppppppppXlàÈ­ƒƒƒƒƒƒƒƒÃbGn8rëàààààààà°ØÀ‘[‡ÅŽÜ:88888888,6päÖÁÁÁÁÁÁÁÁa±Á¿ ·ÍV˜æ:g?“cs�#tÊ‚öãC< 9ë_ s<<ùÁ0+qÿ.´.çŸÙ±ÎunÀ®!9÷/0ç©s¡ƒƒƒƒƒƒƒƒÃÂ<ÉmÖ†¡í×먉Z= ‹xDǵm8ãfúSgh0èü, ˜\ÙÚF¶ÿ‘#yC³ÉôÚ¿(~Ú€s"�MžQHÒ§l@žl;¯}ÝW篷Ê'�ŇgíêÊÙ÷ ¼7†ö’ëâý$=Jif!¹x@¨×ëÌBAÌz?³‘"Yuš�F?RðQ­’(†M¼8ñ%’Û~4‚ �·.ofxsšL­‰T* M&¹å©nÒ<æq««Sñõ©˜Pzºçc€’§§HÓ>+¥|V&ò�Š”I�çÒ�.CšÉi¥l6ìÀÜGõ;…È#afeV2óJÌ#/ÑãC¯‰L3ày>+ß7+ÿD¼_#⯄¤Æý ÅCéŸ}¯2îb±ˆ¥–Z £G�F©TBWWe=çuó‡¤èÏ!?–gôTqÝ¡_Á?ÿp-R+®€ýu –Ú`}4ü /à;N#Ë÷±é�zü·¤½�¹› ɰY¯áÅ+.ÃuÇ�ŒTÍÃøo�MO<A>Oyey•ê>%Å>\“õTu&­¶ÂbpPÑS;¢Âý,rÕ &^s®>r?Ê«�-û:6ÿæ€,e™V{GÉ9á}8„*„)ôL|Wº/úžzK¯3ûüæ:ø£#ô«Ôdo³àäì°ðCí1ÿ“®áÁsÏÅ„ÓNEÕ«b—K/Ç»ïÅö‚mo³BM•fÛ’‡Ó�ÅóÌ¢Õeæ¾···ß~'âqôp_VÑf“ ݶ ldk (Ð JS°GbÇQë¼] V;Š/–Rüȃâoíë¹zÉJ‡íÛ³™»Déæq‹©ö\¡u霡¯îQþ¬pP‘󨬋,nýVüŠ‹dX?[Ç“`¡ü%A×+.†V\³¯�–¬g‡4 èäÉ“qÓM7a„ Ft Y‘„yZnƒ°Šz=ÄSO<�'žxx2> ×,·râ¦Ïà‘ë¸ì¤ b¶×4 ­Î´X›]‘æõCX9 “ÔFÖÓ–¡–Oc°äĘ\4xžÿíÜÜ)™‡(Zð¦šxƒ®HóOFye]å‰Cç±,Öscös”˜ÙHˆíl(ö$ ÷ãkƒ @6›5‹í)§œ‚C=«­¶{aóì£8ü$ïÛYn?8æ®+ÎrûßCEÏYnÿGp–[‡Å j�ùßYngcžY”¢ÊårØe—]°ç»£54jNÀ³"hfÏ4ê%õ®_ªh¯qIýI™9R¾¸±ËBÌuòã@œ¢˜,¶Z"³”2ÍÍÏ–6j î+ÛTÆósl‘Õ}r¹�õVçâÜ2×ö mãÌé¨=k^°ˆ”.ýž+´0û�¤ËkI®#³ôÆÛãŽ;Ǽ]ëààààààààcžä6$ñ I fôLG{{IŠ„Wþ·unIëZ=Ù¦W*D@òÈËÑhÄî� fÔÏÀóQTÕÅäs¤˜!I&/–2!jIÐo�x<ù­OðÉ5P¥c6ÈÊè_Mõ9_vdYÓê Ê“qË�X~·"¹™LÆdà\fcžÌÈ|V…Y[’«0&ŠûîûE :mímh+¹?ë}j]üîÊ? ^Žà“|•J}(•«ðsyTªýøö÷NèџÀ©§��çûûû�@&ÓY‰ÐÊY(ÌBÄNVN׉êøK/½„?þñ�˜A’ªß²‚*ˆ„6È®e1n6=4y,—õe eÒ¼ùú?‘÷Û±òJ+ãškoã½i¦ÃÃ9çž?›·­Ì¾� B–i Mg|^“áï,‚j �=4÷ýå~LŸÖ ^†r­�4Ó,Ü”Ÿ&¡Á%‰%)ÖTj}=3�õ=´µ[$Ú³¼gsvÒ¤ü)æ?à1vØ{È0Yž'<ø É⫇N"_%yõInCLš4e‘� ½ƒƒƒƒƒƒƒƒÃÜø—f¿Ùô‰LNÓ‹H6=̘>ÝHïèå–ÇæŸ�eGóÏLÄñÇ�ˆgžšhÈÎÎv#˜I^>_Àc×ÇÎ;ï†Ñ£W0 ¦ˆ©_[[›=A–Hýîëë3ˤHœNi+¢'hÿ‘G!¹Þ�?þ¸Ó=±Õ5„—I¡Æ¸!ÓifS`æô<::Ò$¯ }ø‘xý�÷”%#ÏzNì6 ü¥�,7��«aeÞ£:N?ízÐÁ˜2ém’× y?vM�ï,ªççøì& -ÓK’ÝÖV@©¯‡rˆ-ÂFÔ¹õü ÊõʹȳÄß`úù|† ^Å”©1‰-•*¨Vc„J5ÀÐaK�Ö¹ÄíA� bü r+Ç‚H‘À‘D¥I}’3«£�9wÞu‰ícØg¯íQ.•qûmwà{~~OœýãŸbï}öÅçöü,Jµ Šm�±ô2¸þúëñ…/|ç�wž3M7ö•¯|_úÒ—ðä“Oâ™gž±óË-·Ö]w]pÀxôÑGqå•WâŠ+®°{.»ì2œþùxúé§mÆ€1cÆ`µÕVÇ�r¦L™DRô÷—1tøRhðÙ¹œOb¢Z©£¿ZÇÙ?ü) cÍ,©"²uM§Åxÿö÷`§�vÆÚk«¬²*~ù«_‘¬×qÕe¿Æ Ͻ€ˆûßþÖñË_üŸûÜ^øÑ9?F=¨ã„“N—öÝøÃíì4qÆw¿ƒƒ÷߯¼<¯¼ôN>ù$ŒZfY ØjÛÏàÖÛî4™>üè#Øý³;á´S¿ÉÎÁ±·ùf˜9c:ÉnDrÜA¢ŸÅ/yŽ?þ$yä1˜Ñò±ÁMH­³â:8888888ÌÆ<É­×Ô€¬M[Q]‘¨¦pÕlb€B>�žž~¼÷ö$¼þÚk¼)ÀR#:ñÌÓ�áO·Ü…³Ï>·Ür›¹<÷ÌÓ¸öº›ð×ûÀÈQKã¶ÛoÁ…žoÈçŸ÷ÞûW<ñÄS$¡ì¸ãŽøÓŸþ„ 7Ü#FŒÀ5×\cVd.ñ³Õ@ªwÞyûï¿?®»î:áe1tÈpœñ½3I�•7‚Y<›a€´Ÿµ¤7êÀÚë¬�ÁC:qãM×áɧŸ‚ŸË’ŒzèèêfÚþ†¶ß�?þ6Úx#˜§œò-{Ô±æbQ,æQ­•ÑÑ^@WW;î»ï^üôœs1yòTü�¤øÚë¯Åݾa½�ß\~%n½õV³B{ìq¸ð‚ °ìèeðe¦wÂ?À×9 ×\w j¥þ|Ç_ð³‹~‰K.ÿ‰r€\&„lÂå¾>œáÏqÜq'à�·þ‰„ÿ‹ÔÝmÄÖ§µH­#· e®}÷Ì“Üæ€K#˜`S}iDC3l @²˜óR8x¿¯`ä°‘Xș˜0áy ™Ç¦[~~º‚L�ÇrËoˆ �<ƒ®ý=:}Íš†ŸÍbóñ`å1ËâÝ÷ÞÆƒ>ˆ'3gôc£ 7Ã2£–Ån»í�¯~õP|ð�Øxã�Í…AÖÝÝwßx ‘»£�>š×íf>¸Z­ë¤OÆY§ÿmÙ6ÜqÛè/÷!�ÏØb¹M/‡0Ê"�–=’ô&DÁ |ãä£Ð¨•lX£ZÇý÷Þgä}­5WÇW¾üE|í«‡Ã÷ ¸üб×GbÄò+¡kp;N>áì¼í&X{õ•1åÝ©xôá'1éÝ)ÔÕAÂüžzù5L.×1n›0yúL’àû0bÈ \ó»+qögà{ß9åþ*.¿ìjx=}X¾³éŽåqñ�·ã¯�?ˆF¦1œ¢¿ûæ?áû§Ÿƒ¨k~uÕ¥»á'Í�A_D_î"ÏÔ©D\“}mwppppppXØ0o·„Ä*hAs»ê�þzÈd²ˆÂ&vØ~œpü‰øú׎ÅOÏ»×ÿáZ¬²Ú æÐ APcÇ®‡•VZYYNÃ9ßGÍfˆpÖYg2®n¸áãwÊ,“²òjå­k¯½;츓¹h°™šéܤI“lU®ŽŽ³ÜŠø¾ýöÛøÜ®»âs»ìÊSöœ©S§0MdüŒÍ2 <$ì=3g`••VÄ>ûì…x?úáYH{iL›2ÕrµZ=ô¶ßa{|ë›ßdRSÈçÛPÓ˜F=¯^¯`èÐ.Œ]ÿSö¼Ë.ý� �;ð€ýñòËqÁE™ïíîŸß ZºXXi¥•HÜ—±Î˜•Ç0ž<^}åUv<”úú±þF›cùU×D•�‡L*°™|�4Ó^­†þž>Iž)³Hk�¶‰ï²ÃG‰ø�ÍÆÜ¿âß�sppppppX˜7¹M‰RqoÒ]&Ë-�ñ¿,ˆò‹ýþ÷OÃ÷Ï<_üâ°Úê«òš4|’ß4Ï×U³Ô¦šix©4Ê•>�»2?×O}êS$|ŸÀ¹çž‹ß]õ;á °é¦⥗&šßíºë~ o¾ù*~ýë_›kB2eØðáÃmð×óÏ?oWûŸüä'ñ.‰îc�=†Ÿ]p!Îýé¹Xiåe’˜zš~€äOäXé/söûÀ¾‚¥†ÔIŞvذa6«A±XÀ®»î‚É$Çÿ÷øc8ï‚ópúßã}{¾¼Ér¬°ÑFÙ 1YŸ»»»±÷Þ{3ï\~ÙeI"«jUœXˆÐ×ß�uÖ^‡„ñddW†8Ët|úÓãðÆÛïºÛn¿ öùÒ>8ä«㉧Ÿ$!'Q&¡�:u9äPÜÿý$äcIB³6ËÂvÛmoî+¯¼²=cÃ�6Ä AÝXë“ë`­µÖ6W‚/²3°×^ŸÇOÏ;A­Œœq:òííèÕd ”µ-$!I§sè©ÁˆüÉ'‚-·Ø“^'{<‰¸æ–õ¸n–ln¥ËÁÁÁÁÁÁÁÁ!Æ¿eFúèšÛTJÓf°îºëa“q›"K²Z¯$žY[¨@sÂ6)’¼‘Øl³M1f•¥‘/¤m!‚1+¯„ Æ®…õ7XÃpš×î¹ÇžØxã�°û»aóÍ73ºÕ–[àÄO°Õ·Dâd Ýo¿ý°Â +`Ú´i$Ä[c›m¶±óãÆ�Ãå—_ŽM6Ù„éÊÙÀ·/|qœsîOP(¦ÍÊ)‹m@˜Éf±þú›š_oWgÉypØol½åV2xãÙ=4«®º:ÚÚ‹Èå3øÆi§àg??¾ŸÅÉ'ŸŒ 7kVÚ®®. 2»îú9l°ÁØ~ûíìØæã7g<áÓ›oÎßÝ”G€Ë®¸_Ü_tóú=3±ó|û�·‘¯Ž®aC°þf›a­5VB‡æ¹¥¬Š�C±ñæã°îzŸbGÀ÷¿} ¶?9?‡žÁȽ‚¬Æ"¶n@™ƒƒƒƒƒƒƒÃl¤HŽÞÏŽUTÃ&Ib;jaH¢XE!ëÁkÖZx GZœG�$1Ã�J{¨yM�æÂ R¼&�0›±Ïî9KE DèO1Ž*É™’&yão’ÝJŠÎ•Ë%û­é°‘9ù™ÊÒ›,ü ­>Ïëžr‰×‹‹hê@ÒöŒ&»Õ’Áø[S˜ehNZ>Ø ˜¦Î®’)Z é&óTC¹Zat>¿Ó~.YÄ‚ÏTôL‘Ëä· ‹mŠqׂø˜V@ËP&ÍÖ5ýýZé,Ÿ¤Ý'—ë‡THöS(¥ ¨òAE¯Œ|“y HÀCÊ/ËxÈxãÁ}|-”£¬ÛšXÄvýõ×·¹�õöÃ!)ú*_³ 7�Þ:®?t?¼|ÓuÀ £±ÿ¯®Åˆ±¢á7ÐðdšìèE|?i ·Œ—z–ÿõ’„¹› ɰɲùâ—áºãNFªæaü7ŽÆ¦'Ž Ÿ§¼²¼Ju…r¢ˆ›éì»ñ;uƒ› Š'd«Åö‡mU®šÁÄknÀU_ÿ2åÕÀ–_;ã¿õ°á£àÔ`QrNx²º°=î™ø,®5¼IÛKòʆÚaý&ÉÔÌ ¢"}v ÿÄ[ÅÒ4ò¦·ƒF&µ¯­B2˜JÏooï@G _«Á±”*Ï&½ØøXr]«4é¾”¦M áô3it´·£“A‡lÙaBi™ÖVÏ—r׳µUˆÓÙ<Àz¦Ü"<’Ý4¯ÕsÚ;:ÑÑÙa® )>GW{Zm‚׈Þ•½Ž”òżòœ²¡f–LfJñ)ßzžÚ œÌᣅ½Oþ�ÅË?za jkõï}�˜ÃÇkÏU´hàœƒš9@ðs$¬$qíÝü%’hLËÎÍÉZÜð2º¦ú»"ú­Þ±Žù-r@¢i�TˆãhÊjªëþ«Æ;¹OÏmíÎBr@Û'Å€“d0ÄYŠÓœBÈœ†óοoOr7ë^=Ç‚öãçÄçõ,ðàs7ËàÛ™ "’XYµdù6«3¯µûÒìt�`ËçV~ÈsBlêýH…fÙ9z´-›ñ³Í„ÕbhD¾æ¦£"¶ŠRG úž®c²Mr_VH;¯c¼Šqj&Ýx´Vø0°ä$)™3E³ÑJ7OË2Ý$[4Þ­äÄÙáFÞÅ ñ~šéKóúÖé9�X�çs#¡î qÊa+¯Æ¨y¥åÞÁ­Ü!ä¾!rÛ¤¼@r«{ô/ #›!ArÓ@:ÍÈ[Œ„÷³1BƒÃôé]¶~Ã‘ÅÆ$*&c"i"k³¡# ÆÌj“²˜Aê>Ý!"ûŸÈØlø� gÚsç…$í ¸¯tXH~¶ö㟌Jd3&œÿ FÎç ‰(„9e¤ÃÿédœGý³]ó©Õ½º"…� ˆ¯ÐßV,:Í�Þ‹Êiƈ#�<2>çàààààààà`˜ç€2­Ü‘¤¦³üîêk1uʬ»ÎÚH7IX›¤g$‚QJ$7eÖMÑ® Y†DÖIK…hx¡Î"eŒŸEé†q\y˜4w„˜ÊâiDÎRbÔ²Å�çɽç‘PŧtiV|T“•yZ+¸oSŸüyN{)³+þøbým!½Tu.vÃhΓá*í­Ý�o¬`|Þþ$I+¹AÏh!ò(.u(×Lˆ�²™N�÷Pg êÌ[ž§™/þëïï³9}·Ûn;›ŽLÙDx>8TöÞgùÖÀÀj ×x^»ñ�ˆF/ƒý®ü-†ŒÝ@æu¾A«|'òWæŠc @Òl ”Ÿ”½ô»ËñûãNFT¶üÖ1Øø¸Ãd‹(j@Y3Íÿ¬£¼Öcy×�ÍÄeÇÁú¸Ö6… 4ØäØË}ñºëqÍaò\ã¿þ5lqêlh;$8˜?““݇¥L=ÕŒ(Õ—žÆ5€O=‹îõ6ƾW]‹Ìðá¼"`=Ù»ã¶FC6�§åmšâCD®43€Çj,xÄ®ñB ��s¨ûøO«}É$©ù\u�Ò¥Ù”ŧóú‡øqÜóâtÉuBiPº´è„s§¥[D—盺‡ô™?R$0žb`“Æ´Û}oÿûƒÒÿþ�¤I«²)- ŒÐä¥ôÄÁ’Þ²#¦'ÓÉ~Ò¼Þc�ü¢PËó:É´gS�iâu×]×\½d>x˜—ìÌ]ÄëEÊ'…�:V}–�:j麹�dTvìh¨3— X}•×9ãXB"»¤aIʽ2)W«H²˜YêGÀÂ;£¿¨²`×"ÔY®{=v"ë ü=w¼Kre< ÂIUÙþÔSh�äÖ›UDZØ%�E­QA=UE¹¿ÂöD/ÀÕýØ|S–”�¹}5àóG�ÊF­5¯LZËëúY®{dî¤Ñæ� .,,ÁÊtÈ’[ëC©Íˆ� rÆ7J,ã=j.‚,š<ÞLUX½2-h5XAkˆ³iŠØ…yZngΜiŸ¾5xéÎ;ï4¦Qú ôÊD$4sƒÃG ö<ü`&ž;ïRÔï{3; Xï´Ãá­ºr$µê´Y?-�²)ÚXíâ1”K8T&5Å^ù®;ñø/~ ÏËcôžŸÁr»î„j¾ …zš’òPÏe/BG��cvæ¢ÖÌ*äû$³E?OÅŽË—$VúI<ø�ÓÙèÇ�­7ƺG�€°?�¬¦b,Ô�ì> dìÙy¨õ cÊxìÌŸ òÚÛÈl´Ö:úp¤»G"W¢ZÔÔ‹úŠ({×<í@ DnàÉv¡ŒWoº¯\v ™v¬|Ò1(nº!‚T]ìË¥Ø�2AüåQ_¦!Ș'*b+Ë­ø�VŠ�W }?æIn‰­NiT~{{»�ÐWpX°H­‰Üêý+“¼Ã‡ƒÇ2?$ÓĦé"Ö‹è+q{m &Fö„SÈG9Š FòQ$¹•]§æÉŒ¶d"i>T‹”Ë&,—[u-…J5Ä_(·rô’¤uÖ<6°z}Ê,"WaçLÆ\ç÷5@K(T•»óí¨•*¨’LåY®Ödc¾]¡’Û×ÚÓ¸cjÙf‚ B?ÊìhE­»æRìé”Ϻ^Á'X7ckÊø„¸§R ÖóNhõJš�Ùʸ#· /¼¦f Ï � ÖëjǸAÝ(÷TqO/^¢–Ò£…šÚ˜:Ê~üUXÆ…E Ò3rÃLVh�4i† Ö:;'æInµÔ­æ™Õ©ÎÎN‹H&`‡‹x^à”u2b+’ëðÑA*l;´ëfŠØ|èòxàÝ—ð‚ïᵨ¿Oצ9? ú–¡O–uGÏ y–Ç ›6ëŠR#Ä´¥:q뛯�Ü‘|½<ô‰Ìæšðj$·,ºšSÅa6r”Q†¥¬æi–8<ý" b+d=¬ãùYhÄéSñ¢ŸA‰ä׫É$ƒ¯FýçtŸÃ v׬MHµEÄÎZg_Y¶¯oðÜ Ÿ -Ì¢5’ÜÖ3ú¨E2¯i®þwÐkR°Áw¶‰×á£�Q°°ŠWïú3n¿øjœtÅoP*¤ÐK%XHe��i@%;¾È°æØ;øwSj,A�Õ»ú�ㆳÏÁ–{+o± zÛ²ìd‘i°ýHy3²z“ÄñZùßaXÇCÕm¬(D nvòd\|ÔqØô³;`�=>‹éQ€b~pì�ïÉΕ½ÊŽ|µÞèGW3À—ýOþý!yÉÅèÏúIv} s¡Éiá"'f‡…ž,± åtͨŠAé‚RAGê*Ï!;ÍÉ-XÅ�H|S6†dQB³V¥Õ¾0~üxsQ˜æIn–\Dƒ~ô¼þ6®<ûuöÙ¨ç<Ô¨àHmÙ€D$d¶ ò1åëh¸îÁŽVý½wðµ=öÀ^‡~ Ûì¶3JÙ e•F[*§^�Í– qx2a�,�ð qG)¶fk¨h–Ä+_ ðÈu7!bçj½¶@½½–ÄÿÚg'» »j½¦7�JÞzêÜpé8éüŸ"*äØqͰnÇ岯Bš5kº´ÃB q=†z>bû¡¹V"dØÞFñÓ¬U,ÎìÐib¦zFezQó¸ýàpäÖÁaˆÜVl¶Š&YFoµ P… |[ÆY­DKÑqßšwª�PSÕñúÄç‘okGǨ¥Í}CÚöLŽ2å%”MCcÜ!–¥žAM±pÑXf\‘Û¶F©¾ ê,zUñÙ¶6ëdÉ}ÁÉíÃA ¯fùNÒAhSXÖ£~{»}™‘pCq†¼#· ;ä9Ãv¶îGìÇ”N×ã¿t“åW�55Ïl6ôMz+n…_,îùspø€ˆ§££ÊC_Ø@aðTërFluÖ3‹#{…äeÚqJo j�ËŒY ]ËŒF�NQДVÖÜRT1mˆaí­_ +Sì(™ X¶L1I`•·ù"¼B;÷2ÖhWµ<º]ëðAÁN2À2Ù`ÖóÑ6ÑÏC¹ö.“¹ænWýޝupXøÑôšˆ4B—Å6ÍR¬¹ØEoãy>š< ™fH©]Qû²øÃ‘[‡�`ãà±_ëe²³YôÊÿ<ãÛÈ~vŠmÞ|9êûTˆúí*Ð@¤�ó‹kj@Ù¸Ö#¤ƒ&Ú3²}Ùiƒhƒæ –ß²ÃÈŽåLÊGK¶¤µÐEä![ì ™%‹(Sù؇!²i /&`’/û é "MŸÔÖ�å^ $[ÊŸÁ–^ç;ð�88,ÜÐ<øu^-\%Zé¦t“5îë„fU ´UÚ‘[‡%Tf)Aµ�B® mÅ6äR„•:2AlY“#~šä6Þ×”*­[H"d´J¥�l3�,¬×ÐÞh[r‡� BRðI¾ÌÝEJH!•B6›C†Š©à¥YC4Ý´Œª¯ VfþÏRž*��ð½L\—£Ør«£" ®~;,ìÐW0 lV;«AÏ*·ñ¸þa�oýMæVY2 ´ó¹upÕ5³,‹$²Í¢svÌ.ˆ÷í7ÿ$×.É L"ù/¦e{¤HHÊâÙ<âýä¹"È·TGä­Ü:³dC“âNDV«êDÉr+IÅ+?’ôj:@ÊÔ™å*“ÈÕá€24¡ŸØ%2iów¶Îª�—lm‡hÙœœb°»kô5Ó”Û\\Vm#zǶBûjbt(¥k–€òìÈ­ƒƒƒƒƒƒƒƒÃbç–ààààààààà°ØÀ‘[‡ÅŽÜ:88888888,&þÃïT&ÈÒ†IEND®B`‚././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8502398 manila-23.0.0.0rc1/doc/source/configuration/figures/openstack-spectrumscale-setup.JPG0000664000175000017500000022713015251045254027352 0ustar00zuulzuulÿØÿàJFIFxxÿáæExifMM*; J‡iTœ�Ìê >êADMINIBM�¢�¶’‘92’’92ê –ê2017:06:14 14:43:022017:06:14 14:43:02ADMINIBMÿá http://ns.adobe.com/xap/1.0/ 2017-06-14T14:43:02.921ADMINIBM ÿÛC   '!%"."%()+,+ /3/*2'*+*ÿÛC  ***************************************************ÿÀïM"ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?úFŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ŠòŸÚÆGÂß ÖÊöâÓTÕ&H­dµ˜Å"ew`Ü`8þýs¿ <)Ä/Úk_ð±|yÞL7�Ç®±Ì½@ ‚rxa@ñEy·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“@ ôæ¼{ž³ð‡„õ wQø‘ãÿ&Êû·pdnŠƒäêÌ@ükÉ> \ÜøßÄ׺½ã�i÷¡¹µ6»F&qÌ�·Ëƒž8VÍ}yEy·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W››ÿª�ñÿŸý…ð¦ÿê£ü@ÿÁçÿa@“Ey·ü)¿ú¨ÿ?ðyÿØQÿ oþª?Äüöé4W—ß|(·Ótû‹ë>†ÚÚ&–Y]áFI?'`*‡ìõ¯Ûøƒ@Ö&]o\Ôn£¼ØðëßihbË™xܧ êÈz õú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<—ö‹ðþ•wð£UÖîl£—R±HÚ峺 ׆·!ˆ®�á'‡t�ᾇs¥XÇk6£¦Z\]´yýô†%�¾I®cöŽñ6“cð»QÐ.î¼½ORH^ÒŸ4%ÄlØ`6ð8'==EtŸüQ£ø‡á¾�k£Ýý¦]/Nµµ¼'Q¢rÀ ƒÓ=½EwTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECsim{“yoÄDçd¨sô5â³E�¤ÚO‰/šÖ*k±9ŒŒlÛ¯j÷Zñ/Ù‹Ÿ ø�‡*u§Áì~D m¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢²µÿÙxvÄOxK;äC }éO öõ=«Í5?kº”�åÜ‹OH­€Èú¹'é�¥tÑÃT­¬v9ëb)ÒÒ[žÁExIÕõbru�K?õû(þMGö¶«ÿA�Oÿ¥ÿâ««û:ÌŽ_ívgªxë‡ÆÞ¹ÐN¥6� ÑQ4° fd;yè >Üw¯ý–<(ZÎ÷űjSDÂâM>[ €Ç*�ÃÔÍú{ÖÏö¶«ÿA�Oÿ¥ÿ⪎•ö «ZèrϦۻ™+9Þf Ä)8gØQý�?æAý¡ÌúŠðŸímWþƒŸþKÿÅQý­ªÿÐcSÿÀéøª?³§üÈ?´!ÙžíExOö¶«ÿA�Oÿ¥ÿâ¨þÖÕè1©ÿàt¿üUÙÓþdÚìÏv¢¼'û[Uÿ Æ§ÿ�ÒÿñTkj¿ôÔÿð:_þ*�ìéÿ2ívg»Q^+eâÍ~ÁÃCªM(î—'ÍSùóù^…áo[ëÎ-.ã[[üdF+(JŸé×ë\õ°•)+½QÑKN«²Ñ�EQ\‡PQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEcx§__è­r^âFòàŒôg=ϰ“ôÇz¨Åɨ¢e%vZÕuÍ7DˆI©Ý¤¾êœ–o¢Œ“ø æäøŸ££ž¡(þòÆ€ûéÅy­ÍÄ÷·R]^LÓÜHrò?SþØp*:öiåðKßzžDñóoÜZ—ÿ KJÿ n§ÿ|EÿÇ(ÿ…¥¥Ð7Sÿ¾"ÿã•æ”VŸP£æG׫y~4_éü ÖÖzmúê–R}¢ÍÝ#Á=œ2ú¡k_ᦻ¢øÀV"麃\*ù·r¢E‰&nXÿ¬ä{(®~Š_P£æ^«äz_ü--+þ�ºŸýñÿ£þ–•ÿ@ÝOþø‹ÿŽWšQOê|ÃëÕ¼�Kÿ…¥¥Ð7Sÿ¾"ÿã”ÂÒÒ¿è©ÿßñÊóJ(ú…0úõo#Ô!ø�¢ÈàMon;´‘+ÿ|±?¥tÚv©c«[}£MºŽâ>„¡åO¡Aö5á5gNÔnô‹ô½Ó¥ò¦^¿Ý�u‡qþG5�L¾6ýÛÔÒž>W÷Ö‡¼QT4M^sG‚þÜm�™ åpÊ~†¯×ŽÓNÌõÓM]QHaEPEPEPEPEPEPEPEPEPEPEPErþ&ñ½¦…+Z[§Û/€ËF zn?®?NµÄ\ø÷ÄwKØíG÷`�H÷Øc]T°•j«¥¡ËSJ›³zž¿ExÏü&ž&ÿ Ô¿øÿGü&ž&ÿ Ô¿øÿ[gÖ¿K³=⫯h^Ô5o ÛÚÜßÙGçùQ³¬‘¯.VS�¹#žØÇ5៲ַâ ïµ=ÖÞÌhqÈ×·—™|×PˆŠÛ¶ŒìÏ*xSê+±>3ñ+) ¬ÈAàƒo?øåbø^K�XÍgᛃaó¤UŠ6Ü䜲“Œ�j?³ëwAõú]™ô ã?ðšx›þƒRÿàÊ@½ºc$ŒìþóãØ~¤UB.rQ]Iœ”"äɵÏéZ ù724×8ÏÙàœ}y+ÌüYâyüK{o$v‹6èʈód’Ädð¾€V?%™�™Ý‰fv9f'©'¹¢½ê8Rj[³Ã­‹�Tã²"Ýqÿ<¢ÿ¿§ÿ‰£uÇüò‹þþŸþ&¥¢»N2-×óÊ/ûúøš7\Ï(¿ïéÿâjZ(-×óÊ/ûúøš7\Ï(¿ïéÿâjZ(-×óÊ/ûúøš7\Ï(¿ïéÿâjZ(2eûЂ?Ø|ÿ0)ñʲgiäu`�ŸQKü:q"ýÓëì}¨Ôd´Scq$aÇíéíN¦#Ð~\¹�U´?r7Š`=Ü2Ÿý+Ð+Î~ÿÇæ³ÿ\íÿœµèÕóxÅjò>‡ïF!EW)ÒQEQEQEQEQEQEQEQEQEQE•âm\è~º½@ ª¡"»±Àü9>ÀÖ?‹ühº =Rkö]Ì[”€„ú“Ø~'¶|ËP¿¼Õßv©w5ÙÎvÈß(>Ê8€®ì>um'±ÅˆÅÆ�â· ,Îìò;<ŽÅ�Øä³I>ôT_e·ÿžß�²[ÿÏ¿ï�^þLJ¹-Ù-ÿç„_÷À£ì–ÿóÂ/ûàQ¨´%¢¢û%¿üð‹þø}’ßþxEÿ| 5 h¨¾Éoÿ<"ÿ¾d·ÿžß�CBZ*/²ÛÿÏÇÑ!€§01CýÒr§ðíøQ¨hMG^µRù€‚6ºœ2úT”é µ—»ÓfÒî³Ùm0’y1àÀH#èEvÕå_ I/”v6øIø×ª×Îã ¡Y¤}ntSaEW!ÔQEQEQEQEQEQEQEQEW'â�A¢JÖZ|kw|Î Äpún#©ÿd~$q\犵ûç-6«qì–çÊþùçó&»)`êÕWÙ•qté»nÍŸˆºËÞëcK�ˆ·²¤QÑåaž~ŠGâMrÉcó¦yf–y$s—w�ÉcêNy¦ý™?½/ýýoñ¯r�?exÕª{Y¹2Z*/³'÷¥ÿ¿­þ4}™?½/ýýoñ­u1Ð–Š‹ìÉýéïë�fOïKÿ[ühÔ4%¢¢û2z_ûúßãGÙ“ûÒÿßÖÿ5 h¨¾ÌŸÞ—þþ·øÑödþô¿÷õ¿Æ�CBZ*³ãîK"ŸvÝüè”\,MA‚È=ES2Œðžv`®ºÉ5DÜ^'¼múþ5-$ ô¿…¿ò/ßÿ×û訫¶®'áoü‹÷ÿõþßú**ìn®c³³šælˆá�¤| œ“ü«æ±?Æ—©ôxàÇЖŠñ­ïâ�Ä¿‹ô_Øè6·2HÚnŠÚts,‘£¢Y›æRÅH%AõgCNøë¥¯„<9©kšeÿÛõ—šÛìº|v.a!YîÝó³(P3÷€'½s›ž«EpzÆ/ ÞøgYÖ.SPÓˆëí�ý·—s·»<±ž çºÅÍ÷NÖg»Òõ­*ïG³kéôÝJÏȹx¬E-‚2ê9ëŽ wtW�h_<;¯kzNŸ›®Y¦°¿è7·–>]¼îE}Çs);NH ž;Ç?¼SĽoDÓ¼Scღ[E.›e}i�W%7°3ÊBÇÏÊ9éÔ@íEyŠ~)ø‡@ñÏ‚ôk�þ3}oö�RÖÊÕnI dbmØ`�ó1€çƒ·yñ¯Ã¶^"}6M?Z{HïÆœúÊYfÅgèSÍÝœƒÁã±##šôJ+€ñ'Æ?øk_»Ò¥±Ö5ÓÕQ¹Ó¬¼è,ôó[#sÀ>�A�¨üR�Bø£ªkjÊÍxª³F@꤀qÛ9E\ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š)‚©f 2I=(kÊ~'_F|QoÌ�a´‡ ÎÙüp«úRxŸÆ÷z½Ä–Ú\Ïm§©Ú2Uç÷'¨_@:޾ƒ“TUûªÐW±„ÂJU$y8¬Td�8Œû]¿ü÷‹þû}®ßþ{Åÿ}Š–Šõu<½¾×oÿ=âÿ¾Åk·ÿžñßb¥¢�CB/µÛÿÏx¿ï±GÚíÿç¼_÷Ø©h£PЋívÿóÞ/ûìQö»ùïýö*Z(Ô4"01ÂÍ>Î*ZB¡†=ÅDa1üÖß)þçðŸð£PКŠlr 0ã±±ô§S(8i—°“�ÄýjZŠõ·õÐè+RÒ@Îïá_ü~k?õÎßùË^�^sð¯þ?5Ÿúçoüå¯F¯�Æ_×Cè0ŸÀ�õÔ(¢Šä:‚Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼‰m$¬¨Š 31Àw&¸ýOâV—k#G§A. Êq½HHÏÑ�'êõÏøÿÄrjœšE´„YÚ¶&ÚÖÉÜeôõÏ ®B½\6J<õ/Œq—-1.n¯o/&º¹XÞiä2;y‡©ÿ€ôíôë�ùåýý?üMKEzê6VG”ÝÝÙë�ùåýý?üM®?ç”_÷ôÿñ5-ÄEºãþyEÿOÿFë�ùåýý?üMKEEºãþyEÿOÿFë�ùåýý?üMKEEºãþyEÿÿIç:­…€õC¸ëúTÔP++¨d ƒÐŠZ‚Aä?š¼)?¼Ö§ eù&ŽAÜìopz~µ5Esþ©ë¢èB¥£¨t:¿†¿ò8Éÿ^ÿèȫիÊ~ÿÈã'ýxKÿ£"¯V¯üv{¸/à ¢Š+„í (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Ãñ~¶Ú‡e¸„�´ÊD0g³¶yü'ð­ÊóÏŠ’°}"�­çHG¸Øþ„k|<J±‹1¯7 NHày$–ffbY™ŽKÔ“ÜÑEDÒ;©èÎs�ÊçÁ¯wŠ£…§ÏUÙ~~‡‰†ÂÖÅÔ䤮ÿ/P–uŒ…ʆn››{šBGϨ ?ì2�ú椈yCä´—=Ø”$þ;ªO:Oùö—óOþ*¿;Çg˜œMKÒ“„z$í÷³ôlE…ÃSµX©Ë«jÿr+æßþ‚øú…·ÿ ‡þ>ŸáV<é?çÚ_Í?øª<é?çÚ_Í?øªóÿ´q¿óö_ø=ììüù�þŠù·ÿ ‡þ>ŸáFmÿè!ÿ�§øU�:Oùö—óOþ*�:Oùö—óOþ*�íoüý—þÃû;ÿ>cÿ€¢¾mÿè!ÿ�§øQ›úãéþcΓþ}¥üÓÿŠ£ÏqÖÚQø©þ´hãçì¿ð&/ììüú�þŠùƒþ‚øú…J-Ø®è®Y½7#ô¦ŽT”½GU#~±yYš†²ŽŽ?Æ…™cSþ,¾ö-Á5üýÈ�Y·‘vºõðG¨§2†R¬2Á‹‚­ä_âb3ê “ý-~‹“cg�Â{JŸv~ÕÏÎs¬ 0X·NŸÂÕ×—õb(IRÑ1ÉN„÷SÓü? –¡<^¯ûQ·èGøÔÕì#ÆdMÿ‘ÿ×7þkRÔMÿ‘ÿ×7þkRÐ¥ü-ÿ‘~ÿþ¿ÛÿEE]�Õ´w–s[M“Ñ´oƒƒ‚0�qß ä_¿ÿ¯öÿÑQWm_5‰þ4½O£Ãÿ>‡�h6¾xyü!¢xjÇ]µ·iMÖŽ¢�¬Q»¦X[æb¤ä…ã°'<æ»á]Sáõß½/HêºÍ½ÝõÄ‹$žZ\ÊÊ�"+‘òäeUˆô$u¯¡fš+ky'¸‘"†%/$’0UE$’z;וMñŸÀ÷Ú†Ÿ©j¬tØî;]é葹ʓ­ó.J•8Pxç¡Ç9¹Íêÿ <]ã]'ÆZÞ¯ak¤êúÔö’Úé t%]–Ë·kÊœeÇL‚9Æx]áf£‡âÉí|cá‹‹Í}>ÊÑui/.'‘Ôd™S¡ =ñ×Þ••Ô2Êà ƒ�E-y Ç�üDÚOˆbÓÿyáù`mL ã@XÐ7ñ|܃÷sP|Dðÿ�õ=GZ±—Âo�´«È[û"ây­íæÒ× 2À3|ÁO|݇²Ñ@-à?xz†·úM‚xŽãòÛ^Ä—‰wÆli1•^@ã$(àgŽO^øcñ [¹šM_C“UÔlõŸµÁ«Ï®[æ-‹Œto›o�Ø¥j†¹­YxwC»ÕõY VvqfuBÄ(ô“@c.“ñÁ~6ñ=σü;e®ÚxŠxžùaRck �]rs…=;äàfx¿á±ã�ˆ—zž°«M4´Ôm%òã]EX„Ü\/ÞÆ{wÍ{&‘©C­h–:¥ªÈ�_[ÇqÈ`®¡€ 3ƒêjådxRçY»ð®Ÿ/Š,>Á«ù!nà#�0pX$a±¸ ñœv­z( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹�ˆWïeácŒ•k¹ß#Ðä·æªGã]=q?¿ä_°ÿ¯õÿÑRÖøt¥V)÷1®Ú¥&»iE5Ü"äýÍ."(dzIÏè+ØÅf8\#J¼ìß«ü�+ —b±‰Ê„.—¢üÇQIåÜÿÏ8¿ïáÿâhòîçœ_÷ðÿñ5Çý½–ÿÏÏÂ_äv`f_óëñ�ù‹E'—sÿ<âÿ¿‡ÿ‰£Ë¹ÿžqßÃÿÄÑý½–ÿÏÏÂ_䨗üúücþbÑIåÜÿÏ8¿ïáÿâhòîçœ_÷ðÿñ4oe¿óóð—ùöeÿ>¿ÿ˜´Ryw?óÎ/ûøøš<»Ÿùçýü?üMÛÙoüüü%þAý�™ϯÆ?æ-›.çœ_÷ðÿñ4Šä±GRŽ:ƒéë]8|ÓŠŸ³£;¿šüÑ͉ʱ¸X{JÔì»èÿ&F¿%ÛÒEÝøŽó5Dßñùýsæµ-z(óY?ën?ë ÿÐV¥¨¡ÿ[qÿ]þ‚µ-Ýü+ÿ�Ígþ¹Ûÿ9kÑ«Î~ÿÇæ³ÿ\íÿœµèÕó¸ÏãËúè}øþº…Q\‡PQEQEQEQEQEQEQEQEQEóêÌ× ÜHró“+ܱÉþtÑ!oõQ¼ƒ¦W~¤T(Åt¥aÔBÿ¾kE"Q€£·ÎóZ¸QJï¹SKç:ÍÙv*æ_ùö“ó_ñ£2ÿÏ´Ÿšÿ�[¢¾oýdÇù}ÇÒÿ«X?¼©™çÚOÍÆŒËÿ>Ò~kþ5½áëk{Ívoc2@UË b3„cÔ}+F- Þy毜‚Kv¶—q¢‘ÈÏ£ƒèA­é繕Hó'½;+œõ2,¶œ¹Z—N½ÝŽC2ÿÏ´Ÿšÿ�—þ}¤ü×ükªÖ- µºžea 9ŒKÑ’UPÝvy‡œr¿•K©é¶égw-¾ž†Ö6Ûí¤þvHí Üq�}:Õ<ó1WÖ:y1,�-vÒZù¯ëõ9 Ëÿ>Ò~kþ4f_ùö“ó_ñ«tW7úÉ�òûŽŸõkç÷•3/üûIù¯øÐæÚêÈ݃µn ¼¹Vî².?ùéÂq.Uã‰4Ú[ؾÂF„¥I´Òo~Än¡ãe=`Ómؽ´Lz²*’¢´ÿ�8ëšÿ*ý©ùç@¹ÿT?ë¢èB¥¨®ÕúèŸú©hê¯á¯üŽ2ׄ¿ú2*õjòŸ†¿ò8Éÿ^ÿèȫիÀÇžî ø((¢Šá;BŠ( Š( Š( Š( Š( Š( Š( ¼çâ§ü~hßõÎãùÅ^�^sñSþ?4oúçqü⮼ñãýt9qÀ—õÔàY|ÉR.Í’ÞàvýE\€0U�þ?“þ¹·óZµ_)ÄUg<ÂQoH¥o¹3ëør”!—ÆIk&ï÷´Q[%µ-}8üó[´[ d‘ÒD†Ð׃s»õIò+˜ôW\öÉs ºbÜL¶úw‘,O…•ÞQæ1ù<º*(´ý,èÚ%´û¢½†ßÎyT·,ë‘òp8äsÛž+§ê®ö¿ô¯þG7Öãkµÿ íoÌ娭ßìK}×ûTžN£ö`±(wdÓ�Ž[åúVŽŸ¥[Ú]ZÝÛ†F´Äñ›˜ç“�Èzjc…œŸõÞÅO¯ëµÎFŠ(®S¬‚äl_=xhù>ëÜTõ ßüxÏÿ\ÛùTÔú ©DÇ¥�áÿ –¢ñçcÿÿÐ K_£pÇûœ¿Äÿ$~oÄÿï‘ÿ üÙÇäõÍÿšÔµÇäõÍÿšÔµôçË‘7ü~Gÿ\ßù­KQ7ü~Gÿ\ßù­K@—ð·þEûÿúÿoývÕÄü-ÿ‘~ÿþ¿ÛÿEE]µ|Ö'øÒõ>�üú¿Ä½>ûUøaâ&7šò{ 8“ïIÇ*=Iïšã4OŠ¿­>ø{í÷Öw[mí-Ε,³¤ÈT¨ê6:n �árJçÖë%<)áèõ¯í„ÐtÅÔ÷—ûp³ŒM¸Œæcvpqœ×9¹ä2‹Ã~!øÙ¨i¿/þÍ¢[i1M¤[Ý]µ¬.Íþ²@r¹�Œg$ `ãŽBÞ;�hŸ ¬µë›Ë«µÛ»kyå‘’k‹@P.Xa¹—#¯¥5oèÚüqÇ®é6:šDKF·–É0Bz�T“èúeÌ–r\éÖ“=�ÝhÒ@¬mÎ1˜É/tÇJùsPð†—oá?‰M ^*xWTD‹í’ì±-(ÜÈ7rÄ 9<ךÞÔ ðŸˆ>245·³ºðŤ¿¾½6ÑÍ6üÌÉ$zŽõïïá½Ho¡“FÓÚ-E÷Þ£Z¡[–ÎwH1óœ÷9®m¾iW=¾×õ(ìï¬n´ø¬WJžÅ(ü¶Xd‘Ûmõ Ñuf¶ð¯Âûífõ×K²ñ Ä6×·�€-”팳60£ à¸à _6‘âÍKã-íœÐê6‘ÚÙÏo<å Æ˜Ü0P}ëèû½ H¿ÒSK¾Ò¬®tøÂªZMn�…á@B01ÛŽ*;O hV p¶:.�l.¡X'Ú"y±ªíTl™Bðà(åÝbÇO¹·ð>�¥]x~?É¢ýµÆ³©O”š�â}ÒDà‰WŒ) .â03ƒî_ší¾Ú-Þ­o«CòÇisoçì†À@fUr†QÁ⺖ðg…ßJM-ü7¤6Ÿ¦d´61–LcxM¸ ƒŒã5­oo ¥´Vö±$0B�#Š5 ¨ `(€ã%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q?¿ä_°ÿ¯õÿÑR×m\OÅ/ùì?ëýôTµÑ†þ4}L1Á—¡æ'›ˆûgÿA5rªøø·ÿ|ÿè-Vëæ¸—ýÿä�©á¯÷› (­¯ MömNâ}¡ü»9Ÿkt8Bq_=NóQn×>†¤Ü ä•ìbÑ]�¶�™e«ýªÞg¶n¿¸ 9÷Þ?ïšÌmÛû6êM—Ío”¦�/È1}õðIéƒÞº%„š^g ŽÃ¤û?ÿg_§Ã+ò¿¸üºxiEÚëï;ˆÖÜ×Aÿ ­K^ˆ|x¯)ÿ„fݾl°Ðà·ô§ÿÂMã¯úcÿ¾ÿû*µˆ�g÷2]×Þ�xøWÿšÏýs·þr×£WÌÞ ñÏÄ­6ãP:W€–ýäX¼Ð®v}½|·å]gü,ï‹Ã¯ÂÞ?ë£�xx©)VmÖ.4’g¶Ñ^%ÿ [â¯ý‹�ûøÿüMð¶¾(Çþ·á-ãÓcÉÿÄæ:m¢¼KþÄ¿ú$Z‡ý÷'ÿ£þGÄ5á¾êäŽ .?ôM{mâ_ðºü~Ÿ4Ÿõ¦^áZlÿèƒGü//ÿÑñýõ?ÿ#жÑ^%ÿ ßÅÉÄß¼@�陸À£þ׊-ð‹Äw?½ãÿ P¶Ñ^%ÿ ®Ñ,ñäÿüj�øhMU?ããá�ˆ#ÏNŸÎ1@ÛEx—ü4=÷ýoß-ÿÄQÿ G àî6tÿÇhÛh¯ÿ†‘�y›Àž EõòÇø ?á¥lèKñýúZöÚ+Ä¿á¦ôuâo ø�¸òSÿŠ£þwB¿…ü@ª:Ÿ%8÷Õ{mâ_ðÔžÿ ˆ?ïÄ_ür�øj'úýÄç§ú<<þrŠöÚ+Ä¿áªüÿ@¯à<üz±üYûRim£ÆÞ ´¼]EgFeÔm“Êxùܤ¬„ƒÓ¥B?ä?ë‡þËZuÂx_Ç6~#±k1o4‘Àw.Òèp:î�Ç�wuæq<ã9Ò”_F{/ B�U%ÕWBÖ6öÚ Ó#Ò_Ph‘MÄ‘™ ™ (à�A÷ë_+ ngÕTª¡¹“¥ßfê uåù›U×nìgr•ëøÕë?Ém£gÉ•Vd’7Ý‚ 6â½9þY5:)¹º¥Ô6ï$Í0Ü–YƒŽBƒ´çŽqÎibðḭ́Â|ûu–u‘¢�™·¾ÂÁ‡ü§©­éªñV‡Ÿãoø¡…G‡“¼ü»ô¿üÔ§q{çêÒß—÷“™¼·ù—–Ψ«�«ÚÄ.šÂŭ庌Æù›r*·Þ »F:w'Á¡\`âX|æƒí m¸ù†?ïtÛÓœg8íV"ÐM¾©i ìÖîZxRk`ì+‘ì㺓ŠQ�ké×Ó¨å*³éëÐÄ¢¶.ô&K‚Ö×Ín×/ÿ0…„ŽpÅ€íÜdqU/tÖ³¶·¸[ˆn!¸,âÝÕq�CGQYJŒã{­�cZµžå*‚óþ=ÿàiÿ¡ ž ¼ÿ�øèB¯ üxz¯ÌœWð'èÿ!µ§üyÃÿ\×ùTµ§üyÃÿ\×ùWìÝOźÏú¡ÿ]ÿB-Esþ¨×DÿÐ…KGPèu äq“þ¼%ÿÑ‘W«W”ü5ÿ‘ÆOúð—ÿFE^­^;øì÷p_ÁAEW ÚQEx¿ˆ~*jþøüÚV¥1 yE8òW�(ùe.ìn98Ã3Š«â?ˆž)°ð·Å ËMSËŸAÔíàÓŸìñ!TV+†È'–É®ŠÿáÝLj~&xºMnÇþ$:Î� œwbæ)!s�T€À‘Œ�\�¯Ûü#ñÞƒ}eöÍSR»µûý¦/ô´ŠTËä·Ëò®~r úÐwàK­^ÿÄVo?ÆM/ÄÑÚIô‹[D‘ÁB>ônYv±SœvÇzäuˆþ5ºñæ»i¥x†ÂËPÒõEµ²ð�å´QiC½T0¹���Ãn '·lûƒàïh>MΙáí/O½„yílãŽNƒ#rŒõµäž:ðo�|Jº¶‡©øOIñ\ÜÓd6FOJv• …·Œm ²û@h¥š9L¥X)ŒמOST¨ÕN1rµÿWoó%×¢Ô¤£{k÷+ÿ‘–þ!ÔÝ•¾ÐªVo?ä‰/‚7Iƒž½óHuýGlj³",EŠ*@Šr•l1È'ùõ­4»W³–RÝÀ’Ú\±C('1�Á!FT‚21øÒÜh6&[»K3p.mã‰ÃË"ìmå ‘�ýsOÙâ-~oÇÊäûL=íËø.ö9º+{VÑll­®|›€&¶� u™ùÁ!”Áç£=þ|�†Ñ¤9\|ÇqBŒã¥gÙüŽÏáΑáèµùâÔô[·½°Õà·ÑHÌ[˜ËËÎÏ8ü(ºüXÖü7‰ì!Õuûaiq~aK*%û‚8×*¤¸%GsGKø?­Câ/ ê¾ ñÔÚÐðîô··“NHÔÄP \‡Îî9fÜ[Ó$ްý¥'ºñE»2hçF¹¾Ëb‰r/㌶Ñ39_$ÿ{h9Áǽkêß|Ceñ3RСµÐ-ítëÅ„Øê3½µÝÌ_.eŽW+È`ʤî# =k¡Ñ>j:¡ok§xãT·ðµ­é¼‡E·ŒDÀ’O–× w4e‰Êc{üÕ‹¾ ê,»ºµ¹ñ½÷ü#×—‹w.™uh—RDÀü ܖ„c 0#ªQMŠ$†Š1„E  œà:šuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÄüRÿ‘~Ãþ¿×ÿEK]µq?¿ä_°ÿ¯õÿÑR×FøÑõ0Ä^‡™øø·ÿ|ÿè-Vêœ�¾VA–FܯoäjQyñ,€úyl�¯ ˆðµåŒö‘‹i¥²>ƒ†ñT#ƒtå$šowbzšÞêkVv�ö#hÛ€r¬0G>ÕKí‘ÓOûôßáGÛ"ÿ¦Ÿ÷é¿Â¾qa± ÝAýÌúW‰Ãµg5÷£SûZûhS9 [›` Ž#þïO×­Húö¢ðIL¥eŒG)òStŠæÆIã©9¬¶EÿM?ïÓ…l‹þšߦÿ ¿e‹þY}ÌÏÚá?š?�­ýµ~.&›Ïýäò$²6Åù™NTôìiF»¨ÚfWO›(ñ#)ÜÛŽA?7>Ý«#í‘ÓOûôßáGÛ"ÿ¦Ÿ÷é¿Â�g‹þY~!í0}ãøº…Σ2Ëy'˜è�… …zÕjƒí‘ÓOûôßáGÛ"ÿ¦Ÿ÷é¿Â¡áñwp—ÜËŽ# e8ýèž«\ÇÜ_î?óZwÛ"ÿ¦Ÿ÷é¿Â¢,fŸÌ*UUv¨=NzŸÐW­’á1N\�%«Ðòs¬fê5"¦›z-HŒ1�I&¨”ÄÊ_oÌFWŒúUЉ¿ãò?úæÿÍjZý=—²(ÖÜ×Aÿ ­KQCþ¶ãþºýjZ™Ýü+ÿ�Ígþ¹Ûÿ9kÑ«Î~ÿÇæ³ÿ\íÿœµèÕó¸ÏãËúè}øþº…Q\‡PQEQEyÏÆê¾ðÞ›&“x4¨ïuí®õsiöŸ°ÄrKˆú18Ç ñ�9 €F¢¼ïá÷ˆAøµr�þÏú§ˆæ[Ÿ‰¾9Ôµ†Îï²Û1X”úÙú*× xoáW‚|)±´Z,ëÒâuó¥Ï¨gɆ(Ï?áp|Bñ—ÉðãÀGnü&¡ª�Q’«ŸøQÿ �â7Œ¾oˆ¾?– gûú~–R=6¯èÕîTPœøoà?€<7±ÓE]Já嶤Þy?ðòãµKâ¦�§jøvqe ½¤W+ÔF ‹ †O­z�yÏÅOøüÑ¿ë�Ç󊺰i:ñ¹ÍŠmQ•Ž?øþOúæßÍjÕU�þ?“þ¹·óZµ_#Äò2©òÿÒQö\?ÿ"Ú?ý)–a’êÊ34A£KˆÞ-å8u<0�åO:µé3ä}›ì¿tªÎvôýzÖí�´vWqù±m¼fMÅsµwG¸Èl´Ù-m/¦³X–ki‹*ù­ :¾›¸R8àõÅyê�K{²²ÿ€¿ÌïuéßÞ�Þ½»¿ò2¥×µ£•uÄÀ Šς$�’AÈ¡µíE®#›ÏU’6gbEË0Ã1`’;œšÜ’Ò8´»»H¬âe¸º¶h–)™²®§Xãñ¸w9Ï$6›rÖå­­×þ&"ÚE·–RíbU‹pX9^+Oc]»)þ/¿ôÌý½®á§¢ì¿áŽf=Ròe‚9±¤ˆhá_‡Nø¯ªÞÉ$ò4Ù{„Xå;@Ü«Œœ}ÑÓÒ¶¬ìtýBÆ+Ñd±Þàt‘ÏŸ²0ê2I óÎ=JŠÆÂÎâ;ÛÛ‹4µX¡‰ã†v”ÆwùFý¼qÉëÖ³öU]—7âû–†¾Ú’»pÛÉwÿ=LË�búòŠâ`ÊåL…cUié¹€¿j�uk¦é)p߸Jðù_iIÖ˜e‘\Ùî 1ù×5w¶½ž]¦)Ý»8ëßëYV§8ûÓwüMhT§/v·ÊÅ;¿øñŸþ¹·ò©ª¿øñŸþ¹·ò©]Äq³·FMaÐèêRñécøè¥¨ Ý$pî,hAN95=~�Ãøz”0¼Væmü´ÿ#òþ!ÄS¯�ýÛ¿*Kç¯ù‘7ü~Gÿ\ßù­KQ7ü~Gÿ\ßù­K^ùóäMÿ‘ÿ×7þkRÔMÿ‘ÿ×7þkRÐ¥ü-ÿ‘~ÿþ¿ÛÿEE]µq? ä_¿ÿ¯öÿÑQWm_5‰þ4½O£Ãÿ>�EW9¸QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWñKþEûúÿ_ý-vÕÄüRÿ‘~Ãþ¿×ÿEK]oãGÔÃüziEWÓ8QEQEQEQEQEDßñùýsæµ-Dßñùýsæµ- "‡ýmÇýtú Ôµ?ën?ë ÿÐV¥¡;¿…ñù¬ÿ×;ç-z5yÏ¿øüÖë�¿ó–½¾wüy] Â?×P¢Š+�ê (¢€ ã>#Úx®}:ÊoÛÚj±E6ÝKC»Ô­Û“|€…#“Ô �Ø {:(É>xÄz]ÇŒuQ¦Ûx-õ¤TÓôËiRå,äT#Î8ÌÙÚ¨À¬xßÄ>0ðÍÖ½á7EÔ4}AnµÚ]C¿ST##ÊŒó€>ðãž§Þh ,ð?à DÕü_wãO é—O¯ÜÝXËyoÃ5»¶Tƒó“´àûVŸÁ� ê¾ð$ºn¹d,®¡<©‘ylFÓ”$t+Ð( Š( Š( Š( Š( Š( žm?ãÎúæ¿Ê¥¨­?ãÎúæ¿Ê¥¯­[*÷ (¢˜rÇI½ÔQÚÊ*¡Ã@Áüj×ü#Çüù·ýô¿ã\“Æa©ÉÆu"šîÑ´põ¤¯¶½“EtÖ¾ ¹šÙ^âámä9Ìe7øƒYšÎ‡>�*ù„Ip²Ž2qÈÅcG4Á׫ìiÔN_ÖÏfiS^œ=¤ãdfQE蜡EPQZÇœ?õÍ•KQZÇœ?õÍ•.¡Ð.ÕúèŸú©j+ŸõCþº'þ„*Z:‡C«økÿ#ŒŸõá/þŒŠ½Z¼§á¯üŽ2ׄ¿ú2*õjð1ßÇg»‚þ (¢¸NТŠä޺LjmëÖÞó¥Ï¡TÉŽ(¯¢¼>_ÚUñ$ÍmðËÀÚ–®ÙÛö«¥+p¹úºÓá øÓã~|Sâ» Ù?[M7™wB2>²õ�Æ^ð´EüC­YXq�“L·Ñ>ñüy–¥ûHhóÝ›h¯‰¯OÜÂcF÷ÿÇE_Ð?g?i2‹�Z;½zì�Í%üÇio]‹€~�º½7MÒtíÐZéÖ6ëÒ+hV5ü” ñ�ø¿9ÿ ‚ìèf+ÿ�°?÷Å[Ó?fík±}ã�{Uñ5éûæiš4ocÉüxW³Ñ@ºƒ¼9áh‚x{E²ÓøÁxaØ{¿Þ?‰­ª( Š( Š( ¼çâ§ü~hßõÎãùÅ^�^sñSþ?4oúçqü⮼ñãýt9qÀ—õÔà�Ùu„ϹÁþ•nª²‡R¬2 $ñŒ ²ŽÅŽÓüŽkËÏr|EzÿX ¹¯k®ºhzùs‡¡Cêõß-¯gÓ]M»¸Œ K‰TF FÝß{™ïëNŠþî‚êhÌ@ˆöHFÀzã3YßhŸþxÇÿOÿGÚ'ÿž1ÿßÓÿÄ×Ïdf+þ]³è¿µò×½Dhÿh^×>鱿Ÿ4åñÓ<ó�z‘õ}JF ú…Ó0 ‚gbA;öÉüë+íÿÏÿïéÿâhûDÿóÆ?ûúøšÙ9—üû×Ì_ÚÙgüü_×È¿ÕÄ!3ËGÞ��­Ó#Ðð9§.¡z·mt·s‹†3 Nóøç5�ö‰ÿçŒ÷ôÿñ4}¢ùãýý?üMÙŠÿ—lÚùkÿ—ˆÓ�T¿Ši&Šúå%—ýc¬Ìþ§<ÕbI$“’zš«ö‰ÿçŒ÷ôÿñ4yóÿÏ(Çý´?üM'”f/GM‚Î2Õª¨‡^6-$^¥ÆÀ=I¨œÉ9` 9Ùœ“õÿ ³>ù[s€péO¯ªÊ¸~’«ŠW–ét^½ßà|¦mĪÝ,+´vo«ôì¿¢Š+ë�‘"oøü�þ¹¿óZ–¢oøü�þ¹¿óZ–�7ü~Gÿ\ßù­KQ7ü~Gÿ\ßù­K@—ð·þEûÿúÿoývÕÄü-ÿ‘~ÿþ¿ÛÿEE]µ|Ö'øÒõ>�üúQ\æáEPEPEPEPEPEPEPEPEPEPEPEPEPEPE›âvÓÃ>¿Öµ"ÂÖÆš@ƒ,Øt{“€=ÍiQ^=ÿ çÅ(<,¾5ºðÞ�ÿ÷”oMIåû|vÜ�ÅÏîòÓ8þx]ÿÆi6ÖsjºâÚ}·O‹R� ž j‘µN[9Ê�˜`’0  ÚŠæ_â7„£ðjø­õËq¢± ·Xc–Î6ìÆýßìã>Õ^?Š~ ›Áóx¢r94x$M:Ã!hܶÐ=»ÆIW¡ÏNh®¢¹|Ið‡‹u›­+úÜ7×¶ ´‘¢8‚ÊÌqžêH䆼õ~.øÂÿ\ÕîtLÔtmU6:Tlš³F¤)œ"ñ·'Ó±‹PµQ^nß´åøØ| +E+m°NRFy/“lC $œƒÇ#:ú/ůø‹ÄØZ7ˆ!ºÔK:¤K�d+œír¡[¡#är3@�È\|UðE¯‹†§ñ ºjÞh„õʬŸÜ2Ø<`¶sÇ^+'Oø¥®µã$ñdö–nƒ ¥´±ÆæI|Å8Abí‘ÑW¦xâ€=¸ŸŠ_ò/Ø×úÿè©k³ŠEš•u ¡Vúƒ‚±æ¸ÏŠ_ò/Ø×úÿè©k£ ühú˜b?ƒ/CÍ(¢ŠúcçŠ( Š( Š( Š( Š( ›þ?#ÿ®oüÖ¥¨›þ?#ÿ®oüÖ¥¤Pÿ­¸ÿ®ƒÿAZ–¢‡ýmÇýtú Ô´ gwð¯þ?5Ÿúçoüå¯F¯9øWÿšÏýs·þr×£WÎã?�/ë¡ôOàGúêQErAEPEPEPEPEPEPEPEPEPÏ6Ÿñçýs_åRÔVŸñçýs_åR×Ö­�•{…QLãÁ vîg Ÿø ÿ�tuÍø/�AÛí OýòµÒWäÙÇûý_SíðîÐô æ|l¬öV�±ógµtÕŸ®êÙº<Ó)ÄŒ6Gþñïør Ë,©:XÊr„nï·®…ã!áä¤ì�4#ƒEWë§Â…QL¢´ÿ�8ëšÿ*–¢´ÿ�8ëšÿ*]C \ÿªõÑ?ô!RÕ=NöÖÆÔK{q¼aÐî•Â�¼=k™Ô~'èV¯åXyú”äáVÞ3‚~§ 5œê±¤iÎ =wá¯üŽ2ׄ¿ú2*õ9çŠÚšæT†$g‘‚ª�ROJùoÂZ¯ÅëÌžÓ­´)$¶qö‹ì‘îLŸ˜ûz!®âÙòÿÄ­×Ä¿êzÔ€îû5»•� -ž>еàã&§U´{˜H¸RI�Oˆþ<ü?ðÞô}djW ÿ,tÕó‰ÿ�ðŸøõrð¶þ#øÏäøwà-íŸîê¡!HõÚ¹üZ½ß ¼áM�¢øzÎ9“¥Ä©çJ¨wɆ+¬®C¨ðßøSß|eóüGñüÉnü¾Ÿ¦�C€©Ÿø }k¯ðßÀ¿xkcÅ¢&¡p¿òßRo<Ÿ}§ä‚Šô:(‘E¬PF±Æƒ ˆ¸ =ú( Š( Š( Š( Š( Š( ¼çâ§ü~hßõÎãùÅ^�^sñSþ?4oúçqü⮼ñãýt9qÀ—õÔá)…™¤òâ]ÍŒ’Nýiôë1û¦ní#gð8þ•®y˜TÀáÓ¥ñIÛМ‹/§ŽÄ5W኿¨ß"ùëöòÉþ´}žùíýú?üUY¢¾ûg0ÿŸ¯ð>óû/ÿŸKñ+}žùíýú?üUgŸþ{Gÿ~�ÿVh£ûg0ÿŸ¬عüúEo³Ïÿ=£ÿ¿GÿŠ£ìóÿÏhÿïÑÿâªÍlæóõ‡ö._ÿ>‘[ìóÿÏhÿïÑÿâ¨û<ÿóÚ?ûôøª³EÛ9‡üýaý‹—ÿϤThçŒdí”w 0*U`êNAj©¨Û4Ê: 8ü@?Ö¾— ͱŠÎ…wÍ¥Ó>g?Êpøj*½Ë­šEWÚDßñùýsæµ-Dßñùýsæµ- "oøü�þ¹¿óZ–¢oøü�þ¹¿óZ–€=/áoü‹÷ÿõþßú**í«‰ø[ÿ"ýÿý·þŠŠ»jù¬Oñ¥ê}ø1ô (¢¹ÍŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ÿxv_ø XЭåXf½¶hâwû¡ú®}²}« ¢€À¿'–eÛ÷~ltÏ=ò&‰þühð½¸Ñï|Bt�Ç«¦À%œ:D2Ç Ÿ˜ãä+ÐöOxÿÂþŽñN¯‰¸8Š=�#·¾Ä±Ç\c8æ«øzOxËU‹ÇšBñmŽž/#•ÁH÷o1´d�§'?2†Áˆ ºøâvð¶±ý‘«ÙÀÞ)—Xm'L";ëKiª4kŽ$\p ddtç§à½Rçá/ŒotÝÅÒ\ê×Vb(õ¹¾Ó}t±IÌ� F09-�3Àý5Ey–¡¢]ÃûExvúÇL™tÈ4)mžæ;sädžm±—¶{×›x×GÕõ�RüKðïU´ñìwêšv¿¡E$VRF•äÞT1RrO#%p@úÛ^Òï5ëÍÖö9µ ã–ê$˜Uó·qè ÚNÜç8ÁРÖm¼E¢|q“U�B½ÕŽ¥á�ìè®mí|Ëe»Þï› $yNIìÃŒdŽ'Âú?Š/¼aà-GRÑ|QömÛC|·ZtvÖ6¤�—ìðD£bcïH@�Í}'ªjvš6“u©êRù6vp´ÓÉ´¶ÄQ’p'�Р˱ñ·‡õ-KM°²Ô<Û�RÄjqù26ïä®ÐàûP’xtjÞ·Ôü©|5½ñÝÖ¹%Ô7RÀ§O��Y¤œ«`yRFàñY:·�UîèãydXâFwrUFKÐM­Ÿ ÞKaân¢²–ðFøáBΪF qŸéÆjfÜbÚ* JI2àÖ¬&KX¢¿¶–nVWFp;ÔOªj‘»$—×jÊpÊf`Aôë]õª5Æ©¢ßYj²ßé¦åÑås,NcbFò2Ãצ^µ•¥iº®Ÿ{sa§K܈€í¸$Ï–Áê0¹Ï§çÞŒ¥z”×­—{ks¹Ó©û’—K¯ö¾¥ÿA ¯ûþßãQO{ut¡nnf™AÈHXø×k&ƒ£Üé¦TÓ’ÒâÞö(&Ž;§—«…db@ù¿‡?^Õ2è: ƹhšzA˜›Ý¥»uY‰n<ìQÏ#žžà¸Ë ÍvkÉ]It«IYÏ7ýt<öŠÞñVŸ¦Y\ÛɤOnÉ2~ò.<剆:7\ òoˆ~!Öm-ÛOÑ,/uýõêBÅTáR_SÛ··\«ÅSö‡:£'SÙ�Ø9ŠÏÔµí+G\êwð[œgk¸Ü~‹ÔþUæÞÓ¼Mâ�!ÿ„�¬,-Ùü¨Ô‰88Ç#©®§Møeáû&ó.£—P›9/rüþèÀüóYƵJ‘NûÍ%J�7iËî*ÜüP´šcoáÝ2óUŸ¶Ä*§ß¡oÐUhbøƒ®ÛÆ<ËmÔ¨¯ß+޽Îïšïm­-ì¡YÛÅoè‘ P?Kiÿpÿ×5þTý”äýù}ÚÁµ„W¹¿Sˆ‹á�€as®_Ýê·Ô1‘Ê©Ë{–ïë]v�¢éºJmÓl`¶ãÆ€õ=OãVnÕúèŸú©kHQ§î£9՜׼ίá¯üŽ2ׄ¿ú2*õjòŸ†¿ò8Éÿ^ÿèȫիÅÇžÆ ø((¢Šá;BŠ( Š( Š( Š( Š( Š( Š( ¼çâ§ü~hßõÎãùÅ^�^sñSþ?4oúçqü⮼ñãýt9qÀ—õÔá)ÖñïÿýÓiÖñïÿýן¯èz)üzžŸ©=Q_~‚t¶×ÞŠ)öiå0JÜÌŠ¤FO¡ãß¡¥[ìK™Ÿì–ðÙÛoò¡ÜÏ#¦zdÄ’Oó¬�í ¾Ãªá ZTuÈ`ÇóþÈ«×>$¹¼¸žKË{i–tE’&V J}Ö ƒÉè{šîö”e5®Ÿ—ùœÊ´gx½5üÿËñ'‡$ ¼âbÓ¤dˆÈÂ:†Gúœúc½?Oðìz’Ÿ²]O!&@®¶„Æ»s·{gå'8Ȫ‹¯^­ÝÝ”VºˆÄÊ«…UÀh0©m�üúQ\æáEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP•h- ý§øCDzø×_¹¼ŸWKW³šì½»ÁçJ¤:ž]‰Só1<01î¾øcàïËs/†ôH¬åº�Ê–S,’¹NêØ•¸g=Iÿ çÂ¿ð‰Øøgû+þ%ý¢ÚÛíþîMÌû·nÜ~gc‚H怌–ël¶²’ÁQF NàF;�<Ћø†]Oš—Œüð8êZ¾�¨I¤x�Á:”yÒÙü>yÒôá5¯ˆOâ/ k·wwóYë—n_Rñ¬–×q³|þE¡ÚѲv¦HÆÜH®Óàõ†©¯jºÏˆµ�k—+§ë—––Ús^±¶Ù€>t<¶7ü£8\vš¿øoÄo®èž·µÔ_y«;,{Ž[b+§Ê `+kAðÞ“á›{¨4K_²Çwt÷s/˜ï¾WÆæù‰Æp8{P¥q?¿ä_°ÿ¯õÿÑR×m\OÅ/ùì?ëýôTµÑ†þ4}L1Á—¡æR1UùFXœ(õ5"Ùnj̭ܸÈüFãâ÷Ïþ‚Õn¼N&ÅUx…A;E$íÝžÿ á),;®ÕäÛWìˆ~Émÿ>ñß�²[ϼ_÷À©¨¯’»>ºÈyÑq§ ÿ±Göc'•æm_½Œãi—RZ²,ö‘!’5‘~U9V�jé¬/"¶ðÕ¤7™6wWE>J‚©‡ÕNçëWu '…çŽÖ¯/íímcEò„¿&Ü;*œç�¼ààzîúºq¼_oÊÿðÇÖ\gË%ßó·ü9Ã}’Ûþ}âÿ¾d¶ÿŸx¿ï�]‹Yi÷�Õ´‰Õ’êQö<èÁ³t¹«Z5‚Þ¬=¤ ¡,Œ!³VQ�À)#a€©è=iG 9K•?êö±pŒyšþ­s„û%·üûÅÿ| >Émÿ>ñߦ¢¸®Îë"²[ÏÇѨ� »® 11Ç';OøUº‚óþ=ÿàiÿ¡ ôrÜ]\>&v“óG›™a(âp³ŒÖɵäÈþ?#ÿ®oüÖ¥¨›þ?#ÿ®oüÖ¥¯×ÈH¡ÿ[qÿ]þ‚µ-EúÛ�úè?ô©h@Îïá_ü~k?õÎßùË^�^sð¯þ?5Ÿúçoüå¯F¯�Æ_×Cè0ŸÀ�õÔ(¢Šä:‚Š( Š( Š( Š( Š( Š( Š( Š( Š( žm?ãÎúæ¿Ê¥¨­?ãÎúæ¿Ê¥¯­[*÷ žÊúçN»K›)š�ðËþyÕu^¶‚âMM§†ÎVŠÔ¼fñ�=[=©ô¬êÉB µsJQršIØÍŸÅšÝÅÔ_³InKEò( HÆp Á=EW�\Ôa†X¢¹*³N. ¹2lã#�:W]oÛu¸-|¯ 7îd}ÖVþjñŽdséUdðâêö>†Í"·i-d–âe�’^H±ç�­s*´•“Š_Ó¡ÐéÕz©7ý%ú˜—-×.�ìà”;Li€Q·)þ} W�^ÔâÕßSŽé–òN@£æã+Œƒ·jÜ>�êV�Ç}þ�r®ÂYmÚ7z�-¹Ï§¯5_þ;\‡N²¾i Fe•¦´’‰Aëµ¹löÇSéÖ­TÃÚÊßwõØ— ÷»üÌmKW¾Ö'Yµ+†�Ôm\€À`U:í¬¼nšåŠ^]É-•Àr¡­Þw^J<¨#'=À#Œƒ\–£ ½¾¡4Vsý¢l$› gð<ûV”êS“å‡ägRœâ¹¦V¢Š+s¨­?ãÎúæ¿Ê¥¨­?ãÎúæ¿Ê—Pè?ê‡ýtOýTµÏú¡ÿ]ÿB-C¡Õü5ÿ‘ÆOúð—ÿFE^­^Sð×þG?ëÂ_ýzµxïã³ÝÁQ\'hQEQEQEQEQEQEQEWœüTÿ�Íþ¹Ü8«Ñ«Î~*Çæ�ÿ\î?œU׃þ<®‡./øþºœ%:Ïþ=ÿàoÿ¡m:Ïþ=ÿàoÿ¡ââ¯àSõýC…?�SÓõ'­i´hâšE»Íü�04D(óFœdg�׌ÖMhÉ­O"DD6ëq—þ’26Ï»É$zt8Í|->K>sîê*—\Ÿ×üìŠòïɲ¾i<»‘o9x6ì'8aóÀ•#±éÅ:ßÃÖW_dòu9Û$x¡Í®>e럛�Èç¯=*ºxŽâ+„šÞÚÖý¢A¶%~Û²Ç�“ÀÀç¥WµÖn->Ãå¤GìR¼±î’ØÎyéò�JéæÃ.ŸŸuçÚÿ3›—þ×åÙùw·È·� ÑÚF·Íö»È ÑÅä|£à¶{í=�áL] |×W¹!RÁoIäà…;qŸöºûT³ë« ¥‚YGO Ÿ”Ó²7™l€sŽ„sƒŒœTð�OöV‡ìÖÛÚØZ´Û[yŒ ÷±éÎ;Pþ®´ÿ>ßæ ë/_òïùXÒ¾ðÌ/©]›t-`®È-ÌÎ]”»¦9$‘ÉÆ+ S°}/RšÎVÑ67Œ‚2;pzU©5ù§i>Ókm2J¨$�Ãá™ðÀ†Ç¥gÜÎnn^cqï9ÙUöVuåFJôÖ·ÿ?ø”#^.ÕÕ¿Ëþ TññqþøÿÐV­ÕAÿï�ýkÚá¯÷ÿ“<^%ÿpù¡ÔQE~–~fDßñùýsæµ-Dßñùýsæµ- "oøü�þ¹¿óZ–¢oøü�þ¹¿óZ–€=/áoü‹÷ÿõþßú**í«‰ø[ÿ"ýÿý·þŠŠ»jù¬Oñ¥ê}ø1ô (¢¹ÍŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( £¸%me*pBíÅIL™ �H‹Õ”�Ÿ¥|Çà‰^ O†þ•âMNùïot{ÍGCÔ¥¹f•ü°é$bBwnSqÎ@Éàb½'Oø‘{£øÁ:u†•wâ�k:TS¥¹¹–U�KÉ$Ïœwäç'<ŠÈŸà]ýïÀ½;—WvQø‡K–imo"‘ü‘æHÅжÐÛYåêP+bo†ž%Ó¬|ªx_QÓ"ñ‡´ÅÓ¦Žõ]­.£Ø ÊŒ‘Ç>Ô3ük´·ðf£©_hW–úæ�|ºlº�3µËýÅYÃ)Á;€þ€xÏ?§ø÷]_�×2ø¾ÊûÖv–êëJkáqÙ!o9v¬Jñœ�Gj¹qðkYÔ|'«Ï¨ë6‡ÅúŽ©¬."Œ‹Xe‡"8À#q@†HÏ#ƒŽ^Ÿ =Ô4o+PÐ&Ò='ÍFæ%J‰ÌKdž§ÀÍXðwÇkOø¢ÃI½Ò"ÓãÕwÿgͫӱpDŸ4$ŽÍߎ٧ø?ãTþ1ñvÖ>¹:D× ê^$òCÉÓۨݶÓËzÖªxá>¿ ëºlšÀðœ6:DL�ÜizJ}²ôãj<²H™Fœ¡É9=k>?ƒ^(ºñΓ¨ê—~HtÍHÞ¶±§Yµ¶£x7oÛ* X‰'žH99 €{…Q@q?¿ä_°ÿ¯õÿÑR×m\OÅ/ùì?ëýôTµÑ†þ4}L1Á—¡æGþ>-ÿß?ú Uº¨ãâßýóÿ µ[¯™âO÷÷è�©á¯÷›%··šîá ¶�¥–C…E&¦¹Ónm Y¥XÚ&b‚H¥Iv3‚T�;·áÖ_·O eYn-d†bÃŽOLôüjk *[i!þÚg²³šæ4xf-˜ÉÇ ÏÞ8<׋ *QO¿Ü½OnuœfÓé÷¿CŸRLÅa�¤` ªIÀ'ò®ÆÆÈÉuký³¦ÛÁ9½dH¼…Œ<~[ò�¼ …Ãs×­3J›ÌK „··[›ˆ¯"ÄVÈ7í@Tmçý;Ö±Âj®ÿ z™”±š;/ÇN¿äqÕ4³\¬Í nÇæIÈW gó"º‘FîÒÜÚZù§MÇ�’ãñ“þïLŽ”�‹N¸iíã¶¾}2CqF#ÇïSi(8RG°¤°»¶ö‹Ù%¹ËÝZÍeu%µÊl–6Úë�p~¢¡¯@º´·}Jy"¶k©ù…Ê­¢NBñµIfX#'wëÅsšÇ“�b–�ĉ1˜—1£9 ) óòx‡Ÿz+a}�Ýô_æ¿ÏP£‹öœªÚ¿òoôШ/?ãßþŸú©ê Ïø÷ÿ�§þ„+,/ñáê¿3|Wð'èÿ"ÿ�Èÿë›ÿ5©j&ÿ�Èÿë›ÿ5©köcñb(ÖÜ×Aÿ ­KQCþ¶ãþºýjZ3»øWÿšÏýs·þr×£Wœü+ÿ�Ígþ¹Ûÿ9kÑ«çqŸÇ—õÐú 'ð#ýu (¢¹ ¢Š(¬/x×ÃþÓá¾ñEÿØmç—É�ü™$Üø'E' 5»^KñçíØð7öGÙÿ´?á'µû/Ú·y^o;7íçnìgã8 ¿ÂŸ¼ã{é¬ü1­Gys y� †H›nq�Wpñœdg¨®®¼–/øÊ]øßÇ7Ú,7zn�5­”:ÊnK»Éó nàFN~\ÜM†¡âMà=ŸŒ�‹õ›�SYhì^[Û£-½„M9S*£ ä“ób€>�fTRÎBªŒ’NGE×4ß鋨è—qÞY´�Ov±G(Ø'¨ÊžG¨$W�½–©á¿ˆ à›kšÖ�¯h—N×w‚[«'U;eŽLeCccÏ^1Åø.}OFø=á+]7ÄZ†›Šõ†³º¹3�¶1¬’ ÈýÓ?R}Fx ¨è¯»ñ/ˆ~êÞ9ðö›¯ßx‚ 7CMJÖãS�\Oc;R¬øù²ÌŒKmxnÖóÂzež½ÿ ó[¹Ô4I/‹ª\¬ÿm•a2î·ƒ"ƒœ… ÇSÇÁX¶þ0Ð®Žµä_ƒý„̺‰1:‹r±ä�›€OËšðØ5_iðÏÄHüs©êšž¯¨EΕ4êÖs,ŽCC#„e0qŠšêy¯Åm>ÜŸ´ký¶™I�„gÿ-@·®üOðw†´½?P×5¸í Ô¢Y­U¢‘¤‘wòÕK�Žä 2w~¸ÇqÞ€;�ãW€¿ö‹Û§Ù _c¸MÍ×dtîjïˆ~)ø+ºòhÚþ½¥û&#�°7MìªU=~b8 ô9ª^ÿ…§ý©eÿ /ü!ÿÙýŸö¯´ciÛ·ËœíÎ{f¼çÆ:mÇü$~<ÕüªiZµ‹BÅ:¬’DËå!Úc�=7�C(»pÐë$jñ°t` ²œ‚=E-`xP³Õ>èWš]£ÙYÉa‘lò0 Pn<¶1�Ǔַèç›Oøó‡þ¹¯ò©j+Oøó‡þ¹¯ò©këVÇʽµtmb*×QŽbŸé–íÌÄQƒ¸ó÷G'è TTTƒœyQ­ÆR’ºû¿FlxY´Ðu3vn ¸ýÛ)Er2Ðí9oö>ðÏ `ãJÓÆpYfˆä·"Ɔ@%oß#m?) 0ü—–äpqÊâŒW,°Ó›¼¤¾ïø>glqXx+FÿÀ—ÿ#ät·Þ%Ó/¯ yÂËi,ÖòjÊ\ž…XŸ¾8ùÜ2r:íºþ>‰/-^ÙàX-Õ·£ÜI3Ê­Œ�# îéò}áÆG7b“ÂÉ«9/¹ÿ™KAj ÿð%ÿÈ�oü&V#\²ºKˆâKmÍåÜ_M*É•#ï°![îà7n¼sQžÆæúIôý‘Å!ܰ+34c¾ì€AÎx?‡&®¥t¨Nœ¯Íø?ó3­ˆÃÔ‡,`Óÿü¹WO0¢Š+°ó¢´ÿ�8ëšÿ*–¢´ÿ�8ëšÿ*]C \ÿªõÑ?ô!RÔW?ê‡ýtOýT´u‡Wð×þG?ëÂ_ýzµyOÃ_ùdÿ¯ ôdUêÕàc¿ŽÏwüQEp�¡EPEPEPEPEPEPEP^sñSþ?4oúçqüâ¯F¯9ø©ÿš7ýs¸þqW^øñþº¸¿àKúêp”Øe;$‡j³eXôÉê)Ô‘ƒÈ¯G2Ëá�£ì¤ì÷LáËs åõý¬UÖÍyAÈÈäQT¾Íë ÷À¤û4óÆ?ûàWʪµçêû™õŸë]/ùôþô^¢¨ýšùãýð(û4óÆ?ûàRÿUjÿÏÕ÷0ÿZèÿϧ÷¢õGìÐÏÿï�GÙ ÿž1ÿß�õV¯üý_sõ®�üúz/QT~Íüñ�þø}šùãýð(ÿUjÿÏÕ÷0ÿZèÿϧ÷¢Ü³GùÛžÊ9'ðªÑ†Ã3Œ3�Äz{R¤QÇ÷Wè1N¯s)É#€›©)sIéèxy¶w, ”c˯¨QEôGΑ7ü~Gÿ\ßù­KQ7ü~Gÿ\ßù­KH›þ?#ÿ®oüÖ¥¨›þ?#ÿ®oüÖ¥ Kø[ÿ"ýÿý·þŠŠ»jâ~ÿÈ¿ÿ_íÿ¢¢®Ú¾küizŸG‡þ }Š(®sp¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®'â—ü‹öõþ¿ú*Zí«‰ø¥ÿ"ý‡ý¯þŠ–º0߯�©†#ø2ô<ÈÿÇÅ¿ûçÿAj·Uü|[ÿ¾ô«uó€UË�òÖ%‘#d‰‚Èb™$òÉé»i8äcš4V¼MfÙôÔY.•³60Ür9ÇQŸéZöñéÚŠÞùÜèæ(×ÎrÑ0ÞVÈHÀÉW‹J”g=/O¿T{ukJòÓóõû´g5EuzšéñM©X I\Áò’+SÜms r̸ÆKuÎx©/’ Ÿjz2Ú[F¬Œ¶¾T¬²|ÀgœøÕ¼-´¿[|õÿ"-=yz_å§ùœšÄÏÈ mLdœúr”ÊìÖÂÁ…̓C �io$Ê£qc'ïî½ÈëÚ©,ßø‰,ï,b†Ñ/Þ,Qýqa€z¿7^h–«+êÿ;´(âÓ»¶‹_•“ýNfŠêâ’ÂælÉ¥\Þ<+”‡NX üÈÛîéÀnxëɪ¼I6“í´–³B$ò̉h-äFv²¯Ê@¨ÏZ‰aí$ÿ¯ëµüì\qÒQjß×õ½¼®aÔŸñïÿOýTõçü{ÿÀÓÿB°¿Ç‡ªüËÅ~�ò oøü�þ¹¿óZ–¢oøü�þ¹¿óZ–¿f?"‡ýmÇýtú Ôµ?ën?ë ÿÐV¥¡;¿…ñù¬ÿ×;ç-z5yÏ¿øüÖë�¿ó–½¾wüy] Â?×P¢Š+�ê (¢€ ËÖ¼5¤ø†]:MbÓí¦]¥í¡ó<¹“î·ÊFqèr=«RŠŽâÞ;«Ymî|S!G\‘•#d{VU¯„4?¯†"Óbmc1 9‹J»IÝ‚X’y9Îx­š(˜ð§Ã� x!î$ðÆ‹ ”—+²Y ¼®ËýÝÎÌBðÁÀª–¿ < g¤jZ]¿‡á:£¬—P4²2–\íeË,�Ç6â»*ñvøû¨&‰q®Ÿ]ÆüÙ__�E1ÞB¡œá‡ ÷�áÏx[ÂZ]Þ� h¶öÖ·¼]#fS8Á]œ’Ë‚~Rp2xäÕ_ |/ðoƒuIu èqYÞJ¥o6IRy ½ŽßÃ�â/‰ú�·Š.ôxJãÅzmºÜj%.ÒÙ-ÀȠ°;ØŒ� gÓ<â ό֗:†î|!¢Üëº�‰Qg§–Ý—Êÿ[½ÎBíüŽ Î9  ½;á7�´ŸoéÞµƒQdYr‘·÷–2v)ô!F;Uåð†“T—Q]7ý*]Au's<„5Ê«*É·v8 xÆ9Î3^Uá�Š7š%ÏÄ�wűê1®Ÿuk:EÅÏ™öyX:˜�çhRÃ;—‚£v;WEáÿŽ–:•®·ý³¥Çey¤X6¢`°ÔáÔxWƒ¶XŽÐù =>€—‹>x[Ç ñN�ó[ŸÝI½ã‘Gµ_ùßÞÃê´?‘}ȃìqÓOûúßãGØâÿ¦Ÿ÷õ¿Æ­J‹¬©*Ê££ 8?˜ô¦Qõšëí¿½‹êØwö܈>Çý4ÿ¿­þ4}Ž/úiÿ[üjz(úÕç{ÕpÿȾäT*a›Ë,YYK)=F:�ÔS¨¸ÿ�¸¿Üæ´Wéy j•°1•Gwª?2ϨS¡Ž”i«-ÇäõÍÿšÔµÇäõÍÿšÔµížÇäõÍÿšÔµÇäõÍÿšÔ´é ä_¿ÿ¯öÿÑQWm\OÂßùïÿëý¿ôTUÛWÍb�/SèðÿÁ� QEÎnQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÄüRÿ‘~Ãþ¿×ÿEK]µq?¿ä_°ÿ¯õÿÑR×FøÑõ0Ä^‡˜È€É÷”îþÕb)ÒQòž{©ê**kÄ’¬Eo÷†k\Û%Ža%R2å’ÓÕ”çrËâéÊ<Ñzú2à$AÁ X¹Ô¯¯#Þ^ÜN€î ,¬À\YfƒþxÇÿ| >Íüñ�þøâ.®••U÷3Ü|UA»ºOïF»ê7²Ú‹i/.Ý@&•Š€:qœTms;]}¥§�ϸ7š\îÈès×5™öh?çŒ÷À£ìÐÏÿï�Cázïz«îb\SAmIýèÓ73••LÒ1Ì£yùÎs“ëÏ­:âöêð »¹šq d-·éž�++ìÐÏÿï�GÙ ÿž1ÿß�õZ½­íWÜÇþ´Ð½ý“ûѱ6§q³í·2ùm¹7ÊÍ´úŒž 2æúîô©¼ºšà¯Ýód-�¦k+ìÐÏÿï�GÙ ÿž1ÿß›á|CÞªüD¸£¶¢ÿñ8ëÅT–A;*ÆrŠrÍØ‘Ð oÙ !�þø'N•×�á¥B²«Z|ÖÖɘî&uèºTaË}.ßB&ÿ�Èÿë›ÿ5©j&ÿ�Èÿë›ÿ5©këÏŽ"‡ýmÇýtú Ôµ?ën?ë ÿÐV¥¡;¿…ñù¬ÿ×;ç-z5yÏ¿øüÖë�¿ó–½¾wüy] Â?×P¢Š+�ê (¢€ (¢€ (¢€ ñÙþëÒüÖ|·zwö…þ¤×qJe“ÉfGÁ;3œ)è=ëØ¨ -Ô|ã]ÅšŽ½ðëRÑ£“ZµŠ-BßVI6Ç$H%ˆ 98-à ýìáiƒš¯‡4Íà�RÎMwÃopÞn¨Ž »ó7Ë.3�ŽÝNy¯_¢€p(­h|/¬Ï¦ý¾+kb¥Ãn\•õ œŸÊ²jc(ËfSŒ£º (¢¨�¢ž"�ÂeÞZ°Røà’}x?•2€ (¢€ (¢€"oøü�þ¹¿óZ–¢oøü�þ¹¿óZ–�Cþ¶ãþºýjZŠõ·õÐè+RÐ��ß¿øüÖë�¿ó–½¼çá_ü~k?õÎßùË^�_;Œþ<¿®‡Ða?�ë¨QEÈuQ@Q@Q@Q@Q@Q@Q@Q@Q@<ÚÇœ?õÍ•KQZÇœ?õÍ•K_Z¶>Uîhé•¶žó Ý6øf]¬’¬¾êØÊþÔè¾(¶»Õ$†ÞÂÊÒÂX¡ŠY·I^ 63œt®ŠÆ¥T»{›S­(lu ãO±½’ilvv¶²4� ”Éæ9cÏBÏMãWÖ—6³Eöw.É=ô³‡È+�˜àpO8ÍIáMËPÒo.d±þÓ»ŠEUµQ ýàGã×Ò©GS¿m=³¬mÈÜÚ“y^Q8ž¼ç§¶3ɬ-C™¦¶þ»ùõ6½~TÓßúíäH—¡ÛÚg3I™ »ächb2£ð8Î8õ�Rñ,7š]Ý•¶�öd¹º$ùåö¶=Gr3øÔgÂ×1êSYÝÞØZ4J¬$¸¸Ø’ЩÆOOJ¼¾û›®&¡Ëwh�5»ÄìGÎÇ‘Ó9ÇqUû„ÓÝéÕ÷ÿ‚/ß4ׯO/ø¶ž8‚ ­.¦Ñ–kÛx¿Ú>ÐFåô\`zýET·ñg‘6�'Ø·e£¦<Üy»†=8ýj ï j2Ü<¶²¼Mż2î–{²ÿ�>½9¬:¨R£-c¯Íÿ]I•ZÑÒZ_ð {½wíZéßgÙºõ®üÍùÆAq�~¿¥dQEtF**ÈÂRrÜ*+Oøó‡þ¹¯ò©j+Oøó‡þ¹¯ò§Ôž�sþ¨×DÿÐ…KQ\ÿªõÑ?ô!RÑÔ:_Ã_ùdÿ¯ ôdUêÕå? äq“þ¼%ÿÑ‘W«W�Žþ;=ÜðPQEÂv…Q@Q@Q@Q@Q@Q@Q@yÏÅOøüÑ¿ë�Çóн¼çâ§ü~hßõÎãùÅ]x?ãÇúèrâÿ�/ë©ÂSlœE+Æ¿Ý ~`Óè¯n¾Ž&<µ¢¤—sÇ¡Š­†“•8·Øn%ÿŸ™?%ÿ 1/üüÉù/øSªÈÓ¯šÏíkgpm±Ÿ8DÛ:ãïck‰å9zÞ’;Vm˜=ª²¦%ÿŸ™?%ÿ 1/üüÉù/øS¨§ý‘€ÿŸH_ÚøÿùúÆâ_ùù“ò_ð£ÿÏÌŸ’ÿ…:Š?²0óéö¾?þ~±¸—þ~dü—ü(Ä¿óó'ä¿áN¢�ìŒüúAý¯�ÿŸ¬n%ÿŸ™?%ÿ 1/üüÉù/øS¨£û#ÿ>�kãÿçë¨'%˜õbrM:Š+ѧNâ¡d�:¥IÔ“œÝÛêDßñùýsæµ-Dßñùýsæµ-QMÿ‘ÿ×7þkRÔMÿ‘ÿ×7þkRÐ¥ü-ÿ‘~ÿþ¿ÛÿEE]µq_ ”�ßѯØ�û÷þ•Ú×Íb�/SèðÿÁ� QEÎnQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÄüRÿ‘~Ãþ¿×ÿEK]µq?¿ä_°ÿ¯õÿÑR×FøÑõ0Ä^‡šQEôÇÎ�¦ÚÜjv–6z�•í�ÒZ„µÔìŸ)åà�”àdÇ|öÍ-¥ŠÃc ¥¾ƒg~—#eÕÁ€>Ñ�7níÜäõÅpI©ßÇhmc½¸Kr0¬¬ƒÔmÎ9­¯Ý˦XZY´ÖdˆÆïäy¹ÇP1éïÖ¼ùaê_G§ü9ÝD-ª×þíl´MÎÌ´6Ñ\#]Ê’±’é¶«‘´ûœ¿�5��ma¦ùú.�¬ó_¼R-Ä%ŒHápßpã$}{W%öæ•gæÅý¡em)zï�‘Ç<ÅUµÔ/,wýŠî{møÝäÈSv:gž¦šÃÍÝóÜx«.[üa—Ã)k�o±5_&X ‰ü•êX°ãpÎÝÇ·�–w^,Ôô„Ò4õŠÞÕÚ-–˽œ…ïõ'® BöÖŠÖîxcc–Håeú� K<º�ž¢..d»‚ô�ÂI ,„ŒäóÓŠ>¬îõî/¬+-;¾‹¡Ã ¯‡£ÔtØ–yfŸÎY¡˜lr¡²>‡›Ú{éºm÷öœ$žÿìe|œ¨BÝqݰ'ßÖ¸£¬jm";j7eã%‘Œí•$`�sÇ¡×b$Œ]L7óD‡ ÿÞ±÷§õi·vÿ­Ì_XŠVKúÓü‹¾$µŠËÄ—Ööê$”íQÑAç­eÓæš[‰š[‰Yå�ر?Ri•ÙÔRg,šrm7ü~Gÿ\ßù­KQ7ü~Gÿ\ßù­KL’(ÖÜ×Aÿ ­KQCþ¶ãþºýk[CЯ|Cx °LF§Ü0ù"Ôú/òÔÊq„y¤ËŒe9Z'gð¶ÍÒÓR½a„šD‰xë°Oæøü wµWLÓ­ô�2 5+ µsÔ÷$û“’~µj¾fµOiQϹôT¡ìà£Ø(¢ŠÈÔ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠùæÓþ<áÿ®küªZŠÓþ<áÿ®küªZúÕ±ò¯p¢¥¶‡ípûo˜ê›±œdã5ÔÉà«3¨M¦Ûk«&£ïjÈÆì‘ÐûÖs«;HÒ§5x™z%ö�khÅ} Ò¾è®ì%Úà‚¸'ê9æ¶.ücaªÉm©ÚÜ¥…ÎÂ�_4<ž9Àútç­rçKÔ×í-cr ÚÍ0¶Ý§¡Î1�zYt­F/ϰº�Í`±ï…†ö=ÈäÖr¥NRæo_SHÔ©ò¥§¡¿k­xrÝ®Ò>òÍ[g‘snàθëó1ù3ßon*Õ÷�,çmF[xgYnc·‡PB´lIÉÏNGÿZ¹ëÿjzuì6“ÚÈóÌ�‘bR۸ɒ;ã5N[¸.–ÚkY£�ˆ ÆCôÀëÍJ£JOš÷ùÿ]ŠujÅZÖù]λYñ¼Ž—|+Ñín&Õìá±·¸ºÒ5Xí<¯±Í0L€B°ÀϯQÈæ¼â¶SźävÍ5!vµwþö7~µÍ^”ª%ËÐÞ�EùŽ‚ßKÐáƒ@ŠçH’â]QyVw]‡�›ó×'¦«VÞЬmê/m ’âXüë‹Ó EW*6€0ÇŽAïX³øÒê #N´Ñ¦šÝ ƒËŸr) xÁ\çßÒ³,|Q¬é°'ÖtØäŽÒþEY»òÇ©ù�Æi¶Þ$Õí-^Ú×òžO5ƒª¹-�s’ ê3VèU{¾½ßô‰U©®�;#§—JÐå×5M2ßIòÍ�œ’‰MñwqÆxÆO®hÐ<5¦]éú<—¶ežèNe%ÝwÎÓÁãŒt®V=S‡W}N+¢·’ <�æÇLc°íVŸÆì“G+ß–x·l&$ãw^Ô�Ö´eø¾ÏõZ�ï(þ ¹ÐA§ørk=*øi„¾¹û'”n›-€äõ'Žƒ“è+�ÕíÃZ¼µ‹îC;¢dç€xý)Ñë7ñ[ZÛÇ>"´—Î�v/ÈùÎzsÏ­V¹¹–òêK›—ß,¬]ÛdŸa[Ó§8I¶î½Y�J�”RK_B*(¢º ›þ?#ÿ®oüÖ¥¨›þ?#ÿ®oüÖ¥¤Mÿ‘ÿ×7þkR1ÀÎ ôdŸjuµ•Ýþ§6³\Ëå·Ëç¯'°çŠô� xé÷ê:ÞǹC˜mÔîX�÷‰îß ÷8#š¶"S¾ýŽŠ8yÕjÛþÒEðÍ­¬à È2MŽÎÇ$~Çá[4Q_;)97&} b¢’AETŒ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+‰ø¥ÿ"ý‡ý¯þŠ–»jâ~)È¿aÿ_ëÿ¢¥®Œ7ñ£êaˆþ ½4¢Š+é�œ ’ßÚbòâóŸxÛ]ÛÎzc¾}*:UfG ŒU”äpA¤Á…ªË&¿¦ê2Xß\ÚL‘½Ó/cÊ ?)#åèOxéYºÆ—£ÙMu¤[éÒÝÁl$[È™œ±À9+Ð'8$~U�wâ½núÅ­.¯Ýáa†Pª B@Éþ´Ù¼Q¬Üi¦ÂkùܮҤ ‘è[?�pÂ…HÙ'§¯§–¿?¼í�jr»{úÁÓätM é�¢j1ͦ -BÆÔJØ»id†6 ã çž‚µõÇQÖ®®õ!¥­œRkƒ e‹rÌGN+‰ŸÅºåÍ»C=û¼mDÊQpÊÀž9ö„†$7ûã§¥s×þ¿Óìf¸yí&kp¦x!—t�†é¸cüý+¹ãFœìâÿ«ÜÞUªCI/êÖ=6÷U´}^ìŬÛ+^Ùìæä[¸0cü¸9ÿg× ¶µ§ØÝé6º–¥ íìQÊ­~�½b/÷rÝý3Û½yÅþ§ZÿÖÁõ¹^öþ·;ý?P�LÔ¬Zñ ¾¡&$¼`J¶Å¸ e<óÓ¾•5Ž£„Z}¦¯­[j7?móVe¸óÚG.‘õ¯:¢›Â§»ü¼ÿÌKÖËúþ‘sWt—\¾’6WF¸‘•”äXò S¢ŠëJÊÇ+ww ŠÓþ<áÿ®küªZŠÓþ<áÿ®kü¨ê.�p �@“"`œüº}Á®³*µÌRiöyù¥•vÈÃÑTóŸsÇ×¥Xø}£¾£â~ëþ�a“¸ŽR0ð>ß/­z½yx¼\¡'ž Çže{}6Æ;(ÄPB»QGùä÷ÍX¢Šñ·=}‚Š( Š( Š( Š( Š( Š( Š( Š( ¼çâ§ü~hßõÎãùÅ^�^sñSþ?4oúçqü⮼ñãýt9qÀ—õÔá(¢Šú3çŠ(  ò¾ÑÚ7y[Æý½vçœ~Ýx�OŽ]Yt­"ÂæÁ¶›{»–X±€wŒ|Ù$ŒvÆO5ÂC/“q»ö0m².U°zÜWG/‹-£³»�JÑ¢°šñM*LJãý”À ×µr֌ܢãÐé£((ÉHf£ákm:Þt“[·:…¼bI-6õ¹?1ÇlfœÞ‚]}JÃT7"÷²›G�¨Wn¸ç·åEï‹-oVIäЭ[Q•Is#SŒ „#àuÎjkßCuø�IX¥¿ƒÊš_´3@Â�Àž_ZÏý¢ËþõoÄ¿Ü]ÿÁþ¿CGXð”z‡ˆnÚ ¶6vñGŸ³Ú™ f'_s\®»£K¡jfÒg¡ãp»w)èH=+wþ×mBêW±o³Ü¢ ]4l¬½Ã¨žâ¹ýcSþÕÔ À�ã]¡Q$�æ ¼ÄžçÐS «Å¥=­åÿ*ÎŒ“pÞå (¢»N@¢Š(&ÿ�Èÿë›ÿ5©i‹³jG2M!�ð‘!v<¯aÍv~ø}y*O®#ZYŽ|�ß½—Øãî�×éÖ°©Z“rfÔèΫJ(×øe¥<6W:¬Ë�µ9þâ““ø“ÿŽŠî©±Æ�đĊ‘¢…UQ€ tS«ç*Ôu&æúŸAJš§QEfhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÆ|OŒ¿†í#½V>À£¯ó"»:Ï×´¤Öô;­=Ûa™>Gþ냕?�µ£5 ŠO¡�X¹ÓqG‡QOž ­n¥µ»ŒÅq l’3ÕOøw¸¦WÔ&šº>e¦�˜Vç…,mo5+‰oâià³µ’å¡ýfÜqúÖ_ѵyôMEníÕ_å)$n>WSÔŠŠN Gré´¦œ¶4§×4íNÅ¡¸Ñ­m®üÕ0Ig�Bç�ÿÿ_¶9Ù×4„i¼D–Öˆ#’Õ#Œ[�À°A„l€™'žkëÄvgN{=+E†Å&‘d•Œ¦Vm§#Ž;þf¥¼ñ‹Ü¶¨ñZy2_<+y»¼£Ü9Ûíø×/³©tâ­óó_ðN®xY©;ü¼Ÿü}CÀ“YXÉ4wfimö™ã6îŠêQÏ�oþµ¾ ‚ØßC²“ÞYÀgk ©(=rpyéÏoZf¥ãS¨Ú²ýŽX§�#­ô¾YõÄyÚ3éÏãP?Š÷ëÚ–¥ö,}¾ÔÛù~oÜʨݜs÷z`u¥¬Û_ÓËþKê×Óõóÿ€;ÄÚ&™¥išl–m,³Ä·#5O;ùá{ ½k›­�W\‹TÒl-ZÄG=œk¸“¹Æ6ã±Íc×M% Osž«‹•ã°QE#0E,Çu&¶2:_ivš§Š_ÚÇs 6ŽÁe]ʺ`àñÓ5눋*F¡UF¨À¹?‡Ú ºV“%åâ4w7Ä6Æ)ÎÐGcÉ'êjëkæñuJ­­� ÂÓp¤“Ü(¢Šå:‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÔlJÕ®ìmæd\÷\åO⤭^«ã?u÷NÚº„K´«,ËýÒ{ØþÔymÌ3Y\µ½ì2[N½c•vŸ¨õãŠú<6"5`µÔùüE R›ì2¤·R×1*ʰ±pŒpç©=±QÑ]G)馜/t‹›ŸZ[C5¼@Å©ZÌ?Ò{ô‘ÜãsÄ-n¾½ o4ºq·fe6âÎß•“�ý~½ð+Êè®/ª»¯{oëMNÏ­+?wë±é׉.4ÏÚZK(sFžt{@p*XœgŒƒ×µ,éúOˆ4¯Ë"¼vÊófL|ó±ù3Û gQßæÔSú¤l’}?§ø‡Ö�î×_é®ÄhŸj¶¹[Åy@žäÁ½ÓË~1è1ǯ­y¾³ª]jÚ‹M{ vLƘP¡T€1õªV”p꛾ÿÓ3«]ÔVþºQ3L°Â­,®p±Æ¥™�°šèm-Ît›Ø6I)[¡’iHÐuf<ù×c£|3Ô%ÿlN–�*€c…·ÈÞÙû«õæµ¼à©lnUÖP-Â�Ü[ç>V‰¿ÚÇAÛëÓº¯�|Ü´ž�Ï_ƒ\¼ÕZÃOµÒìc³°…a‚1…EþgÔûÕš(¯-¶õg§¶ˆ(¢Š@QEQEQEQEQEQEQEQEÂ|Q³gÓôûÕX&hŸŽ�Ç_ÍüEwuWSÓ Õ´Éìn×1N…[G¡àà�qZÑ©ìê)ö2«iç„QWu�ïBÔZÎýyäÅ(Y—ûÃúŽÕJ¾ž2S\ÑØùÉEÅÙ…QTI±á­.ÛR¾™õu³´�®& ÷™W°«†O êPD-ì%°»ûJ"³4«*2I=1ÏOQ×¶~�¬ Py&‡íÓÄÐÏq¹®=êóê>³¶Hô»+¹%3¤­qvW|aH8]¼sϧãÆ9f¥Ï×Êß�ÿ¯C¦<�<î_Ö¼=mkÂÂ<[ÜCOç¾ôÜ€¸!²OR{Öe׃õ [s!šÒW��O Snx7tÞ1Ç>™ü«NóÆ6’ Ií¡ŸÌ¸º†x|Å6pØ?ìöÍOªxæÞöØ‹yui ï�Ö)G€;wÌ~+¼DRVûýüi* ·êïþ—wà}FΗk«Ù7ÉsὂSÏ¥Câ? Ç¡ChñßCpf‰YÕ_,IÏÌ£û˜Üæ®Mâ{)5­rñbŸËÔ,Ì«•b�rÜôÈ횣¯êÚ~­g`ð%Ê^[Û¥¼�öùeTF9ÎOåZÁ׿�6ßð æ¨ò¾]ÿà˜tQEv�E5••Î¥}�„Fk‰>ꎀxžÀzÒmE]�''duÿ -Mfú÷$0Aõ,Û�ä~b½2²ü;¢Eáý+(›{ä¼Òãcž§ú`+R¾gSÚÔrGÑP§ì騰¢Š+p¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÃñ>½}¡[A&�¢\jí+•dƒvPc©Âµ8ÅÉÙ µvnQ^}ÿ Ä?ô ꜟüj�øXž!ÿ¡SüäÿãU¯°©ý4eí¡ý&z ÍøcÄÚ–»sïÝÆϕݮƜÊÉ›U=Zöm;I¸»µ³’öhSr[Ç�ÒA€•q_ð± ðž�â%r­ Ê %ÌX ¡ìÃØþ®*ãá–±„Z^XÎ�šRñÈþué—46ÒÊ‘™Y² êÄ•ŸáÝVëYÒVîÿL›K˜»)·›;€ùQ×éWKZœ}ס�JªKÞZž{ÿ ×Ä?óÓLÿÀ‰?øÝð­|Cÿ=4Ïü“ÿ�×eâjZÌiÞ»ÕÖT,Ïl!ÏC„jÂÿ…‰âúu?ÎOþ5]QÄâd®­øï†‹³¿âeµñüôÓ?ð"Oþ7U4Ïkµ£ÜY˧Òâ{cºyß­ÿË>›‘« ÿ…‰âúu?ÎOþ5V>ê·Z§†ïÍÞ™5†Í^ý”KŸ˜½äÎÕt’§ÜvéJX¬LUÝ¿Ç ‡“²¿âaµñüôÓ?ð"Oþ7Gü+_ÿÏM3ÿ$ÿãußxƒY¼ÑþÇö"}Kíyry9ýÈþñž?*بúít¯r¾§A»XòŸøV¾!ÿžšgþIÿÆèÿ…kâùé¦àDŸün¶n<¯Ãs,ià]JUG*0À¿êª?øXž!ÿ¡SüäÿãU¯Ö1^_�Ÿ°Ãyþ&b|4׋$új/r³HÇòØ+§Ð~XiS¥Õü¦þåäÜ›cCØ…ç'Ü“íŠËÿ…‰âúu?ÎOþ5]í¼�5´R¼f&t Èz©#¥aZ¾!«MþFÔ¨ÐNñD”V>�¬Þ^øƒPÓçÒ'µ·µÇ•vùÙ?Ó*äMIâ-VëFÒZîÃL›T˜:¨·‡;ˆ=øSÓé\œ®ö:¹•®jQ^}ÿ Ä?ô ꜟüj�øXž!ÿ¡SüäÿãU§°©ý4gí¡ý&z Éø{ÅÚ¾³«-¥ÿ…otÈJ3‰‹ívå_­tµìÚv“qwkg%ìЦä·�;¤>ƒÿ*‰BQ|¬µ4ÕÑrЧ¤Þͨé6÷wVrYM2n{y3º3èrò®Ä>.ÕômY­,<+{©ÂX\B_i'·z}hŒ%'Ê�Í%vu”WŸÂÄñý:Ÿç'ÿ£þ'ˆèAÔÿ9?øÕ_°©ý4G¶‡ô™è4V_‡u[­gI[»ý2m.bì¦ÞlîwåG_¥G¨ë7–^ Óôø4‰î­î³æÝ¦vAõ‘ù‘Yò»ØÓ™ZæÅÄ� ´²¤fVD,¨:±¥p_ð±ÿ…‰âúu?ÎOþ5R[øÿ_šæ(ßÀº”Jî¹2aA=ÕUû ŸÓD{hI�íV?‡õ›ÍcíŸnÒ'Ó~Ï7—�Ÿßï ¨ãó¬¬Ú¹­Òv6(¬?ë×Ú´iÚ%ƮҹVH7e:œ+W5ÿ Ä?ô ꜟüj´�)É]~„J¤bìÏA¢¼ûþ'ˆèAÔÿ9?øÕnøcÄÚ–»s¦©ÿÂÄñý:Ÿç'ÿ¬;¿ë­ñI¹> ÔXô»èÖ_s†–Ж»è6Óø‡Nú{:¿Óÿ‚G´¥ý#Ò?áð÷ýtÏü�ü(ÿ„WÃßôÓ?ð?ð¬ 'ÆúÞ£«[Ú]x6þÊŸkÜH_lcÔæ1üë°¸‘¡¶–TŒÊÈ…•V t¨—´‹³‰qä’º_��ÿ¯‡¿è¦àáGü"¾ÿ ™ÿ€qÿ…/‡u[­gI[»ý2m.bì¦ÞlîwåG_¥gøŸÄÚ–…sZw‡.õu• 3À[sÐá…í¹o¯¨>Ekiè_ÿ„WÃßôÓ?ð?ð«¶š}•‚•±´‚Ù[¨†%LþB¸oøXž!ÿ¡SüäÿãTÂÄñý:Ÿç'ÿ«tª½ÿ5þd*´–ß“=ŠÃðƽ}®ÛO&£¢\i …TŸv\c¨Ê­Iâ fóGûØt‰õ/´MåÉäç÷#ûÇ xü«.Isrõ5ç\¼Ý Š(® ãÇúü72ÆžÔ¥Tr¡Á“ ëþªˆÂSØRœc¹ÞÑ^}ÿ Ä?ô ꜟüj�øXž!ÿ¡SüäÿãU~§ôÑÚÒg ÑQÛÈÓ[E+Æbg@̇ª’:V^�¬Þ^øƒPÓçÒ'µ·µÇ•vùÙ?Ó*äMd¢ÝÍn‘±Eeø‹UºÑ´–»°Ó&Õ&ª-áÎâ~ôúW%ÿ Ä?ô ꜟüj®4¥%tDªF.Ìô+Ï¿ábx‡þ„Oó“ÿ�V¯‡¼]«ë:²Ú_øV÷L„£1¸˜¾ÐGnPuúÓtf•ßæ„ªÁ»/É�eOV½›NÒn.íl佚Ü–ñçt‡Ð`åF“{6£¤ÛÝÝYÉe4ɹíäÎèÏ¡Èʳ³µÍ.¯båÉø‡ÅÚ¾�«5¥‡…ou8B+ ˆKí$öáO­eÂÄñý:Ÿç'ÿ­µuù£7V ÙþLô+Ï¿ábx‡þ„Oó“ÿ�W[áÝVëYÒVîÿL›K˜»)·›;€ùQ×éJT¥v8ÔŒ�‘©Ecê:Íå—ˆ4ý> "{«{¬ù·i��}p¤~dV¥Ä� ´²¤fVD,¨:±¥C‹V.é’Q^}ÿ Ä?ô ꜟüj�øXž!ÿ¡SüäÿãU¯°©ý4eí¡ý&z Á[øÿ_šæ(ßÀº”Jî¹2aA=ÕW{Q(J—Æ[u2ËV´6Ú�²\DyÚã¡õ¨>â¸ÛÏ…ÖÎäéÚ¤öê†hÄ }9Sù“]'‡õ›ÍcíŸnÒ'Ó~Ï7—�Ÿßï ¨ãó¨üO¯_hVÐI§h—»JåY Ý”êp­ZÓ�Zr僱�HR©i+œ¯ü*»�úÅÿ€'ÿŽQÿ ®ãþƒ±à ÿã•/ü,OÿЃ©þrñª?ábx‡þ„Oó“ÿ�WOµÅ÷üŽoe…íù‘«¸ÿ ì_øøåðªî?è;þŸþ9]†¥ö‰¼¹<œþäxáO•lVvi\»¦ìWqãý~™cOêRª9PàɆõÿUQÿÂÄñý:Ÿç'ÿ­}…Oé£/mé3Ðh¯>ÿ…‰âúu?ÎOþ5]í¼�5´R¼f&t Èz©#¥D©Ê—Æ[QXúv³y{â COŸHžÖÞ×UÛçdÿL¨‘5rMZÂZ.[¨Öödßü̼ò?ï“ùRqiØjI«—(¢Š’‚Š( Š( Š( Š( Š( Š( Š( Š( ¸½OV¿‡ã�¦Eu"ÙMfÏ$ü¬Ø›“ÿ|�Ê»JóícþK¾ƒÿ^ ÿ Ï[RI·~ÌÊ«i/Tz QXš…Q@Q@Q@Q@Q@Q@Q@Q@s~ÿ‘vëþÃZ¯þœ.+¤®oÀò.ÝØkUÿÓ…Åt”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÍßÉSÐ¿ì ©èûé+›¾ÿ’§¡ØRÿÑö4ÒQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW7}ÿ%OBÿ°.¥ÿ£ìk¤®nûþJž…ÿ`]KÿGØÐIEPEPEPEPEPEPEPEPEP^}¬ÉwÐëÁ¿ôëÐkϵ�ù.úýx7þƒ=mGwèÌjì½Qè4QEblQEQEQEQEQEQEQEQEçÚÇü—}þ¼ÿAž½©É¤ØM«CªKk^›#œ�™Wžýô:Òœ”[¿fDâä—©rŠ(¬Ë (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æüÿ"í×ý†µ_ý8\WI\߀ÿä]ºÿ°Ö«ÿ§ Šé(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤fTRÎBªŒ’N�kã/ __ +/é7dà[Ã}ÉŸM¡³@TU]CS°Òm~Óªß[XÁ¸'›s2Æ»�eˆ>•j€ (¢€ * ËÛ]:Î[½BæWt“O DAêXðI Ñ\ÛÇ=¼‰,2¨xä�ƒ+©ÔÞ€EPEgj¾!ÑtC®jöh“îË”‡wÓq©ôýNÃVµ:Uí½í»t–ÚU‘⤊µEPEPE›”±PFà#<�þA ¢Š(¢Š(®nûþJž…ÿ`]KÿGØ×I\Ý÷ü•= þÀº—þ�± ’Š©©jÚv�kö�cPµ°ƒ8ón¦X—?V TzV½¤k±4š&«c¨Æ¿yí.P>¥I  ôQEQUouK 5­×Q¾¶´k©– q<ʆi¢.OÌǰЪ(¢€ )“Mµ¼“ÜH‘C—’I*¢�’I=ëžÿ…�à�ú¼?ÿƒH?øªé(¬‹xnïL¸Ô­|A¥Ocj@¸ºŽö6Šznpp½GSVÛXÓòÎÑõE¹¾V{HLêá@ÜJ.rÀIâ€.QEQEbËã? ÛêÂi^´Û½ôBLúm-šÚ¢€C(*r ŽôPEPE"²°Ê�FHÈ=Ç–€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æï¿ä©è_öÔ¿ô}�t•ÍßÉSÐ¿ì ©èûé(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+‹Ôô›ù¾0èúœV²5”6l’NÊ­‰¸?÷Ðüë´¨ÍÄ+p°4±‰˜ec,7êàjã'Ø™EJ×$¢Š* (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ǹþÞÿ„¶ÓìÞGö'’~Ñ»g™‡Æ=¾çë[NMZÂZ.[¨Öödßü̼ò?ï“ùUFý2·råQRPQEQEQEQEQEQEQEQEW7à?ùn¿ì5ªÿéÂâºJæüÿ"í×ý†µ_ý8\PIEPEPEPEPEPEPEP˜üx·¿ŸÁV+k«½"-R 5«{<ù’YŒ—‘Ó§±è b[Ãð3ÇZ iZ@Ð,n'ŒÇý�mnc|pA`¬Äzœã½vüe©øt}Z;(îttbÖ$;Ëo²EÚÀs�z€0k›ñn¯ðKÄ Åö¹yáû½Ñ“¾ÝÐ^tþ¿¼Ï×ñ  OݧÃÿ„ú|~(¶‡ÆMk<Îר©æ±|,„0™F=I#9§x›â�Î…ñx?Nð½Ö³{-‚Ý[›k…]î\�­¸aIrǰÇ9¯9ÖaÖ`ý”´ñœ/õ¹UŸ>bÅçŸ,6ØÛøb»‹`í_w‘œxHíþ’”±à߈×ÿŠ/|3â?ÏáÝvÒuöY.á%ˆ�»–EHí߯³çø¯©_k:…¿‚¼}â; .f‚òþ;¤�D‹÷–%aûÒ=?" W¹ý«í=ü$ô¥ëá‹txBûÂÞ.Õm´�_F¾œ\¥ëˆšà3–Y<¾A2xˆ k!ø‹ð;Ç—–ºt–0Ø4¶‘ù²niTm!Êí îó�ZéÇvÞð„mc°ºÕµ}NÂìtë@7ÌV%,ÄžFF[¶~¸ó-ú-Sà¿ÅÝBÙ8nµ‹¹ãG]¬ªÛXCƒÒ§ñ�„Vú§Ã}k[Õõ}C“DŽÆMOJœÂö²˜Ã.æá[ :é@•£|JÔ¿á"²Ñ|qᯠÜêLRÆSwÔ8Ød@¹ë^�^tÝxÓÃv¾?ñ�Œ/þßÕ´jÑ^ÃlÑ�Þl¤®G|ØÎ{õ|ó¦^ø3Dø‹âx¾3iñ6µw©Èö7z¥¡žÝìøÉTžp:�œ‚+¿ð�ƒü3�Šþk6Pés[˜/ôÝ7kÁ;òQþVÄl¾›}zd掅ñ3FÔÿ´<9ñdhú^µcrñIoy—mIÂãny®à|RÒu/ið£[ëíz’Myuiv;”pÌTIïã]펗mâŸj á9Œaµ†º@Ê�¼A�å2xcŒñÇ8¯=¶¾]Oà‡Å»ôŠH–ë_šaªUÐ4±¶AäWoñ Ô-¼'u2ǵ-ÂŽCÞT<XŽLñ]}÷ü•= þÀº—þ�±®#ãÐ û>]*€€Û÷‰]½÷ü•= þÀº—þ�± ,ñ�χôŽ—·ÿlZãDšÒô)î-Ú{XŽÑæ«(n/“È`ìÄ®àxì8=8Ïã(<?Œ|0ß Nž|RuX™›Bpcüù¦_/äÛŒg¿^Ù Dñ?Ä{­7Å_ðŒxOÃw&Ö£€\\ÁÊ[Ån‡¦ù œ�î*׆þ$éº×†umWR¶ŸF›CgMRÒë—¶d]Ç‘÷�ëé\†•¬éÞøûã5ñ]älzìw6—rã‘cBŽ»Û€rzgøkNo‹�‚¼eâ éâÏC&+ Ã!t¾`>wÙ´a ä¸g‘@&øÁâUÐψàøk¨?†Ä~ÛŸQ‰%òqŸ3ÈÁlcž¸Ç9ÅVø•­YøŽÏáv±¦35¥÷‰ì&‹xÃNpGb:ã|A¬ÿkü8º¼Õ¾0Kªß_Ø9‹EÒ!Š2ò4g÷/û;1`8žµmÙ_áwÁbŒÂAb2yÀЧx—â=ÆŸâwðׄü7uâmj–k¨b�-â¶Vû»ånÈéV¼ãïøHõ[½YÑ®t ~Ê%šm>åÖ@Ñ“�29‡\ðOדê:V�añÃÅ6þ/ñ†½áÕ­>êÃQû$h;•#*x#¿¶z?‡zw…&ø­ssáÿø§Å7º}�Š]Júò;«4Glˆ„˜ [?0 •ëÎs@—ã?ùõÿûÜÿ覯(økÿ “þ®…ÿ ü!Úe_´ý»ìžvüŸ¿»æÏÖ½_Æò!ëÿö ¹ÿÑM\7ŸøKQøQáë½CÂÚ-ÕÌÖjÒM>Ÿ»œžKÉ4§âÏø_á>­®ø@еM ’K[$…mï�'%U•°}�+ŠÃ×§KŸŽ? §Š‚9l¯�b^‘ƒk�£§¥j|bÓlt�€šýŽ•goci åÛÛD±Æ™™I¨d’~¦±u/ù,ÿìyÿ¤”¿ª|NÔ¦ñ þ�àO]x¢]2O*úà]ÇkRwŒ;ƒ¹‡qÚ·|ãkoA{²¹Ó5=6Q þ�v’݈ʞ8*Ã8nø¯ðÖ�£éþ&ñ>‹ãø‹Áú”Z¬× ¾®,íî¡s•™w. üäŒWð‚ÇÃmâ?j~Õ¼K®bµ¸Õu‰’Xn™AÇ”àm£‚HÆÇPQñ^ß[»øW¯Aáa)ÔÞÜÖó²ï_0/|”Þ9ÏJó¯ j5?Á¤Éa¢Ù\¬b)¢Õm„W øÁgÎ{†¯Lø‰­ëÞðmƯá{u «GI&¶‘‹ÃŸÞm AÜ=øƒ\Í狾x×F[ínûÃ× Ñ†)¨Òâ<Ž˜?8#§Ë@Z¥ÏÁï„÷—6÷2x¦ÂÆ>Ù ùM›2�Šß>ý€–Ïq�]Œ|mkáOIâ8¡:аˆZAí7-!gvz⸟‚š\WÞ ñ-’Gpþ½Ôn"Òcº-–´a´íÝÎÓŒû÷Ís^{ßxŸÂßµÎ<sqq¨³!_!¶Y‘í‡Sîµz'ˆþ#joˆ­ü5áÏ Íâ5˜¼¹µŠñ ŠÚ2qÌ®0Nz ñ늎oøƒSðˆ'_jVÕ„[ …ÔËH‚ñ\±Â®æãû wÎüI¶ðV£ñmoYÔüâ¬UíuÈ®ÚãÜ~Må¹ “�vŸr*ø‡^ÔoÖ?ä»è?õàßú õè5Ëø›À_е(﵋ÈåŽ:…À$÷SÏÌkZRŒ[æìeR-¥nçQEy÷ü)¯Ïæ§ÿcÿâ+µÒtÈtm&ßNµitØ�!ˆ÷À¥%î»üŠ‹›~ò±rŠÇÿ„fÏþßøH|Ùþ×äù;7/ÇLg?�\Õ´Èu�&ãNºi„Øí€öÈ56WZŽîÏBåçßð¦¼=ÿ?šŸýý�ÿˆ£þׇ¿çóSÿ¿±ÿñ§-/æü?à™óTþ_Çþè4W¤ü-Ñ4mZßQµº¿y­ßz,’!R}ð‚» ˆVæÚX�²¡F#®ÅD”S÷]Ë‹“Z«QY~ðý¯†´•Ó¬$šHUÙÃLÀ¶OÐ Ïñ?�´ß\Á>£=ÜMQ¨žr¦„£ÍfôåËtµ:J+Ï¿áMx{þ5?ûûÿGü)¯Ïæ§ÿcÿâ*ùi7áÿŽjŸËøÿÀ=ŠÃðÇ„ì|'m<t·¬îŒì¤‚8À'ˆ<3gâ?±ýºYãûÞt~K“ï�x¨´y­} /.[ÛSbŠ+‚¸øA \ÜË;ÝêA¥rä cÆIÏ÷(Š‹ø�…'%ð«�íçßð¦¼=ÿ?šŸýý�ÿˆ£þׇ¿çóSÿ¿±ÿñ|´¿›ðÿ‚G5Oåüàƒ\߀ÿä]ºÿ°Ö«ÿ§ Šè-á[kh BJÄ�ž¸Å|9ðý­™Ö5¨¤˜Üßjú’HŒÃ` 8ÏoSYhk©ÜÑY~"ðý¯‰t–Ó¯äš8YÕËBÀ6GÔä¿áMx{þ5?ûûÿWÁ¯yÛäD¥4ýÕ™è4WŸšð÷üþj÷ö?þ"µ|=ðçHðÖ¬º�…Åì“*2™Ð®ÑE7vÒ_€”ª_Xþ'YESÕ´Èu�&ãNºi„Øí€öÈ4i:d:6“o§Z´� ºlF�‚Ä{à ÏKkråÉø‡áΑâ]Yµû‹ØædT+  \ªšÊÿ…5áïùüÔÿïìüEh£NÚËð3r©}#øžƒEy÷ü)¯Ïæ§ÿcÿâ+­ðï‡í|5¤®�a$ÒB®Îf²~€R”`—ºïòe6ýåo™©Ecê>³ÔüA§êóË:ÜXgÊT`¾ ŒþDV¥Ä+sm,HYP£×b¡ÛBõ$¢¼ûþׇ¿çóSÿ¿±ÿñšð÷üþj÷ö?þ"µå¥ü߇ü.jŸËøÿÀ=•]J¸ ¬0AV4 ð½­ø¾¶ðÞ‘ Ø;…Äv,€úî šç-þh×1N—z‘hœ8Xñ�sýÊïj$¢¾râäþ%b®¡¦XjÖ¿fÕlm¯ Üʹ…d]Ã�pÀŒ�Z—`º±ÕÆØj �nÄ+æ˜ó�›ñ�¹Æqš£áÿ ÙøsíŸa–y>Ù7�'œÀàû`*?øNÇÅ–ÐA¨ËqÀåÔÀÊ $cœƒE£Íkè;Ë–öÔÒ:]ƒjÃTkc¨,>@»0¯š#ÎvoÆväçÆkÉïtïˆz½ÂëÐüxépͧkËmo%´düªêÈGû>üž+¡ÿ…5áïùüÔÿïìüEð¦¼=ÿ?šŸýý�ÿˆ«å¥ü߇ü>jŸËøÿÀ&ø{à)t? ê–þ-[=Fû^¿›PÔ¢„eaÈî:“]›éöriÿ`{HÏËý˜Ä {À]¸Æ8éX~ð6›á;™çÓ§»•§@Œ'u sÆV‡ˆ¼?kâ]%´ëù&Žurа ‘õ¡¨óY= N\·kQÚO‡4MÌþÂÑ´ý7ÌûÿcµHw}v�šÒ¨íá[kh BJÄ�ž¸Çêß tMgV¸Ôn®¯Òk‡Þëˆl¡¢*-ûÎÁ'$´W:MWÃú6ºŠºÞ‘c©*}Ñyl’…ún¥Ót�;GµÚE…­…¸9Z±'ä  âáMx{þ5?ûûÿGü)¯Ïæ§ÿcÿâ*ùi7áÿŽjŸËøÿÀ(ø7áô«â¯Kã ÒçNÕuUº²[µŠá%Q¿æÛÎÓó kÒ­mmì­c¶²‚;x"cŠ$¨= ƒIÓ!Ñ´›}:Õ¤xmÓb4„#ßU?øFlÿá-ÿ„‡ÍŸí~O“³pòñŒtÆsøÖvWzš]Ùh-ׄü9{©�F÷@Òî/�]KeÊ,þµ©41\ÀðÜF’Å *ñº†V„µ[VÓ!Öt›�:é¤Hnc´dÛ ×ÿ kÃßóù©ÿߨÿøŠ¨Æ {Îß!IÍ?u\ìt­GЖEÑ4›8Js ´¶H·ŸS´ ÒÏ éZ´:¥Ö•c6¡n1 ä–ÈÓF?Ùr2:ž†¸ßøS^ÿŸÍOþþÇÿÄUÝ'án‰£jÖú�­ÕûÍnûÑd‘ “ï„N4í¤¿ø$©T¾±üNªÃL°Ò¡x´»k(ä‘¥t·…cVsÕˆP2OsÖ«ÞxoCÔu(µ CFÓî¯aÁŠæ{Ty#ÇM¬FGáW®![›i`rBÊ…ޏ#ŸáßÚøkI]:ÂI¤…]œ4Ì dý¬´±¦·|9¢5¥í«hÚy·Ô%3^BmSē伋Œ;ÉÉ©®´}2ûIþ˽ӭ.4íªŸcšxv©FÂ1€@ÀÇ�âi¾,¹‚}F{¸š(¢P'<åMašð÷üþj÷ö?þ"´Œiµ¬¿7)§¤¶¿ÒtíWO6¥…­í›c6÷0¬‘œ�•�b±¯¿ä©è_öÔ¿ô}�ašð÷üþj÷ö?þ"�Âv>ø•¥A§Kq*Ϥj.ÆvRAXŽ0ŒÒWù2›z¯Äíµ+OÖ-M¶­ak}ëÌ+"ŸÁ�•áíAW]H°ÓUþð³¶HC}v�šƒÄ³ñØþÝ,ñýŽo:?%€É÷ȃ¥®§{ "ÇÏX¼�·y^3×Ò¹‡^Õl/µßøªÞ msÄ $¶ÐÈ$°Æ»c‹páˆÉ=+¥ðï‡í|5¤®�a$ÒB®Îf²~€Tz�†lõ?iú¼òηò•o¨#?‘�£{_CKÊÛµ]J×mÖ oL³ÔaS¹c»·IT\0"¥ÓôÛ&Ím4«+{+dû°ÛD±¢ý@-Ä+sm,HYP£×b¸/øS^ÿŸÍOþþÇÿÄSŠƒø�…'%ð«�–Ÿ éMÍÅΕ¥XÙOtA¸–ÚÙ#iˆÎ ·S×ÔÕx¼'áÈu_íHt .=Cvïµ¥”b\úïÆsø×+ÿ kÃßóù©ÿߨÿøŠ’ßá�mséw©‰Ã€e�?Ü«å¥ü߇ü9ª/âvWN�w¨[_ÝØZÏyi»ì×­$;†Æ#+žø¥—L°›R‡QšÆÚKëud†éáS,jÝB¾2îZ¬øfÏßlû ³Éöɼé<æÛqYic]n^}2ÂMR=JKf¿Š3wM ™Q%Cã {gj°üOá;[A£-ÄK—S($‘Žr s_ð¦¼=ÿ?šŸýý�ÿˆ­#5¬­ò"Ršz/Äô+Ï¿áMx{þ5?ûûÿ[¾ð6›á;™çÓ§»•§@Œ'u sÆQ(ÓKI~R›zÇñ:J+/Ä^µñ.’Úuü“G :¹hXÈúƒZð­µ´P!%b@ŠO\ŠÏKkrJ+‹Õ¾èšÎ­q¨Ý]_¤×½Ö9(>ÙCT¿áMx{þ5?ûûÿZ¨Ó¶²ü?à™¹T¿ÃøžƒEy÷ü)¯Ïæ§ÿcÿâ+µÒtÈtm&ßNµitØ�!ˆ÷À2Œ÷]þEEÍ¿yX¹EcÿÂ3gÿ oü$>lÿkò|�›‡—Œc¦3ŸÆ®jÚd:Γq§]4‰ ÂlvŒ€À{d›+­Gwg¡rŠóïøS^ÿŸÍOþþÇÿÄQÿ kÃßóù©ÿߨÿøŠÓ–—ó~ðLùª/ãÿôæï¿ä©è_öÔ¿ô}�gé? tMV·Ômn¯ÞkwÞ‹$ˆTŸ| «š´+sñ+G�É .‡©£×k!Q%ý×râäÖªÇQEeøwÃö¾ÒWN°’i!Wg 3Ù?@+?ÄþÓ|YsúŒ÷q4QD NyÊš�5›Ð—-ÒÔé(¯>ÿ…5áïùüÔÿïìüEð¦¼=ÿ?šŸýý�ÿˆ«å¥ü߇ü9ª/ãÿô+ñð�´ðiÒÜJ³¸v3²’ãTž ðÍŸˆþÇöég�ìsyÑù,O¾Aâ¢Ñæµô4¼¹omMŠ(® ãá�ss,ïw©•Ë�%�'?Ü¢*/âvœ—®w´WŸšð÷üþj÷ö?þ"�øS^ÿŸÍOþþÇÿÄUòÒþoÃþ Õ?—ñÿ€z ¼+mmIX�"“×b²ôï Ùéž Ô5x%�®/ñæ«°(¿@2k%mMu6(¬¿x~×ĺKi×òM,êå¡`#ê r_ð¦¼=ÿ?šŸýý�ÿˆ«Œ`×¼íò"Rš~ê¿Ìô+Ï¿áMx{þ5?ûûÿZ¾øs¤xkV]FÂâöI•ÌèW袛�;i/ÀJU/¬¬¢©êÚd:Γq§]4‰ ÂlvŒ€À{d4�2I·Ó­ZG†Ý6#HAb=ðg¥�5¹r¼ûXÿ’ï ÿ׃è3Ö¯ˆ~é%Õ›Q¿¸½ŽfEB°ºÀú©¨ô/†z7‡õ¨5;+›çž ÛVY©Ü¥Np€ô'½o¦ï­»ÍNM+is°¢Š+œÜ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¼ÿP°´ÔV-núÞ+§}D§ï�:ù,æ$P}ÆúçÔÕÆ7Ü™I­�@¢¹øG4Oúiÿø ŸáGü#š'ý´ÿüOð¥î÷¼uÔW#ÿæ‰ÿ@m?ÿSü(ÿ„sDÿ 6Ÿÿ€©þ{½ÃÞ:ê+‘ÿ„sDÿ 6Ÿÿ€©þÂ9¢ÐOÿÀTÿ =ÞáïuÈÿÂ9¢ÐOÿÀTÿ ?áÑ?è §ÿà*…ïp÷ŽºŠäáÑ?è §ÿà*…ðŽhŸôÓÿð?Â�w¸{Ç]Er?ðŽhŸôÓÿð?Â�øG4Oúiÿø ŸáG»Ü=㮢¹øG4Oúiÿø ŸáGü#š'ý´ÿüOð£Ýîñ×Q\�ü#š'ý´ÿüOð£þÍþ€Úþ§øQî÷x먮GþÍþ€Úþ§øQÿæ‰ÿ@m?ÿSü(÷{‡¼uÕÍøþEÛ¯û j¿úp¸ª¿ðŽhŸôÓÿð?°< hòèW .“bì5]EAkd'ö`N€? =Þáï›Er?ðŽhŸôÓÿð?Â�øG4Oúiÿø ŸáG»Ü=㮢¹øG4Oúiÿø ŸáGü#š'ý´ÿüOð£Ýîñ×Q\�ü#š'ý´ÿüOð£þÍþ€Úþ§øQî÷x먮GþÍþ€Úþ§øQÿæ‰ÿ@m?ÿSü(÷{‡¼uÔW#ÿæ‰ÿ@m?ÿSü(ÿ„sDÿ 6Ÿÿ€©þ{½ÃÞ:ê+‘ÿ„sDÿ 6Ÿÿ€©þÂ9¢ÐOÿÀTÿ =ÞáïuÈÿÂ9¢ÐOÿÀTÿ ?áÑ?è §ÿà*…ïp÷ŽºŠäáÑ?è §ÿà*…ðŽhŸôÓÿð?Â�w¸{Ç]Er?ðŽhŸôÓÿð?Â�øG4Oúiÿø ŸáG»Ü=㮢¹øG4Oúiÿø ŸáGü#š'ý´ÿüOð£Ýîñ×Q\�ü#š'ý´ÿüOð£þÍþ€Úþ§øQî÷x먮GþÍþ€Úþ§øQÿæ‰ÿ@m?ÿSü(÷{‡¼uÔW#ÿæ‰ÿ@m?ÿSü(ÿ„sDÿ 6Ÿÿ€©þ{½ÃÞ:ê+‘ÿ„sDÿ 6Ÿÿ€©þÂ9¢ÐOÿÀTÿ =ÞáïuÈÿÂ9¢ÐOÿÀTÿ ?áÑ?è §ÿà*…ïp÷ŽºŠäáÑ?è §ÿà*…ðŽhŸôÓÿð?Â�w¸{Ç]Er?ðŽhŸôÓÿð?Â�øG4Oúiÿø ŸáG»Ü=㮢¹øG4Oúiÿø ŸáGü#š'ý´ÿüOð£Ýîñ×W7}ÿ%OBÿ°.¥ÿ£ìj¯ü#š'ý´ÿüOð¬ ÍG´x†“b#m*ý™>̘$MiƒŒu?™£Ýîñé´W#ÿæ‰ÿ@m?ÿSü(ÿ„sDÿ 6Ÿÿ€©þ{½ÃÞ:ê+‘ÿ„sDÿ 6Ÿÿ€©þÂ9¢ÐOÿÀTÿ =ÞáïuÈÿÂ9¢ÐOÿÀTÿ ?áÑ?è §ÿà*…ïp÷ŽºŠäáÑ?è §ÿà*…ðŽhŸôÓÿð?Â�w¸{Ç]Er?ðŽhŸôÓÿð?Â�øG4Oúiÿø ŸáG»Ü=㮢¹øG4Oúiÿø ŸáGü#š'ý´ÿüOð£Ýîñ×Q\�ü#š'ý´ÿüOð£þÍþ€Úþ§øQî÷x먮GþÍþ€Úþ§øQÿæ‰ÿ@m?ÿSü(÷{‡¼uÔW#ÿæ‰ÿ@m?ÿSü(ÿ„sDÿ 6Ÿÿ€©þ{½ÃÞ:ê+‘ÿ„sDÿ 6Ÿÿ€©þÂ9¢ÐOÿÀTÿ =ÞáïuÈÿÂ9¢ÐOÿÀTÿ ?áÑ?è §ÿà*…ïp÷ŽºŠäáÑ?è §ÿà*…ðŽhŸôÓÿð?Â�w¸{Ç]Er?ðŽhŸôÓÿð?Â�øG4Oúiÿø ŸáG»Ü=㮢¹øG4Oúiÿø ŸáGü#š'ý´ÿüOð£Ýîñ×Q\�ü#š'ý´ÿüOð£þÍþ€Úþ§øQî÷x먮GþÍþ€Úþ§øQÿæ‰ÿ@m?ÿSü(÷{‡¼uÔW#ÿæ‰ÿ@m?ÿSü(ÿ„sDÿ 6Ÿÿ€©þ{½ÃÞ:ê+‘ÿ„sDÿ 6Ÿÿ€©þÂ9¢ÐOÿÀTÿ =ÞáïuÈÿÂ9¢ÐOÿÀTÿ ?áÑ?è §ÿà*…ïp÷Žº¹»ïù*zý�u/ýcUáÑ?è §ÿà*…`^h8ø�£Ä4›iWìÉödÁ"kLc¨ÉüÍïp÷�M¢¹øG4Oúiÿø ŸáGü#š'ý´ÿüOð£Ýîñ×Q\�ü#š'ý´ÿüOð£þÍþ€Úþ§øQî÷x먮GþÍþ€Úþ§øQÿæ‰ÿ@m?ÿSü(÷{‡¼uÔW#ÿæ‰ÿ@m?ÿSü(ÿ„sDÿ 6Ÿÿ€©þ{½ÃÞ:ê+‘ÿ„sDÿ 6Ÿÿ€©þÂ9¢ÐOÿÀTÿ =ÞáïuÈÿÂ9¢ÐOÿÀTÿ ?áÑ?è §ÿà*…ïp÷ŽºŠäáÑ?è §ÿà*…ðŽhŸôÓÿð?Â�w¸{Ç]Er?ðŽhŸôÓÿð?Â�øG4Oúiÿø ŸáG»Ü=㮢¹øG4Oúiÿø ŸáGü#š'ý´ÿüOð£Ýîñ×Q\�ü#š'ý´ÿüOð£þÍþ€Úþ§øQî÷x먮GþÍþ€Úþ§øQogk¢ë6éÖÐÚG<¦Þt†0Šá”•$ ÜúÓ²{16Öç]ETQEQEQEQEQEQEQEÃÍ9´nþLøîSüë¹®þ_ ÛXÿ¼KB?ÜŸ ÿŽ¡5¤?Tg/Ñ›´QEfjQEQEQEQE6Fd‰™ÈÀ Nkû{\ÿ¡Bûÿ-¿øåt4P=ý½®С}ÿ�–ßür�íísþ… ïü ¶ÿã•ÐÑ@÷öö¹ÿB…÷þ[ñÊ?·µÏú/¿ð2ÛÿŽWCEsßÛÚçý ßømÿÇ(þÞ×?èP¾ÿÀËoþ9] ÏnkÇîøFèöïmÁýÖ_‡îƺJæï¿ä©è_öÔ¿ô}�t”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\§�üVúºYéå´.pb2!N›±Üç€:p}0n•I(Çr'8Â.R7ukMÒ6¥{ ¾FU]þfú/SøVAø…á�qý¡!úZLöJòIæ™æžG–i^I³1÷&’½håÑ·¼Ï*Y„¯î£ÖÿáaøgþåÿÀ9¿øŠ?áaøgþåÿÀ9¿øŠòJ*ÿ³©wdÿhTì�[ÿ…‡áŸùÿ—ÿæÿâ+ïÆzž?Òuº”Ú[é—°K'Ùeù^ImY6ç‘óÓå稯?¢�ìê]ØhTì�[ÿ…‡áŸùÿ—ÿæÿâ(ÿ…‡áŸùÿ—ÿæÿâ+É(£û:—vÚ;#ÖÿáaøgþåÿÀ9¿øŠ?áaøgþåÿÀ9¿øŠòJ(þΥ݇ö…NÈö­?ÅZ©(ŠËR…åc…�ó1öVš×¯ŸYC.= wñ…ÄW±i:´Í4–óHrÑ·d'¸=pxïÇ-| §h;�41ªråš±éTQEy§¢QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\ß�|JÞÒÑ-1öë¢RŒì|ÏŽøÈüHª„ä£Ù3’„\™k[ñf“ .òr÷È·„n��R:©"¹y¾*çìÚ!dìeº ­üë�fi$y%v’G;�Üå˜ú“ÜÒW·OM/VxÕ1Õ÷tGwÿ Rãþ€QàqÿãuÆëZµæµ­\jÁˆÛœNÅ3·Û?‰ªÔWM<5*Oš Sž¦"¥Ei2-×óÊ/ûúøš7\Ï(¿ïéÿâjZ+s-×óÊ/ûúøš7\Ï(¿ïéÿâjZ(-×óÊ/ûúøš7\Ï(¿ïéÿâjZ(-×óÊ/ûúøšM󎰩ÿvLÿ0*j(4™]¶œ£ÿu†ÿ^¤¦Éʸaîê­2bZ9>úwþðìhZFÎÓ°•aÊ�pAìih vÒo¡¢Ù^°Ü[Ç)¶åúÕºÊð¯ü‰Ú7ýxAÿ¢Öµkå%¤š>¢:¤QEIAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPYšÏˆ´Í Ú�ÈGa”…Fé裟ǥGâ}y<=¢½ÙQ$ÌDpFOßsÓð}…xÍÍÌ÷·R]^ÌÓÜJrò7Síì=jíÂá]m^Ç'¨è·;Û�Šjý�F’Dìg¸ŸÈ®;Äšõ߈u�zö±@«Ä‘yå¶€I';GR}; Ï¢½zxZTß4V§“SR¢å“ЋuÇüò‹þþŸþ&�×óÊ/ûúøš–Šé9È·\Ï(¿ïéÿâhÝqÿ<¢ÿ¿§ÿ‰©h ·\Ï(¿ïéÿâhÝqÿ<¢ÿ¿§ÿ‰©h ·\Ï(¿ïéÿâhÝqÿ<¢ÿ¿§ÿ‰©h ·Î:‡é'ÿZ…�Kpѱè¿Ðô©iE*ã ö4jÑPÆÌ’\猣ãüEM@C'Ës âÊË?Ò¦¨¦ÿ[oÿ]þ‚Ô0D´QE0=³Â¿ò'hßõáþ‹ZÕ¬¯ ÿÈ�£ׄú-kV¾N>¢? (¢¤ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(̾'Ý4ší�¦~Hm̸÷v#ÿdýMquÕüJÿ‘Æ?úð‹ÿFK\¥}&Z„OžÅ;Ö�QEÔsQ@Q@Q@Q@Q@Üqå¿up?>?­MQ\ÿªõÑ?ô!RÒꢛým¿ýt?ú Tµßëmÿë¡ÿÐZ†–Š(¦¶xWþDíþ¼ ÿÑkZµ•á_ù´oúðƒÿE­j×ÉÏâgÔGáAET”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyOįùcÿ¯¿ôdµÊWWñ+þGÿëÂ/ý-r•ô˜OàDùÜWñ¤QEuáEPEPEPEPEPW?ê‡ýtOýTµÏú¡ÿ]ÿB-.¡Ð*)¿ÖÛÿ×Cÿ µKQMþ¶ßþºý¨`‰h¢Š`{g…äNÑ¿ëÂýµ«Y^ÿ‘;Fÿ¯?ôZÖ­|œþ&}D~QEIAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP”üJÿ‘Æ?úð‹ÿFK\¥u¿äq�þ¼"ÿÑ’×)_I„þO�ÅAEWQÎQEQEQEQEQEEsþ¨×DÿÐ…KQ\ÿªõÑ?ô!RÒꢛým¿ýt?ú Tµßëmÿë¡ÿÐZ†–Š(¦¶xWþDíþ¼ ÿÑkZµ•á_ù´oúðƒÿE­j×ÉÏâgÔGáAET”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyOįùcÿ¯¿ôdµÊWWñ+þGÿëÂ/ý-r•ô˜OàDùÜWñ¤QEuáEPEPEPEPEPW?ê‡ýtOýTµÏú¡ÿ]ÿB-.¡Ð*)¿ÖÛÿ×Cÿ µKQMþ¶ßþºý¨`‰h¢Š`{g…äNÑ¿ëÂýµ«Y^ÿ‘;Fÿ¯?ôZÖ­|œþ&}D~QEIAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP”üJÿ‘Æ?úð‹ÿFK\¥u¿äq�þ¼"ÿÑ’×)_I„þO�ÅAEøa–âeŠÞ7–F8TE,OÐ é9ÆQS\Ú\ÙJ#¼·–ÞB7• ’=pjO`³[…QLŠ( Š( Š( ®ÕúèŸú©j+ŸõCþº'þ„*Z]C TS­·ÿ®‡ÿAj–¢›ým¿ýt?ú PÁÑEÀöÏ ÿÈ�£ׄú-kV¼›@ÿ…ÏÿÖ™öøA>ÍöH¼Ÿ;í›ölwcŒãÅhÅïÿªÿ“µòrø™õøQé4W›Åïÿªÿ“´Åïÿªÿ“µ%“Ey·ü^ÿú§ÿù;Gü^ÿú§ÿù;@“Ep¾ñO‰u_ø“ÃÞ3·Ò“PÑ «yÚI“É‘gF`1'9zûôã'º Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( )ø•ÿ#ŒõáþŒ–¹Jêþ%ÈãýxEÿ£%®R¾“ üŸ;Šþ4‚·<#~Ún¸nEœ×h°°�@¥�Œ°ôÇáÖ°ê͆£w¥Ý­Í„Í Ê1¹yÈô ðGÖ¶©x8™S—,”ŽäéQjÚ†ŒòjRêÚ<²Kbà•NÆ$ᛕöƪö¾ÑõëV6vré�oz-Ü´¥Ì«ßï}ÖöíïY.¼oY_ëw\Åm» ¨ÆTŽÀÏ=jž§âmWSdY¯e1C&ø@J‘Ðäu#Ôæ¸ÕÉÙ;ÿ¼ìuhÚí_þ}ÇQá}æh­í.--'[¡G ïœÒ!89 ʰôsžÕ…¾…ý°!‡Ã÷KöKå�Ü»‚™›�ü1¿âWú<É»À?¯CDpjÉi )ê ýEGæËÿ<ýô(ó&íæâ�Âü˜÷¨aÐ�‚?Ó´×õ‹ÏU»@:+Èd_ûå²++7ø#_ø?Ò“Ê•¾ü؈¸þy¨”#-ÕÊŒ¥��Vð_Œ§×nåÓµãQÅç,‘¨ ŽÇ$wç=±]�y7Ã(’/I°rl%É'$þò.õë5óøºq§UÆ'½…œ§I9Q\§HQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEå?¿äq�þ¼"ÿÑ’×)]_įùcÿ¯¿ôdµÊWÒa?�çq_Æ�QEÔs�ƒô«=Râð]Ãö©¢‡|žo—ç÷»vüè½ÐöºÖÚe”š`Ž2á/_ 8fÉ)è§J%Ö—o$¿Úö÷-� 3ÚɶHX døôÅtÉãÛxµ–8îÍ¢[ Õk‚xÃóò“‘ß×>ÕÅSÚª�Á_òþ¿²Ÿ²pJnß™�ƒ5u!iÖŒ_SYÞñ4z­ÔW0¼Ù>m°’í#'=ˆ#×¥ XŽ[Ûä4/küÆCàÛéd”5ÝŒ(“y $³Y¤N2pxè=³IƒïžÆK«›‹;$ŠV‰ÅÌ¥aÛ¡ÛšÒÐ|gŽŒ¶7²^ÂñÈγZ¬n\1$†óîzŠÏÕüG© }‘„æäÞ›‚òÁ]¤Wò;B–#šÏ`q¡Ëu¹ÿ…n´Û#5Ýîž’ˆÄ†ÔÜ6û$`Ÿ¡íÆkº÷ñVœ<;-‰þÒ¼y!(±^˜Þ8Üÿp7qÛúvä+j2¨Óç1¬ šä (¢·1"¹ÿT?ë¢èB¥¨®ÕúèŸú©iu�QMþ¶ßþºýªZŠoõ¶ÿõÐÿè-CKESÛ<+ÿ"v�ÿ^èµ­ZÊð¯ü‰Ú7ýxAÿ¢Öµkäçñ3ê#ð£Î~*Çæ�ÿ\î?œUçææ py�þUÝü\Ü軑�BÜnQ阻wúW Ñ7Ë(#øzøW¿‚þùþg‡Œþ3Îs÷`�ûœëFùÏHWñþµKEvd[®?ç”÷ðÿñ4oœu… ?úÕ-� ûÖïø­iŒ}òSýõ#õ5-2Ic�ýcªûÖ��wÃSŸ¹�°Kÿ£"¯V¯#ø\þ9Œq²!°“Éó#ç«×+çñ߯g»‚þ (¢¸ŽÀ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ê~%ÈãýxEÿ£%®Rº¿‰_ò8Çÿ^èÉk”¯¤Â'Îâ¿� ¢Š+¨ç (¢€ (¢€ (¢€ (¢€ (¢€"¹ÿT?ë¢èB¥¨®ÕúèŸú©iu�QMþ¶ßþºýªZŠoõ¶ÿõÐÿè-CKESÛ<+ÿ"v�ÿ^èµ­ZÊð¯ü‰Ú7ýxAÿ¢Öµkäçñ3ê#ð£Î~*Çæ�ÿ\î?œUÁwüiQ]G8QEQEQEQEQEÏú¡ÿ]ÿB-Esþ¨×DÿÐ…KK¨t Šoõ¶ÿõÐÿè-RÔS­·ÿ®‡ÿAj"Z(¢˜Ùá_ù´oúðƒÿE­jÖW…äNÑ¿ëÂýµ«_'?‰ŸQ…oñaö]hÇk6RࣩÌUÀþýÿ¹÷ù�ô®ûâ»Ѷ¹Bà‚>±W¾uûÑ«û£cô?ã^ö ø çùž3øÌ_%ÏÞ¸¢€?¥gä”ÿÀÈþT} ½‹ÿ'ùf�µC݈ú©١ɨ}™?½/ýýoñ£ìëÚIGý´&�µCÿ=j‡³çè £@Ô<—vy×úQ‹…èc“Ø‚§úÑö…?u$oøΓ̙¾ä;}Ý¿Ã4h�wÃ'/ãrŒ…l$È?õÒ.ÿ…zÍy7Ãuñ”¦GÜÆÂNƒ~ò.•ë5àc¿ŒÏwüQEq�EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP”üJÿ‘Æ?úð‹ÿFK\¥u¿äq�þ¼"ÿÑ’×)_I„þO�ÅAEWQÎQEQEQEQEQEEsþ¨×DÿÐ…KQ\ÿªõÑ?ô!RÒꢛým¿ýt?ú Tµßëmÿë¡ÿÐZ†–Š(¦¶xWþDíþ¼ ÿÑkZµ•á_ù´oúðƒÿE­j×ÉÏâgÔGáGœüTÿ�Íþ¹Ü8«„®ïâ§ü~hßõÎãùÅ\%} ø çùž3øïúèQEv�EPEPWð×þG?ëÂ_ýzµyOÃ_ùdÿ¯ ôdUêÕóøïã³ÝÁQ\'hQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEå?¿äq�þ¼"ÿÑ’×)]_įùcÿ¯¿ôdµÊWÒa?�çq_Æ�QEÔs…Q@Q@Q@Q@Q@\ÿªõÑ?ô!RÔW?ê‡ýtOýT´º‡@¨¦ÿ[oÿ]þ‚Õ-E7úÛúèô¡‚%¤lí;Afè“ØPÌrÄ;šíüá ‰ï¢ÕõXZ!;íá�a¤nÎG`:Žäàôë�jÑ¥fmF”ªË•�¤Y�?E±²b [[Ç#ý•úUº(¯™nîçÑ­Ž#âF‹}¨ÃayaÜ A*Ëc/‡ÙóÔãgAÏ5æ��b¹ù”à©ê¸¯ ª�î‘§jXþб·¹#¡– Ä} é]ø|k¥F®Ž*ø5V\ÉÙžEzÜß|9)%l䄞ñ\Håœ~•MþhÌ~K­B?e•OóS]«0¤÷Lâx «f�0¢½/þv•ÿAOþû‹ÿ�Ó×ᆎÍy¨?±•òAOëô|Åõ¾G˜ÓYÕ]‚�s^·ÿÇ�2Úiˆÿž—/ü�¶,t'M`Ö:u´?å¢D7ß]k9f0û(Ò9|þÓ8�‡-ôZ¼º¥Å¼�[}™¡ŒÊ»L…™ põïž+Ñ袼ªÕ]Yó³Ó¥MR‡* (¢²5 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<§âWüŽ1ÿׄ_ú2Zå+«ø•ÿ#ŒõáþŒ–¹JúL'ð"|î+øÒ (¢ºŽp¢Š(¢Š(¢Š(¢Š(¢Š(+ŸõCþº'þ„*ZŠçýPÿ®‰ÿ¡ –—Pè£áÍ:ÛUñV›e’ÞYz‡d'9©rgWMðöÉ®¼aà–p¼¬}ØlñÜß‘¬qå¥'ämB<Õb�CÓü'¡és l´ØVU9Y22ŸbÄ‘øVÅW̹9;¶}ŠŠ²AERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEå?¿äq�þ¼"ÿÑ’×)]¿Å &MRÂü’Xš8èTîñ ß•qôx6�ØùìZj´‚Š(®³˜(¢Š(¢Š(¢Š(¢Š(¢ŠŠçýPÿ®‰ÿ¡ –¯hz?öþ»k§3H‘ÈÅäxñ”UÏ Ž¸;× EðÃGGKÍB`?…å@ýò€þµÉWNŒ¹dtÒÃT«Äó[kyïnãµ²…§¸�á"N§ßØ{ž{„ü8žÒ|§e’êbâEè[(ö¿Þ¯iz&�¢ÂbÓ-#· ÷ˆÉfú±äþ&¯W“‰ÅºÞêÑ® ¨êõaEWØQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEgkº4ö�-�É* ’Ìn9 ?Ï#"¼gRÓnôkö²Ô¢ò¦©vAýå=Çòï^ïU¯ôë=RÔÛêÑÜDyÛ"çÔzq]xlT¨;nŽLFVWÙžEz�ÇÃ-Y A=õ²öHæ ýö¬Z‡þn•ÿA-Oþû‹ÿ�צ³ >g�õ¾GšQ^—ÿ ·Jÿ –§ÿ}ÅÿÆèÿ…[¥ÐKSÿ¾âÿãtþ¿GÌ>£[ÈóJ+ÒÿáVé_ôÔÿ︿øÝð«t¯ú j÷Ü_ün�¯Ñó¨Öò<ÒŠô¿øUºWýµ?ûî/þ7Gü*Ý+þ‚ZŸý÷ÿ£ëô|Ãê5¼�4¢½/þn•ÿA-Oþû‹ÿ�Ñÿ ·Jÿ –§ÿ}ÅÿÆèúý0ú�o#Í)QZIR(‘¤–Cµ#A–sèzôÄø_¤+eïµ£IþH+¡Ò|9¥hy:mšG# 4¬K¹ÿ�œ{t¬ç˜SKÝWeÃ6ýædø'ÂÍ Ú=Õðo¹:ƒ‘usÜŸ_¦k©¢Šñç9T“”·=hAB*1 (¢ °¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÿÙ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8502398 manila-23.0.0.0rc1/doc/source/configuration/index.rst0000664000175000017500000000063415251045254021206 0ustar00zuulzuul============= Configuration ============= .. toctree:: :maxdepth: 1 shared-file-systems/overview shared-file-systems/config-reference.rst shared-file-systems/api.rst shared-file-systems/drivers.rst shared-file-systems/log-files.rst shared-file-systems/samples/index.rst The Shared File Systems service works with many different drivers that you can configure by using these instructions. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1789151966.025185 manila-23.0.0.0rc1/doc/source/configuration/shared-file-systems/0000775000175000017500000000000015251045336023233 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8502398 manila-23.0.0.0rc1/doc/source/configuration/shared-file-systems/api.rst0000664000175000017500000000051115251045254024532 0ustar00zuulzuul===================================== Shared File Systems API configuration ===================================== The Shared File Systems API service (``manila-api``) can be configured with options in the ``[DEFAULT]`` section of ``manila.conf``. See the :doc:`config-reference` for a complete listing of all available options. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8502398 manila-23.0.0.0rc1/doc/source/configuration/shared-file-systems/config-reference.rst0000664000175000017500000000042415251045254027165 0ustar00zuulzuul======================= Configuration Reference ======================= Complete listing of all configuration options for the Shared File Systems service (manila), auto-generated from the source code. .. show-options:: :config-file: etc/oslo-config-generator/manila.conf ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151966.0311852 manila-23.0.0.0rc1/doc/source/configuration/shared-file-systems/drivers/0000775000175000017500000000000015251045336024711 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8502398 manila-23.0.0.0rc1/doc/source/configuration/shared-file-systems/drivers/cephfs_driver.rst0000664000175000017500000006417515251045254030302 0ustar00zuulzuul.. Copyright 2016 Red Hat, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ============= CephFS driver ============= The CephFS driver enables manila to export shared filesystems backed by Ceph's File System (CephFS) using either the Ceph network protocol or NFS protocol. Guests require a native Ceph client or an NFS client in order to mount the filesystem. When guests access CephFS using the native Ceph protocol, access is controlled via Ceph's cephx authentication system. If a user requests share access for an ID, Ceph creates a corresponding Ceph auth ID and a secret key if they do not already exist, and authorizes the ID to access the share. The client can then mount the share using the ID and the secret key. To learn more about configuring Ceph clients to access the shares created using this driver, please see the `Ceph documentation`_ And when guests access CephFS through NFS, an NFS-Ganesha server (or CephFS NFS service) mediates access to CephFS. The driver enables access control by managing the NFS-Ganesha server's exports. Supported Operations ~~~~~~~~~~~~~~~~~~~~ The following operations are supported with CephFS backend: - Create, delete, update and list share - Allow/deny access to share * Only ``cephx`` access type is supported for CephFS native protocol. * Only ``ip`` access type is supported for NFS protocol. * ``read-only`` and ``read-write`` access levels are supported. - Extend/shrink share - Manage/unmanage shares - Manage/unmanage share snapshots - Create, delete, update and list snapshot - Create, delete, update and list share groups - Delete and list share group snapshots .. important:: Share group snapshot creation is no longer supported in mainline CephFS. This feature has been removed from manila W release. Prerequisites ~~~~~~~~~~~~~ .. important:: A manila share backed by CephFS is only as good as the underlying filesystem. Take care when configuring your Ceph cluster, and consult the latest guidance on the use of CephFS in the `Ceph documentation`_. Ceph testing matrix ------------------- As Ceph and Manila continue to grow, it is essential to test and support combinations of releases supported by both projects. However, there is little community bandwidth to cover all of them. For simplicity sake, we are focused on testing (and therefore supporting) the current Ceph active releases. Check out the list of Ceph active releases `here `_. Below is the current state of testing for Ceph releases with this project. Adjacent components such as `devstack-plugin-ceph `_ and `tripleo `_ are added to the table below. Contributors to those projects can determine what versions of ceph are tested and supported with manila by those components; however, their state is presented here for ease of access. +-----------------------+---------+----------------------+ | OpenStack release | Manila | devstack-plugin-ceph | +=======================+=========+======================+ +-----------------------+---------+----------------------+ | 2024.1 ("Caracal") | Reef | Reef | +-----------------------+---------+----------------------+ | 2024.2 ("Dalmatian") | Reef | Reef | +-----------------------+---------+----------------------+ | 2025.1 ("Epoxy") | Squid | Squid | +-----------------------+---------+----------------------+ | 2025.2 ("Flamingo") | Squid | Squid | +-----------------------+---------+----------------------+ Additionally, it is expected that the version of the Ceph client available to manila is aligned with the Ceph server version. Mixing server and client versions is strongly unadvised. In case of using the NFS Ganesha driver, it's also a good practice to use the versions that align with the Ceph version of choice. Common Prerequisites -------------------- - A Ceph cluster with a filesystem configured (See `Create ceph filesystem`_ on how to create a filesystem.) - ``python3-rados`` and ``python3-ceph-argparse`` packages installed in the servers running the :term:`manila-share` service. - Network connectivity between your Ceph cluster's public network and the servers running the :term:`manila-share` service. For CephFS native shares ------------------------ - Ceph client installed in the guest - Network connectivity between your Ceph cluster's public network and guests. See :ref:`security_cephfs_native`. For CephFS NFS shares --------------------- There are two ways for the CephFS driver to provision and export CephFS shares via NFS. Both ways involve the user space NFS service, NFS-Ganesha. Since the Quincy release of Ceph, there is support to create and manage an NFS-Ganesha based "ceph nfs" service. This service can be clustered, i.e., it can have one or more active NFS services working in tandem to provide high availability. You can also optionally deploy an ingress service to front-end this cluster natively using ceph's management commands. Doing this allows ease of management of an NFS service to serve CephFS shares securely as well provides an active/active high availability configuration for it which may be highly desired in production environments. Please `follow the ceph documentation `_ for instructions to deploy a cluster with necessary configuration. With an NFS cluster, the CephFS driver uses Ceph mgr APIs to create and manipulate exports when share access rules are created and deleted. The CephFS driver can also work with Manila's in-built NFS-Ganesha driver to interface with an independent, standalone NFS-Ganesha service that is not orchestrated via Ceph. Unlike when under Ceph's management, the high availability of the NFS server must be externally managed. Typically deployers use Pacemaker/Corosync for providing active/passive availability for such a standalone NFS-Ganesha service. See `the NFS-Ganesha documentation `_ for more information. The CephFS driver can be configured to store the NFS recovery data in a RADOS pool to facilitate the server's recovery if the service is shut down and respawned due to failures/outages. Since the Antelope (2023.1) release of OpenStack Manila, we recommend the use of ceph orchestrator deployed NFS service. The use of a standalone NFS-Ganesha service is deprecated as of the Caracal release (2024.1) and support will be removed in a future release. The CephFS driver does not specify an NFS protocol version when setting up exports. This is to allow the deployer to configure the appropriate NFS protocol version/s directly in NFS-Ganesha configuration. NFS-Ganesha enables both NFS version 3 and version 4.x by virtue of default configuration. Please note that there are many differences at the protocol level between NFS versions. Many deployers enable only NFS version 4.1 (and beyond) to take advantage of enhancements in locking, security and ease of port management. Be aware that not all clients support the latest versions of NFS. The pre-requisites for NFS are: - NFS client installed in the guest. - Network connectivity between your Ceph cluster's public network and NFS-Ganesha service. - Network connectivity between your NFS-Ganesha service and the client mounting the manila share. - Appropriate firewall rules to permit port access between the clients and the NFS-Ganesha service. If you're deploying a standalone NFS-Ganesha service, we recommend using the latest version of NFS-Ganesha. The server must be deployed with at least NFS-Ganesha version 3.5. .. _authorize_ceph_driver: Authorizing the driver to communicate with Ceph ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Capabilities required for the Ceph manila identity have changed from the Wallaby release. The Ceph manila identity configured no longer needs any MDS capability. The MON and OSD capabilities can be reduced as well. However new MGR capabilities are now required. If not accorded, the driver cannot communicate to the Ceph Cluster. .. important:: The driver in the Wallaby (or later) release requires a Ceph identity with a different set of Ceph capabilities when compared to the driver in a pre-Wallaby release. When upgrading to Wallaby you'll also have to update the capabilities of the Ceph identity used by the driver (refer to `Ceph user capabilities docs `_) E.g. a native driver that already uses `client.manila` Ceph identity, issue command `ceph auth caps client.manila mon 'allow r' mgr 'allow rw'` If you are deploying the CephFS driver with Native CephFS or using an NFS service deployed with ceph management commands, the auth ID should be set as follows: .. code-block:: console ceph auth get-or-create client.manila -o manila.keyring \ mgr 'allow rw' \ mon 'allow r' If you're deploying the CephFS NFS driver with a standalone NFS-Ganesha service, we use a specific pool to store exports (configurable with the config option "ganesha_rados_store_pool_name"). The `client.manila` ceph user requires permission to access this pool. So, the auth ID should be set as follows: .. code-block:: console ceph auth get-or-create client.manila -o manila.keyring \ osd 'allow rw pool=" \ mgr 'allow rw' \ mon 'allow r' ``manila.keyring``, along with your ``ceph.conf`` file, will then need to be placed on the server running the :term:`manila-share` service. .. important:: To communicate with the Ceph backend, a CephFS driver instance (represented as a backend driver section in manila.conf) requires its own Ceph auth ID that is not used by other CephFS driver instances running in the same controller node. In the server running the :term:`manila-share` service, you can place the ``ceph.conf`` and ``manila.keyring`` files in the /etc/ceph directory. Set the same owner for the :term:`manila-share` process and the ``manila.keyring`` file. Add the following section to the ``ceph.conf`` file. .. code-block:: ini [client.manila] client mount uid = 0 client mount gid = 0 log file = /opt/stack/logs/ceph-client.manila.log admin socket = /opt/stack/status/stack/ceph-$name.$pid.asok keyring = /etc/ceph/manila.keyring It is advisable to modify the Ceph client's admin socket file and log file locations so that they are co-located with manila services's pid files and log files respectively. Enabling snapshot support in Ceph backend ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From Ceph Nautilus, all new filesystems created on Ceph have snapshots enabled by default. If you've upgraded your ceph cluster and want to enable snapshots on a pre-existing filesystem, you can do so: .. code-block:: console ceph fs set {fs_name} allow_new_snaps true Configuring CephFS backend in manila.conf ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Configure CephFS native share backend in manila.conf ---------------------------------------------------- Add CephFS to ``enabled_share_protocols`` (enforced at manila api layer). In this example we leave NFS and CIFS enabled, although you can remove these if you will only use a CephFS backend: .. code-block:: ini enabled_share_protocols = NFS,CIFS,CEPHFS Create a section like this to define a CephFS native backend: .. code-block:: ini [cephfsnative1] driver_handles_share_servers = False share_backend_name = CEPHFSNATIVE1 share_driver = manila.share.drivers.cephfs.driver.CephFSDriver cephfs_conf_path = /etc/ceph/ceph.conf cephfs_protocol_helper_type = CEPHFS cephfs_auth_id = manila cephfs_cluster_name = ceph cephfs_filesystem_name = cephfs Set ``driver-handles-share-servers`` to ``False`` as the driver does not manage the lifecycle of ``share-servers``. For the driver backend to expose shares via the native Ceph protocol, set ``cephfs_protocol_helper_type`` to ``CEPHFS``. Then edit ``enabled_share_backends`` to point to the driver's backend section using the section name. In this example we are also including another backend ("generic1"), you would include whatever other backends you have configured. Finally, edit ``cephfs_filesystem_name`` with the name of the Ceph filesystem (also referred to as a CephFS volume) you want to use. If you have more than one Ceph filesystem in the cluster, you need to set this option. .. important:: For Native CephFS shares, the backing ``cephfs_filesystem_name`` is visible to end users through the ``__mount_options`` metadata. Make sure to add the ``__mount_options`` metadata key to the list of admin only modifiable metadata keys (``admin_only_metadata``), as explained in the :doc:`Configuration Reference `. .. code-block:: ini enabled_share_backends = generic1, cephfsnative1 Configure CephFS NFS share backend in manila.conf ------------------------------------------------- .. note:: Prior to configuring the Manila CephFS driver to use NFS, you must have installed and configured NFS-Ganesha. If you're using ceph orchestrator to create the NFS-Ganesha service and manage it alongside ceph, refer to the Ceph documentation on how to setup this service. If you're using an independently deployed standalone NFS-Ganesha service, refer to the `NFS-Ganesha setup guide <../contributor/ganesha.html#nfs-ganesha-configuration>`_. Add NFS to ``enabled_share_protocols`` if it's not already there: .. code-block:: ini enabled_share_protocols = NFS,CIFS,CEPHFS Create a section to define a CephFS NFS share backend. The following is an example for using a ceph orchestrator deployed NFS service: .. code-block:: ini [cephfsnfs1] driver_handles_share_servers = False share_backend_name = CEPHFSNFS1 share_driver = manila.share.drivers.cephfs.driver.CephFSDriver cephfs_protocol_helper_type = NFS cephfs_conf_path = /etc/ceph/ceph.conf cephfs_auth_id = manila cephfs_cluster_name = ceph cephfs_filesystem_name = cephfs cephfs_nfs_cluster_id = mycephfsnfscluster The following is an example for using an independently deployed standalone NFS-Ganesha service: .. code-block:: ini [cephfsnfs1] driver_handles_share_servers = False share_backend_name = CEPHFSNFS1 share_driver = manila.share.drivers.cephfs.driver.CephFSDriver cephfs_protocol_helper_type = NFS cephfs_conf_path = /etc/ceph/ceph.conf cephfs_auth_id = manila cephfs_cluster_name = ceph cephfs_filesystem_name = cephfs cephfs_ganesha_server_is_remote= False cephfs_ganesha_server_ip = 172.24.4.3 ganesha_rados_store_enable = True ganesha_rados_store_pool_name = cephfs_data The following options are set in the driver backend sections above: * ``driver-handles-share-servers`` to ``False`` as the driver does not manage the lifecycle of ``share-servers``. * ``cephfs_protocol_helper_type`` to ``NFS`` to allow NFS protocol access to the CephFS backed shares. * ``ceph_auth_id`` to the ceph auth ID created in :ref:`authorize_ceph_driver`. * ``cephfs_nfs_cluster_id`` - Use this option with a ceph orchestrator deployed clustered NFS service. Set it to the name of the cluster created with the ceph orchestrator. * ``cephfs_ganesha_server_is_remote`` - Use this option with a standalone NFS-Ganesha service. Set it to False if the NFS-ganesha server is co-located with the :term:`manila-share` service. If the NFS-Ganesha server is remote, then set the options to ``True``, and set other options such as ``cephfs_ganesha_server_ip``, ``cephfs_ganesha_server_username``, and ``cephfs_ganesha_server_password`` (or ``cephfs_ganesha_path_to_private_key``) to allow the driver to manage the NFS-Ganesha export entries over SSH. * ``cephfs_ganesha_server_ip`` - Use this option with a standalone NFS-Ganesha service. Set it to the ganesha server IP address. It is recommended to set this option even if the ganesha server is co-located with the :term:`manila-share` service. * ``ganesha_rados_store_enable`` - Use this option with a standalone NFS-Ganesha service. Set it to True or False. Setting this option to True allows NFS Ganesha to store exports and its export counter in Ceph RADOS objects. We recommend setting this to True and using a RADOS object since it is useful for highly available NFS-Ganesha deployments to store their configuration efficiently in an already available distributed storage system. * ``ganesha_rados_store_pool_name`` - Use this option with a standalone NFS-Ganesha service. Set it to the name of the RADOS pool you have created for use with NFS-Ganesha. Set this option only if also setting the ``ganesha_rados_store_enable`` option to True. If you want to use one of the backend CephFS's RADOS pools, then using CephFS's data pool is preferred over using its metadata pool. Edit ``enabled_share_backends`` to point to the driver's backend section using the section name, ``cephfsnfs1``. Finally, edit ``cephfs_filesystem_name`` with the name of the Ceph filesystem (also referred to as a CephFS volume) you want to use. If you have more than one Ceph filesystem in the cluster, you need to set this option. .. code-block:: ini enabled_share_backends = generic1, cephfsnfs1 Space considerations ~~~~~~~~~~~~~~~~~~~~ The CephFS driver reports total and free capacity available across the Ceph cluster to manila to allow provisioning. All CephFS shares are thinly provisioned, i.e., empty shares do not consume any significant space on the cluster. The CephFS driver does not allow controlling oversubscription via manila. So, as long as there is free space, provisioning will continue, and eventually this may cause your Ceph cluster to be over provisioned and you may run out of space if shares are being filled to capacity. It is advised that you use Ceph's monitoring tools to monitor space usage and add more storage when required in order to honor space requirements for provisioned manila shares. You may use the driver configuration option ``reserved_share_percentage`` to prevent manila from filling up your Ceph cluster, and allow existing shares to grow. Creating shares ~~~~~~~~~~~~~~~ Create CephFS native share -------------------------- The default share type may have ``driver_handles_share_servers`` set to True. Configure a share type suitable for CephFS native share: .. code-block:: console openstack share type create cephfsnativetype false openstack share type set cephfsnativetype --extra-specs vendor_name=Ceph storage_protocol=CEPHFS Then create a share, .. code-block:: console openstack share create --share-type cephfsnativetype --name cephnativeshare1 cephfs 1 Note the export location of the share: .. code-block:: console openstack share export location list cephnativeshare1 The export location of the share contains the Ceph monitor (mon) addresses and ports, and the path to be mounted. It is of the form, ``{mon ip addr:port}[,{mon ip addr:port}]:{path to be mounted}`` Create CephFS NFS share ----------------------- Configure a share type suitable for CephFS NFS share: .. code-block:: console openstack share type create cephfsnfstype false openstack share type set cephfsnfstype --extra-specs vendor_name=Ceph storage_protocol=NFS Then create a share: .. code-block:: console openstack share create --share-type cephfsnfstype --name cephnfsshare1 nfs 1 Note the export location of the share: .. code-block:: console openstack share export location list cephnfsshare1 The export location of the share contains the IP address of the NFS-Ganesha server and the path to be mounted. It is of the form, ``{NFS-Ganesha server address}:{path to be mounted}`` Managing existing shares and snapshots ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Starting from the 2024.2 (Dalmatian) release, it is possible to bring both CephFS Native and NFS shares (subvolumes) that already exist in the Ceph Storage under Manila's management. The workflow will be slightly different when compared to the original approach: - The :ref:`share adoption process` should be used, but the name of the subvolume must be supplied as the ``export path`` parameter, so that the driver can appropriately locate the subvolume and manage it. - The subvolume's ``subvolume_mode`` will not be overwritten by manila. - The subvolumes will not be renamed in the Ceph Storage, and at the end of the manage operation, their names will be preserved. - In case the subvolume has its current allocated size (``bytes_quota``) set as infinite, please make sure specify a new ``size`` within the ``driver_options`` parameter. The driver will attempt to resize the share using the provided size and will fail if it is not enough. - While managing CephFS Snapshots, the CephFS driver will consider the size of the parent share and account it as the snapshot's quota. Allowing access to shares ~~~~~~~~~~~~~~~~~~~~~~~~~ Allow access to CephFS native share ----------------------------------- Allow Ceph auth ID ``alice`` access to the share using ``cephx`` access type. .. code-block:: console openstack share access create cephnativeshare1 cephx alice Note the access status, and the access/secret key of ``alice``. .. code-block:: console openstack share access list cephnativeshare1 Allow access to CephFS NFS share -------------------------------- Allow a guest access to the share using ``ip`` access type. .. code-block:: console openstack share access create cephnfsshare1 ip 172.24.4.225 Mounting CephFS shares ~~~~~~~~~~~~~~~~~~~~~~ .. note:: The cephfs filesystem name will be available in the ``__mount_options`` share's metadata. Mounting CephFS native share using FUSE client ---------------------------------------------- Using the secret key of the authorized ID ``alice`` create a keyring file, ``alice.keyring`` like: .. code-block:: ini [client.alice] key = AQA8+ANW/4ZWNRAAOtWJMFPEihBA1unFImJczA== Using the mon IP addresses from the share's export location, create a configuration file, ``ceph.conf`` like: .. code-block:: ini [client] client quota = true mon host = 192.168.1.7:6789, 192.168.1.8:6789, 192.168.1.9:6789 Finally, mount the filesystem, substituting the filenames of the keyring and configuration files you just created, and substituting the path to be mounted from the share's export location: .. code-block:: console sudo ceph-fuse ~/mnt \ --id=alice \ --conf=./ceph.conf \ --keyring=./alice.keyring \ --client-mountpoint=/volumes/_nogroup/4c55ad20-9c55-4a5e-9233-8ac64566b98c Mounting CephFS native share using Kernel client ------------------------------------------------ If you have the ``ceph-common`` package installed in the client host, you can use the kernel client to mount CephFS shares. .. important:: If you choose to use the kernel client rather than the FUSE client the share size limits set in manila may not be obeyed in versions of kernel older than 4.17 and Ceph versions older than mimic. See the `quota limitations documentation`_ to understand CephFS quotas. The mount command is as follows: .. code-block:: console mount -t ceph {mon1 ip addr}:6789,{mon2 ip addr}:6789,{mon3 ip addr}:6789:/ \ {mount-point} -o name={access-id},secret={access-key} With our earlier examples, this would be: .. code-block:: console mount -t ceph 192.168.1.7:6789, 192.168.1.8:6789, 192.168.1.9:6789:/ \ /volumes/_nogroup/4c55ad20-9c55-4a5e-9233-8ac64566b98c \ -o name=alice,secret='AQA8+ANW/4ZWNRAAOtWJMFPEihBA1unFImJczA==' Mount CephFS NFS share using NFS client --------------------------------------- In the guest, mount the share using the NFS client and knowing the share's export location. .. code-block:: ini sudo mount -t nfs 172.24.4.3:/volumes/_nogroup/6732900b-32c1-4816-a529-4d6d3f15811e /mnt/nfs/ Known restrictions ~~~~~~~~~~~~~~~~~~ - A CephFS driver instance, represented as a backend driver section in manila.conf, requires a Ceph auth ID unique to the backend Ceph Filesystem. Using a non-unique Ceph auth ID will result in the driver unintentionally evicting other CephFS clients using the same Ceph auth ID to connect to the backend. - Snapshots are read-only. A user can read a snapshot's contents from the ``.snap/{manila-snapshot-id}_{unknown-id}`` folder within the mounted share. Security ~~~~~~~~ - Each share's data is mapped to a distinct Ceph RADOS namespace. A guest is restricted to access only that particular RADOS namespace. https://docs.ceph.com/en/latest/cephfs/file-layouts/ .. _security_cephfs_native: Security with CephFS native share backend ----------------------------------------- As the guests need direct access to Ceph's public network, CephFS native share backend is suitable only in private clouds where guests can be trusted. .. _Ceph documentation: https://docs.ceph.com/en/latest/cephfs/ .. _Create ceph filesystem: https://docs.ceph.com/en/latest/cephfs/createfs/ .. _limitations on snapshots: https://docs.ceph.com/en/latest/dev/cephfs-snapshots/ .. _quota limitations documentation: https://docs.ceph.com/en/latest/cephfs/quota/#limitations Configuration Reference ----------------------- All configuration options for this driver are documented in the :doc:`Configuration Reference `. The :mod:`manila.share.drivers.cephfs.driver` Module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: manila.share.drivers.cephfs.driver :noindex: :members: :undoc-members: :show-inheritance: ././@PaxHeader0000000000000000000000000000021300000000000010211 xustar00111 path=manila-23.0.0.0rc1/doc/source/configuration/shared-file-systems/drivers/dell-emc-powerflex-driver.rst 28 mtime=1789151915.8502398 manila-23.0.0.0rc1/doc/source/configuration/shared-file-systems/drivers/dell-emc-powerflex-driver.rs0000664000175000017500000001566515251045254032257 0ustar00zuulzuul========================= Dell EMC PowerFlex driver ========================= The Dell EMC Shared File Systems service driver framework (EMCShareDriver) utilizes the Dell EMC storage products to provide the shared file systems to OpenStack. The Dell EMC driver is a plug-in based driver which is designed to use different plug-ins to manage different Dell EMC storage products. The PowerFlex SDNAS plug-in manages the PowerFlex system to provide shared filesystems. The Dell EMC driver framework with the PowerFlex SDNAS plug-in is referred to as the PowerFlex SDNAS driver in this document. The PowerFlex SDNAS driver can be used to provide functions such as share and snapshot for instances. The PowerFlex SDNAS driver enables the PowerFlex 4.x storage system to provide file system management through REST API operations to OpenStack. Requirements ------------ - PowerFlex 4.x storage system - SDNAS cluster registrated with SDNAS Gateway. Supported shared filesystems and operations ------------------------------------------- The driver suppors NFS shares only. The following operations are supported: * Create a share. * Delete a share. * Allow share access. * Deny share access. * Extend a share. * Create a snapshot. * Delete a snapshot. Driver configuration -------------------- Edit the ``manila.conf`` file, which is usually located under the following path ``/etc/manila/manila.conf``. * Add a section for the PowerFlex SDNAS driver backend. * Under the ``[DEFAULT]`` section, set the ``enabled_share_backends`` parameter with the name of the new backend section. * Configure the driver backend section with the parameters below. .. code-block:: ini share_driver = manila.share.drivers.dell_emc.driver.EMCShareDriver emc_share_backend = powerflex dell_nas_backend_host = dell_nas_backend_port = dell_nas_server = dell_nas_login = dell_nas_password = powerflex_storage_pool = powerflex_protection_domain = share_backend_name = powerflex dell_ssl_cert_verify = dell_ssl_certificate_path = Where: +---------------------------------+----------------------------------------------------+ | **Parameter** | **Description** | +=================================+====================================================+ | ``share_driver`` | Full path of the EMCShareDriver used to enable | | | the plugin. | +---------------------------------+----------------------------------------------------+ | ``emc_share_backend`` | The plugin name. Set it to `powerflex` to | | | enable the PowerFlex SDNAS driver. | +---------------------------------+----------------------------------------------------+ | ``dell_nas_backend_host`` | The management IP of the PowerFlex system. | +---------------------------------+----------------------------------------------------+ | ``dell_nas_backend_port`` | The port number used for secured connection. | | | 443 by default if not provided. | +---------------------------------+----------------------------------------------------+ | ``dell_nas_server`` | The name of the NAS server within the | | | PowerFlex system. | +---------------------------------+----------------------------------------------------+ | ``dell_nas_login`` | The login to use to connect to the PowerFlex | | | system. It must have administrator privileges. | +---------------------------------+----------------------------------------------------+ | ``dell_nas_password`` | The password associated with the login. | +---------------------------------+----------------------------------------------------+ | ``powerflex_storage_pool`` | The name of the storage pool within the | | | PowerFlex system. | +---------------------------------+----------------------------------------------------+ | ``powerflex_protection_domain`` | The name of the protection domain within the | | | PowerFlex system. | +---------------------------------+----------------------------------------------------+ | ``share_backend_name`` | The name of the backend which provides shares. | | | Must be set to powerflex | +---------------------------------+----------------------------------------------------+ | ``dell_ssl_cert_verify`` | Boolean to enable the usage of SSL certificates. | | | False is the default value. | +---------------------------------+----------------------------------------------------+ | ``dell_ssl_certificate_path`` | Full path to SSL certificates. | | | Applies only when the usage of SSL certificate is | | | enabled. | +---------------------------------+----------------------------------------------------+ Restart of manila-share service is needed for the configuration changes to take effect. Required operations prior to any usage -------------------------------------- A new share type needs to be created before going further. .. code-block:: console $ openstack share type create powerflex False Map this share type to the backend section configured in Manila .. code-block:: console $ openstack share type set \ --extra-specs share_backend_name=powerflex powerflex Specific configuration for Snapshot support ------------------------------------------- The following extra specifications need to be configured with share type. - snapshot_support = True For new share type, these extra specifications can be set directly when creating share type: .. code-block:: console $ openstack share type create \ --extra-specs snapshot_support=True powerflex False Or you can update already existing share type with command: .. code-block:: console $ openstack share type set --extra-specs snapshot_support=True powerflex Known restrictions ------------------ The PowerFlex SDNAS driver has the following restrictions. - Minimum size 3GiB. - Only NFS protocol is supported. - Only DHSS=False is supported ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1789151915.8502398 manila-23.0.0.0rc1/doc/source/configuration/shared-file-systems/drivers/dell-emc-powermax-driver.rst0000664000175000017500000004435615251045254032271 0ustar00zuulzuul======================== Dell EMC PowerMax Plugin ======================== The Dell EMC Shared File Systems service driver framework (EMCShareDriver) utilizes the Dell EMC storage products to provide the shared file systems to OpenStack. The Dell EMC driver is a plug-in based driver which is designed to use different plug-ins to manage different Dell EMC storage products. The PowerMax plug-in manages the PowerMax to provide shared file systems. The Dell EMC driver framework with the PowerMax plug-in is referred to as the PowerMax driver in this document. This driver performs the operations on PowerMax eNAS by XMLAPI and the file command line. Each back end manages one Data Mover of PowerMax. Multiple Shared File Systems service back ends need to be configured to manage multiple Data Movers. Requirements ~~~~~~~~~~~~ - PowerMax eNAS OE for File version 8.1 or higher - PowerMax Unified or File only - The following licenses should be activated on PowerMax for File: - CIFS - NFS - SnapSure (for snapshot) - ReplicationV2 (for create share from snapshot) Supported shared file systems and operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The driver supports CIFS and NFS shares. The following operations are supported: - Create a share. - Delete a share. - Allow share access. Note the following limitations: - Only IP access type is supported for NFS. - Only user access type is supported for CIFS. - Deny share access. - Create a snapshot. - Delete a snapshot. - Create a share from a snapshot. While the generic driver creates shared file systems based on cinder volumes attached to nova VMs, the PowerMax driver performs similar operations using the Data Movers on the array. Pre-configurations on PowerMax ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #. Configure a storage pool There is a one to one relationship between a storage pool in embedded NAS to a storage group on the PowerMax. The best way to provision storage for file is from the Unisphere for PowerMax UI rather than eNAS UI. Go to :menuselection:`{array} > SYSTEM > FIle` and under :menuselection:`Actions` click :menuselection:`PROVISION STORAGE FOR FILE` .. note:: When creating a new storage group you have the ability to assign a service level e.g. Diamond and disable compression/deduplication which is enabled by default. To pick up the newly created storage pool in the eNAS UI, go to :menuselection:`{Control Station} > Storage > Storage Configuration > Storage Pools` and under :menuselection:`File Storage` click :menuselection:`Rescan Storage Systems` or on the command line: .. code-block:: console $ nas_diskmark -mark -all -discovery y -monitor y The new storage pool should now appear in the eNAS UI #. Make sure you have the appropriate licenses .. code-block:: console $ nas_license -l key status value site_key online xx xx xx xx nfs online cifs online snapsure online replicatorV2 online filelevelretention online #. Enable CIFS service on Data Mover. Ensure the CIFS service is enabled on the Data Mover which is going to be managed by PowerMax driver. To start the CIFS service, use the following command: .. code-block:: console $ server_setup -Protocol cifs -option start [=] # movername = name of the Data Mover # n = number of threads for CIFS users .. note:: If there is 1 GB of memory on the Data Mover, the default is 96 threads. However, if there is over 1 GB of memory, the default number of threads is 256. To check the CIFS service status, use the following command: .. code-block:: console $ server_cifs | head # movername = name of the Data Mover The command output will show the number of CIFS threads started. #. NTP settings on Data Mover. PowerMax driver only supports CIFS share creation with share network which has an Active Directory security-service associated. Creating CIFS share requires that the time on the Data Mover is in sync with the Active Directory domain so that the CIFS server can join the domain. Otherwise, the domain join will fail when creating a share with this security service. There is a limitation that the time of the domains used by security-services, even for different tenants and different share networks, should be in sync. Time difference should be less than 5 minutes. .. note:: If there is a clock skew then you may see the following error "The local machine and the remote machine are not synchronized. Kerberos protocol requires a synchronization of both participants within the same 5 minutes". To fix this error you must make sure the times of the eNas controller host and the Domain Controller or within 5 minutes of each other. You must be root to change the date of the eNas control station. Check also that your time zones coincide. We recommend setting the NTP server to the same public NTP server on both the Data Mover and domains used in security services to ensure the time is in sync everywhere. Check the date and time on Data Mover with the following command: .. code-block:: console $ server_date # movername = name of the Data Mover Set the NTP server for Data Mover with the following command: .. code-block:: console $ server_date timesvc start ntp [ ...] # movername = name of the Data Mover # host = IP address of the time server host .. note:: The host must be running the NTP protocol. Only 4 host entries are allowed. #. Configure User Mapping on the Data Mover. Before creating CIFS share using PowerMax driver, you must select a method of mapping Windows SIDs to UIDs and GIDs. DELL EMC recommends using usermapper in single protocol (CIFS) environment which is enabled on PowerMax eNAS by default. To check usermapper status, use the following command syntax: .. code-block:: console $ server_usermapper # movername = name of the Data Mover If usermapper does not start, use the following command to start the usermapper: .. code-block:: console $ server_usermapper -enable # movername = name of the Data Mover For a multiple protocol environment, refer to Configuring PowerMax eNAS User Mapping on `EMC support site `_ for additional information. #. Configure network connection. Find the network devices (physical port on NIC) of the Data Mover that has access to the share network. To check the device list on the eNAS UI go to :menuselection:`{Control Station} > Settings > Network > Devices`. or on the command line: .. code-block:: console $ server_sysconfig server_2 -pci server_2 : PCI DEVICES: On Board: VendorID=0x1120 DeviceID=0x1B00 Controller 0: scsi-0 IRQ: 32 0: scsi-16 IRQ: 33 0: scsi-32 IRQ: 34 0: scsi-48 IRQ: 35 Broadcom 10 Gigabit Ethernet Controller 0: fxg-3-0 IRQ: 36 speed=10000 duplex=full txflowctl=disable rxflowctl=disable Link: Up 0: fxg-3-1 IRQ: 38 speed=10000 duplex=full txflowctl=disable rxflowctl=disable Link: Down Back-end configurations ~~~~~~~~~~~~~~~~~~~~~~~ .. note:: The following deprecated tags will be removed in the T release: - emc_nas_server_container - emc_nas_pool_names - emc_interface_ports The following parameters need to be configured in the ``/etc/manila/manila.conf`` file for the PowerMax driver: .. code-block:: ini emc_share_backend = powermax emc_nas_server = emc_nas_password = emc_nas_login = driver_handles_share_servers = True powermax_server_container = powermax_share_data_pools = share_driver = manila.share.drivers.dell_emc.driver.EMCShareDriver powermax_ethernet_ports = emc_ssl_cert_verify = True emc_ssl_cert_path = share_backend_name = - `emc_share_backend` The plug-in name. Set it to ``powermax`` for the PowerMax driver. Other values are ``powerscale``, ``vnx`` and ``unity``. - `emc_nas_server` The control station IP address of the PowerMax system to be managed. - `emc_nas_password` and `emc_nas_login` The fields that are used to provide credentials to the PowerMax system. Only local users of PowerMax File is supported. - `driver_handles_share_servers` PowerMax only supports True, where the share driver handles the provisioning and management of the share servers. - `powermax_server_container` Name of the Data Mover to serve the share service. - `powermax_share_data_pools` Comma separated list specifying the name of the pools to be used by this back end. Do not set this option if all storage pools on the system can be used. Wild card character is supported. Examples: pool_1, pool_*, * - `powermax_ethernet_ports (optional)` Comma-separated list specifying the ports (devices) of Data Mover that can be used for share server interface. Do not set this option if all ports on the Data Mover can be used. Wild card character is supported. Examples: fxg-9-0, fxg-_*, * - `emc_ssl_cert_verify (optional)` By default this is True, setting it to False is not recommended - `emc_ssl_cert_path (optional)` The path to the This must be set if emc_ssl_cert_verify is True which is the recommended configuration. See ``SSL Support`` section for more details. - `share_backend_name` The backend name for a given driver implementation. Restart of the ``manila-share`` service is needed for the configuration changes to take effect. SSL Support ----------- #. Run the following on eNas Control Station, to display the CA certification for the active CS. .. code-block:: console $ /nas/sbin/nas_ca_certificate -display .. warning:: This cert will be different for the secondary CS so if there is a failover a different certificate must be used. #. Copy the contents and create a file with a .pem extention on your manila host. .. code-block:: ini -----BEGIN CERTIFICATE----- the cert contents are here -----END CERTIFICATE----- #. To verify the cert by running the following and examining the output: .. code-block:: console $ openssl x509 -in test.pem -text -noout .. code-block:: ini Certificate: Data: Version: 3 (0x2) Serial Number: xxxxxx Signature Algorithm: sha1WithRSAEncryption Issuer: O=VNX Certificate Authority, CN=xxx Validity Not Before: Feb 27 16:02:41 2019 GMT Not After : Mar 4 16:02:41 2024 GMT Subject: O=VNX Certificate Authority, CN=xxxxxx Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: xxxxxx Exponent: xxxxxx X509v3 extensions: X509v3 Subject Key Identifier: xxxxxx X509v3 Authority Key Identifier: keyid:xxxxx DirName:/O=VNX Certificate Authority/CN=xxxxxx serial:xxxxx X509v3 Basic Constraints: CA:TRUE X509v3 Subject Alternative Name: DNS:xxxxxx, DNS:xxxxxx.localdomain, DNS:xxxxxxx, DNS:xxxxx Signature Algorithm: sha1WithRSAEncryption xxxxxx #. As it is the capath and not the cafile that is expected, copy the file to either new directory or an existing directory (where other .pem files exist). #. Run the following on the directory .. code-block:: console $ c_rehash $PATH_TO_CERTS #. Update manila.conf with the directory where the .pem exists. .. code-block:: ini emc_ssl_cert_path = /path_to_certs/ #. Restart manila services. Snapshot Support ~~~~~~~~~~~~~~~~ Snapshot support is disabled by default, so in order to allow shapshots for a share type, the ``snapshot_support`` extra spec must be set to True. Creating a share from a snapshot is also disabled by default so ``create_share_from_snapshot_support`` must also be set to True if this functionality is required. For a new share type: .. code-block:: console $ openstack share type create --snapshot-support True \ --create-share-from-snapshot-support True \ ${share_type_name} True For an existing share type: .. code-block:: console $ openstack share type set ${share_type_name} \ --extra-specs snapshot_support=True $ openstack share type set ${share_type_name} \ --extra-specs create_share_from_snapshot_support=True To create a snapshot from a share where snapshot_support=True: .. code-block:: console $ openstack share snapshot create ${source_share_name} \ --name ${target_snapshot_name} To create a target share from a shapshot where create_share_from_snapshot_support=True: .. code-block:: console $ openstack share create cifs 3 --name ${target_share_name} \ --share-network ${share_network} \ --share-type ${share_type_name} \ --property source=snapshot \ --snapshot-id ${snapshot_id} IPv6 support ~~~~~~~~~~~~ IPv6 support for PowerMax Manila driver was introduced in Rocky release. The feature is divided into two parts: #. The driver is able to manage share or snapshot in the Neutron IPv6 network. #. The driver is able to connect PowerMax management interface using its IPv6 address. Pre-Configurations for IPv6 support ----------------------------------- The following parameters need to be configured in ``/etc/manila/manila.conf`` for the PowerMax driver: .. code-block:: ini network_plugin_ipv6_enabled = True If you want to connect to the eNAS controller using IPv6 address specify the address in ``/etc/manila/manila.conf``: .. code-block:: ini emc_nas_server = Restrictions ~~~~~~~~~~~~ The PowerMax driver has the following restrictions: - Only ``driver_handles_share_servers`` equals True is supported. - Only IP access type is supported for NFS. - Only user access type is supported for CIFS. - Only FLAT network and VLAN network are supported. - VLAN network is supported with limitations. The neutron subnets in different VLANs that are used to create share networks cannot have overlapped address spaces. Otherwise, PowerMax may have a problem to communicate with the hosts in the VLANs. To create shares for different VLANs with same subnet address, use different Data Movers. - The **Active Directory** security service is the only supported security service type and it is required to create CIFS shares. - Only one security service can be configured for each share network. - The domain name of the ``active_directory`` security service should be unique even for different tenants. - The time on the Data Mover and the Active Directory domains used in security services should be in sync (time difference should be less than 10 minutes). We recommended using same NTP server on both the Data Mover and Active Directory domains. - On eNAS, the snapshot is stored in the SavVols. eNAS system allows the space used by SavVol to be created and extended until the sum of the space consumed by all SavVols on the system exceeds the default 20% of the total space available on the system. If the 20% threshold value is reached, an alert will be generated on eNAS. Continuing to create snapshot will cause the old snapshot to be inactivated (and the snapshot data to be abandoned). The limit percentage value can be changed manually by storage administrator based on the storage needs. We recommend the administrator configures the notification on the SavVol usage. Refer to Using eNAS SnapSure document on `EMC support site `_ for more information. - eNAS has limitations on the overall numbers of Virtual Data Movers, filesystems, shares, and checkpoints. Virtual Data Mover(VDM) is created by the eNAS driver on the eNAS to serve as the Shared File Systems service share server. Similarly, the filesystem is created, mounted, and exported from the VDM over CIFS or NFS protocol to serve as the Shared File Systems service share. The eNAS checkpoint serves as the Shared File Systems service share snapshot. Refer to the NAS Support Matrix document on `EMC support site `_ for the limitations and configure the quotas accordingly. Other Remarks ~~~~~~~~~~~~~ - eNAS ``nas_quotas`` should not be confused with OpenStack manila quotas. The former edits quotas for mounted file systems, and displays a listing of quotas and disk usage at the file system level (by the user, group, or tree), or at the quota-tree level (by the user or group). ``nas_quotas`` also turns quotas on and off, and clears quotas records for a file system, quota tree, or a Data Mover. Refer to PowerMax eNAS CLI Reference guide on `EMC support site `_ for additional information. ``OpenStack manila quotas`` delimit the number of shares, snapshots etc. a user can create. .. code-block:: console $ openstack share quota show --tenant --user +-----------------------+-------+ | Field | Value | +-----------------------+-------+ | share_groups | 50 | | gigabytes | 1000 | | snapshot_gigabytes | 1000 | | share_group_snapshots | 50 | | snapshots | 50 | | shares | 50 | | share_networks | 10 | +-----------------------+-------+ Driver options ~~~~~~~~~~~~~~ All configuration options for this driver are documented in the :doc:`Configuration Reference `. ././@PaxHeader0000000000000000000000000000021200000000000010210 xustar00112 path=manila-23.0.0.0rc1/doc/source/configuration/shared-file-systems/drivers/dell-emc-powerscale-driver.rst 26 mtime=1789151915.85124 manila-23.0.0.0rc1/doc/source/configuration/shared-file-systems/drivers/dell-emc-powerscale-driver.r0000664000175000017500000003313615251045254032216 0ustar00zuulzuul====================== Dell PowerScale driver ====================== The EMC Shared File Systems driver framework (EMCShareDriver) utilizes Dell storage products to provide shared file systems to OpenStack. The EMC driver is a plug-in based driver which is designed to use different plug-ins to manage different Dell storage products. The PowerScale driver is a plug-in for the EMC framework which allows the Shared File Systems service to interface with an PowerScale back end to provide a shared filesystem. The EMC driver framework with the PowerScale plug-in is referred to as the ``PowerScale Driver`` in this document. This PowerScale Driver interfaces with an PowerScale cluster via the REST PowerScale Platform API (PAPI) and the RESTful Access to Namespace API (RAN). Requirements ~~~~~~~~~~~~ - PowerScale cluster running OneFS 9.10 or higher Supported shared filesystems and operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The drivers supports CIFS and NFS shares. The following operations are supported: - Create a share. - Delete a share. - Allow share access. Note the following limitations: - Only IP access type is supported. - Only read-write access is supported. - Deny share access. - Create a snapshot. - Delete a snapshot. - Create a share from a snapshot. - Ensure shares. - Shrink share. - Manage/Unmanage snapshot - Manage and Unmanage CIFS/NFS share. - Mount snapshot. - Mount point name. - Schedule Dedupe job for a share - Revert to a snapshot. - Add QoS support. Pre-configurations for Compression on PowerScale ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Ensure the PowerScale backend supports inline compression (verify OneFS version and node-pool compatibility), enable cluster-wide compression using the PowerScale user interface, and confirm that compression-capable storage pools are used for Manila share paths. **Compression is managed by OneFS at the pool level. Ensure the Manila root path is on a compression-enabled pool if you want data to be compressed. No Manila extra-spec is required.** Back end configuration ~~~~~~~~~~~~~~~~~~~~~~ The following parameters need to be configured in the Shared File Systems service configuration file for the PowerScale driver: .. code-block:: ini share_driver = manila.share.drivers.emc.driver.EMCShareDriver emc_share_backend = powerscale emc_nas_server = emc_nas_login = emc_nas_password = Thin Provisioning ~~~~~~~~~~~~~~~~~ PowerScale systems have thin provisioning enabled by default. Add the parameter below to set an advisory limit. .. code-block:: ini powerscale_threshold_limit = Manage and Unmanage existing shares ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The PowerScale Manila driver supports importing pre-existing NFS/CIFS exports into Manila ("manage existing") and ceasing management of a managed share ("unmanage") without deleting the underlying export on PowerScale. Managing registers an external export with Manila using the service host, protocol, and export path; unmanaging removes only Manila metadata and is non-disruptive to clients. .. note:: - **Supported only when the export points to the driver's container path.** The PowerScale driver will manage (or unmanage) an existing NFS/CIFS export **only if** the backend directory of that export is exactly the driver's container path. - This is to prevent follow‑up operations (for example, **extend** or **shrink**) from failing later because quotas would be applied on the wrong directory. - **CIFS:** The **SMB share name must match the OneFS directory leaf** under the driver’s container path (for example, SMB share ``demo`` → path ``/ifs//demo``). If name and directory differ, **manage is rejected** and the share is not adopted. This alignment is **required** so that later **delete** (which operates by share name) succeeds without ambiguity. Managing and unmanaging existing shares is performed using the OpenStack Manila API or CLI. For detailed usage instructions, refer to the Manila administration documentation: :doc:`/admin/shared-file-systems-manage-and-unmanage-share` Notes and behavior ------------------ * Unmanage does not delete the export; clients remain connected. * When importing a share associated with a share type that has ``revert_to_snapshot_support`` enabled, the driver automatically creates a Domain Mark job on the backend during the manage operation. No manual intervention is required. Mount Snapshot ~~~~~~~~~~~~~~ To enable snapshot-mount support for a share type, set the following extra specification: .. code-block:: console $ openstack share type set --extra-specs \ mount_snapshot_support=" True" Access behavior - Mounted snapshots are always read-only. - For NFS and CIFS, IP-based access rules are applied. - For CIFS, user-based access rules are also supported. Mount Point Name ~~~~~~~~~~~~~~~~ PowerScale system supports providing a custom mount point name for both NFS and CIFS protocols. The mount point name will be prepended and will become the share's mount path. .. code-block:: console $ openstack share type set --extra-specs \ mount_point_name_support=" True" \ provisioning:mount_point_prefix= For detailed usage instructions, refer to the Manila administration documentation: :doc:`/admin/share_mount_point_name` Shrink a share ~~~~~~~~~~~~~~ Overview -------- Shrinking reduces the size (GiB) of an existing Manila share to a smaller value. The operation enforces quota limits and rejects invalid sizes (e.g., 0 or any value greater than the current size). Limitations and behavior ------------------------ * New size must be a positive integer **less than** the current size and within quotas. * During the operation, the share status transitions to **shrinking** and returns to **available** on success. For information on resizing shares, refer to the OpenStack Manila administration guide: :doc:`/admin/shared-file-systems-share-resize` Restrictions ~~~~~~~~~~~~ The PowerScale driver has the following restrictions: - Only IP access type is supported for NFS and CIFS. - Only FLAT network is supported. - Quotas are not yet supported. To Manage and Unmanage an existing share snapshot ------------------------------------------------- To manage a snapshot existing in PowerScale System, you need make sure the related share is existing in OpenStack, otherwise need to manage share first. For detailed usage instructions, refer to the Manila administration documentation: :doc:`/admin/shared-file-systems-manage-and-unmanage-snapshot` .. note:: - provider_location is the snapshot id in PowerScale system. - If the snapshot size is not provided, it will automatically use the share size as the default. - For **CIFS snapshots**, the **Manila snapshot name must exactly match the snapshot export name on PowerScale**. If names do not match, snapshot delete or mount operations may fail because the driver looks up CIFS snapshot exports by name. Schedule Dedupe job for a share ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To schedule Dedupe job for NFS/CIFS share, create share type with extra-specs .. code-block:: console $ openstack share type create False --extra-specs \ dedupe=True $ openstack share create \ --name --share-type On PowerScale, Dedupe job will be scheduled weekly on Sunday at 12:00 AM by default for the created NFS/CIFS share. Add the parameter below to set a schedule. Format every weeks on [, day2, ...] at