diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index f5263a1149..faaf8d5d1f 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
The format is based on `Keep a Changelog `_.
+====================
+2.0.1 - 2018-08-09
+====================
+
+Added
+-----
+* Support for fault domains in the Compute service
+* A sample showing how to use Search service from the SDK is available on `GitHub `__.
+
====================
2.0.0 - 2018-07-26
====================
diff --git a/examples/search_example.py b/examples/search_example.py
new file mode 100644
index 0000000000..78bed0a61e
--- /dev/null
+++ b/examples/search_example.py
@@ -0,0 +1,140 @@
+# coding: utf-8
+# Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+
+# This example demonstrates how to programatically retrieve resource types and
+# query for resources.
+#
+# The search service documentation can be found here:
+# https://docs.cloud.oracle.com/iaas/Content/Search/Concepts/queryoverview.htm
+#
+# When running this example, it is assumed that you already have active users
+# resources associated with your tenant to display the search results.
+#
+# Querying for resources may be done via a structured query or free text.
+# For more information on how to format queries, please refer to
+# https://docs.cloud.oracle.com/iaas/Content/Search/Concepts/querysyntax.htm
+
+from __future__ import print_function
+import oci
+
+
+# Load the default configuration
+config = oci.config.from_file()
+
+# This is the root compartment. You can use another compartment in your tenancy.
+compartment_id = config["tenancy"]
+
+search_client = oci.resource_search.ResourceSearchClient(config)
+
+
+def resource_types():
+ # Resource types
+ # This is will produce a printed list of the resource types and fields
+ # There are more details available than what is displayed.
+ print()
+ print("Resources and their fields")
+ print("==========================")
+ response = search_client.list_resource_types()
+ for resource_type in response.data:
+ print(resource_type.name)
+ for field in resource_type.fields:
+ print("\t {}".format(field.field_name))
+
+
+def fields_in_instance_resource():
+ # A more detailed look at the freeformTags field in the Instance resource
+ print()
+ print("Instance resource, freeformTags field")
+ print("=====================================")
+ response = search_client.list_resource_types()
+ for resource_type in response.data:
+ if resource_type.name == "Instance":
+ instance = resource_type
+ for field in instance.fields:
+ print(field)
+
+
+def field_names_in_instance_resource():
+ # The details for a single resource type can be retrieved without
+ # retrieving all the resources.
+ print()
+ print("Get a single resource type (Instance) from Search service")
+ print("=========================================================")
+ instance = search_client.get_resource_type('Instance').data
+ fields = [x.field_name for x in instance.fields]
+ print(fields)
+
+
+def active_users():
+ # Get all users which do not have the inactiveStatus set.
+ # This is the same as "query user resources where lifecycleState = 'ACTIVE'"
+ print()
+ print("Get users which are active, using StructuredSearchDetails")
+ print("=========================================================")
+ structured_search = oci.resource_search.models.StructuredSearchDetails(query="query user resources where inactiveStatus = 0",
+ type='Structured',
+ matching_context_type=oci.resource_search.models.SearchDetails.MATCHING_CONTEXT_TYPE_NONE)
+ users = search_client.search_resources(structured_search)
+
+ for user in users.data.items:
+ print(user.display_name)
+
+
+def search_with_free_text():
+ # Get all resources whose lifecycleState is AVAILABLE
+ # Using pagination
+ print("Get resources which are available, using FreeTextSearchDetails")
+ print("==============================================================")
+
+ free_text_search = oci.resource_search.models.FreeTextSearchDetails(text="lifecycleState as AVAILABLE",
+ type='FreeText',
+ matching_context_type=oci.resource_search.models.SearchDetails.MATCHING_CONTEXT_TYPE_HIGHLIGHTS)
+
+ for response in oci.pagination.list_call_get_all_results_generator(search_client.search_resources, 'response', free_text_search):
+ for resource in response.data.items:
+ print("Resource type: {}, Resource name: {}".format(resource.resource_type, resource.display_name))
+
+
+def users_by_freeformTag(tag):
+ # Search for user resources with a freeform tag.
+ print()
+ print("Get users based on having a freeformTag")
+ print("=======================================")
+ structured_search = oci.resource_search.models.StructuredSearchDetails(query="query user resources where freeformTags.key = '{}'".format(tag),
+ type='Structured',
+ matching_context_type=oci.resource_search.models.SearchDetails.MATCHING_CONTEXT_TYPE_NONE)
+ users = search_client.search_resources(structured_search)
+
+ for user in users.data.items:
+ print(user)
+
+
+def users_by_freeformTag_and_value(tag, value):
+ # Search for users with a freeform tag set to a particular value.
+ print()
+ print("Get users based on having a freeformTag which matches a value")
+ print("=============================================================")
+ structured_search = oci.resource_search.models.StructuredSearchDetails(query="query user resources where (freeformTags.key = '{}' && freeformTags.value = '{}')".format(tag, value),
+ type='Structured',
+ matching_context_type=oci.resource_search.models.SearchDetails.MATCHING_CONTEXT_TYPE_NONE)
+ users = search_client.search_resources(structured_search)
+
+ for user in users.data.items:
+ print(user)
+
+
+# Run examples
+resource_types()
+fields_in_instance_resource()
+field_names_in_instance_resource()
+search_with_free_text()
+active_users()
+
+# These next examples need to be customized to your situation.
+# Let's assume you added a freeform tag "role" to some of your users and
+# one of the values is "developer". Then you could replace the
+# with role and with developer.
+# These examples will then retrieve every user that had the role freeform tag
+# and the role freeform tag where the value is set to developer.
+# users_by_freeformTag("")
+# users_by_freeformTag_and_value("", "")
diff --git a/src/oci/core/models/instance.py b/src/oci/core/models/instance.py
index 80020f0227..24e3b05f52 100644
--- a/src/oci/core/models/instance.py
+++ b/src/oci/core/models/instance.py
@@ -91,6 +91,10 @@ def __init__(self, **kwargs):
The value to assign to the extended_metadata property of this Instance.
:type extended_metadata: dict(str, object)
+ :param fault_domain:
+ The value to assign to the fault_domain property of this Instance.
+ :type fault_domain: str
+
:param freeform_tags:
The value to assign to the freeform_tags property of this Instance.
:type freeform_tags: dict(str, str)
@@ -150,6 +154,7 @@ def __init__(self, **kwargs):
'defined_tags': 'dict(str, dict(str, object))',
'display_name': 'str',
'extended_metadata': 'dict(str, object)',
+ 'fault_domain': 'str',
'freeform_tags': 'dict(str, str)',
'id': 'str',
'image_id': 'str',
@@ -170,6 +175,7 @@ def __init__(self, **kwargs):
'defined_tags': 'definedTags',
'display_name': 'displayName',
'extended_metadata': 'extendedMetadata',
+ 'fault_domain': 'faultDomain',
'freeform_tags': 'freeformTags',
'id': 'id',
'image_id': 'imageId',
@@ -189,6 +195,7 @@ def __init__(self, **kwargs):
self._defined_tags = None
self._display_name = None
self._extended_metadata = None
+ self._fault_domain = None
self._freeform_tags = None
self._id = None
self._image_id = None
@@ -346,6 +353,42 @@ def extended_metadata(self, extended_metadata):
"""
self._extended_metadata = extended_metadata
+ @property
+ def fault_domain(self):
+ """
+ Gets the fault_domain of this Instance.
+ The name of the Fault Domain the instance is running in.
+
+ A Fault Domain is a logical grouping of hardware and infrastructure within an Availability Domain that can become
+ unavailable in its entirety either due to hardware failure such as Top-of-rack (TOR) switch failure or due to
+ planned software maintenance such as security updates that reboot your instances.
+
+ Example: `FAULT-DOMAIN-1`
+
+
+ :return: The fault_domain of this Instance.
+ :rtype: str
+ """
+ return self._fault_domain
+
+ @fault_domain.setter
+ def fault_domain(self, fault_domain):
+ """
+ Sets the fault_domain of this Instance.
+ The name of the Fault Domain the instance is running in.
+
+ A Fault Domain is a logical grouping of hardware and infrastructure within an Availability Domain that can become
+ unavailable in its entirety either due to hardware failure such as Top-of-rack (TOR) switch failure or due to
+ planned software maintenance such as security updates that reboot your instances.
+
+ Example: `FAULT-DOMAIN-1`
+
+
+ :param fault_domain: The fault_domain of this Instance.
+ :type: str
+ """
+ self._fault_domain = fault_domain
+
@property
def freeform_tags(self):
"""
diff --git a/src/oci/core/models/launch_instance_details.py b/src/oci/core/models/launch_instance_details.py
index d855ad499e..7b0a6ac6c2 100644
--- a/src/oci/core/models/launch_instance_details.py
+++ b/src/oci/core/models/launch_instance_details.py
@@ -42,6 +42,10 @@ def __init__(self, **kwargs):
The value to assign to the extended_metadata property of this LaunchInstanceDetails.
:type extended_metadata: dict(str, object)
+ :param fault_domain:
+ The value to assign to the fault_domain property of this LaunchInstanceDetails.
+ :type fault_domain: str
+
:param freeform_tags:
The value to assign to the freeform_tags property of this LaunchInstanceDetails.
:type freeform_tags: dict(str, str)
@@ -82,6 +86,7 @@ def __init__(self, **kwargs):
'defined_tags': 'dict(str, dict(str, object))',
'display_name': 'str',
'extended_metadata': 'dict(str, object)',
+ 'fault_domain': 'str',
'freeform_tags': 'dict(str, str)',
'hostname_label': 'str',
'image_id': 'str',
@@ -99,6 +104,7 @@ def __init__(self, **kwargs):
'defined_tags': 'definedTags',
'display_name': 'displayName',
'extended_metadata': 'extendedMetadata',
+ 'fault_domain': 'faultDomain',
'freeform_tags': 'freeformTags',
'hostname_label': 'hostnameLabel',
'image_id': 'imageId',
@@ -115,6 +121,7 @@ def __init__(self, **kwargs):
self._defined_tags = None
self._display_name = None
self._extended_metadata = None
+ self._fault_domain = None
self._freeform_tags = None
self._hostname_label = None
self._image_id = None
@@ -294,6 +301,40 @@ def extended_metadata(self, extended_metadata):
"""
self._extended_metadata = extended_metadata
+ @property
+ def fault_domain(self):
+ """
+ Gets the fault_domain of this LaunchInstanceDetails.
+ The name of the Fault Domain in which to launch an instance.
+
+ To get a list of Fault Domains, use the :func:`list_fault_domains`
+ operation in the Identity and Access Management Service API.
+
+ Example: `FAULT-DOMAIN-1`
+
+
+ :return: The fault_domain of this LaunchInstanceDetails.
+ :rtype: str
+ """
+ return self._fault_domain
+
+ @fault_domain.setter
+ def fault_domain(self, fault_domain):
+ """
+ Sets the fault_domain of this LaunchInstanceDetails.
+ The name of the Fault Domain in which to launch an instance.
+
+ To get a list of Fault Domains, use the :func:`list_fault_domains`
+ operation in the Identity and Access Management Service API.
+
+ Example: `FAULT-DOMAIN-1`
+
+
+ :param fault_domain: The fault_domain of this LaunchInstanceDetails.
+ :type: str
+ """
+ self._fault_domain = fault_domain
+
@property
def freeform_tags(self):
"""
diff --git a/src/oci/version.py b/src/oci/version.py
index 16e3fbc8ae..a1dbc6624a 100644
--- a/src/oci/version.py
+++ b/src/oci/version.py
@@ -1,4 +1,4 @@
# coding: utf-8
# Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
-__version__ = "2.0.0"
+__version__ = "2.0.1"