-
Notifications
You must be signed in to change notification settings - Fork 35
/
upgrade.md
103 lines (81 loc) · 3.05 KB
/
upgrade.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# Upgrading from SSoT 2.x to 3.x
As part of the changes required for utilizing DiffSync 2.0 and pydantic v2 any SSoT Apps that were written prior to SSoT 3.x will need to be updated. The following pieces will need to be changed:
- Replace instances of `DiffSync` class with `Adapter` class.
- Set default value of `None` for any `Optional` class attributes on `DiffSyncModel` or `NautobotModel` objects.
- Replace any kwargs using `diffsync` to be `adapter`.
## Replace DiffSync class with Adapter class
Any places in your SSoT App where you've imported DiffSync, replace with Adapter. For example:
```python
from diffsync import DiffSync
class NautobotAdapter(DiffSync)
```
```python
from diffsync import Adapter
class NautobotAdapter(Adapter)
```
## Set defaults for Optional
One of the changes with Pydantic v2 is that any variables that are Optional must have a default of None defined. This needs to be done on your class attributes like below:
```python
class DeviceModel(NautobotModel):
_model = Device
_modelname = "device"
_identifiers = ("name", "location__name", "location__parent__name")
_attributes = (
"location__location_type__name",
"location__parent__location_type__name",
"device_type__manufacturer__name",
"device_type__model",
"platform__name",
"role__name",
"serial",
"status__name",
)
name: str
location__name: str
location__location_type__name: str
location__parent__name: Optional[str] # Pydantic v1, replace
location__parent__location_type__name: Optional[str] # Pydantic v1, replace
device_type__manufacturer__name: str
device_type__model: str
platform__name: Optional[str] # Pydantic v1, replace
role__name: str
serial: str
status__name: str
```
is changed to the following:
```python
class DeviceModel(NautobotModel):
_model = Device
_modelname = "device"
_identifiers = ("name", "location__name", "location__parent__name")
_attributes = (
"location__location_type__name",
"location__parent__location_type__name",
"device_type__manufacturer__name",
"device_type__model",
"platform__name",
"role__name",
"serial",
"status__name",
)
name: str
location__name: str
location__location_type__name: str
location__parent__name: Optional[str] = None # Pydantic v2 compatibile
location__parent__location_type__name: Optional[str] = None # Pydantic v2 compatibile
device_type__manufacturer__name: str
device_type__model: str
platform__name: Optional[str] = None # Pydantic v2 compatibile
role__name: str
serial: str
status__name: str
```
## Replace diffsync kwarg with adapter
Any instances where you're referring to the diffsync kwarg needs to be updated to be adapter instead:
```python
self.diffsync.job.logger.warning("Example")
```
is changed to the following:
```python
self.adapter.job.logger.warning("Example")
```