setup.rst 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. Setup
  2. =====
  3. To initialize a connection to a cloud and get a provider object, you will
  4. need to provide the cloud's access credentials to CloudBridge. For more
  5. details on how to create and find these credentials, see the `Procuring Access
  6. Credentials <procuring_credentials.html>`_ page. Note that you can selectively
  7. provide the credentials for any provider you want to use and do not have to
  8. provide credentials for all the providers. CloudBridge will consume the
  9. available credentials in one of following ways:
  10. 1. `Providing access credentials through a dictionary`_
  11. 2. `Providing access credentials through environment variables`_
  12. 3. `Providing access credentials in a CloudBridge config file`_
  13. Providing access credentials through a dictionary
  14. -------------------------------------------------
  15. You can initialize a simple config as follows. The key names are the same
  16. as the environment variables, in lower case. Note that the config dictionary
  17. will override environment values.
  18. .. code-block:: python
  19. from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
  20. ## For AWS
  21. config = {'aws_access_key' : '<your_access_key>',
  22. 'aws_secret_key' : '<your_secret_key>'}
  23. provider = CloudProviderFactory().create_provider(ProviderList.AWS, config)
  24. ## For Azure
  25. config = {'azure_subscription_id': '<your_subscription_id>',
  26. 'azure_client_id': '<your_client_id>',
  27. 'azure_secret': '<your_secret>',
  28. 'azure_tenant': '<your_tenant>',
  29. 'azure_resource_group': '<your resource group>'}
  30. provider = CloudProviderFactory().create_provider(ProviderList.AZURE, config)
  31. ## For GCP
  32. config = {'gcp_service_creds_file': '<service_creds_file_name>.json'}
  33. # Alternatively, we can supply a dictionary with the credentials values
  34. # as the following:
  35. gcp_creds = {
  36. "type": "service_account",
  37. "project_id": "<project_name>",
  38. "private_key_id": "<private_key_id>",
  39. "private_key": "<private_key>",
  40. "client_email": "<client_email>",
  41. "client_id": "<client_id>",
  42. "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  43. "token_uri": "https://oauth2.googleapis.com/token",
  44. "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  45. "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-name%40my-project.iam.gserviceaccount.com"
  46. }
  47. config = {'gcp_service_creds_dict': gcp_creds}
  48. provider = CloudProviderFactory().create_provider(ProviderList.GCP, config)
  49. ## For OpenStack
  50. config = {'os_username': '<your username>',
  51. 'os_password': '<your password>',
  52. 'os_auth_url': '<auth url>,
  53. 'os_user_domain_name': '<user_domain_name>',
  54. 'os_project_domain_name': '<project_domain_name>',
  55. 'os_project_name': '<project_name>')
  56. provider = CloudProviderFactory().create_provider(ProviderList.OPENSTACK, config)
  57. Some optional configuration values can only be provided through the config
  58. dictionary. These are listed below for each provider.
  59. CloudBridge
  60. ~~~~~~~~~~~
  61. +----------------------+------------------------------------------------------------+
  62. | Variable | Description |
  63. +======================+============================================================+
  64. | default_result_limit | Number of results that a ``.list()`` method should return. |
  65. | | Default is 50. |
  66. +----------------------+------------------------------------------------------------+
  67. AWS
  68. ~~~
  69. +---------------------+--------------------------------------------------------------+
  70. | Variable | Description |
  71. +=====================+==============================================================+
  72. | aws_session_token | Session key for your AWS account (if using temporary |
  73. | | credentials). |
  74. +---------------------+--------------------------------------------------------------+
  75. | ec2_conn_path | Connection path. Default is ``/``. |
  76. +---------------------+--------------------------------------------------------------+
  77. | ec2_is_secure | True to use an SSL connection. Default is ``True``. |
  78. +---------------------+--------------------------------------------------------------+
  79. | ec2_port | EC2 connection port. Does not need to be specified unless |
  80. | | EC2 service is running on an alternative port. |
  81. +---------------------+--------------------------------------------------------------+
  82. | ec2_region_endpoint | Endpoint to use. Default is ``ec2.us-east-1.amazonaws.com``. |
  83. +---------------------+--------------------------------------------------------------+
  84. | ec2_region_name | Default region name. Default is ``us-east-1``. |
  85. +---------------------+--------------------------------------------------------------+
  86. | ec2_validate_certs | Whether to use SSL certificate verification. Default is |
  87. | | ``False``. |
  88. +---------------------+--------------------------------------------------------------+
  89. | s3_conn_path | Connection path. Default is ``/``. |
  90. +---------------------+--------------------------------------------------------------+
  91. | s3_is_secure | True to use an SSL connection. Default is ``True``. |
  92. +---------------------+--------------------------------------------------------------+
  93. | s3_host | Host connection endpoint. Default is ``s3.amazonaws.com``. |
  94. +---------------------+--------------------------------------------------------------+
  95. | s3_port | Host connection port. Does not need to be specified unless |
  96. | | S3 service is running on an alternative port. |
  97. +---------------------+--------------------------------------------------------------+
  98. | s3_validate_certs | Whether to use SSL certificate verification. Default is |
  99. | | ``False``. |
  100. +---------------------+--------------------------------------------------------------+
  101. Azure
  102. ~~~~~
  103. +-------------------------------------+----------------------------------------------------------+
  104. | Variable | Description |
  105. +=====================================+==========================================================+
  106. | azure_access_token | To sign requests to APIs protected by Azure. |
  107. +-------------------------------------+----------------------------------------------------------+
  108. | azure_public_key_storage_table_name | Storage table name where the key pairs are stored. |
  109. | | Default is ``cbcerts``. |
  110. +-------------------------------------+----------------------------------------------------------+
  111. | azure_region_name | Default region to use for the current |
  112. | | session. Default is ``eastus``. |
  113. +-------------------------------------+----------------------------------------------------------+
  114. | azure_resource_group | Azure resource group to use. Default is ``cloudbridge``. |
  115. +-------------------------------------+----------------------------------------------------------+
  116. | azure_storage_account | Azure storage account to use. Note that this value must |
  117. | | be unique across Azure and all data in a given session |
  118. | | is stored within the supplied storage account. Default |
  119. | | ``storacc`` + first 6 chars of subscription id + first 6 |
  120. | | chars of the supplied resource group. |
  121. +-------------------------------------+----------------------------------------------------------+
  122. | azure_vm_default_username | System user name for which supplied key pair will be |
  123. | | placed. |
  124. +-------------------------------------+----------------------------------------------------------+
  125. GCP
  126. ~~~
  127. +-------------------------+----------------------------------------------------------+
  128. | Variable | Description |
  129. +=========================+==========================================================+
  130. | gcp_default_zone | Default placement zone to use for the current session. |
  131. | | Default is ``us-central1-a``. |
  132. +-------------------------+----------------------------------------------------------+
  133. | gcp_region_name | Default region to use for the current session. Default |
  134. | | is ``us-central1``. |
  135. +-------------------------+----------------------------------------------------------+
  136. | gcp_vm_default_username | System user name for which supplied key pair will be |
  137. | | placed. |
  138. +-------------------------+----------------------------------------------------------+
  139. Providing access credentials through environment variables
  140. ----------------------------------------------------------
  141. The following environment variables must be set, depending on the provider in
  142. use. For the meaning of the variables and default values, see the descriptions
  143. above.
  144. AWS
  145. ~~~
  146. +---------------------+------------+
  147. | Variable | Required? |
  148. +=====================+============+
  149. | AWS_ACCESS_KEY | ✔ |
  150. +---------------------+------------+
  151. | AWS_SECRET_KEY | ✔ |
  152. +---------------------+------------+
  153. Azure
  154. ~~~~~
  155. Note that managing resources in Azure requires a Resource Group. If a
  156. Resource Group is not provided as part of the configuration, CloudBridge will
  157. attempt to create a Resource Group using the given credentials. This
  158. operation will happen with the client initialization, and requires a
  159. "contributor" or "owner" role.
  160. Similarly, a Storage Account is required when managing some resources, such
  161. as key pairs and buckets. If a Storage Account name is not provided as part
  162. of the configuration, CloudBridge will attempt to create the Storage Account
  163. when initializing the relevant services. This operation similarly requires a
  164. "contributor" or "owner" role.
  165. For more information on roles, see
  166. https://docs.microsoft.com/en-us/azure/role-based-access-control/overview.
  167. +-------------------------------------+-----------+
  168. | Variable | Required? |
  169. +=====================================+===========+
  170. | AZURE_CLIENT_ID | ✔ |
  171. +-------------------------------------+-----------+
  172. | AZURE_SECRET | ✔ |
  173. +-------------------------------------+-----------+
  174. | AZURE_SUBSCRIPTION_ID | ✔ |
  175. +-------------------------------------+-----------+
  176. | AZURE_TENANT | ✔ |
  177. +-------------------------------------+-----------+
  178. | AZURE_PUBLIC_KEY_STORAGE_TABLE_NAME | |
  179. +-------------------------------------+-----------+
  180. | AZURE_REGION_NAME | |
  181. +-------------------------------------+-----------+
  182. | AZURE_RESOURCE_GROUP | |
  183. +-------------------------------------+-----------+
  184. | AZURE_STORAGE_ACCOUNT | |
  185. +-------------------------------------+-----------+
  186. | AZURE_VM_DEFAULT_USER_NAME | |
  187. +-------------------------------------+-----------+
  188. GCP
  189. ~~~
  190. +------------------------+-----------+
  191. | Variable | Required? |
  192. +========================+===========+
  193. | GCP_SERVICE_CREDS_DICT | ✔ |
  194. | or | |
  195. | GCP_SERVICE_CREDS_FILE | |
  196. +------------------------+-----------+
  197. | GCP_DEFAULT_ZONE | |
  198. +------------------------+-----------+
  199. | GCP_PROJECT_NAME | |
  200. +------------------------+-----------+
  201. | GCP_REGION_NAME | |
  202. +------------------------+-----------+
  203. OpenStack
  204. ~~~~~~~~~
  205. +------------------------+-----------+
  206. | Variable | Required? |
  207. +========================+===========+
  208. | OS_AUTH_URL | ✔ |
  209. +------------------------+-----------+
  210. | OS_USERNAME | ✔ |
  211. +------------------------+-----------+
  212. | OS_PASSWORD | ✔ |
  213. +------------------------+-----------+
  214. | OS_PROJECT_NAME | ✔ |
  215. +------------------------+-----------+
  216. | OS_REGION_NAME | ✔ |
  217. +------------------------+-----------+
  218. | NOVA_SERVICE_NAME | |
  219. +------------------------+-----------+
  220. | OS_AUTH_TOKEN | |
  221. +------------------------+-----------+
  222. | OS_COMPUTE_API_VERSION | |
  223. +------------------------+-----------+
  224. | OS_VOLUME_API_VERSION | |
  225. +------------------------+-----------+
  226. | OS_STORAGE_URL | |
  227. +------------------------+-----------+
  228. Once the environment variables are set, you can create a connection as follows,
  229. replacing ``ProviderList.AWS`` with the desired provider (AZURE, GCP, or
  230. OPENSTACK):
  231. .. code-block:: python
  232. from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
  233. provider = CloudProviderFactory().create_provider(ProviderList.AWS, {})
  234. Providing access credentials in a CloudBridge config file
  235. ---------------------------------------------------------
  236. CloudBridge can also read credentials from a file on your local file system.
  237. The file should be placed in one of two locations: ``/etc/cloudbridge.ini`` or
  238. ``~/.cloudbridge``. Each set of credentials should be delineated with the
  239. provider ID (e.g., ``openstack``, ``aws``, ``azure``, ``gcp``) with the
  240. necessary credentials being supplied in YAML format. Note that only one set
  241. of credentials per cloud provider type can be supplied (i.e., via this
  242. method, it is not possible to provide credentials for two different
  243. OpenStack clouds).
  244. .. code-block:: bash
  245. [aws]
  246. aws_access_key: access key
  247. aws_secret_key: secret key
  248. [azure]
  249. azure_subscription_id: subscription id
  250. azure_tenant: tenant
  251. azure_client_id: client id
  252. azure_secret: secret
  253. azure_resource_group: resource group
  254. [gcp]
  255. gcp_service_creds_file: absolute path to credentials file
  256. [openstack]
  257. os_username: username
  258. os_password: password
  259. os_auth_url: auth url
  260. os_user_domain_name: user domain name
  261. os_project_domain_name: project domain name
  262. os_project_name: project name
  263. Once the file is created, you can create a connection as follows, replacing
  264. ``ProviderList.AWS`` with the desired provider (AZURE, GCP, or OPENSTACK):
  265. .. code-block:: python
  266. from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
  267. provider = CloudProviderFactory().create_provider(ProviderList.AWS, {})
  268. General configuration variables
  269. -------------------------------
  270. In addition to the provider specific configuration variables above, there are
  271. some general configuration environment variables that apply to CloudBridge as
  272. a whole.
  273. +-----------------------------+------------------------------------------------------+
  274. | Variable | Description |
  275. +=============================+======================================================+
  276. | CB_DEBUG | Setting ``CB_DEBUG=True`` will cause detailed |
  277. | | debug output to be printed for each provider |
  278. | | (including HTTP traces). |
  279. +-----------------------------+------------------------------------------------------+
  280. | CB_TEST_PROVIDER | Set this value to a valid :class:`.ProviderList` |
  281. | | value such as ``aws``, to limit tests to that |
  282. | | provider only. |
  283. +-----------------------------+------------------------------------------------------+
  284. | CB_DEFAULT_SUBNET_LABEL | Name to be used for a subnet that will be |
  285. | | considered the 'default' by the library. This |
  286. | | default will be used only in cases there is no |
  287. | | subnet marked as the default by the provider. |
  288. +-----------------------------+------------------------------------------------------+
  289. | CB_DEFAULT_NETWORK_LABEL | Name to be used for a network that will be |
  290. | | considered the 'default' by the library. This |
  291. | | default will be used only in cases there is no |
  292. | | network marked as the default by the provider. |
  293. +-----------------------------+------------------------------------------------------+
  294. | CB_DEFAULT_IPV4RANGE | The default IPv4 range when creating networks if |
  295. | | one is not provided. This value is also used in |
  296. | | tests. |
  297. +-----------------------------+------------------------------------------------------+
  298. | CB_DEFAULT_SUBNET_IPV4RANGE | The default subnet IPv4 range used by CloudBridge |
  299. | | if one is not specified by the user. Tests do not |
  300. | | respect this variable. |
  301. +-----------------------------+------------------------------------------------------+