1- using System . Web ;
2- using Azure . Storage . Sas ;
1+ using Azure . Storage . Sas ;
32using Microsoft . Azure . Functions . Worker ;
43using Microsoft . Azure . Functions . Worker . Http ;
54
@@ -31,17 +30,13 @@ public Async.Task<HttpResponseData> Run(
3130 } ) ;
3231
3332 private async Async . Task < HttpResponseData > Get ( HttpRequestData req ) {
34- var uri = HttpUtility . ParseQueryString ( req . Url . Query ) ;
35- var rawMachineId = uri [ "machine_id" ] ;
36- if ( rawMachineId is null || ! Guid . TryParse ( rawMachineId , out var machineId ) ) {
37- return await _context . RequestHandling . NotOk (
38- req ,
39- new Error (
40- ErrorCode . INVALID_REQUEST ,
41- new string [ ] { "'machine_id' query parameter must be provided" } ) ,
42- "agent registration" ) ;
33+ var request = await RequestHandling . ParseUri < AgentRegistrationGet > ( req ) ;
34+ if ( ! request . IsOk ) {
35+ return await _context . RequestHandling . NotOk ( req , request . ErrorV , "agent registration" ) ;
4336 }
4437
38+ var machineId = request . OkV . MachineId ;
39+
4540 var agentNode = await _context . NodeOperations . GetByMachineId ( machineId ) ;
4641 if ( agentNode is null ) {
4742 return await _context . RequestHandling . NotOk (
@@ -82,32 +77,18 @@ private async Async.Task<AgentRegistrationResponse> CreateRegistrationResponse(S
8277 WorkQueue : workQueue ) ;
8378 }
8479
80+ // todo: add agent registration post
8581 private async Async . Task < HttpResponseData > Post ( HttpRequestData req ) {
86- var uri = HttpUtility . ParseQueryString ( req . Url . Query ) ;
87- var rawMachineId = uri [ "machine_id" ] ;
88- if ( rawMachineId is null || ! Guid . TryParse ( rawMachineId , out var machineId ) ) {
89- return await _context . RequestHandling . NotOk (
90- req ,
91- new Error (
92- ErrorCode . INVALID_REQUEST ,
93- new string [ ] { "'machine_id' query parameter must be provided" } ) ,
94- "agent registration" ) ;
95- }
96-
97- var rawPoolName = uri [ "pool_name" ] ;
98- if ( rawPoolName is null || ! PoolName . TryParse ( rawPoolName , out var poolName ) ) {
99- return await _context . RequestHandling . NotOk (
100- req ,
101- new Error (
102- ErrorCode . INVALID_REQUEST ,
103- new string [ ] { "'pool_name' query parameter must be provided" } ) ,
104- "agent registration" ) ;
82+ var request = await RequestHandling . ParseUri < AgentRegistrationPost > ( req ) ;
83+ if ( ! request . IsOk ) {
84+ return await _context . RequestHandling . NotOk ( req , request . ErrorV , "agent registration" ) ;
10585 }
10686
107- var rawScalesetId = uri [ "scaleset_id" ] ;
108- var scalesetId = rawScalesetId is null ? ( Guid ? ) null : Guid . Parse ( rawScalesetId ) ;
109-
110- var version = uri [ "version" ] ?? "1.0.0" ;
87+ var machineId = request . OkV . MachineId ;
88+ var poolName = request . OkV . PoolName ;
89+ var scalesetId = request . OkV . ScalesetId ;
90+ var version = request . OkV . Version ;
91+ var os = request . OkV . Os ;
11192
11293 _log . Info ( $ "registration request: machine_id: { machineId } pool_name: { poolName } scaleset_id: { scalesetId } version: { version } ") ;
11394 var poolResult = await _context . PoolOperations . GetByName ( poolName ) ;
@@ -127,12 +108,23 @@ private async Async.Task<HttpResponseData> Post(HttpRequestData req) {
127108 await _context . NodeOperations . Delete ( existingNode ) ;
128109 }
129110
111+ if ( os != null && pool . Os != os ) {
112+ return await _context . RequestHandling . NotOk (
113+ req ,
114+ new Error (
115+ Code : ErrorCode . INVALID_REQUEST ,
116+ Errors : new [ ] { $ "OS mismatch: pool '{ poolName } ' is configured for '{ pool . Os } ', but agent is running '{ os } '" } ) ,
117+ "agent registration" ) ;
118+ }
119+
130120 var node = new Service . Node (
131121 PoolName : poolName ,
132122 PoolId : pool . PoolId ,
133123 MachineId : machineId ,
134124 ScalesetId : scalesetId ,
135- Version : version ) ;
125+ Version : version ,
126+ Os : os ?? pool . Os
127+ ) ;
136128
137129 await _context . NodeOperations . Replace ( node ) ;
138130
0 commit comments