第3部分:添加一些配置数据——我的面包太轻!

8 篇文章 0 订阅
8 篇文章 0 订阅

3部分:添加一些配置数据——我的面包太轻!

我们在第3部分中,将在我们的yang toaster文件中探索定义和启用配置属性(而不是操作属性)。在本节中,我们将定义一个新的配置属性的烤面包机将允许用户修改每个级别的煮熟度需要的秒数。更重要的是,我们将说明我们的OpendaylightToaster如何注册配置数据的变化,以及用户如何设置,更新和删除这些信息。

1.1 为toaster.yang添加配置属性

第一步是为在toaster.yang文件中的Toaster容器添加一个新的属性,darknessFactor

1. container toaster {

1.      ...

2.     

3.      leaf darknessFactor {

4.        type uint32;

5.        config true;

6.        default 1000;

7.        description

8.          "The darkness factor. Basically, the number of ms to multiple the doneness value by.";

9.      }

10.     

11.      ...

12. }

现在运行以下代码来生成更新Toaster接口

1. Mvn clean install

1.2 监听的变化

为了在配置数据发生变化时让我们的OpendaylightToaster得到通知我们需要实现DataChangeListener接口。

注意:有多个DataChangeListener接口。我们必须实现org.opendaylight.controller.sal.binding.api.data. DataChangeListener;接口。

1.  ...

13.   import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;

14.   ...

15.   public class OpendaylightToaster implements ToasterData, ToasterService, AutoCloseable, DataChangeListener {

16.   ...

17.      @Override

18.      public void onDataChanged(DataChangeEvent<InstanceIdentifier<?>, DataObject> change) {

19.              //TODO - implement

20.      }

21.   ...

22.   }

DataChangeListener接口有一个单一方法,onDataChanged,通过改变事件。更改事件可以包含多个节点的变化(在列表的情况下),但在我们的例子中我们只有一个单一节点,这也是我们正在寻找的。下一步是从更改事件中提取更新的数据。通过为onDataChanged方法提供以下实现。

1.  ...

23.   //Thread safe holder for our darkness multiplier.

24.   private AtomicLong darknessFactor = new AtomicLong( 1000 );

25.   ...

26.   @Override

27.   public void onDataChanged(DataChangeEvent<InstanceIdentifier<?>, DataObject> change) {

28.       DataObject dataObject = change.getUpdatedSubtree();

29.       if( dataObject instanceof Toaster )

30.       {

31.           Toaster toaster = (Toaster) dataObject;

32.           Long darkness = toaster.getDarknessFactor();

33.           if( darkness != null )

34.           {

35.               darknessFactor.set( darkness );

36.           }

37.       }

38.   }

39.    ...

最后一步是去修改MakeToastTask调用方法用来让我们新的darkness factor代替一个hard-coded值。

1. private class MakeToastTask implements Callable<Void> {

40.        ...

41.        @Override

42.       public Void call() throws InterruptedException {

43.           try

44.           {

45.               // make toast just sleeps for n seconds per doneness level.

46.               long darknessFactor = OpendaylightToaster.this.darknessFactor.get();

47.               Thread.sleep(darknessFactor * toastRequest.getToasterDoneness());

48.           }

49.           catch( InterruptedException e ) {

50.               ...

51.           }

52.           ...

53.       }

54.    }

 

最后一步是注册侦听器与DataProviderService服务为了接收通知。我们将在ToasterProviderModule.createInstance()中执行此登记:

1. @Override

55.    public java.lang.AutoCloseable createInstance() {

56.        final OpendaylightToaster opendaylightToaster = new OpendaylightToaster();

57.         

58.        ...

59.        

60.        final ListenerRegistration<DataChangeListener> dataChangeListenerRegistration = 

61.                dataBrokerService.registerDataChangeListener( OpendaylightToaster.TOASTER_IID, opendaylightToaster );

62.        

63.  

64.        ...

65.        final class AutoCloseableToaster implements AutoCloseable {     

66.            @Override

67.            public void close() throws Exception {

68.                dataChangeListenerRegistration.close(); //closes the listener registrations (removes it)

69.                ...

70.            }

71.        }

72.        ...

73.    }

74.    

我们已经注册了烤面包机作为一个用来更改下面的烤面包机节点和节点的侦听器。

1.3 改变the Darkness Factor

为改变the darkness factor我们将使用一个REST通过MD-SAL调用restconf 提供的服务。一旦启动控制器,将会执行以下PUT:

1. HTTP Method: PUT

75.   URL:  http://localhost:8080/restconf/config/toaster:toaster

76.   HEADER: content-type: application/yang.data+json

77.   BODY: 

78.   {

79.     toaster:

80.     {

81.        darknessFactor: "2000"

82.     }

83.  }

你应该收到返回代码200。如果你执行一下GET去获得相同的URL,你应该看到返回更新的darkness factor。此时,如果你执行make-toast RPC call您应该看到延迟反映的 darknessFactor * the doneness的值。

注意:这是一个在restconf中已知的bug

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值