-
Notifications
You must be signed in to change notification settings - Fork 66
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added support for track 2 SDKs (azure-mgmt-iothub >= 1.0.0) #329
Conversation
Will need to add an explicit dependency for |
setup.py
Outdated
@@ -48,7 +48,7 @@ | |||
# though that is installed out of band (managed by the extension) | |||
# for compatibility reasons. | |||
|
|||
DEPENDENCIES = ["paho-mqtt==1.5.0", "jsonschema==3.2.0", "setuptools"] | |||
DEPENDENCIES = ["paho-mqtt==1.5.0", "jsonschema==3.2.0", "setuptools", "packaging"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need setuptools anymore?
@@ -182,6 +182,21 @@ def test_jobs(self): | |||
checks=[self.check("jobId", self.job_ids[2])], | |||
) | |||
|
|||
# Allow time for job to transfer to scheduled state (cannot cancel job in running state) | |||
from time import sleep | |||
sleep(5) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we make this longer? Or is 5 second sleep consistently working.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consistently working for me, but I also haven't seen this issue pop up in the build pipelines, only in local testing - one of my hubs got stuck with a job pending in a scheduled
state, and couldn't add a new job.
The error was because our test tried to cancel a job before it transitioned from running
to scheduled
and this seemed to fix it for me (at least for now)
azext_iot/constants.py
Outdated
@@ -48,3 +48,6 @@ | |||
|
|||
# Config Key's | |||
CONFIG_KEY_UAMQP_EXT_VERSION = "uamqp_ext_version" | |||
|
|||
# Initial Track 2 SDK version | |||
TRACK_2_SDK_MIN_VERSION = '1.0.0' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should prefix this with IOTHUB_
or re-organize like creating dictionary that holds IoT Hub constants
azext_iot/common/utility.py
Outdated
@@ -438,10 +438,14 @@ def is_iso8601_time(self, to_validate: str) -> bool: | |||
return False | |||
|
|||
|
|||
def ensure_min_version(cur_ver, min_ver): | |||
from pkg_resources._vendor.packaging import version | |||
def ensure_min_version(min_ver): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be nice either through docstrings and/or slightly altering the name that this is to ensure the min version of the iothub mgmt sdk.
|
||
if rg: | ||
try: | ||
return self.client.get(resource_group_name=rg, resource_name=hub_name) | ||
except ErrorDetailsException: | ||
except HttpResponseError: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will this exception work for both SDK types?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Btw python supports an exception tuple...for example except (ErrorDetailsException, HttpResponseError):
. But one exception type would be preferred.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch, this is an issue I was working on yesterday - the azure.core
exception import will cause an issue with the older CLI (2.3.1) - I'll have an update on this in a bit.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So just to follow up, this issue is a bit complex.
- We switched from
ErrorDetailsException
to theazure.core.HttpResponseError
(base error class) asErrorDetailsException
no longer exists in our Track 2 SDKs. - In AZ CLI 2.3.1, however - we don't have the
azure.core
exceptions - The actual exception this will return is a ResourceNotFoundError which also comes from
azure.core
Is it pertinent here to catch the specific error type if we're not utilizing the error/exception itself?
I'd like to avoid blanket except:
statements (or more try/catch imports) but that might be the easiest fix here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good details...my initial thought was if there was a common base exception like Exception
we could use but I think the most pragmatic solution is the one you suggest in this specific case having except:
since we are not using the exception itself.
else: | ||
self.client = self.cmd | ||
self.sub_id = self.client.config.subscription_id |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We may hit a regression here since before sub_id
was extracted when the client was initialized and used to build the target
dictionary. Might help determine problems if we change this https://github.com/c-ryan-k/azure-iot-cli-extension/blob/sdk_track_2_support/azext_iot/tests/iothub/test_iothub_discovery_int.py#L102 to assert sub_id is not the "unknown" placeholder value.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.
Thank you for contributing to the IoT extension!
This checklist is used to make sure that common guidelines for a pull request are followed.
General Guidelines
pytest <project root> -vv